Project

General

Profile

Download (3.96 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2015 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.api.service;
10

    
11
import java.io.Serializable;
12
import java.util.UUID;
13

    
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.security.core.context.SecurityContextHolder;
16
import org.springframework.stereotype.Service;
17

    
18
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
19
import eu.etaxonomy.cdm.common.monitor.IRestServiceProgressMonitor;
20
import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitor;
21
import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitorThread;
22
import eu.etaxonomy.cdm.model.common.User;
23
import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
24
import eu.etaxonomy.cdm.persistence.hibernate.permission.Role;
25

    
26
/**
27
 * @author cmathew
28
 * @date 14 Oct 2015
29
 *
30
 */
31
@Service
32
public class ProgressMonitorServiceImpl implements IProgressMonitorService {
33

    
34
    @Autowired
35
    public ProgressMonitorManager<IRestServiceProgressMonitor> progressMonitorManager;
36

    
37
    @Autowired
38
    public ICdmPermissionEvaluator permissionEvaluator;
39

    
40
    /**
41
     * {@inheritDoc}
42
     */
43
    @Override
44
    public UUID registerNewRemotingMonitor(RemotingProgressMonitorThread monitorThread) {
45
        RemotingProgressMonitor monitor = new RemotingProgressMonitor(monitorThread);
46
        monitorThread.setMonitor(monitor);
47
        UUID uuid = progressMonitorManager.registerMonitor(monitor);
48
        User user = User.getCurrentAuthenticatedUser();
49
        if(user == null) {
50
            throw new IllegalStateException("Current authenticated user is null");
51
        }
52
        monitor.setOwner(user.getUsername());
53
        return uuid;
54
    }
55

    
56

    
57
    /**
58
     * {@inheritDoc}
59
     */
60
    @Override
61
    public IRemotingProgressMonitor getRemotingMonitor(UUID uuid) {
62
        IRestServiceProgressMonitor monitor = progressMonitorManager.getMonitor(uuid);
63
        // lookup remoting monitors
64
        if(monitor != null && monitor instanceof IRemotingProgressMonitor ) {
65
            IRemotingProgressMonitor remotingMonitor = (IRemotingProgressMonitor)monitor;
66
            String monitorOwner = remotingMonitor.getOwner();
67
            User currentUser = User.getCurrentAuthenticatedUser();
68
            // ensure that current user is admin or is the same as the owner of
69
            // the monitor
70
            if(currentUser != null &&
71
                    (currentUser.getUsername().equals(monitorOwner) ||
72
                            permissionEvaluator.hasOneOfRoles(SecurityContextHolder.getContext().getAuthentication(), Role.ROLE_ADMIN))) {
73
                return remotingMonitor;
74
            }
75
        }
76
        return null;
77
    }
78

    
79
    /**
80
     * {@inheritDoc}
81
     */
82
    @Override
83
    public void interrupt(UUID uuid) {
84
        IRemotingProgressMonitor remotingMonitor = getRemotingMonitor(uuid);
85
        if(remotingMonitor!= null) {
86
            remotingMonitor.interrupt();
87
        }
88
    }
89

    
90
    /**
91
     * {@inheritDoc}
92
     */
93
    @Override
94
    public boolean isMonitorThreadRunning(UUID uuid) {
95
        IRemotingProgressMonitor remotingMonitor = getRemotingMonitor(uuid);
96
        if(remotingMonitor != null) {
97
            return remotingMonitor.isMonitorThreadRunning();
98
        }
99
        return false;
100
    }
101

    
102
    /**
103
     * {@inheritDoc}
104
     */
105
    @Override
106
    public void cancel(UUID uuid) {
107
        IRestServiceProgressMonitor monitor = progressMonitorManager.getMonitor(uuid);
108
        if(monitor != null) {
109
            monitor.setCanceled(true);
110
            monitor.done();
111
        }
112
    }
113

    
114
    /**
115
     * {@inheritDoc}
116
     */
117
    @Override
118
    public void setFeedback(UUID uuid, Serializable feedback) {
119
        IRemotingProgressMonitor remotingMonitor = getRemotingMonitor(uuid);
120
        if(remotingMonitor != null) {
121
            remotingMonitor.setFeedback(feedback);
122
        }
123
    }
124

    
125

    
126

    
127

    
128
}
(85-85/101)