Project

General

Profile

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

    
43
                IndividualsAssociation association = IndividualsAssociation.NewInstance(fieldUnit);
44
                TaxonDescription description;
45
                if(!taxon.getDescriptions().isEmpty()){
46
                    description = taxon.getDescriptions().iterator().next();
47
                }
48
                else{
49
                    description = TaxonDescription.NewInstance(taxon);
50
                }
51
                description.addElement(association);
52
                CdmStore.getService(ITaxonService.class).merge(taxon);
53

    
54

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

    
69
            derivateView.getConversationHolder().commit();
70
            derivateView.addFieldUnit(fieldUnit);
71
            derivateView.updateRootEntities();
72
            derivateView.refreshTree(fieldUnit);
73
        }
74
	}
75

    
76

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

    
93

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

    
103
}
(9-9/18)