Project

General

Profile

Download (3.29 KB) Statistics
| Branch: | Tag: | Revision:
1

    
2
package eu.etaxonomy.taxeditor.editor.view.derivate.handler;
3

    
4
import javax.inject.Named;
5

    
6
import org.eclipse.e4.core.di.annotations.CanExecute;
7
import org.eclipse.e4.core.di.annotations.Execute;
8
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
9
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
10
import org.eclipse.e4.ui.services.IServiceConstants;
11
import org.eclipse.jface.viewers.TreeNode;
12

    
13
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
14
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
15
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
16
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
17
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
18
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
19
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
20
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
21
import eu.etaxonomy.taxeditor.model.MessagingUtils;
22
import eu.etaxonomy.taxeditor.store.CdmStore;
23

    
24
public abstract class AbstractAddDerivateHandler {
25

    
26
	@Execute
27
	public void execute(@Named(IServiceConstants.ACTIVE_SELECTION) TreeNode node, @Named(IServiceConstants.ACTIVE_PART) MPart part) {
28
	    DerivateView derivateView = (DerivateView) part.getObject();
29

    
30
	    checkDirtyState(derivateView);
31

    
32
	    Object selectedDerivative = node.getValue();
33
	    if(isAllowed(selectedDerivative)){
34
	        Object createdElement = addElement(selectedDerivative);
35
	        refreshView(derivateView, createdElement);
36
	    }
37
	}
38

    
39
    @CanExecute
40
    public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) TreeNode node, MHandledMenuItem item) {
41
        boolean canExecute = false;
42

    
43
        Object derivate = node.getValue();
44
        canExecute = isAllowed(derivate);
45
        item.setVisible(canExecute);
46
        return canExecute;
47
    }
48

    
49
    private void refreshView(DerivateView derivateView, Object createdElement) {
50
        if(derivateView!=null){
51
            derivateView.getConversationHolder().commit();
52
            derivateView.refreshTree(createdElement);
53
        }
54
    }
55

    
56
	private void checkDirtyState(DerivateView derivateView){
57
	        if(derivateView!=null){
58
	            if(derivateView.isDirty()){
59
	                MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
60
	                return;
61
	            }
62
	        }
63
	}
64

    
65
	private Object addElement(Object selectedDerivative){
66
	    Object createdElement = null;
67
	    SpecimenOrObservationBase<?> specimenOrObservationBase = (SpecimenOrObservationBase<?>) selectedDerivative;
68
	    DerivedUnit derivedUnit = DerivedUnit.NewInstance(getSpecimenType());
69
	    specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, derivedUnit, getDerivationeType()));
70
	    derivedUnit.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
71
	    derivedUnit.getTitleCache(); //update title cache
72
	    createdElement = derivedUnit;
73
	    CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase<?>) selectedDerivative, true);
74
	    return createdElement;
75
	}
76

    
77
	protected abstract SpecimenOrObservationType getSpecimenType();
78

    
79
	protected abstract DerivationEventType getDerivationeType();
80

    
81
    protected abstract boolean isAllowed(Object derivative);
82

    
83
}
(1-1/11)