Project

General

Profile

Download (4.9 KB) Statistics
| Branch: | Tag: | Revision:
1 933331e0 Cherian Mathew
/**
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;
10
11 eeedb131 Cherian Mathew
import java.io.Serializable;
12
import java.util.List;
13 3087df1b Cherian Mathew
import java.util.UUID;
14
15 eeedb131 Cherian Mathew
import org.apache.log4j.Logger;
16 3fda6c39 Cherian Mathew
import org.springframework.beans.factory.annotation.Autowired;
17 3087df1b Cherian Mathew
import org.springframework.security.access.prepost.PreAuthorize;
18 933331e0 Cherian Mathew
import org.springframework.stereotype.Service;
19 3fda6c39 Cherian Mathew
import org.springframework.transaction.annotation.Transactional;
20
21
import eu.etaxonomy.cdm.api.service.UpdateResult.Status;
22
import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier;
23 3087df1b Cherian Mathew
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
24 ac7c4c35 Cherian Mathew
import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitorThread;
25 3fda6c39 Cherian Mathew
import eu.etaxonomy.cdm.model.taxon.Taxon;
26
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27 933331e0 Cherian Mathew
28
/**
29
 * @author cmathew
30 53db84af Andreas Müller
 * @since 26 Jun 2015
31 933331e0 Cherian Mathew
 *
32
 */
33
@Service
34
public class TestServiceImpl implements ITestService {
35
36 eeedb131 Cherian Mathew
    private static final Logger logger = Logger.getLogger(TestServiceImpl.class);
37
38 3fda6c39 Cherian Mathew
    @Autowired
39
    ITaxonNodeService taxonNodeService;
40
41 3087df1b Cherian Mathew
    @Autowired
42 ac7c4c35 Cherian Mathew
    IProgressMonitorService progressMonitorService;
43 3087df1b Cherian Mathew
44 933331e0 Cherian Mathew
    /* (non-Javadoc)
45
     * @see eu.etaxonomy.cdm.api.service.ITestService#wait(int)
46
     */
47
    @Override
48 3087df1b Cherian Mathew
    @PreAuthorize("hasRole('ROLE_ADMIN')")
49 933331e0 Cherian Mathew
    public void waitFor(long timeToWaitInMs) throws InterruptedException {
50
        Thread.sleep(timeToWaitInMs);
51
    }
52
53 610855da Cherian Mathew
    /* (non-Javadoc)
54
     * @see eu.etaxonomy.cdm.api.service.ITestService#returnResult(eu.etaxonomy.cdm.api.service.UpdateResult)
55
     */
56
    @Override
57
    public UpdateResult returnResult(UpdateResult result) {
58
        return result;
59
    }
60
61
    /* (non-Javadoc)
62
     * @see eu.etaxonomy.cdm.api.service.ITestService#throwException(java.lang.Exception)
63
     */
64
    @Override
65
    public UpdateResult throwException(Exception ex) {
66
        throw new RuntimeException(ex);
67
    }
68
69 3fda6c39 Cherian Mathew
    /* (non-Javadoc)
70
     * @see eu.etaxonomy.cdm.api.service.ITestService#addChild(eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier)
71
     */
72
    @Override
73
    @Transactional(readOnly = false)
74
    public UpdateResult addChild(CdmEntityIdentifier taxonNodeCei) {
75
        TaxonNode taxonNode = taxonNodeService.find(taxonNodeCei.getId());
76 7ae4f425 Katja Luther
        TaxonNode child = taxonNode.addChildTaxon(Taxon.NewInstance(null, null), null, null);
77
        taxonNodeService.saveOrUpdate(child);
78 3fda6c39 Cherian Mathew
        UpdateResult result = new UpdateResult();
79
        result.addUpdatedCdmId(taxonNodeCei);
80
        result.setStatus(Status.OK);
81
        return result;
82
    }
83
84 3087df1b Cherian Mathew
85
    @Override
86 ac7c4c35 Cherian Mathew
    public UUID monitLongRunningMethod(final RuntimeException ex, final List<String> feedbacks, final long feedbackWaitTimeout) {
87
88
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
89 3087df1b Cherian Mathew
            @Override
90 eeedb131 Cherian Mathew
            public Serializable doRun(IRemotingProgressMonitor monitor)  {
91 ac7c4c35 Cherian Mathew
                Serializable result = longRunningMethod(monitor, ex, feedbacks, feedbackWaitTimeout);
92 1c7b9181 Cherian Mathew
                if(!monitor.isCanceled()) {
93
                    monitor.addReport("Report");
94
                }
95 3087df1b Cherian Mathew
                return result;
96
            }
97
        };
98
99 ac7c4c35 Cherian Mathew
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
100
        monitorThread.setPriority(3);
101
        monitorThread.start();
102 3087df1b Cherian Mathew
        return uuid;
103
    }
104
105
    @Override
106 ac7c4c35 Cherian Mathew
    public String longRunningMethod(IRemotingProgressMonitor monitor,
107
            RuntimeException ex,
108
            List<String> feedbacks,
109
            long feedbackWaitTimeout) {
110 3087df1b Cherian Mathew
        int noOfSteps = 10;
111
        int stepToThrowException = noOfSteps / 2;
112 eeedb131 Cherian Mathew
        int stepToWaitForFeedback = noOfSteps / 2;
113 3087df1b Cherian Mathew
        monitor.beginTask("Long Running Task", noOfSteps);
114
        for(int i=0; i<noOfSteps; i++) {
115
            try {
116
                Thread.sleep(1000);
117
                if(i == stepToThrowException && ex != null) {
118
                    throw ex;
119
                }
120 eeedb131 Cherian Mathew
                if(feedbacks != null && feedbacks.size() > 0 && i == stepToWaitForFeedback) {
121
                    for(String feedback : feedbacks) {
122
                        logger.warn("Monitor waiting for feedback");
123 ac7c4c35 Cherian Mathew
                        if(feedbackWaitTimeout <= 0) {
124
                            monitor.waitForFeedback();
125
                        } else {
126
                            monitor.waitForFeedback(feedbackWaitTimeout);
127
                        }
128 eeedb131 Cherian Mathew
                        logger.warn(" .. feedback received : " + monitor.getFeedback());
129
                        monitor.addReport(feedback);
130
                    }
131
                }
132 1c7b9181 Cherian Mathew
                if(monitor.isCanceled()) {
133
                    return "Cancelled";
134
                }
135 3087df1b Cherian Mathew
            } catch (InterruptedException e) {
136
                throw ex;
137
            }
138
            monitor.worked(1);
139
        }
140
        monitor.done();
141
        return "Success";
142
    }
143
144 933331e0 Cherian Mathew
}