Project

General

Profile

Download (4.69 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2015 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.cdm.api.service;
11

    
12
import java.io.Serializable;
13
import java.util.List;
14
import java.util.UUID;
15

    
16
import org.apache.log4j.Logger;
17
import org.springframework.beans.factory.annotation.Autowired;
18
import org.springframework.security.access.prepost.PreAuthorize;
19
import org.springframework.stereotype.Service;
20
import org.springframework.transaction.annotation.Transactional;
21

    
22
import eu.etaxonomy.cdm.api.service.UpdateResult.Status;
23
import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier;
24
import eu.etaxonomy.cdm.api.service.util.RemotingProgressMonitorThread;
25
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
26
import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitor;
27
import eu.etaxonomy.cdm.model.taxon.Taxon;
28
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
29

    
30
/**
31
 * @author cmathew
32
 * @date 26 Jun 2015
33
 *
34
 */
35
@Service
36
public class TestServiceImpl implements ITestService {
37

    
38
    private static final Logger logger = Logger.getLogger(TestServiceImpl.class);
39

    
40
    @Autowired
41
    ITaxonNodeService taxonNodeService;
42

    
43
    @Autowired
44
    ProgressMonitorManager<IRemotingProgressMonitor> progressMonitorManager;
45

    
46
    /* (non-Javadoc)
47
     * @see eu.etaxonomy.cdm.api.service.ITestService#wait(int)
48
     */
49
    @Override
50
    @PreAuthorize("hasRole('ROLE_ADMIN')")
51
    public void waitFor(long timeToWaitInMs) throws InterruptedException {
52
        Thread.sleep(timeToWaitInMs);
53
    }
54

    
55
    /* (non-Javadoc)
56
     * @see eu.etaxonomy.cdm.api.service.ITestService#returnResult(eu.etaxonomy.cdm.api.service.UpdateResult)
57
     */
58
    @Override
59
    public UpdateResult returnResult(UpdateResult result) {
60
        return result;
61
    }
62

    
63
    /* (non-Javadoc)
64
     * @see eu.etaxonomy.cdm.api.service.ITestService#throwException(java.lang.Exception)
65
     */
66
    @Override
67
    public UpdateResult throwException(Exception ex) {
68
        throw new RuntimeException(ex);
69
    }
70

    
71
    /* (non-Javadoc)
72
     * @see eu.etaxonomy.cdm.api.service.ITestService#addChild(eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier)
73
     */
74
    @Override
75
    @Transactional(readOnly = false)
76
    public UpdateResult addChild(CdmEntityIdentifier taxonNodeCei) {
77
        TaxonNode taxonNode = taxonNodeService.find(taxonNodeCei.getId());
78
        taxonNode.addChildTaxon(Taxon.NewInstance(null, null), null, null);
79
        UpdateResult result = new UpdateResult();
80
        result.addUpdatedCdmId(taxonNodeCei);
81
        result.setStatus(Status.OK);
82
        return result;
83
    }
84

    
85

    
86
    @Override
87
    public UUID monitLongRunningMethod(final RuntimeException ex, final List<String> feedbacks) {
88
        RemotingProgressMonitor monitor = new RemotingProgressMonitor();
89
        RemotingProgressMonitorThread monitThread = new RemotingProgressMonitorThread(monitor) {
90
            @Override
91
            public Serializable doRun(IRemotingProgressMonitor monitor)  {
92
                Serializable result = longRunningMethod(monitor, ex, feedbacks);
93
                if(!monitor.isCanceled()) {
94
                    monitor.addReport("Report");
95
                }
96
                return result;
97
            }
98
        };
99

    
100
        UUID uuid = progressMonitorManager.registerMonitor(monitor);
101
        monitThread.setPriority(3);
102
        monitThread.start();
103
        return uuid;
104
    }
105

    
106
    @Override
107
    public String longRunningMethod(IRemotingProgressMonitor monitor, RuntimeException ex, List<String> feedbacks) {
108
        int noOfSteps = 10;
109
        int stepToThrowException = noOfSteps / 2;
110
        int stepToWaitForFeedback = noOfSteps / 2;
111
        monitor.beginTask("Long Running Task", noOfSteps);
112
        for(int i=0; i<noOfSteps; i++) {
113
            try {
114
                Thread.sleep(1000);
115
                if(i == stepToThrowException && ex != null) {
116
                    throw ex;
117
                }
118
                if(feedbacks != null && feedbacks.size() > 0 && i == stepToWaitForFeedback) {
119
                    for(String feedback : feedbacks) {
120
                        logger.warn("Monitor waiting for feedback");
121
                        monitor.waitForFeedback();
122
                        logger.warn(" .. feedback received : " + monitor.getFeedback());
123
                        monitor.addReport(feedback);
124
                    }
125
                }
126
                if(monitor.isCanceled()) {
127
                    return "Cancelled";
128
                }
129
            } catch (InterruptedException e) {
130
                throw ex;
131
            }
132
            monitor.worked(1);
133
        }
134
        monitor.done();
135
        return "Success";
136
    }
137

    
138
}
(90-90/95)