Merge branch 'release/5.45.0'
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / TestServiceImpl.java
index d373a9be0da7100785cb65f005c580ec09b53084..1398857de8b5dcaec1c07d420a1b19b02d2678ce 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
 * Copyright (C) 2015 EDIT
 * European Distributed Institute of Taxonomy
@@ -9,8 +8,12 @@
 */
 package eu.etaxonomy.cdm.api.service;
 
+import java.io.Serializable;
+import java.util.List;
 import java.util.UUID;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
@@ -18,73 +21,61 @@ import org.springframework.transaction.annotation.Transactional;
 
 import eu.etaxonomy.cdm.api.service.UpdateResult.Status;
 import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier;
-import eu.etaxonomy.cdm.api.service.util.RemotingProgressMonitorThread;
 import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
-import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitor;
+import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitorThread;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 
 /**
  * @author cmathew
- * @date 26 Jun 2015
- *
+ * @since 26 Jun 2015
  */
 @Service
 public class TestServiceImpl implements ITestService {
 
+    private static final Logger logger = LogManager.getLogger();
+
     @Autowired
-    ITaxonNodeService taxonNodeService;
+    private ITaxonNodeService taxonNodeService;
 
     @Autowired
-    ProgressMonitorManager<IRemotingProgressMonitor> progressMonitorManager;
+    private IProgressMonitorService progressMonitorService;
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.cdm.api.service.ITestService#wait(int)
-     */
     @Override
     @PreAuthorize("hasRole('ROLE_ADMIN')")
     public void waitFor(long timeToWaitInMs) throws InterruptedException {
         Thread.sleep(timeToWaitInMs);
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.cdm.api.service.ITestService#returnResult(eu.etaxonomy.cdm.api.service.UpdateResult)
-     */
     @Override
     public UpdateResult returnResult(UpdateResult result) {
         return result;
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.cdm.api.service.ITestService#throwException(java.lang.Exception)
-     */
     @Override
     public UpdateResult throwException(Exception ex) {
         throw new RuntimeException(ex);
     }
 
-    /* (non-Javadoc)
-     * @see eu.etaxonomy.cdm.api.service.ITestService#addChild(eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier)
-     */
     @Override
     @Transactional(readOnly = false)
     public UpdateResult addChild(CdmEntityIdentifier taxonNodeCei) {
         TaxonNode taxonNode = taxonNodeService.find(taxonNodeCei.getId());
-        taxonNode.addChildTaxon(Taxon.NewInstance(null, null), null, null);
+        TaxonNode child = taxonNode.addChildTaxon(Taxon.NewInstance(null, null), null, null);
+        taxonNodeService.saveOrUpdate(child);
         UpdateResult result = new UpdateResult();
         result.addUpdatedCdmId(taxonNodeCei);
         result.setStatus(Status.OK);
         return result;
     }
 
-
     @Override
-    public UUID monitLongRunningMethod(final RuntimeException ex) {
-        RemotingProgressMonitor monitor = new RemotingProgressMonitor();
-        RemotingProgressMonitorThread monitThread = new RemotingProgressMonitorThread(monitor) {
+    public UUID monitLongRunningMethod(final RuntimeException ex, final List<String> feedbacks, final long feedbackWaitTimeout) {
+
+        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
             @Override
-            public Object doRun(IRemotingProgressMonitor monitor)  {
-                Object result = longRunningMethod(monitor, ex);
+            public Serializable doRun(IRemotingProgressMonitor monitor)  {
+                Serializable result = longRunningMethod(monitor, ex, feedbacks, feedbackWaitTimeout);
                 if(!monitor.isCanceled()) {
                     monitor.addReport("Report");
                 }
@@ -92,16 +83,21 @@ public class TestServiceImpl implements ITestService {
             }
         };
 
-        UUID uuid = progressMonitorManager.registerMonitor(monitor);
-        monitThread.setPriority(3);
-        monitThread.start();
+        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
+        monitorThread.setPriority(3);
+        monitorThread.start();
         return uuid;
     }
 
     @Override
-    public String longRunningMethod(IRemotingProgressMonitor monitor, RuntimeException ex) {
+    public String longRunningMethod(IRemotingProgressMonitor monitor,
+            RuntimeException ex,
+            List<String> feedbacks,
+            long feedbackWaitTimeout) {
+
         int noOfSteps = 10;
         int stepToThrowException = noOfSteps / 2;
+        int stepToWaitForFeedback = noOfSteps / 2;
         monitor.beginTask("Long Running Task", noOfSteps);
         for(int i=0; i<noOfSteps; i++) {
             try {
@@ -109,6 +105,18 @@ public class TestServiceImpl implements ITestService {
                 if(i == stepToThrowException && ex != null) {
                     throw ex;
                 }
+                if(feedbacks != null && feedbacks.size() > 0 && i == stepToWaitForFeedback) {
+                    for(String feedback : feedbacks) {
+                        logger.warn("Monitor waiting for feedback");
+                        if(feedbackWaitTimeout <= 0) {
+                            monitor.waitForFeedback();
+                        } else {
+                            monitor.waitForFeedback(feedbackWaitTimeout);
+                        }
+                        logger.warn(" .. feedback received : " + monitor.getFeedback());
+                        monitor.addReport(feedback);
+                    }
+                }
                 if(monitor.isCanceled()) {
                     return "Cancelled";
                 }
@@ -120,5 +128,4 @@ public class TestServiceImpl implements ITestService {
         monitor.done();
         return "Success";
     }
-
-}
+}
\ No newline at end of file