Project

General

Profile

Download (4.9 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;
10

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

    
15
import org.apache.log4j.Logger;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.security.access.prepost.PreAuthorize;
18
import org.springframework.stereotype.Service;
19
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
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
24
import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitorThread;
25
import eu.etaxonomy.cdm.model.taxon.Taxon;
26
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27

    
28
/**
29
 * @author cmathew
30
 * @since 26 Jun 2015
31
 *
32
 */
33
@Service
34
public class TestServiceImpl implements ITestService {
35

    
36
    private static final Logger logger = Logger.getLogger(TestServiceImpl.class);
37

    
38
    @Autowired
39
    ITaxonNodeService taxonNodeService;
40

    
41
    @Autowired
42
    IProgressMonitorService progressMonitorService;
43

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

    
53
    /* (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
    /* (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
        TaxonNode child = taxonNode.addChildTaxon(Taxon.NewInstance(null, null), null, null);
77
        taxonNodeService.saveOrUpdate(child);
78
        UpdateResult result = new UpdateResult();
79
        result.addUpdatedCdmId(taxonNodeCei);
80
        result.setStatus(Status.OK);
81
        return result;
82
    }
83

    
84

    
85
    @Override
86
    public UUID monitLongRunningMethod(final RuntimeException ex, final List<String> feedbacks, final long feedbackWaitTimeout) {
87

    
88
        RemotingProgressMonitorThread monitorThread = new RemotingProgressMonitorThread() {
89
            @Override
90
            public Serializable doRun(IRemotingProgressMonitor monitor)  {
91
                Serializable result = longRunningMethod(monitor, ex, feedbacks, feedbackWaitTimeout);
92
                if(!monitor.isCanceled()) {
93
                    monitor.addReport("Report");
94
                }
95
                return result;
96
            }
97
        };
98

    
99
        UUID uuid = progressMonitorService.registerNewRemotingMonitor(monitorThread);
100
        monitorThread.setPriority(3);
101
        monitorThread.start();
102
        return uuid;
103
    }
104

    
105
    @Override
106
    public String longRunningMethod(IRemotingProgressMonitor monitor,
107
            RuntimeException ex,
108
            List<String> feedbacks,
109
            long feedbackWaitTimeout) {
110
        int noOfSteps = 10;
111
        int stepToThrowException = noOfSteps / 2;
112
        int stepToWaitForFeedback = noOfSteps / 2;
113
        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
                if(feedbacks != null && feedbacks.size() > 0 && i == stepToWaitForFeedback) {
121
                    for(String feedback : feedbacks) {
122
                        logger.warn("Monitor waiting for feedback");
123
                        if(feedbackWaitTimeout <= 0) {
124
                            monitor.waitForFeedback();
125
                        } else {
126
                            monitor.waitForFeedback(feedbackWaitTimeout);
127
                        }
128
                        logger.warn(" .. feedback received : " + monitor.getFeedback());
129
                        monitor.addReport(feedback);
130
                    }
131
                }
132
                if(monitor.isCanceled()) {
133
                    return "Cancelled";
134
                }
135
            } catch (InterruptedException e) {
136
                throw ex;
137
            }
138
            monitor.worked(1);
139
        }
140
        monitor.done();
141
        return "Success";
142
    }
143

    
144
}
(96-96/100)