Project

General

Profile

Download (4.84 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

    
12
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
13
import eu.etaxonomy.cdm.api.service.ITaxonService;
14
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
15
import eu.etaxonomy.cdm.model.common.CdmBase;
16
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
17
import eu.etaxonomy.cdm.model.description.TaxonDescription;
18
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
19
import eu.etaxonomy.cdm.model.taxon.Taxon;
20
import eu.etaxonomy.taxeditor.editor.AppModelId;
21
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
22
import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
23
import eu.etaxonomy.taxeditor.model.MessagingUtils;
24
import eu.etaxonomy.taxeditor.store.CdmStore;
25

    
26
public class CreateFieldUnitHandler {
27

    
28
	@Execute
29
	public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part, MHandledMenuItem item) {
30
        DerivateView derivateView = (DerivateView) part.getObject();
31
        if(item.getElementId().equals(AppModelId.HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_CREATE_FIELD_UNIT_FOR_TAXON)){
32
            Object selectionInput = derivateView.getSelectionInput();
33
            if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){
34
                final Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(((CdmBase)selectionInput).getUuid()), Taxon.class);
35
                if(derivateView.isDirty()){
36
                    MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
37
                    return;
38
                }
39

    
40
                FieldUnit fieldUnit = FieldUnit.NewInstance();
41
                fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
42
                IndividualsAssociation association = IndividualsAssociation.NewInstance(fieldUnit);
43
                TaxonDescription description;
44
                if(!taxon.getDescriptions().isEmpty()){
45
                    description = taxon.getDescriptions().iterator().next();
46
                }
47
                else{
48
                    description = TaxonDescription.NewInstance(taxon);
49
                }
50
                description.addElement(association);
51
                CdmStore.getService(ITaxonService.class).merge(taxon);
52

    
53

    
54
                derivateView.getConversationHolder().commit();
55
                derivateView.addFieldUnit(fieldUnit);
56
                derivateView.refreshTree(fieldUnit);
57
            }
58
        }
59
        else{
60
            if(derivateView.isDirty()){
61
                MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
62
                return;
63
            }
64
            FieldUnit fieldUnit = FieldUnit.NewInstance();
65
            fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
66
            derivateView.getConversationHolder().commit();
67
            derivateView.addFieldUnit(fieldUnit);
68
            derivateView.updateRootEntities();
69
            derivateView.refreshTree(fieldUnit);
70
        }
71
	}
72

    
73

    
74
	@CanExecute
75
	public boolean canExecute(@Named(IServiceConstants.ACTIVE_PART) MPart part, MHandledMenuItem item) {
76
	    DerivateView derivateView = (DerivateView) part.getObject();
77
	    boolean listenToSelectionChange = derivateView.isListenToSelectionChange();
78
	    setItemVisibility(item, listenToSelectionChange);
79
	    if(listenToSelectionChange &&
80
	            item.getElementId().equals(AppModelId.HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_CREATE_FIELD_UNIT_FOR_TAXON)){
81
	        Object selectionInput = derivateView.getSelectionInput();
82
	        if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){
83
	            final Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(((CdmBase)selectionInput).getUuid()), Taxon.class);
84
	            item.setLabel(String.format(Messages.CreateFieldUnitContextMenu_CREATE_FIELD_UNIT_FOR, taxon.getName()));
85
	        }
86
	    }
87
	    return true;
88
	}
89

    
90

    
91
    private void setItemVisibility(MHandledMenuItem item, boolean isListeningToSelectionChange) {
92
        if(item.getElementId().equals(AppModelId.HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_CREATEFIELDUNIT)){
93
            item.setVisible(!isListeningToSelectionChange);
94
        }
95
        else{
96
            item.setVisible(isListeningToSelectionChange);
97
        }
98
    }
99

    
100
}
(9-9/18)