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
* 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
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
\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
@Autowired\r
private ITaxonNodeService taxonNodeService;\r
\r
+ @Autowired\r
+ private IProgressMonitorService progressMonitorService;\r
+\r
@Override\r
@Autowired\r
protected void setDao(IWorkingSetDao dao) {\r
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