2 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
.handler
;
4 import javax
.inject
.Named
;
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
;
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
;
26 public class CreateFieldUnitHandler
{
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
);
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();
48 description
= TaxonDescription
.NewInstance(taxon
);
50 description
.addElement(association
);
51 CdmStore
.getService(ITaxonService
.class).merge(taxon
);
54 derivateView
.getConversationHolder().commit();
55 derivateView
.addFieldUnit(fieldUnit
);
56 derivateView
.refreshTree(fieldUnit
);
60 if(derivateView
.isDirty()){
61 MessagingUtils
.warningDialog(DerivateView
.VIEW_HAS_UNSAVED_CHANGES
, this, DerivateView
.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION
);
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
);
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()));
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
);
96 item
.setVisible(isListeningToSelectionChange
);