ref #7095 Add progress monitor to working set service (unstable)
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 18 Apr 2018 04:33:37 +0000 (06:33 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 18 Apr 2018 04:33:37 +0000 (06:33 +0200)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IWorkingSetService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/WorkingSetService.java

index 2f56f73fa628b2f8a0b6bb9b38977e2f5c6fe182..00de1c4f0b638ec501922b68b3584082ea2a0da2 100644 (file)
@@ -7,6 +7,7 @@ import java.util.Set;
 import java.util.UUID;\r
 \r
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;\r
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
 import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.cdm.model.description.DescriptiveSystemRole;\r
@@ -42,9 +43,17 @@ public interface IWorkingSetService extends IAnnotatableService<WorkingSet> {
      * Returns a collection of {@link RowWrapperDTO} objects for the given {@link WorkingSet}.<br>\r
      * A RowWrapper represents on row in the character matrix.\r
      * @param workingSet the working set for which the row wrapper objects should be fetched\r
-     * @return a collection of row wrapper objects\r
+     * @param the progress monitor\r
+     * @return a list of row wrapper objects\r
      */\r
-    public Collection<RowWrapperDTO> getRowWrapper(WorkingSet workingSet);\r
+    public Collection<RowWrapperDTO> getRowWrapper(WorkingSet workingSet, IProgressMonitor monitor);\r
+\r
+    /**\r
+     * Monitored invocation of {@link IWorkingSetService#getRowWrapper(WorkingSet, IProgressMonitor)}\r
+     * @param workingSet the working set for which getRowWrapper() is invoked\r
+     * @return the uuid of the monitor\r
+     */\r
+    public UUID monitGetRowWrapper(WorkingSet workingSet);\r
 \r
     /**\r
      * Loads all avaliable specimens wrapped in a {@link RowWrapperDTO} object for\r
index 030e45eb02702f2ca86384acb71a4ca564468a99..e0ad4752d6a1a2714aa2b88f2bebd77bdb5432a9 100644 (file)
@@ -1,12 +1,12 @@
 package eu.etaxonomy.cdm.api.service;\r
 \r
+import java.io.Serializable;\r
 import java.util.ArrayList;\r
 import java.util.Collection;\r
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Set;\r
 import java.util.UUID;\r
-import java.util.stream.Collectors;\r
 \r
 import org.apache.log4j.Logger;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
@@ -15,6 +15,9 @@ import org.springframework.transaction.annotation.Transactional;
 \r
 import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator;\r
 import eu.etaxonomy.cdm.api.service.dto.RowWrapperDTO;\r
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
+import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;\r
+import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitorThread;\r
 import eu.etaxonomy.cdm.filter.TaxonNodeFilter;\r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
 import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
@@ -45,6 +48,9 @@ public class WorkingSetService extends
     @Autowired\r
     private ITaxonNodeService taxonNodeService;\r
 \r
+    @Autowired\r
+    private IProgressMonitorService progressMonitorService;\r
+\r
        @Override\r
        @Autowired\r
        protected void setDao(IWorkingSetDao dao) {\r
@@ -68,11 +74,34 @@ public class WorkingSetService extends
         return dao.getWorkingSetUuidAndTitleCache( limitOfInitialElements, pattern);\r
     }\r
 \r
+\r
+    @Override\r
+    @Transactional\r
+    public UUID monitGetRowWrapper(WorkingSet workingSet) {\r
+        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {\r
+            @Override\r
+            public Serializable doRun(IRemotingProgressMonitor monitor) {\r
+                return getRowWrapper(workingSet, monitor);\r
+            }\r
+        };\r
+        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);\r
+        monitorThread.setPriority(3);\r
+        monitorThread.start();\r
+        return uuid;\r
+    }\r
+\r
        @Override\r
-       public Collection<RowWrapperDTO> getRowWrapper(WorkingSet workingSet) {\r
-           return workingSet.getDescriptions().stream()\r
-                   .map(description->createRowWrapper(null, description, workingSet))\r
-                   .collect(Collectors.toList());\r
+       public ArrayList<RowWrapperDTO> getRowWrapper(WorkingSet workingSet, IProgressMonitor monitor) {\r
+           ArrayList<RowWrapperDTO> wrappers = new ArrayList<>();\r
+           Set<DescriptionBase> descriptions = workingSet.getDescriptions();\r
+           for (DescriptionBase description : descriptions) {\r
+            if(monitor.isCanceled()){\r
+                return new ArrayList<>();\r
+            }\r
+            wrappers.add(createRowWrapper(null, description, workingSet));\r
+            monitor.worked(1);\r
+        }\r
+           return wrappers;\r
        }\r
 \r
     @Override\r