ref #6566 Migrate "Create FieldUnit" context menu items
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 10 May 2017 15:58:03 +0000 (17:58 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 10 May 2017 15:58:03 +0000 (17:58 +0200)
eu.etaxonomy.taxeditor.editor/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.editor/fragment.e4xmi
eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateFieldUnitContextMenu.java [deleted file]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/DerivateViewContextMenu.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/CreateFieldUnitHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/AppModelId.java [new file with mode: 0644]

index dd4310d6f5115d419643aaffe3e90a961f4ed70c..d7ea64513c02d80da7aa8120d4dd8aea92cfddaf 100644 (file)
@@ -29,10 +29,12 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.zest.layouts,
  eu.etaxonomy.taxeditor.cdmlib,
  org.eclipse.ui.ide,
- org.eclipse.e4.ui.workbench
+ org.eclipse.e4.ui.workbench,
+ org.eclipse.e4.core.di
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
-Import-Package: org.eclipse.core.databinding.beans,
+Import-Package: javax.inject;version="1.0.0",
+ org.eclipse.core.databinding.beans,
  org.eclipse.core.databinding.observable.list,
  org.eclipse.core.databinding.observable.map,
  org.eclipse.core.resources,
index 36c576fb5a76fc5d6b70416698b9806deef7d53f..7a114667a1436fa366bdcd0aea50000d3d28a8d2 100644 (file)
@@ -5,7 +5,11 @@
     <elements xsi:type="basic:PartDescriptor" xmi:id="_gSpRsTQDEeeTNOFVGI4q2w" elementId="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView" label="%command.label.DERIVATIVE_EDITOR" iconURI="platform:/plugin/eu.etaxonomy.taxeditor.editor/icons/derivate_view-16x16-32.png" tooltip="" allowMultiple="true" category="Sample Category" closeable="true" dirtyable="true" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView">
       <tags>View</tags>
       <tags>categoryTag:Sample Category</tags>
-      <menus xsi:type="menu:PopupMenu" xmi:id="_CYXZ0DQEEeeTNOFVGI4q2w" elementId="eu.etaxonomy.taxeditor.editor.popupmenu.specimeneditor"/>
+      <handlers xmi:id="_E5l4wDVqEee_b7RlBzTDRw" elementId="eu.etaxonomy.taxeditor.editor.view.derivate.handler.CreateFieldUnitHandler" contributionURI="bundleclass://eu.etaxonomy.taxeditor.editor/eu.etaxonomy.taxeditor.editor.view.derivate.handler.CreateFieldUnitHandler" command="_BjF3ADVqEee_b7RlBzTDRw"/>
+      <menus xsi:type="menu:PopupMenu" xmi:id="_CYXZ0DQEEeeTNOFVGI4q2w" elementId="eu.etaxonomy.taxeditor.editor.popupmenu.specimeneditor">
+        <children xsi:type="menu:HandledMenuItem" xmi:id="_um1oYDVpEee_b7RlBzTDRw" elementId="eu.etaxonomy.taxeditor.editor.handledmenuitem.create_field_unit_for_taxon" label="Create Field Unit For ..." command="_BjF3ADVqEee_b7RlBzTDRw"/>
+        <children xsi:type="menu:HandledMenuItem" xmi:id="_5GMRcDWQEeeNfoZ3nN0K8Q" elementId="eu.etaxonomy.taxeditor.editor.handledmenuitem.createfieldunit" label="Create Field Unit" command="_BjF3ADVqEee_b7RlBzTDRw"/>
+      </menus>
     </elements>
   </fragments>
   <fragments xsi:type="fragment:StringModelFragment" xmi:id="__3UcUDSmEeek0dKsFNy--Q" featurename="children" parentElementId="bulkeditor.menus.openmenu">
@@ -14,4 +18,7 @@
       <parameters xmi:id="_ZMAMoDSnEeek0dKsFNy--Q" elementId="eu.etaxonomy.taxeditor.editor.openPart.parameter.specimenEditor" name="eu.etaxonomy.taxeditor.workbench.commandparameter.partName" value="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"/>
     </elements>
   </fragments>
+  <fragments xsi:type="fragment:StringModelFragment" xmi:id="__mwtMDVpEee_b7RlBzTDRw" featurename="commands" parentElementId="xpath:/">
+    <elements xsi:type="commands:Command" xmi:id="_BjF3ADVqEee_b7RlBzTDRw" elementId="eu.etaxonomy.taxeditor.editor.command.specimeneditor.create_field_unit" commandName="Create Field Unit"/>
+  </fragments>
 </fragment:ModelFragments>
index 3f5b765739bdd14d2b6464fb25b3ed69c9b8ab41..904c9ac4fdb16f5375cbeaa1e2cdb768e94f905c 100644 (file)
          </separator>
       </menuContribution>
       <menuContribution
-            locationURI="popup:eu.etaxonomy.taxeditor.editor.popupmenu.specimeneditor">
+            locationURI="popup:eu.etaxonomy.taxeditor.editor.XXXpopupmenu.specimeneditor">
          <separator
                name="eu.etaxonomy.taxeditor.editor.separator4"
                visible="true">
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateFieldUnitContextMenu.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateFieldUnitContextMenu.java
deleted file mode 100644 (file)
index 922450a..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-package eu.etaxonomy.taxeditor.editor.view.derivate.contextMenu;
-
-import org.eclipse.jface.action.ContributionItem;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.CompoundContributionItem;
-
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
-import eu.etaxonomy.cdm.api.service.ITaxonService;
-import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
-import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.taxeditor.editor.l10n.Messages;
-import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
-import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-
-/**
- * Context menu for the SingleReads in the derivate hierarchy.
- *
- */
-public class CreateFieldUnitContextMenu extends CompoundContributionItem {
-
-    private enum CommandType {
-        COPY_TO_CLIPBOARD, REMOVE_FROM_SEQUENCE, ADD_TO_SEQUENCE
-    }
-
-    @Override
-    protected IContributionItem[] getContributionItems() {
-        IContributionItem[] contributionItems = new IContributionItem[] {
-                new ContributionItem() {
-                    @Override
-                    public void fill(Menu menu, int index) {
-                        final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-                        IWorkbenchPart activePart = window.getActivePage().getActivePart();
-                        if(activePart instanceof DerivateView){
-                            final DerivateView derivateView = (DerivateView) activePart;
-                            if(derivateView.isListenToSelectionChange()){
-                                Object selectionInput = derivateView.getSelectionInput();
-                                if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){
-                                    final Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(((CdmBase)selectionInput).getUuid()), Taxon.class);
-                                    MenuItem item = new MenuItem(menu, SWT.NONE);
-                                    item.setText(String.format(Messages.CreateFieldUnitContextMenu_CREATE_FIELD_UNIT_FOR, taxon.getName()));
-                                    item.addSelectionListener(new SelectionAdapter() {
-                                        @Override
-                                        public void widgetSelected(SelectionEvent e) {
-                                            if(derivateView.isDirty()){
-                                                MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
-                                                return;
-                                            }
-
-                                            FieldUnit fieldUnit = FieldUnit.NewInstance();
-                                            fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
-                                            IndividualsAssociation association = IndividualsAssociation.NewInstance(fieldUnit);
-                                            TaxonDescription description;
-                                            if(!taxon.getDescriptions().isEmpty()){
-                                                description = taxon.getDescriptions().iterator().next();
-                                            }
-                                            else{
-                                                description = TaxonDescription.NewInstance(taxon);
-                                            }
-                                            description.addElement(association);
-                                            CdmStore.getService(ITaxonService.class).merge(taxon);
-                                            
-
-                                            derivateView.getConversationHolder().commit();
-                                            derivateView.addFieldUnit(fieldUnit);
-                                            derivateView.refreshTree(fieldUnit);
-                                        }
-                                    });
-                                }
-                            }
-                            else{
-                                MenuItem item = new MenuItem(menu, SWT.NONE);
-                                item.setText(Messages.CreateFieldUnitContextMenu_CREATE_FIELD_UNIT);
-                                item.addSelectionListener(new SelectionAdapter() {
-                                    @Override
-                                    public void widgetSelected(SelectionEvent e) {
-                                        if(derivateView.isDirty()){
-                                            MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
-                                            return;
-                                        }
-                                        FieldUnit fieldUnit = FieldUnit.NewInstance();
-                                        fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
-                                        derivateView.getConversationHolder().commit();
-                                        derivateView.addFieldUnit(fieldUnit);
-                                        derivateView.updateRootEntities();
-                                        derivateView.refreshTree(fieldUnit);
-                                    }
-                                });
-                            }
-                        }
-                    }
-                }
-        };
-        return contributionItems;
-    }
-}
-
index 6657e7127c096b36e93dd63b4892381163229723..e7bf78907d83b12cdfb1fce1f7e47f542bb3b002 100644 (file)
@@ -9,7 +9,6 @@ public class DerivateViewContextMenu extends CompoundContributionItem  {
     @Override
     protected IContributionItem[] getContributionItems() {
         IContributionItem[] contributionItems = new IContributionItem[] {
-                new CreateFieldUnitContextMenu(),
                 new CreateDerivateContextMenu(),
                 new Separator(),
 //                new ListenToSelectionChangeContextMenu(),
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/CreateFieldUnitHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/CreateFieldUnitHandler.java
new file mode 100644 (file)
index 0000000..16cbb9f
--- /dev/null
@@ -0,0 +1,100 @@
+
+package eu.etaxonomy.taxeditor.editor.view.derivate.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
+import org.eclipse.e4.ui.services.IServiceConstants;
+
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.editor.AppModelId;
+import eu.etaxonomy.taxeditor.editor.l10n.Messages;
+import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+public class CreateFieldUnitHandler {
+
+       @Execute
+       public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part, MHandledMenuItem item) {
+        DerivateView derivateView = (DerivateView) part.getObject();
+        if(item.getElementId().equals(AppModelId.HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_CREATE_FIELD_UNIT_FOR_TAXON)){
+            Object selectionInput = derivateView.getSelectionInput();
+            if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){
+                final Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(((CdmBase)selectionInput).getUuid()), Taxon.class);
+                if(derivateView.isDirty()){
+                    MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
+                    return;
+                }
+
+                FieldUnit fieldUnit = FieldUnit.NewInstance();
+                fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
+                IndividualsAssociation association = IndividualsAssociation.NewInstance(fieldUnit);
+                TaxonDescription description;
+                if(!taxon.getDescriptions().isEmpty()){
+                    description = taxon.getDescriptions().iterator().next();
+                }
+                else{
+                    description = TaxonDescription.NewInstance(taxon);
+                }
+                description.addElement(association);
+                CdmStore.getService(ITaxonService.class).merge(taxon);
+
+
+                derivateView.getConversationHolder().commit();
+                derivateView.addFieldUnit(fieldUnit);
+                derivateView.refreshTree(fieldUnit);
+            }
+        }
+        else{
+            if(derivateView.isDirty()){
+                MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION);
+                return;
+            }
+            FieldUnit fieldUnit = FieldUnit.NewInstance();
+            fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class);
+            derivateView.getConversationHolder().commit();
+            derivateView.addFieldUnit(fieldUnit);
+            derivateView.updateRootEntities();
+            derivateView.refreshTree(fieldUnit);
+        }
+       }
+
+
+       @CanExecute
+       public boolean canExecute(@Named(IServiceConstants.ACTIVE_PART) MPart part, MHandledMenuItem item) {
+           DerivateView derivateView = (DerivateView) part.getObject();
+           boolean listenToSelectionChange = derivateView.isListenToSelectionChange();
+           setItemVisibility(item, listenToSelectionChange);
+           if(listenToSelectionChange &&
+                   item.getElementId().equals(AppModelId.HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_CREATE_FIELD_UNIT_FOR_TAXON)){
+               Object selectionInput = derivateView.getSelectionInput();
+               if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){
+                   final Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(((CdmBase)selectionInput).getUuid()), Taxon.class);
+                   item.setLabel(String.format(Messages.CreateFieldUnitContextMenu_CREATE_FIELD_UNIT_FOR, taxon.getName()));
+               }
+           }
+           return true;
+       }
+
+
+    private void setItemVisibility(MHandledMenuItem item, boolean isListeningToSelectionChange) {
+        if(item.getElementId().equals(AppModelId.HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_CREATEFIELDUNIT)){
+            item.setVisible(!isListeningToSelectionChange);
+        }
+        else{
+            item.setVisible(isListeningToSelectionChange);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/AppModelId.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/AppModelId.java
new file mode 100644 (file)
index 0000000..bf21402
--- /dev/null
@@ -0,0 +1,13 @@
+package eu.etaxonomy.taxeditor.editor;
+
+public class AppModelId {
+       public static final String COMMAND_EU_ETAXONOMY_TAXEDITOR_COMMAND_OPENPART = "eu.etaxonomy.taxeditor.command.openPart";
+       public static final String COMMAND_EU_ETAXONOMY_TAXEDITOR_EDITOR_COMMAND_SPECIMENEDITOR_CREATE_FIELD_UNIT = "eu.etaxonomy.taxeditor.editor.command.specimeneditor.create_field_unit";
+       public static final String HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_COMMANDLABELDERIVATIVE_EDITOR = "eu.etaxonomy.taxeditor.editor.handledmenuitem.commandlabelderivative_editor";
+       public static final String HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_CREATEFIELDUNIT = "eu.etaxonomy.taxeditor.editor.handledmenuitem.createfieldunit";
+       public static final String HANDLEDMENUITEM_EU_ETAXONOMY_TAXEDITOR_EDITOR_HANDLEDMENUITEM_CREATE_FIELD_UNIT_FOR_TAXON = "eu.etaxonomy.taxeditor.editor.handledmenuitem.create_field_unit_for_taxon";
+       public static final String HANDLER_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DERIVATE_HANDLER_CREATEFIELDUNITHANDLER = "eu.etaxonomy.taxeditor.editor.view.derivate.handler.CreateFieldUnitHandler";
+       public static final String PARAMETER_EU_ETAXONOMY_TAXEDITOR_EDITOR_OPENPART_PARAMETER_SPECIMENEDITOR = "eu.etaxonomy.taxeditor.editor.openPart.parameter.specimenEditor";
+       public static final String PARTDESCRIPTOR_EU_ETAXONOMY_TAXEDITOR_EDITOR_VIEW_DERIVATE_DERIVATEVIEW = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView";
+       public static final String POPUPMENU_EU_ETAXONOMY_TAXEDITOR_EDITOR_POPUPMENU_SPECIMENEDITOR = "eu.etaxonomy.taxeditor.editor.popupmenu.specimeneditor";
+}
\ No newline at end of file