Project

General

Profile

Download (4.17 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
 * @since 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, monitorThread);
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
        try{
63
            IRestServiceProgressMonitor monitor = progressMonitorManager.getMonitor(uuid);
64
            // lookup remoting monitors
65
            if(monitor != null && monitor instanceof IRemotingProgressMonitor ) {
66
                IRemotingProgressMonitor remotingMonitor = (IRemotingProgressMonitor)monitor;
67
                String monitorOwner = remotingMonitor.getOwner();
68
                User currentUser = User.getCurrentAuthenticatedUser();
69
                // ensure that current user is admin or is the same as the owner of
70
                // the monitor
71
                if(currentUser != null &&
72
                        (currentUser.getUsername().equals(monitorOwner) ||
73
                                permissionEvaluator.hasOneOfRoles(SecurityContextHolder.getContext().getAuthentication(), Role.ROLE_ADMIN))) {
74
                    return remotingMonitor;
75
                }
76
            }
77
        }catch (Exception e){
78
            return null;
79
        }
80
        return null;
81
    }
82

    
83
    /**
84
     * {@inheritDoc}
85
     */
86
    @Override
87
    public void interrupt(UUID uuid) {
88
        IRemotingProgressMonitor remotingMonitor = getRemotingMonitor(uuid);
89
        if(remotingMonitor!= null) {
90
            remotingMonitor.interrupt();
91
            progressMonitorManager.getThread(uuid).interrupt();
92
        }
93
    }
94

    
95
    /**
96
     * {@inheritDoc}
97
     */
98
    @Override
99
    public boolean isMonitorThreadRunning(UUID uuid) {
100
        IRemotingProgressMonitor remotingMonitor = getRemotingMonitor(uuid);
101
        if(remotingMonitor != null) {
102
            return remotingMonitor.isMonitorThreadRunning();
103
        }
104
        return false;
105
    }
106

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

    
117
        }
118
    }
119

    
120
    /**
121
     * {@inheritDoc}
122
     */
123
    @Override
124
    public void setFeedback(UUID uuid, Serializable feedback) {
125
        IRemotingProgressMonitor remotingMonitor = getRemotingMonitor(uuid);
126
        if(remotingMonitor != null) {
127
            remotingMonitor.setFeedback(feedback);
128
        }
129
    }
130

    
131

    
132

    
133

    
134
}
(88-88/103)