Merge branch 'release/5.4.0'
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / longrunningService / LongRunningTasksServiceImpl.java
1 /**
2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9 package eu.etaxonomy.cdm.api.longrunningService;
10
11 import java.io.Serializable;
12 import java.util.Set;
13 import java.util.UUID;
14
15 import org.springframework.beans.factory.annotation.Autowired;
16 import org.springframework.stereotype.Service;
17 import org.springframework.transaction.annotation.Transactional;
18
19 import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
20 import eu.etaxonomy.cdm.api.service.IProgressMonitorService;
21 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
22 import eu.etaxonomy.cdm.api.service.UpdateResult;
23 import eu.etaxonomy.cdm.api.service.config.ForSubtreeConfiguratorBase;
24 import eu.etaxonomy.cdm.api.service.config.PublishForSubtreeConfigurator;
25 import eu.etaxonomy.cdm.api.service.config.SecundumForSubtreeConfigurator;
26 import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
27 import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitorThread;
28 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
29
30 /**
31 * @author k.luther
32 * @since 04 May 2018
33 *
34 */
35 @Service
36 @Transactional(readOnly = false)
37 public class LongRunningTasksServiceImpl implements ILongRunningTasksService{
38 @Autowired
39 ITaxonNodeService taxonNodeService;
40
41 @Autowired
42 IDescriptiveDataSetService descriptiveDataSetService;
43
44 @Autowired
45 IProgressMonitorService progressMonitorService;
46
47
48
49 @Override
50 public UUID monitGetRowWrapper(DescriptiveDataSet descriptiveDataSet) {
51 RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
52 @Override
53 public Serializable doRun(IRemotingProgressMonitor monitor) {
54 return descriptiveDataSetService.getRowWrapper(descriptiveDataSet, monitor);
55 }
56 };
57 UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
58 monitorThread.setPriority(3);
59 monitorThread.start();
60 return uuid;
61 }
62
63 @Override
64 public UUID aggregateComputedTaxonDescriptions(UUID taxonNodeUuid, UUID descriptiveDataSetUuid){
65 RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
66 @Override
67 public Serializable doRun(IRemotingProgressMonitor monitor) {
68 UpdateResult updateResult = descriptiveDataSetService.aggregateTaxonDescription(taxonNodeUuid, descriptiveDataSetUuid, monitor);
69 for(Exception e : updateResult.getExceptions()) {
70 monitor.addReport(e.getMessage());
71 }
72 monitor.setResult(updateResult);
73 return updateResult;
74
75 }
76 };
77 UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
78 monitorThread.setPriority(2);
79 monitorThread.start();
80 return uuid;
81 }
82
83 @Override
84 public UUID monitLongRunningTask(ForSubtreeConfiguratorBase config) {
85
86 RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
87 @Override
88 public Serializable doRun(IRemotingProgressMonitor monitor) {
89 UpdateResult result;
90 config.setMonitor(monitor);
91
92 result = updateData(config);
93 for(Exception e : result.getExceptions()) {
94 monitor.addReport(e.getMessage());
95 }
96 monitor.setResult(result);
97 return result;
98 }
99 };
100 UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
101 monitorThread.setPriority(2);
102 monitorThread.start();
103 return uuid;
104 }
105
106 private UpdateResult updateData(ForSubtreeConfiguratorBase config){
107 if (config instanceof SecundumForSubtreeConfigurator){
108 return taxonNodeService.setSecundumForSubtree((SecundumForSubtreeConfigurator)config);
109 }else{
110 return taxonNodeService.setPublishForSubtree(config.getSubtreeUuid(), ((PublishForSubtreeConfigurator)config).isPublish(), ((PublishForSubtreeConfigurator)config).isIncludeAcceptedTaxa(), ((PublishForSubtreeConfigurator)config).isIncludeSynonyms(), ((PublishForSubtreeConfigurator)config).isIncludeSharedTaxa(), config.getMonitor());
111 }
112 }
113
114 @Override
115 public UUID monitLongRunningTask(Set<UUID> movingUuids, UUID targetTreeNodeUuid, int movingType) {
116
117 RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
118 @Override
119 public Serializable doRun(IRemotingProgressMonitor remotingMonitor) {
120 UpdateResult result;
121
122 result = taxonNodeService.moveTaxonNodes(movingUuids,targetTreeNodeUuid, movingType, remotingMonitor);
123 for(Exception e : result.getExceptions()) {
124 remotingMonitor.addReport(e.getMessage());
125 }
126 remotingMonitor.setResult(result);
127 return result;
128 }
129 };
130 UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
131 monitorThread.setPriority(2);
132 monitorThread.start();
133 return uuid;
134 }
135
136
137 }