- implemented context menu functionality (create specimen)
authorPatric Plitzner <p.plitzner@bgbm.org>
Wed, 16 Oct 2013 06:47:32 +0000 (06:47 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Wed, 16 Oct 2013 06:47:32 +0000 (06:47 +0000)
eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/CreateDerivateContextMenu.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateMenuPropertyTester.java

index d6e629ead988fd33a8528adc591c5dd345cd59b7..c76002c6b07ee514396f8983587a3bc5c8d69c3e 100644 (file)
       <menuContribution
             locationURI="popup:eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView">
          <menu
-               label="New">
+               label="New Derivate">
             <dynamic
-                  class="eu.etaxonomy.taxeditor.bulkeditor.command.DynamicNewObjectMenu"
-                  id="eu.etaxonomy.taxeditor.bulkeditor.dynamicNewMenu">
+                  class="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu"
+                  id="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu">
             </dynamic>
             <visibleWhen
                   checkEnabled="true">
-               <or>
-                  <reference
-                        definitionId="isFieldUnit">
-                  </reference>
-                  <reference
-                        definitionId="isDerivedUnit">
-                  </reference>
-               </or>
+               <reference
+                     definitionId="isSpecimenOrObservation">
+               </reference>
             </visibleWhen>
          </menu>
-         <separator
-               name="eu.etaxonomy.taxeditor.editor.separator1"
-               visible="true">
-         </separator>
-         <dynamic
-               class="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu"
-               id="eu.etaxonomy.taxeditor.editor.view.derivate.CreateDerivateContextMenu">
-         </dynamic>
       </menuContribution>
       
       
          </with>
       </definition>
       <definition
-            id="isFieldUnit">
-         <with
-               variable="selection">
-            <test
-                  property="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester.isFieldUnit">
-            </test>
-         </with>
-      </definition>
-      <definition
-            id="isDerivedUnit">
+            id="isSpecimenOrObservation">
          <with
                variable="selection">
             <test
-                  property="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester.isSpecimen">
+                  property="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester.isSpecimenOrObservation">
             </test>
          </with>
       </definition>
             class="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester"
             id="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester"
             namespace="eu.etaxonomy.taxeditor.editor.view.derivate.DerivateMenuPropertyTester"
-            properties="isFieldUnit,isSpecimen"
+            properties="isSpecimenOrObservation"
             type="org.eclipse.jface.viewers.TreeSelection">
       </propertyTester>
    </extension>
index 273d2dc8fb1a491ef6aad53e852d66d916f43df1..9ac5d0eafbd180c7d6b6379a4ea3d6cc26e1b370 100644 (file)
@@ -3,18 +3,31 @@ package eu.etaxonomy.taxeditor.editor.view.derivate;
 import org.eclipse.jface.action.ContributionItem;
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.CompoundContributionItem;
+import org.eclipse.ui.handlers.IHandlerService;
 
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
+import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
 
 public class CreateDerivateContextMenu extends CompoundContributionItem {
 
+    private final IHandlerService handlerService = (IHandlerService) EditorUtil.getService(IHandlerService.class);
+    private final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+    private final ISelection selection = window.getActivePage().getSelection();
+
     /* (non-Javadoc)
      * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
      */
@@ -24,16 +37,48 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
                 new ContributionItem() {
                     @Override
                     public void fill(Menu menu, int index) {
-                        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-                        ISelection selection = window.getActivePage().getSelection();
-                        MenuItem menuItem = new MenuItem(menu, SWT.None);
-                        menuItem.setText("menuItem");
-                        //selection is intance of TreeSelection
-                        if(selection instanceof FieldUnit){
-                            menuItem.setText("fieldUnit");
-                        }
-                        else if(selection instanceof DerivedUnit){
-                            menuItem.setText("derivedUnit");
+                        if(selection instanceof TreeSelection){
+                            final Object selectedElement = ((TreeSelection) selection).getFirstElement();
+                            //context menu for FieldUnit
+                            if(selectedElement instanceof FieldUnit){
+                                MenuItem createSpecimen = new MenuItem(menu, SWT.None);
+                                createSpecimen.setText("Specimen");
+                                createSpecimen.addSelectionListener(new SelectionListener() {
+
+                                    @Override
+                                    public void widgetSelected(SelectionEvent e) {
+                                        FieldUnit fieldUnit = HibernateProxyHelper.deproxy(selectedElement, FieldUnit.class);
+                                        DerivedUnit specimen = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
+                                        fieldUnit.addDerivationEvent(DerivationEvent.NewSimpleInstance(fieldUnit, specimen, DerivationEventType.GATHERING_IN_SITU()));
+                                    }
+
+                                    @Override
+                                    public void widgetDefaultSelected(SelectionEvent e) {
+                                        // TODO Auto-generated method stub
+
+                                    }
+                                });
+                                MenuItem createLivingPlantPhoto = new MenuItem(menu, SWT.None);
+                                createLivingPlantPhoto.setText("Living Plant Photo");
+                            }
+                            //context menu for Specimen
+                            else if(selectedElement instanceof DerivedUnit && ((DerivedUnit)selectedElement).getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
+                                MenuItem createTissueSample = new MenuItem(menu, SWT.None);
+                                createTissueSample.setText("Tissue Sample");
+                                MenuItem createDNASample = new MenuItem(menu, SWT.None);
+                                createDNASample.setText("DNA Sample");
+                                MenuItem createSpecimenScan = new MenuItem(menu, SWT.None);
+                                createSpecimenScan.setText("Specimen Scan");
+                                MenuItem createArtwork = new MenuItem(menu, SWT.None);
+                                createArtwork.setText("Artwork");
+                                MenuItem createLivingPlantPhoto = new MenuItem(menu, SWT.None);
+                                createLivingPlantPhoto.setText("Living Plant Photo");
+                            }
+                            else{
+                                MenuItem menuItem = new MenuItem(menu, SWT.None);
+                                menuItem.setText("No child derivates");
+                                menuItem.setEnabled(false);
+                            }
                         }
                     }
                 }
index dd5617c5da9abcc592529ec402f5c02a5647dff2..6d30016cb422eb6d8144643fbe14cf03e04da14f 100644 (file)
@@ -3,13 +3,10 @@
  */
 package eu.etaxonomy.taxeditor.editor.view.derivate;
 
-import java.util.Arrays;
-
 import org.eclipse.core.expressions.PropertyTester;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
-import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 
 /**
  * Property tester used by the DerivateView tree menu.
@@ -17,8 +14,7 @@ import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
  */
 public class DerivateMenuPropertyTester extends PropertyTester {
 
-       private static final String IS_FIELD_UNIT = "isFieldUnit";
-       private static final String IS_SPECIMEN = "isSpecimen";
+       private static final String IS_SPECIMEN_OR_OBSERVATION = "isSpecimenOrObservation";
 
        /* (non-Javadoc)
         * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
@@ -26,44 +22,31 @@ public class DerivateMenuPropertyTester extends PropertyTester {
        /** {@inheritDoc} */
        @Override
     public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
-        System.out.println(receiver.toString() + receiver.getClass().toString());
-        System.out.println(property);
-        System.out.println(Arrays.asList(args));
-        System.out.println(expectedValue);
+           //TODO: these simple instanceof-checks can be unified in one class because there are several
+           // PropertyTesters that do the same, that is just checking which class the selection is of
 
-               Object[] selectedElements = ((IStructuredSelection) receiver).toArray();
+           Object[] selectedElements = ((IStructuredSelection) receiver).toArray();
 
                if(selectedElements.length == 0){
                        // nothing selected so all tests should fail
                        return false;
                }
 
-               if(IS_FIELD_UNIT.equals(property)){
-                       return isFieldUnit(selectedElements);
-               }
-               else if(IS_SPECIMEN.equals(property)){
-                       return isSpecimen(selectedElements);
+               if(IS_SPECIMEN_OR_OBSERVATION.equals(property)){
+                   return isSpecimenOrObservation(selectedElements);
                }
                else{
                        return false;
                }
        }
 
-       private boolean isFieldUnit(Object[] selectedElements) {
-               for (Object object : selectedElements){
-                       if(!(object instanceof FieldUnit)){
-                               return false;
-                       }
-               }
-               return true;
-       }
-
-       private boolean isSpecimen(Object[] selectedElements) {
+       private boolean isSpecimenOrObservation(Object[] selectedElements) {
            for (Object object : selectedElements){
-               if(!(object instanceof DerivedUnit)){
+               if(!(object instanceof SpecimenOrObservationBase)){
                    return false;
                }
            }
            return true;
        }
+
 }