Project

General

Profile

Download (6.51 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2017 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.vaadin.view.registration;
10

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

    
15
import org.apache.log4j.Logger;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.beans.factory.annotation.Qualifier;
18
import org.springframework.context.event.EventListener;
19
import org.springframework.transaction.TransactionStatus;
20

    
21
import com.vaadin.server.SystemError;
22
import com.vaadin.spring.annotation.SpringComponent;
23
import com.vaadin.spring.annotation.ViewScope;
24

    
25
import eu.etaxonomy.cdm.model.name.Rank;
26
import eu.etaxonomy.cdm.model.name.Registration;
27
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
28
import eu.etaxonomy.cdm.model.reference.Reference;
29
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
30
import eu.etaxonomy.cdm.service.IRegistrationWorkingSetService;
31
import eu.etaxonomy.cdm.vaadin.event.EntityChangeEvent;
32
import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
33
import eu.etaxonomy.cdm.vaadin.event.ShowDetailsEvent;
34
import eu.etaxonomy.cdm.vaadin.event.registration.RegistrationWorkflowEvent;
35
import eu.etaxonomy.cdm.vaadin.model.registration.RegistrationWorkingSet;
36
import eu.etaxonomy.cdm.vaadin.view.reference.ReferencePopupEditor;
37
import eu.etaxonomy.vaadin.mvp.AbstractPresenter;
38

    
39
/**
40
 * @author a.kohlbecker
41
 * @since Mar 3, 2017
42
 *
43
 */
44
@SpringComponent
45
@ViewScope
46
public class RegistrationWorkflowPresenter extends AbstractPresenter<RegistrationWorkflowView> implements Serializable{
47

    
48
    private static final long serialVersionUID = 1L;
49

    
50
    @Autowired
51
    @Qualifier(IRegistrationWorkingSetService.ACTIVE_IMPL)
52
    private IRegistrationWorkingSetService workingSetService;
53

    
54
    private RegistrationWorkingSet workingset;
55

    
56
    /**
57
     *
58
     */
59
    public RegistrationWorkflowPresenter() {
60
    }
61

    
62
    @EventListener
63
    protected void onRegistrationStartEvent(RegistrationWorkflowEvent event){
64

    
65
        boolean HACK = true;
66
        if(workingset != null && !HACK){
67
            Logger.getLogger(RegistrationWorkflowPresenter.class).warn("Can't start a new workflow over an existing one.");
68
            return;
69
        }
70

    
71
        if(event.isStart()) {
72
            workingset = new RegistrationWorkingSet();
73
            Registration reg = Registration.NewInstance();
74
            reg.setName(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()));
75
            getView().setHeaderText("New " + event.getType().name().toString()+ " Registration");
76
            try {
77
                workingset.add(reg);
78
            } catch (RegistrationValidationException error) {
79
                getView().getWorkflow().setComponentError(new SystemError(error));
80
            }
81
            getView().setWorkingset(workingset);
82
        } else {
83
            Integer registrationID = event.getRegistrationID();
84
            presentWorkingSetByRegID(registrationID);
85
        }
86

    
87
    }
88

    
89
    /**
90
     * @param registrationID
91
     * @deprecated use other method working sets should only be addressed by the referenceID
92
     */
93
    @Deprecated
94
    private void presentWorkingSetByRegID(Integer registrationID) {
95
        try {
96
            workingset = workingSetService.loadWorkingSetByRegistrationID(registrationID);
97
        } catch (RegistrationValidationException error) {
98
            getView().getWorkflow().setComponentError(new SystemError(error));
99
        }
100
        getView().setHeaderText("Registration for " + workingset.getCitation());
101
        getView().setWorkingset(workingset);
102
    }
103

    
104
    /**
105
     * @param registrationID
106
     */
107
    private void presentWorkingSet(Integer referenceID) {
108
        try {
109
            workingset = workingSetService.loadWorkingSetByReferenceID(referenceID);
110
        } catch (RegistrationValidationException error) {
111
            getView().getWorkflow().setComponentError(new SystemError(error));
112
        }
113
        getView().setHeaderText("Registration for " + workingset.getCitation());
114
        getView().setWorkingset(workingset);
115
    }
116

    
117
    @EventListener(condition = "#event.type ==T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Type).ADD")
118
    public void onReferenceAddEvent(ReferenceEditorAction event) {
119
        Reference reference = ReferenceFactory.newGeneric();
120
        ReferencePopupEditor popup = getNavigationManager().showInPopup(ReferencePopupEditor.class);
121
        popup.showInEditor(reference);
122
    }
123

    
124
    @EventListener(condition = "#event.type ==T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Type).EDIT")
125
    public void onReferenceEditEvent(ReferenceEditorAction event) {
126
        TransactionStatus tx = getRepo().startTransaction(false);
127
        Reference reference = getRepo().getReferenceService().find(event.getEntityId());
128
        ReferencePopupEditor popup = getNavigationManager().showInPopup(ReferencePopupEditor.class);
129
        popup.showInEditor(reference);
130
        getRepo().commitTransaction(tx);
131
    }
132

    
133

    
134
    @EventListener(classes=ShowDetailsEvent.class, condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.model.registration.RegistrationWorkingSet)")
135
    public void onShowRegistrationWorkingSetMessages(ShowDetailsEvent<?,?> event) { // WARNING don't use more specific generic type arguments
136
        List<String> messages = new ArrayList<>();
137
        for(RegistrationDTO dto : workingset.getRegistrationDTOs()){
138
            dto.getMessages().forEach(m -> messages.add(dto.getSummary() + ": " + m));
139
        }
140
        if(event.getProperty().equals("messages")){
141
            getView().openDetailsPopup("Messages", messages);
142
        }
143
    }
144

    
145
    @EventListener(classes=ShowDetailsEvent.class, condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.view.registration.RegistrationDTO)")
146
    public void onShowRegistrationMessages(ShowDetailsEvent<?,?> event) { // WARNING don't use more specific generic type arguments
147
        RegistrationDTO regDto = workingSetService.loadDtoById((Integer)event.getIdentifier());
148
        if(event.getProperty().equals("messages")){
149
            if(getView() != null){
150
                getView().openDetailsPopup("Messages", regDto.getMessages());
151
            }
152
        }
153
    }
154

    
155
    @EventListener
156
    public void onEntityChangeEvent(EntityChangeEvent event){
157
        if(event.getEntityType().isAssignableFrom(Reference.class)){
158
            if(workingset.getCitationId().equals(event.getEntityId())){
159
                presentWorkingSet(event.getEntityId());
160
            }
161
        }
162

    
163
    }
164

    
165
}
(9-9/14)