fix #8458: remove unused parameter
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / ProgressMonitorServiceImpl.java
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.permission.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 }