3 * Copyright (C) 2015 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.api
.service
;
12 import java
.io
.Serializable
;
13 import java
.util
.List
;
14 import java
.util
.UUID
;
16 import org
.apache
.log4j
.Logger
;
17 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
18 import org
.springframework
.security
.access
.prepost
.PreAuthorize
;
19 import org
.springframework
.stereotype
.Service
;
20 import org
.springframework
.transaction
.annotation
.Transactional
;
22 import eu
.etaxonomy
.cdm
.api
.service
.UpdateResult
.Status
;
23 import eu
.etaxonomy
.cdm
.api
.service
.dto
.CdmEntityIdentifier
;
24 import eu
.etaxonomy
.cdm
.common
.monitor
.IRemotingProgressMonitor
;
25 import eu
.etaxonomy
.cdm
.common
.monitor
.RemotingProgressMonitorThread
;
26 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
27 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
35 public class TestServiceImpl
implements ITestService
{
37 private static final Logger logger
= Logger
.getLogger(TestServiceImpl
.class);
40 ITaxonNodeService taxonNodeService
;
43 IProgressMonitorService progressMonitorService
;
46 * @see eu.etaxonomy.cdm.api.service.ITestService#wait(int)
49 @PreAuthorize("hasRole('ROLE_ADMIN')")
50 public void waitFor(long timeToWaitInMs
) throws InterruptedException
{
51 Thread
.sleep(timeToWaitInMs
);
55 * @see eu.etaxonomy.cdm.api.service.ITestService#returnResult(eu.etaxonomy.cdm.api.service.UpdateResult)
58 public UpdateResult
returnResult(UpdateResult result
) {
63 * @see eu.etaxonomy.cdm.api.service.ITestService#throwException(java.lang.Exception)
66 public UpdateResult
throwException(Exception ex
) {
67 throw new RuntimeException(ex
);
71 * @see eu.etaxonomy.cdm.api.service.ITestService#addChild(eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier)
74 @Transactional(readOnly
= false)
75 public UpdateResult
addChild(CdmEntityIdentifier taxonNodeCei
) {
76 TaxonNode taxonNode
= taxonNodeService
.find(taxonNodeCei
.getId());
77 taxonNode
.addChildTaxon(Taxon
.NewInstance(null, null), null, null);
78 UpdateResult result
= new UpdateResult();
79 result
.addUpdatedCdmId(taxonNodeCei
);
80 result
.setStatus(Status
.OK
);
86 public UUID
monitLongRunningMethod(final RuntimeException ex
, final List
<String
> feedbacks
, final long feedbackWaitTimeout
) {
88 RemotingProgressMonitorThread monitorThread
= new RemotingProgressMonitorThread() {
90 public Serializable
doRun(IRemotingProgressMonitor monitor
) {
91 Serializable result
= longRunningMethod(monitor
, ex
, feedbacks
, feedbackWaitTimeout
);
92 if(!monitor
.isCanceled()) {
93 monitor
.addReport("Report");
99 UUID uuid
= progressMonitorService
.registerNewRemotingMonitor(monitorThread
);
100 monitorThread
.setPriority(3);
101 monitorThread
.start();
106 public String
longRunningMethod(IRemotingProgressMonitor monitor
,
108 List
<String
> feedbacks
,
109 long feedbackWaitTimeout
) {
111 int stepToThrowException
= noOfSteps
/ 2;
112 int stepToWaitForFeedback
= noOfSteps
/ 2;
113 monitor
.beginTask("Long Running Task", noOfSteps
);
114 for(int i
=0; i
<noOfSteps
; i
++) {
117 if(i
== stepToThrowException
&& ex
!= null) {
120 if(feedbacks
!= null && feedbacks
.size() > 0 && i
== stepToWaitForFeedback
) {
121 for(String feedback
: feedbacks
) {
122 logger
.warn("Monitor waiting for feedback");
123 if(feedbackWaitTimeout
<= 0) {
124 monitor
.waitForFeedback();
126 monitor
.waitForFeedback(feedbackWaitTimeout
);
128 logger
.warn(" .. feedback received : " + monitor
.getFeedback());
129 monitor
.addReport(feedback
);
132 if(monitor
.isCanceled()) {
135 } catch (InterruptedException e
) {