Project

General

Profile

Download (3.19 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.taxeditor.editor.view.derivate.DerivateView;
20
import eu.etaxonomy.taxeditor.model.MessagingUtils;
21
import eu.etaxonomy.taxeditor.store.CdmStore;
22

    
23
public abstract class AbstractAddDerivativeHandler {
24

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

    
29
	    checkDirtyState(derivateView);
30

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

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

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

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

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

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

    
76
	protected abstract DerivedUnit createDerivative();
77

    
78
	protected abstract DerivationEventType getDerivationeType();
79

    
80
    protected abstract boolean isAllowed(Object derivative);
81

    
82
}
(1-1/16)