- changed static root element (FieldUnit) of DerivateView to the topmost derivate...
authorPatric Plitzner <p.plitzner@bgbm.org>
Tue, 28 Jan 2014 11:48:01 +0000 (11:48 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Tue, 28 Jan 2014 11:48:01 +0000 (11:48 +0000)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java
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/DerivateContentProvider.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewDerivedUnitBaseWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/DetailsViewer.java

index 22faa208a06733faa99f7be025b10996e7bbbfe6..35128d4a50bb9acd671863c695ddef35f5745310 100644 (file)
@@ -26,7 +26,6 @@ import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.handlers.HandlerUtil;
 
-import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
@@ -347,22 +346,30 @@ public class EditorUtil extends AbstractUtility {
                open(input);
        }
 
+       public static SpecimenOrObservationBase getTopMostDerivate(SpecimenOrObservationBase<?> specimen){
+           if(specimen==null) {
+               return null;
+           }
+           if(specimen.isInstanceOf(FieldUnit.class)){
+               return specimen;
+           }
+           else if(specimen instanceof DerivedUnit){
+               if(((DerivedUnit) specimen).getOriginals()==null || ((DerivedUnit) specimen).getOriginals().isEmpty()){
+                   return specimen;
+               }
+               else{
+                   for(SpecimenOrObservationBase original:((DerivedUnit) specimen).getOriginals()){
+                       return getTopMostDerivate(original);
+                   }
+               }
+           }
+           return null;
+       }
+
     public static FieldUnit getFieldUnit(SpecimenOrObservationBase<?> specimen){
-        if(specimen==null) {
-            return null;
-        }
-        if(specimen.isInstanceOf(FieldUnit.class)){
-            return (FieldUnit) specimen;
-        }
-        else if(specimen instanceof DerivedUnit && ((DerivedUnit) specimen).getOriginals()!=null){
-            for(SpecimenOrObservationBase original:((DerivedUnit) specimen).getOriginals()){
-                if(original.isInstanceOf(FieldUnit.class)){
-                    return (FieldUnit) original;
-                }
-                else if(original.isInstanceOf(DerivedUnit.class)){
-                    return getFieldUnit(original);
-                }
-            }
+        SpecimenOrObservationBase topMostDerivate = getTopMostDerivate(specimen);
+        if(topMostDerivate instanceof FieldUnit) {
+            return (FieldUnit) topMostDerivate;
         }
         return null;
     }
index d88130b107f65d5dc953aa6ad01b51816596d50a..7e8b9b28255a00ac0ca9fd3316fe77f30be96659 100644 (file)
@@ -67,7 +67,7 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
                                 createMenuItem(menu, "DNA Sample", derivedUnit, DnaSample.class, SpecimenOrObservationType.DnaSample);
                                 createMenuItem(menu, "Specimen Scan", derivedUnit, MediaSpecimen.class, SpecimenOrObservationType.StillImage);
                                 createMenuItem(menu, "Artwork", derivedUnit, MediaSpecimen.class, SpecimenOrObservationType.StillImage);
-                                createMenuItem(menu, "Living Plant Photo", derivedUnit, DerivedUnit.class, SpecimenOrObservationType.StillImage);
+                                createMenuItem(menu, "Living Plant Photo", derivedUnit, MediaSpecimen.class, SpecimenOrObservationType.StillImage);
                             }
                             //context menu for DnaSample
                             else if(selectedElement instanceof DnaSample){
index 0a8b47c544fefb95503d3813aefba3ee7e48206d..1b09757175cb74f66f1ff7a8c35a160d4ce0c0e1 100644 (file)
@@ -17,7 +17,6 @@ import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
 
 public class DerivateContentProvider implements ITreeContentProvider {
 
@@ -33,26 +32,19 @@ public class DerivateContentProvider implements ITreeContentProvider {
 
        @Override
        public Object[] getElements(Object inputElement) {
-           SpecimenOrObservationBase<?> specimen = null;
+           SpecimenOrObservationBase specimen = null;
            if(inputElement instanceof DerivateViewEditorInput){
-               inputElement = ((DerivateViewEditorInput) inputElement).getDerivate();
+               specimen = ((DerivateViewEditorInput) inputElement).getDerivate();
            }
 
-           // return the parent FieldUnit if element is a DerivedUnit
-           if(inputElement instanceof DerivedUnit){
-               specimen = EditorUtil.getFieldUnit((DerivedUnit)inputElement);
-           }
-           else if(inputElement instanceof FieldUnit){
-               specimen = (FieldUnit) inputElement;
-           }
-           else{
-               AbstractUtility.error(DerivateContentProvider.class, "Invalid input of type " + inputElement.getClass(), new UnsupportedOperationException());
-           }
+           specimen = EditorUtil.getTopMostDerivate(specimen);
+
            if(specimen!=null){
                return Collections.singleton(specimen).toArray();
            }
            else {
-               return Collections.EMPTY_LIST.toArray();
+               //show topmost element in the derivate hierarchy if no field unit was found
+               return Collections.singleton(specimen).toArray();
            }
        }
 
index 566fc6f9670cb2a6ba0258aeccc7cd1ba79ac5d6..325fd55df55f81565345eea508d770e4d0e2c579 100644 (file)
@@ -18,7 +18,6 @@ import org.eclipse.ui.part.EditorPart;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
-import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
@@ -68,8 +67,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
         viewer.setInput(editorInput);
         if(editorInput instanceof DerivateViewEditorInput){
             SpecimenOrObservationBase<?> specimen = ((DerivateViewEditorInput) editorInput).getDerivate();
-            FieldUnit fieldUnit = ((DerivateViewEditorInput) editorInput).getFieldUnit();
-            setPartName(fieldUnit.toString());
+            SpecimenOrObservationBase rootElement = ((DerivateViewEditorInput) editorInput).getRootElement();
+            setPartName(rootElement.toString());
             viewer.setSelection(new StructuredSelection(specimen));
         }
     }
index 395e95a8f93cabfb93eabd7c0472137ce178495b..9e4ad5de56e11514b9edd1d2be16c9e43024215f 100644 (file)
@@ -9,7 +9,6 @@
 */
 package eu.etaxonomy.taxeditor.editor.view.derivate;
 
-import java.util.Collection;
 import java.util.UUID;
 
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -20,13 +19,14 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * Editor input for the {@link DerivateView} which holds the currently selected derivate for which
  * the derivate hierarchy should be shown in the DerivateView.<br>
- * It also holds a {@link FieldUnit} which is the root of the hierarchy. (both may be the same object)
+ * It also holds a {@link SpecimenOrObservationBase} which is the root of the hierarchy. (both may be the same object)
  * @author pplitzner
  * @date 25.11.2013
  *
@@ -40,32 +40,31 @@ public class DerivateViewEditorInput implements IEditorInput {
     /**
      * The root of the hierarchy (may be the same object as the derivate)
      */
-    private FieldUnit fieldUnit;
+    private SpecimenOrObservationBase<?> root;
 
-    private ConversationHolder conversationHolder;
+    private final ConversationHolder conversationHolder;
 
     /**
      * Creates an editor input for the {@link DerivateView} with the currently selected derivate and the
      * corresponding {@link FieldUnit} (both may be the same object).
      * @param derivateUuid the {@link UUID} of the derivate for which the derivate hierarchy should be shown
-     * @param fieldUnit the root of the hierarchy
+     * @param root the root of the hierarchy
      */
     public DerivateViewEditorInput(UUID derivateUuid) {
         super();
         this.conversationHolder = CdmStore.createConversation();
         this.derivate = CdmStore.getCurrentApplicationConfiguration().getOccurrenceService().load(derivateUuid);
         if(derivate instanceof FieldUnit){
-            this.fieldUnit = (FieldUnit) derivate;
+            this.root = derivate;
         }
         else if(derivate instanceof DerivedUnit){
-            Collection<FieldUnit> fieldUnits = CdmStore.getCurrentApplicationConfiguration().getOccurrenceService().getFieldUnits(derivateUuid);
-            if(!fieldUnits.isEmpty()){
-                // TODO think about handling multiple parent FieldUnits
-                this.fieldUnit = fieldUnits.iterator().next();
+            root = EditorUtil.getTopMostDerivate(derivate);
+            if(root==null){
+                root = derivate;
             }
         }
-        if(fieldUnit==null){
-            AbstractUtility.errorDialog("Failed initializing editor", DerivateViewEditorInput.class, "No FieldUnit found!");
+        if(root==null){
+            AbstractUtility.errorDialog("Failed initializing editor", DerivateViewEditorInput.class, "No root element found!");
         }
     }
 
@@ -130,8 +129,8 @@ public class DerivateViewEditorInput implements IEditorInput {
     /**
      * @return the fieldUnit
      */
-    public FieldUnit getFieldUnit() {
-        return fieldUnit;
+    public SpecimenOrObservationBase<?> getRootElement() {
+        return root;
     }
 
     /**
@@ -148,7 +147,7 @@ public class DerivateViewEditorInput implements IEditorInput {
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + ((fieldUnit == null) ? 0 : fieldUnit.hashCode());
+        result = prime * result + ((root == null) ? 0 : root.hashCode());
         return result;
     }
 
@@ -167,11 +166,11 @@ public class DerivateViewEditorInput implements IEditorInput {
             return false;
         }
         DerivateViewEditorInput other = (DerivateViewEditorInput) obj;
-        if (fieldUnit == null) {
-            if (other.fieldUnit != null) {
+        if (root == null) {
+            if (other.root != null) {
                 return false;
             }
-        } else if (!fieldUnit.equals(other.fieldUnit)) {
+        } else if (!root.equals(other.root)) {
             return false;
         }
         return true;
index 0d8f350763b87d9a357878f8893d44a74d810b11..c7c6cf5639c9f0b4a45a7f1928c5683f4a48eb58 100644 (file)
@@ -51,9 +51,6 @@ public class NewDerivedUnitBaseWizard extends AbstractNewEntityWizard<SpecimenOr
            try {
                if(getEntity() instanceof DerivedUnit) {
                    facade = DerivedUnitFacade.NewInstance((DerivedUnit)getEntity(), PreferencesUtil.getDerivedUnitConfigurator());
-                   facade.getFieldUnit(true); //TODO: this is a temporary solution for the Campanula project as
-                   //this ALWAYS needs a FieldUnit as root of the hierarchy
-
                    addPage(new DerivedUnitGeneralWizardPage(formFactory, getConversationHolder(), facade));
                    addPage(new GatheringEventWizardPage(formFactory, getConversationHolder(), facade));
                    addPage(new FieldUnitWizardPage(formFactory, getConversationHolder(), facade));
index 66df6fabd6f7ba657044335d7a1e783d92a2a9e5..c429d84ddd3f08a0cb9eec14c89c9c1ce84ee01a 100644 (file)
@@ -54,7 +54,6 @@ import eu.etaxonomy.taxeditor.editor.UsageTermCollection;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
 import eu.etaxonomy.taxeditor.model.PolytomousKeyRelationship;
-import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
@@ -160,15 +159,13 @@ public class DetailsViewer extends AbstractCdmDataViewer {
      */
     @Override
     public void setInput(Object input) {
-        if (input instanceof DerivedUnit) {
+        if (input.getClass().equals(DerivedUnit.class)) {
             DerivedUnit derivedUnit = (DerivedUnit)input;
-            if(!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.BULK_EDITOR_AVOID_FACADE)){
-                try {
-                    input = DerivedUnitFacade.NewInstance(derivedUnit,
-                            PreferencesUtil.getDerivedUnitConfigurator());
-                } catch (DerivedUnitFacadeNotSupportedException e) {
-                    AbstractUtility.error(getClass(), e);
-                }
+            try {
+                input = DerivedUnitFacade.NewInstance(derivedUnit,
+                        PreferencesUtil.getDerivedUnitConfigurator());
+            } catch (DerivedUnitFacadeNotSupportedException e) {
+                AbstractUtility.error(getClass(), e);
             }
         }
         else if(input instanceof FieldUnit){