Project

General

Profile

Download (10.3 KB) Statistics
| Branch: | Tag: | Revision:
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.service.longrunningService;
10

    
11
import java.io.Serializable;
12
import java.util.Collection;
13
import java.util.Set;
14
import java.util.UUID;
15

    
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.beans.factory.annotation.Qualifier;
18
import org.springframework.stereotype.Service;
19
import org.springframework.transaction.annotation.Transactional;
20

    
21
import eu.etaxonomy.cdm.api.application.ICdmRepository;
22
import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
23
import eu.etaxonomy.cdm.api.service.IProgressMonitorService;
24
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
25
import eu.etaxonomy.cdm.api.service.UpdateResult;
26
import eu.etaxonomy.cdm.api.service.config.CacheUpdaterConfigurator;
27
import eu.etaxonomy.cdm.api.service.config.DeleteDescriptiveDataSetConfigurator;
28
import eu.etaxonomy.cdm.api.service.config.ForSubtreeConfiguratorBase;
29
import eu.etaxonomy.cdm.api.service.config.PublishForSubtreeConfigurator;
30
import eu.etaxonomy.cdm.api.service.config.SecundumForSubtreeConfigurator;
31
import eu.etaxonomy.cdm.api.service.config.SortIndexUpdaterConfigurator;
32
import eu.etaxonomy.cdm.api.service.description.DescriptionAggregationBase;
33
import eu.etaxonomy.cdm.api.service.description.DescriptionAggregationConfigurationBase;
34
import eu.etaxonomy.cdm.api.service.dto.SpecimenRowWrapperDTO;
35
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
36
import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitorThread;
37
import eu.etaxonomy.cdm.model.metadata.SecReferenceHandlingEnum;
38

    
39
/**
40
 * @author k.luther
41
 * @since 04 May 2018
42
 */
43
@Service("longRunningTasksService")
44
@Transactional(readOnly = false)
45
public class LongRunningTasksService implements ILongRunningTasksService{
46

    
47
    @Autowired
48
    private ITaxonNodeService taxonNodeService;
49

    
50
    @Autowired
51
    private IDescriptiveDataSetService descriptiveDataSetService;
52

    
53
    @Autowired
54
    private IProgressMonitorService progressMonitorService;
55

    
56
    @Autowired
57
    private CacheUpdater updater;
58

    
59
    @Autowired
60
    private SortIndexUpdaterWrapper sortIndexUpdater;
61

    
62
    @Autowired
63
    @Qualifier("cdmRepository")
64
    private ICdmRepository repository;
65

    
66
    @Override
67
    public UUID monitGetRowWrapper(UUID descriptiveDataSetUuid) {
68
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
69
            @Override
70
            public Serializable doRun(IRemotingProgressMonitor monitor) {
71
                return (Serializable)descriptiveDataSetService.getRowWrapper(descriptiveDataSetUuid, monitor);
72
            }
73
        };
74
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
75
        monitorThread.setPriority(3);
76
        monitorThread.start();
77
        return uuid;
78
    }
79

    
80
    @Override
81
    public <T extends DescriptionAggregationBase<T,C>, C extends DescriptionAggregationConfigurationBase<T>>
82
                UUID invoke(C config){
83

    
84
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
85
            @Override
86
            public Serializable doRun(IRemotingProgressMonitor monitor) {
87
                T task = config.getTaskInstance();
88
                UpdateResult updateResult = null;
89
                try{
90
                    updateResult = task.invoke(config, repository);
91
                    for(Exception e : updateResult.getExceptions()) {
92
                        monitor.addReport(e.getMessage());
93
                    }
94
                } catch (Exception e) {
95
                    String warning = "Unhandled error. Task was interrupted";
96
                    monitor.warning(warning, e);
97
                    monitor.addReport(warning);
98
                }
99
                monitor.setResult(updateResult);
100
                return updateResult;
101
            }
102
        };
103
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
104
        monitorThread.setPriority(2);
105
        monitorThread.start();
106
        return uuid;
107
    }
108

    
109
    @Override
110
    public UUID addRowWrapperToDataset(Collection<SpecimenRowWrapperDTO> wrapper, UUID datasetUuid){
111
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
112
            @Override
113
            public Serializable doRun(IRemotingProgressMonitor monitor) {
114
                UpdateResult updateResult = descriptiveDataSetService.addRowWrapperToDataset(wrapper, datasetUuid);
115
                for(Exception e : updateResult.getExceptions()) {
116
                    monitor.addReport(e.getMessage());
117
                }
118
                monitor.setResult(updateResult);
119
                return updateResult;
120
            }
121
        };
122
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
123
        monitorThread.setPriority(2);
124
        monitorThread.start();
125
        return uuid;
126
    }
127

    
128
    @Override
129
    public UUID generatePolytomousKey(UUID datasetUuid, UUID taxonUuid){
130
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
131
            @Override
132
            public Serializable doRun(IRemotingProgressMonitor monitor) {
133
                UpdateResult updateResult = descriptiveDataSetService.generatePolytomousKey(datasetUuid, taxonUuid);
134
                for(Exception e : updateResult.getExceptions()) {
135
                    monitor.addReport(e.getMessage());
136
                }
137
                monitor.setResult(updateResult);
138
                return updateResult;
139
            }
140
        };
141
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
142
        monitorThread.setPriority(2);
143
        monitorThread.start();
144
        return uuid;
145
    }
146

    
147
    @Override
148
    public UUID deleteDescriptiveDataset(UUID datasetUuid, DeleteDescriptiveDataSetConfigurator config){
149
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
150
            @Override
151
            public Serializable doRun(IRemotingProgressMonitor monitor) {
152
                UpdateResult updateResult = descriptiveDataSetService.delete(datasetUuid, config, monitor);
153
                for(Exception e : updateResult.getExceptions()) {
154
                    monitor.addReport(e.getMessage());
155
                }
156
                monitor.setResult(updateResult);
157
                return updateResult;
158
            }
159
        };
160
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
161
        monitorThread.setPriority(2);
162
        monitorThread.start();
163
        return uuid;
164
    }
165

    
166
    @Override
167
    public UUID monitLongRunningTask(ForSubtreeConfiguratorBase config) {
168

    
169
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
170
            @Override
171
            public Serializable doRun(IRemotingProgressMonitor monitor) {
172
                config.setMonitor(monitor);
173

    
174
                UpdateResult result = updateData(config);
175
                for(Exception e : result.getExceptions()) {
176
                    monitor.addReport(e.getMessage());
177
                }
178
                monitor.setResult(result);
179
                return result;
180
            }
181
        };
182
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
183
        monitorThread.setPriority(2);
184
        monitorThread.start();
185
        return uuid;
186
    }
187

    
188
    private UpdateResult updateData(ForSubtreeConfiguratorBase config){
189
        if (config instanceof SecundumForSubtreeConfigurator){
190
            return taxonNodeService.setSecundumForSubtree((SecundumForSubtreeConfigurator)config);
191
        }else{
192
            return taxonNodeService.setPublishForSubtree((PublishForSubtreeConfigurator) config);
193
        }
194
    }
195

    
196
    @Override
197
    public UUID monitLongRunningTask(Set<UUID> movingUuids, UUID targetTreeNodeUuid, int movingType, SecReferenceHandlingEnum secHandling, UUID secUuid) {
198

    
199
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
200
            @Override
201
            public Serializable doRun(IRemotingProgressMonitor remotingMonitor) {
202
                UpdateResult result;
203

    
204
                result = taxonNodeService.moveTaxonNodes(movingUuids,targetTreeNodeUuid, movingType, secHandling, secUuid, remotingMonitor);
205
                for(Exception e : result.getExceptions()) {
206
                    remotingMonitor.addReport(e.getMessage());
207
                }
208
                remotingMonitor.setResult(result);
209
                return result;
210
            }
211
        };
212
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
213
        monitorThread.setPriority(2);
214
        monitorThread.start();
215
        return uuid;
216
    }
217

    
218
    @Override
219
    public UUID monitLongRunningTask(CacheUpdaterConfigurator configurator) {
220
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
221
            @Override
222
            public Serializable doRun(IRemotingProgressMonitor monitor) {
223
                UpdateResult result;
224

    
225
                configurator.setMonitor(monitor);
226

    
227
                result = updater.doInvoke(configurator);
228

    
229
                for(Exception e : result.getExceptions()) {
230
                    monitor.addReport(e.getMessage());
231
                }
232
                monitor.setResult(result);
233
                return result;
234
            }
235
        };
236
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
237
        monitorThread.setPriority(2);
238
        monitorThread.start();
239
        return uuid;
240
    }
241

    
242
    @Override
243
    public UUID monitLongRunningTask(SortIndexUpdaterConfigurator configurator) {
244
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
245
            @Override
246
            public Serializable doRun(IRemotingProgressMonitor monitor) {
247

    
248
                configurator.setMonitor(monitor);
249
                UpdateResult result = sortIndexUpdater.doInvoke(configurator);
250

    
251
                for(Exception e : result.getExceptions()) {
252
                    monitor.addReport(e.getMessage());
253
                }
254
                monitor.setResult(result);
255
                return result;
256
            }
257
        };
258
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
259
        monitorThread.setPriority(2);
260
        monitorThread.start();
261
        return uuid;
262
    }
263
}
(3-3/4)