Project

General

Profile

Download (3.48 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.IStructuredSelection;
12
import org.eclipse.jface.viewers.TreeNode;
13

    
14
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
15
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
16
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
17
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
18
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
19
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
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 AbstractAddDerivativeHandler {
25

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

    
30
	    checkDirtyState(derivateView);
31

    
32
	    Object selectedDerivative = ((TreeNode) selection.getFirstElement()).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) IStructuredSelection selection, MHandledMenuItem item) {
41
        boolean canExecute = false;
42
        if(selection.size()==1){
43
            canExecute = selection.getFirstElement() instanceof TreeNode
44
                    && isAllowed(((TreeNode) selection.getFirstElement()).getValue());
45
        }
46
        item.setVisible(canExecute);
47
        return canExecute;
48
    }
49

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

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

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

    
80
	protected abstract DerivedUnit createDerivative();
81

    
82
	protected abstract DerivationEventType getDerivationeType();
83

    
84
    protected abstract boolean isAllowed(Object derivative);
85

    
86
}
(1-1/18)