2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.api
.service
;
11 import java
.io
.Serializable
;
12 import java
.util
.UUID
;
14 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
15 import org
.springframework
.security
.core
.context
.SecurityContextHolder
;
16 import org
.springframework
.stereotype
.Service
;
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
;
32 public class ProgressMonitorServiceImpl
implements IProgressMonitorService
{
35 public ProgressMonitorManager
<IRestServiceProgressMonitor
> progressMonitorManager
;
38 public ICdmPermissionEvaluator permissionEvaluator
;
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();
50 throw new IllegalStateException("Current authenticated user is null");
52 monitor
.setOwner(user
.getUsername());
61 public IRemotingProgressMonitor
getRemotingMonitor(UUID uuid
) {
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
71 if(currentUser
!= null &&
72 (currentUser
.getUsername().equals(monitorOwner
) ||
73 permissionEvaluator
.hasOneOfRoles(SecurityContextHolder
.getContext().getAuthentication(), Role
.ROLE_ADMIN
))) {
74 return remotingMonitor
;
87 public void interrupt(UUID uuid
) {
88 IRemotingProgressMonitor remotingMonitor
= getRemotingMonitor(uuid
);
89 if(remotingMonitor
!= null) {
90 remotingMonitor
.interrupt();
91 progressMonitorManager
.getThread(uuid
).interrupt();
99 public boolean isMonitorThreadRunning(UUID uuid
) {
100 IRemotingProgressMonitor remotingMonitor
= getRemotingMonitor(uuid
);
101 if(remotingMonitor
!= null) {
102 return remotingMonitor
.isMonitorThreadRunning();
111 public void cancel(UUID uuid
) {
112 IRestServiceProgressMonitor monitor
= progressMonitorManager
.getMonitor(uuid
);
113 if(monitor
!= null) {
114 monitor
.setCanceled(true);
124 public void setFeedback(UUID uuid
, Serializable feedback
) {
125 IRemotingProgressMonitor remotingMonitor
= getRemotingMonitor(uuid
);
126 if(remotingMonitor
!= null) {
127 remotingMonitor
.setFeedback(feedback
);