Project

General

Profile

« Previous | Next » 

Revision 0e072f9c

Added by Andreas Kohlbecker over 6 years ago

ref #6169 Button row to create new registrations in a registration working set

View differences:

src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/RegistrationWorkflowPresenter.java
13 13

  
14 14
import org.springframework.beans.factory.annotation.Autowired;
15 15
import org.springframework.context.event.EventListener;
16
import org.springframework.security.core.Authentication;
16 17

  
17 18
import com.vaadin.server.SystemError;
18 19
import com.vaadin.spring.annotation.SpringComponent;
19 20
import com.vaadin.spring.annotation.ViewScope;
20 21

  
22
import eu.etaxonomy.cdm.api.service.INameService;
23
import eu.etaxonomy.cdm.api.service.IRegistrationService;
24
import eu.etaxonomy.cdm.model.common.User;
25
import eu.etaxonomy.cdm.model.name.Rank;
21 26
import eu.etaxonomy.cdm.model.name.Registration;
22 27
import eu.etaxonomy.cdm.model.name.TaxonName;
28
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
23 29
import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
24 30
import eu.etaxonomy.cdm.model.reference.Reference;
31
import eu.etaxonomy.cdm.service.CdmStore;
25 32
import eu.etaxonomy.cdm.service.IRegistrationWorkingSetService;
26 33
import eu.etaxonomy.cdm.vaadin.event.EntityChangeEvent;
27 34
import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
......
35 42
import eu.etaxonomy.cdm.vaadin.view.name.SpecimenTypeDesignationWorkingsetPopupEditor;
36 43
import eu.etaxonomy.cdm.vaadin.view.name.TaxonNamePopupEditor;
37 44
import eu.etaxonomy.cdm.vaadin.view.reference.ReferencePopupEditor;
38
import eu.etaxonomy.cdm.vaadin.view.registration.RegistrationWorkflowViewBean.ViewParameters;
39 45
import eu.etaxonomy.vaadin.mvp.AbstractPresenter;
46
import eu.etaxonomy.vaadin.ui.view.DoneWithPopupEvent;
47
import eu.etaxonomy.vaadin.ui.view.DoneWithPopupEvent.Reason;
40 48

  
41 49
/**
42 50
 * @author a.kohlbecker
......
62 70

  
63 71
    private RegistrationWorkingSet workingset;
64 72

  
65
    private Reference citation;
73
    private TaxonName newTaxonNameForRegistration;
66 74

  
67 75

  
68 76
    /**
......
72 80
    }
73 81

  
74 82

  
83
    /**
84
     * Always create a new Store
85
     *
86
     * @return
87
     */
88
    protected CdmStore<Registration, IRegistrationService> getRegistrationStore(){
89
        return new CdmStore<Registration, IRegistrationService>(getRepo(), getRepo().getRegistrationService());
90
    }
91

  
92
    /**
93
     * Always create a new Store
94
     *
95
     * @return
96
     */
97
    protected CdmStore<TaxonName, INameService> getTaxonNameStore(){
98
        return new  CdmStore<TaxonName, INameService>(getRepo(), getRepo().getNameService());
99
    }
100

  
75 101

  
76 102
    /**
77 103
     * {@inheritDoc}
......
80 106
    public void handleViewEntered() {
81 107

  
82 108
        super.handleViewEntered();
83
        ViewParameters viewParams = getView().getViewParameters();
84
        if(viewParams.action.equals(RegistrationWorkflowView.ACTION_NEW)){
85
            citation = getRepo().getReferenceService().find(viewParams.referenceId);
86
            workingset = new RegistrationWorkingSet(citation);
87
            getView().setHeaderText("Registration for " + workingset.getCitation());
88
            getView().setWorkingset(workingset);
89
        }
90
        if(viewParams.action.equals(RegistrationWorkflowView.ACTION_EDIT)){
91
            presentWorkingSetByRegID(viewParams.referenceId);
92
        }
93
    }
94

  
95
    /**
96
     * @param registrationID
97
     * @deprecated use other method working sets should only be addressed by the referenceID
98
     */
99
    @Deprecated
100
    private void presentWorkingSetByRegID(Integer citationID) {
101
        try {
102
            workingset = getWorkingSetService().loadWorkingSetByCitationID(citationID);
103
        } catch (RegistrationValidationException error) {
104
            getView().getWorkflow().setComponentError(new SystemError(error));
105
        }
106
        getView().setHeaderText("Registrations in " + workingset.getCitation());
107
        getView().setWorkingset(workingset);
109
        presentWorkingSet(getView().getCitationID());
108 110
    }
109 111

  
110 112
    /**
......
116 118
        } catch (RegistrationValidationException error) {
117 119
            getView().getWorkflow().setComponentError(new SystemError(error));
118 120
        }
121
        if(workingset == null || workingset.getCitationId() == null){
122
            Reference citation = getRepo().getReferenceService().find(referenceID);
123
            workingset = new RegistrationWorkingSet(citation);
124
        }
119 125
        getView().setHeaderText("Registration for " + workingset.getCitation());
120 126
        getView().setWorkingset(workingset);
121 127
    }
......
140 146
    }
141 147

  
142 148
    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).EDIT && #event.sourceComponent == null")
143
    public void onTaxonNameEditorAction(TaxonNameEditorAction event) {
149
    public void onTaxonNameEditorActionEdit(TaxonNameEditorAction event) {
144 150

  
145 151
        TaxonNamePopupEditor popup = getNavigationManager().showInPopup(TaxonNamePopupEditor.class);
146 152
        popup.withDeleteButton(true);
......
148 154
        // the in the registration application inReferences should only edited centrally
149 155
        popup.getNomReferenceCombobox().setEnabled(false);
150 156
        popup.loadInEditor(event.getEntityId());
157
    }
151 158

  
159
    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).ADD")
160
    public void onTaxonNameEditorActionAdd(TaxonNameEditorAction event) {
152 161

  
162
        newTaxonNameForRegistration = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
163
        newTaxonNameForRegistration.setNomenclaturalReference(getRepo().getReferenceService().find(workingset.getCitationId()));
164
        EntityChangeEvent nameSaveEvent = getTaxonNameStore().saveBean(newTaxonNameForRegistration);
165
        newTaxonNameForRegistration = getRepo().getNameService().find(nameSaveEvent.getEntityId());
166
        TaxonNamePopupEditor popup = getNavigationManager().showInPopup(TaxonNamePopupEditor.class);
167
        popup.withDeleteButton(true);
168
        popup.loadInEditor(newTaxonNameForRegistration.getId());
169
        // disable NomReferenceCombobox:
170
        // the in the registration application inReferences should only edited centrally
171
        popup.getNomReferenceCombobox().setEnabled(false);
153 172
    }
154 173

  
174
    @EventListener
175
    public void onDoneWithTaxonnameEditor(DoneWithPopupEvent event) throws RegistrationValidationException{
176
        if(event.getPopup() instanceof TaxonNamePopupEditor){
177
            if(newTaxonNameForRegistration != null && event.getReason().equals(Reason.SAVE)){
178
                // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
179
                // move into RegistrationWorkflowStateMachine
180
                long identifier = System.currentTimeMillis();
181
                Registration reg = Registration.NewInstance(
182
                        "http://phycobank.org/" + identifier,
183
                        "" + identifier,
184
                        getRepo().getNameService().find(newTaxonNameForRegistration.getId()),
185
                        null);
186
                Authentication authentication = currentSecurityContext().getAuthentication();
187
                reg.setSubmitter((User)authentication.getPrincipal());
188
                // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
189

  
190
                getRegistrationStore().saveBean(reg);
191

  
192
                workingset.add(reg);
193
                refreshView();
194
            } else if(event.getReason().equals(Reason.CANCEL)){
195
                // clean up
196
                getTaxonNameStore().deleteBean(newTaxonNameForRegistration);
197
            }
198
            newTaxonNameForRegistration = null;
199
        }
200

  
201
    }
155 202
    @EventListener(condition = "#event.type == T(eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction.Action).EDIT && #event.sourceComponent == null")
156 203
    public void onTypeDesignationsEditorActionEdit(TypeDesignationWorkingsetEditorAction event) {
157 204

  

Also available in: Unified diff