Project

General

Profile

Download (5.26 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.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
}
(2-2/2)