AT: commiting Palm Use Data extension
authora.theys <a.theys@localhost>
Tue, 17 Jan 2012 15:49:43 +0000 (15:49 +0000)
committera.theys <a.theys@localhost>
Tue, 17 Jan 2012 15:49:43 +0000 (15:49 +0000)
21 files changed:
.gitattributes
eu.etaxonomy.taxeditor.application/plugin.xml
eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/PalmUses.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/.classpath
eu.etaxonomy.taxeditor.editor/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesContentProvider.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesLabelProvider.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesViewPart.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/CreateUseHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/DynamicFeatureMenu.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateTaxonUseOperation.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/DeleteTaxonUseOperation.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.store/icons/leaf_detail.png [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/plugin.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionHelper.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/DescriptionDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewPart.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewer.java [new file with mode: 0644]

index c5a8995a2a82089c2dc8c7ed8a207767fc88aaa3..c5bfc9bb1a710bec8ac9decfd6a610cf6a132619 100644 (file)
@@ -30,6 +30,7 @@ eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/SaveHand
 eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/TaxonomicEditorPlugin.java -text
 eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/BulkEditing.java -text
 eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/Default.java -text
+eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/PalmUses.java -text
 eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/PolytomousKey.java -text
 eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/Taxonomic.java -text
 eu.etaxonomy.taxeditor.application/src/main/resources/log4j.properties -text
@@ -474,6 +475,13 @@ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/m
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/operation/DeleteMediaOperation.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/operation/MoveMediaInListOperation.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/operation/RemoveImageFromDescriptionElementOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesContentProvider.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesLabelProvider.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesViewPart.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/CreateUseHandler.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/DynamicFeatureMenu.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateTaxonUseOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/DeleteTaxonUseOperation.java -text
 eu.etaxonomy.taxeditor.editor/src/main/resources/TaonDescriptionEditor.screen -text
 eu.etaxonomy.taxeditor.editor/src/main/resources/log4j.properties -text
 eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/Application.java -text
@@ -770,6 +778,7 @@ eu.etaxonomy.taxeditor.store/icons/icon.ico -text
 eu.etaxonomy.taxeditor.store/icons/icon.png -text
 eu.etaxonomy.taxeditor.store/icons/import_wiz.gif -text
 eu.etaxonomy.taxeditor.store/icons/large_image.gif -text
+eu.etaxonomy.taxeditor.store/icons/leaf_detail.png -text
 eu.etaxonomy.taxeditor.store/icons/linkto_help.gif -text
 eu.etaxonomy.taxeditor.store/icons/lockedstate.gif -text
 eu.etaxonomy.taxeditor.store/icons/ma_12x12.gif -text
@@ -1312,6 +1321,8 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/De
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/reporting/ReportingViewPart.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/supplementaldata/SupplementalDataViewPart.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/supplementaldata/SupplementalDataViewer.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewPart.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewer.java -text
 eu.etaxonomy.taxeditor.store/src/main/resources/eu/etaxonomy/cdm/editorApplicationContext.xml -text
 eu.etaxonomy.taxeditor.store/src/main/resources/log4j.properties -text
 eu.etaxonomy.taxeditor.store/src/test/java/eu/etaxonomy/taxeditor/store/NameProtectTitleCacheTest.java -text
index 61c00707866d224a44f7bcd0a39fbc8f4533d054..1f370efc81d3f52434fd030d9dce81cff91b205d 100644 (file)
             id="eu.etaxonomy.taxeditor.application.perspective.polytomous"\r
             name="Polytomous Key">\r
       </perspective>\r
+       <perspective\r
+            class="eu.etaxonomy.taxeditor.perspective.PalmUses"\r
+            id="eu.etaxonomy.taxeditor.application.perspective.palmuses"\r
+            name="Palm Uses">\r
+      </perspective>\r
+     \r
    </extension>\r
    <!--extension\r
          point="org.eclipse.ui.views">\r
              id="eu.etaxonomy.taxeditor.editor.forms.detailsView">\r
        </showInPart>\r
     </perspectiveExtension>\r
+    <perspectiveExtension\r
+          targetID="eu.etaxonomy.taxeditor.application.perspective.palmuses">\r
+       <showInPart\r
+             id="eu.etaxonomy.taxeditor.editor.forms.detailsView">\r
+       </showInPart>\r
+    </perspectiveExtension>\r
  </extension>\r
    <extension\r
          point="org.eclipse.ui.menus">\r
diff --git a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/PalmUses.java b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/PalmUses.java
new file mode 100644 (file)
index 0000000..735c403
--- /dev/null
@@ -0,0 +1,36 @@
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.perspective;\r
+\r
+import org.eclipse.ui.IPageLayout;\r
+\r
+\r
+\r
+import eu.etaxonomy.taxeditor.editor.view.uses.UsesViewPart;\r
+import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;\r
+import eu.etaxonomy.taxeditor.view.userecords.UseRecordsViewPart;\r
+\r
+/**\r
+ * @author a.theys\r
+ *\r
+ */\r
+public class PalmUses extends Default {\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)\r
+        */\r
+       @Override\r
+       public void createInitialLayout(IPageLayout layout) {\r
+               layout.addView(TaxonNavigator.ID, IPageLayout.LEFT, 0.25f, layout.getEditorArea());\r
+               layout.addView(UseRecordsViewPart.ID, IPageLayout.RIGHT, 0.25f, layout.getEditorArea());\r
+               layout.addView(UsesViewPart.ID, IPageLayout.BOTTOM, 0.25f, layout.getEditorArea());\r
+               \r
+               // layout.addView(SupplementalDataViewPart.ID, IPageLayout.BOTTOM, 0.25f, DetailsViewPart.ID);\r
+               \r
+               createAdditionalFolder(layout, layout.getEditorArea());\r
+       }\r
+       \r
+\r
+}\r
+\r
index 6b053d5451713236225db7dd0ec31b3366334700..f98f7248ba10f02443b4d5e7d9241aef4a974f8f 100644 (file)
        <classpathentry exported="true" kind="lib" path="lib/xom-1.0.jar"/>\r
        <classpathentry exported="true" kind="lib" path="lib/xsltc.jar"/>\r
        <classpathentry exported="true" kind="lib" path="lib/xstream-1.3.1.jar" sourcepath="lib/xstream-1.3.1src.zip"/>\r
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-commons-3.0.9-SNAPSHOT.jar"/>\r
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-ext-3.0.9-SNAPSHOT.jar"/>\r
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-io-3.0.9-SNAPSHOT.jar"/>\r
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-model-3.0.9-SNAPSHOT.jar" sourcepath="C:/Users/l.morris/.m2/repository/eu/etaxonomy/cdmlib-model/3.0.9-SNAPSHOT/cdmlib-model-3.0.9-SNAPSHOT-sources.jar"/>\r
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-persistence-3.0.9-SNAPSHOT.jar" sourcepath="C:/Users/l.morris/.m2/repository/eu/etaxonomy/cdmlib-persistence/3.0.9-SNAPSHOT/cdmlib-persistence-3.0.9-SNAPSHOT-sources.jar"/>\r
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-print-3.0.9-SNAPSHOT.jar"/>\r
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-remote-3.0.9-SNAPSHOT.jar"/>\r
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-services-3.0.9-SNAPSHOT.jar" sourcepath="/cdmlib-services"/>\r
        <classpathentry exported="true" kind="lib" path="lib/hibernate-envers-3.4.0-SNAPSHOT.jar" sourcepath="lib/hibernate-envers-3.4.0-SNAPSHOTsrc.zip"/>\r
        <classpathentry kind="output" path="target/classes"/>\r
 </classpath>\r
index 5a9e71d0a087e32b550b04770d683c21e54b5262..a41310e2dcebd41b0706ad5d19e64cb12d39843c 100644 (file)
@@ -12,7 +12,8 @@ Export-Package: eu.etaxonomy.taxeditor.editor,
  eu.etaxonomy.taxeditor.editor.name,
  eu.etaxonomy.taxeditor.editor.name.handler,
  eu.etaxonomy.taxeditor.editor.view.descriptive,
- eu.etaxonomy.taxeditor.editor.view.media
+ eu.etaxonomy.taxeditor.editor.view.media,
+ eu.etaxonomy.taxeditor.editor.view.uses
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.core.expressions,
index 99bef4cf7d14692d4be97fafc7c4ec8273780c2b..da554007b7acbe9c8bfe164661aa3a4f524af6bd 100644 (file)
                id="eu.etaxonomy.taxeditor.editor.view.descriptive"
                name="Descriptive"
                restorable="true">
+         </view>
+          <view
+               allowMultiple="false"
+               class="eu.etaxonomy.taxeditor.editor.view.uses.UsesViewPart"
+               icon="icons/leaf.png"
+               id="eu.etaxonomy.taxeditor.editor.view.uses"
+               name="Uses"
+               restorable="true">
          </view>
          <view
                allowMultiple="false"
                style="push">
          </command>
       </menuContribution>
+      
+      
+      
+      
+      <menuContribution
+            locationURI="popup:eu.etaxonomy.taxeditor.editor.view.uses">
+         <command
+               commandId="eu.etaxonomy.taxeditor.use.commands.adduse"
+               label="New Use"
+               style="push">
+         </command>
+         <separator
+               name="eu.etaxonomy.taxeditor.usesEditor.separator3"
+               visible="true">
+         </separator>
+         <menu
+               label="New">
+            <dynamic
+                  class="eu.etaxonomy.taxeditor.editor.view.uses.handler.DynamicFeatureMenu"
+                  id="eu.etaxonomy.taxeditor.uses.dynamicFeatureMenu">
+            </dynamic>
+            <visibleWhen
+                  checkEnabled="true">
+               <or>
+                  <reference
+                        definitionId="isDescription">
+                  </reference>
+                  <reference
+                        definitionId="isDescriptionElement">
+                  </reference>
+                  <reference
+                        definitionId="isFeatureNodeContainer">
+                  </reference>
+               </or>
+            </visibleWhen>
+         </menu>
+         <separator
+               name="taxeditor-editor.separator1"
+               visible="true">
+         </separator>
+         <separator
+               name="eu.etaxonomy.taxeditor.taxonDescriptionEditor.separator.afterNew"
+               visible="true">
+         </separator>
+         <command
+               commandId="org.eclipse.ui.edit.delete"
+               label="Delete"
+               style="push">
+         </command>
+         <separator
+               name="eu.etaxonomy.taxeditor.taxonDescriptionEditor.separator.afterDelete"
+               visible="true">
+         </separator>
+         <command
+               commandId="org.eclipse.ui.file.save"
+               label="Save"
+               style="push">
+         </command>
+      </menuContribution>
+      
+      
+      
+      
+      
       <menuContribution
             locationURI="popup:eu.etaxonomy.taxeditor.editor.view.media">
          <command
             </with>
          </activeWhen>
       </handler>
+      <handler
+            class="eu.etaxonomy.taxeditor.editor.view.uses.handler.DeleteUseHandler"
+            commandId="org.eclipse.ui.edit.delete">
+         <activeWhen>
+            <with
+                  variable="activePartId">
+               <equals
+                     value="eu.etaxonomy.taxeditor.editor.view.uses">
+               </equals>
+            </with>
+         </activeWhen>
+      </handler>
    </extension>
    <extension
          name="Name Commands"
             id="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
             name="Move Description Elements">
       </command>
+      <category
+            id="eu.etaxonomy.taxeditor.editor.view.uses.command.category"
+            name="-- New Uses">
+      </category>
+      <command
+            categoryId="eu.etaxonomy.taxeditor.editor.view.uses.command.category"
+            defaultHandler="eu.etaxonomy.taxeditor.editor.view.uses.handler.CreateUseHandler"
+            id="eu.etaxonomy.taxeditor.use.commands.adduse"
+            name="New Use">
+      </command>
       <category
             id="eu.etaxonomy.taxeditor.editor.media.category"
             name="-- Media">
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesContentProvider.java
new file mode 100644 (file)
index 0000000..307f026
--- /dev/null
@@ -0,0 +1,192 @@
+package eu.etaxonomy.taxeditor.editor.view.uses;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+import java.util.UUID;\r
+\r
+import org.eclipse.jface.viewers.ITreeContentProvider;\r
+import org.eclipse.jface.viewers.Viewer;\r
+\r
+import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
+import eu.etaxonomy.cdm.model.common.Marker;\r
+import eu.etaxonomy.cdm.model.common.MarkerType;\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
+import eu.etaxonomy.cdm.model.description.FeatureTree;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;\r
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;\r
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.store.TermStore;\r
+\r
+public class UsesContentProvider implements ITreeContentProvider {\r
+\r
+       private static final Object[] NO_CHILDREN = new Object[0];\r
+       private Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache;\r
+       Set<MarkerType> markerTypes = new HashSet<MarkerType>();\r
+               \r
+       /**\r
+        * <p>Constructor for DescriptiveContentProvider.</p>\r
+        *\r
+        * @param featureNodeContainerCache a {@link java.util.Map} object.\r
+        */\r
+       public UsesContentProvider(Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache) {\r
+               //MarkerType markerType = (MarkerType)this.definedTermDao.findByUuid(UUID.fromString("b4b1b2ab-89a8-4ce6-8110-d60b8b1bc433")); //Marker "complete"\r
+               //this.markerTypes.addAll(CdmStore.getTermManager().getPreferredMarkerTypes());\r
+               this.featureNodeContainerCache = featureNodeContainerCache;\r
+       }\r
+       \r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)\r
+        */\r
+       /** {@inheritDoc} */\r
+       public Object[] getChildren(Object parentElement) {\r
+               if (parentElement instanceof TaxonEditorInput) {\r
+                       return getDescriptions((TaxonEditorInput) parentElement).toArray(); \r
+               }\r
+               else if (parentElement instanceof TaxonDescription) {\r
+                       if ( ! ((TaxonDescription) parentElement).isImageGallery()) {\r
+                               TaxonDescription description = (TaxonDescription) parentElement;\r
+                               \r
+                               FeatureNodeContainerTree containerTree = getContainerTreeForDesription(description);\r
+                               \r
+                               return containerTree.getRoot().getChildren().toArray();\r
+                       }\r
+               }\r
+               else if (parentElement instanceof FeatureNodeContainer){\r
+                       FeatureNodeContainer container = (FeatureNodeContainer) parentElement;\r
+                       if(container.isLeaf()){\r
+                               return container.getDescriptionElements().toArray();\r
+                       }else{\r
+                               return container.getChildren().toArray();\r
+                       }\r
+               }\r
+               \r
+               return NO_CHILDREN;\r
+       }\r
+       \r
+       private FeatureNodeContainerTree getContainerTreeForDesription(TaxonDescription description){\r
+               if(! featureNodeContainerCache.containsKey(description)){\r
+                       FeatureNodeContainerTree containerTree = new FeatureNodeContainerTree(description, getFeatureTree(description));\r
+                       featureNodeContainerCache.put(description, containerTree);\r
+               }\r
+               return featureNodeContainerCache.get(description);\r
+       }\r
+\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public boolean hasChildren(Object element) {\r
+               if (element instanceof TaxonDescription){\r
+                       TaxonDescription description = (TaxonDescription) element;\r
+                       FeatureNodeContainerTree containerTree = featureNodeContainerCache.get(description);\r
+                       if(containerTree != null && containerTree.getRoot() != null){\r
+                               return containerTree.getRoot().getChildren().size() != 0;\r
+                       }\r
+               } \r
+               return getChildren(element).length != 0;\r
+       }\r
+       \r
+       /**\r
+        * Retrieves the feature tree associated with the given description\r
+        * \r
+        * TODO as of now this is always the same thing because feature trees may not be associated \r
+        * to descriptions yet.\r
+        * \r
+        * @param description\r
+        * @return\r
+        */\r
+       private FeatureTree getFeatureTree(DescriptionBase description){\r
+               FeatureTree featureTree = null;\r
+               \r
+               // TODO change this to the feature tree associated with this taxon description\r
+               if (description.hasStructuredData()){                                   \r
+                       featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription();\r
+               }else{\r
+                       featureTree = PreferencesUtil.getDefaultFeatureTreeForTextualDescription();\r
+               }\r
+               \r
+               // create a transient tree with all features if none was selected\r
+               if(featureTree == null){\r
+                       featureTree = FeatureTree.NewInstance(TermStore.getFeatures());\r
+               }\r
+               \r
+               return featureTree;\r
+       }\r
+\r
+       /**\r
+        * Get all descriptions associated with the given TaxonEditorInput\r
+        * \r
+        * @param parentElement\r
+        * @return\r
+        */\r
+       //CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(input.getTaxonNode().getTaxon(), null, null, null, null, null, null)\r
+       private List<DescriptionBase> getDescriptions(TaxonEditorInput parentElement) {\r
+               this.markerTypes.addAll(CdmStore.getTermManager().getPreferredMarkerTypes());\r
+               Taxon taxon = parentElement.getTaxon();\r
+               Set<MarkerType> typesToDisdplay = new HashSet<MarkerType>();\r
+               List<DescriptionBase> descriptions = new ArrayList<DescriptionBase>();\r
+               List<TaxonDescription> usesDescriptions = new ArrayList<TaxonDescription>();\r
+               \r
+               /*for (MarkerType markerType : markerTypes) {\r
+                       if (markerType.toString().equals("complete")) {\r
+                               typesToDisdplay.add(markerType);\r
+                       }\r
+               }*/\r
+               //usesDescriptions = CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(taxon, null, null, typesToDisdplay, null, null, null);\r
+               //for(DescriptionBase description : CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(taxon, null, null, typesToDisdplay, null, null, null)){\r
+               for(DescriptionBase description : taxon.getDescriptions()){\r
+                       if(! description.isImageGallery()){\r
+                               Set<Marker> descriptionMarkers = description.getMarkers();\r
+                               if(descriptionMarkers != null) {\r
+                                       for (Marker marker: descriptionMarkers) {\r
+                                               if(marker.getMarkerType().getTitleCache().equals("use")) {\r
+                                                       descriptions.add(description);\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               }                       \r
+               return descriptions;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)\r
+        */\r
+       /** {@inheritDoc} */\r
+       public Object getParent(Object element) {\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)\r
+        */\r
+       /** {@inheritDoc} */\r
+       public Object[] getElements(Object inputElement) {\r
+               return getChildren(inputElement);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.viewers.IContentProvider#dispose()\r
+        */\r
+       /**\r
+        * <p>dispose</p>\r
+        */\r
+       public void dispose() {\r
+               featureNodeContainerCache.clear();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)\r
+        */\r
+       /** {@inheritDoc} */\r
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}    \r
+\r
+}\r
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesLabelProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesLabelProvider.java
new file mode 100644 (file)
index 0000000..ba88dd4
--- /dev/null
@@ -0,0 +1,39 @@
+\r
+package eu.etaxonomy.taxeditor.editor.view.uses;\r
+\r
+import org.eclipse.jface.viewers.ColumnLabelProvider;\r
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;\r
+import org.eclipse.jface.viewers.StyledString;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+public class UsesLabelProvider extends ColumnLabelProvider implements IStyledLabelProvider  {\r
+\r
+       public String getText(Object element) {\r
+               /*return DescriptionHelper.getLabel(element);\r
+               \r
+               for (Marker marker : element.getMarkers()) {\r
+                       if (marker.getMarkerType().getTitleCache().equals("use")) {\r
+                               return "Use: " + text;\r
+                       }\r
+               }*/\r
+               String text = ((DescriptionBase)element).getTitleCache();\r
+               if (text == null || text.length() == 0) {\r
+                       text = "No label provided";\r
+               }\r
+               \r
+               return "Use: " + text;\r
+       }               \r
+       \r
+       @Override\r
+       public StyledString getStyledText(Object element) {\r
+               return new StyledString(this.getText(element), StyledString.QUALIFIER_STYLER);\r
+       }\r
+\r
+}\r
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesViewPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesViewPart.java
new file mode 100644 (file)
index 0000000..cfe3bb9
--- /dev/null
@@ -0,0 +1,254 @@
+package eu.etaxonomy.taxeditor.editor.view.uses;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.action.GroupMarker;\r
+import org.eclipse.jface.action.IToolBarManager;\r
+import org.eclipse.jface.action.MenuManager;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.jface.viewers.TreeViewer;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.dnd.DND;\r
+import org.eclipse.swt.dnd.Transfer;\r
+import org.eclipse.swt.graphics.ImageData;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Menu;\r
+import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.IWorkbenchActionConstants;\r
+import org.eclipse.ui.IWorkbenchPart;\r
+\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
+import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;\r
+import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementDragListener;\r
+import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementDropAdapter;\r
+import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementTransfer;\r
+import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewerSorter;\r
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;\r
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;\r
+import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;\r
+import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;\r
+import eu.etaxonomy.taxeditor.model.ImageResources;\r
+import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;\r
+\r
+\r
+\r
+public class UsesViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {\r
+       \r
+       public static final String ID = "eu.etaxonomy.taxeditor.editor.view.uses";\r
+       private TreeViewer viewer;\r
+       private Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache = new HashMap<TaxonDescription, FeatureNodeContainerTree>();\r
+       private ToggleDescriptionAction showAllElementsAction;\r
+       private ToggleDescriptionAction hideAllElementsAction;\r
+\r
+       private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;\r
+       \r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public void createViewer(Composite parent) {\r
+               \r
+               viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL\r
+                               | SWT.V_SCROLL | SWT.FULL_SELECTION));\r
+                               \r
+               viewer.setContentProvider(new UsesContentProvider(featureNodeContainerCache));          \r
+               \r
+               //viewer.setInput(descService.listTaxonDescriptions(Taxon, null, null, null, null, null, null));\r
+               \r
+               viewer.setLabelProvider(new UsesLabelProvider());\r
+               \r
+               //viewer.setSorter(new DescriptiveViewerSorter());\r
+               \r
+               viewer.setAutoExpandLevel(2);\r
+               \r
+               \r
+               \r
+               Transfer[] transfers = new Transfer[] { DescriptionElementTransfer.getInstance() };\r
+               /*viewer.addDragSupport(dndOperations, transfers, new DescriptionElementDragListener(\r
+                               this));\r
+               viewer.addDropSupport(dndOperations, transfers,\r
+                               new DescriptionElementDropAdapter(viewer));*/\r
+                                               \r
+               // Propagate selection from viewer\r
+               getSite().setSelectionProvider(viewer);\r
+               \r
+               showAllElementsAction = new ToggleDescriptionAction(false);             \r
+               hideAllElementsAction = new ToggleDescriptionAction(true);\r
+               \r
+               // Add context menu to tree\r
+               createMenu();\r
+               \r
+               createToolbar();\r
+               \r
+               // set initial input\r
+//             if(getEditor() != null){\r
+//                     viewer.setInput(getEditor().getEditorInput());\r
+//             }\r
+       }\r
+       \r
+       private void createToolbar() {\r
+               IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();\r
+               toolBarManager.add(showAllElementsAction);\r
+               toolBarManager.add(hideAllElementsAction);\r
+       }\r
+       \r
+       private void createMenu(){\r
+               MenuManager menuManager = new MenuManager();\r
+               menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));\r
+               \r
+               getSite().registerContextMenu(menuManager, viewer);\r
+\r
+               // FIXME for some reason this is not working\r
+               menuManager.add(showAllElementsAction);\r
+               menuManager.add(hideAllElementsAction);\r
+                               \r
+               Control control = viewer.getControl();\r
+               Menu menu = menuManager.createContextMenu(control);\r
+               \r
+               control.setMenu(menu);  \r
+       }\r
+       \r
+       public void changed(Object object) {\r
+               for(FeatureNodeContainerTree containerTree : featureNodeContainerCache.values()){\r
+                       containerTree.buildTree();\r
+               }\r
+               viewer.refresh();\r
+               \r
+               /*if(object instanceof DescriptionElementBase){\r
+                       DescriptionElementBase descriptionElement = (DescriptionElementBase) object;\r
+                       DescriptionBase description = descriptionElement.getInDescription();\r
+                       FeatureNodeContainerTree containerTree = featureNodeContainerCache.get(description);\r
+                       \r
+                       FeatureNodeContainer featureNodeContainer = containerTree.getFeatureNodeContainerForDescriptionElement(descriptionElement);\r
+                       viewer.expandToLevel(featureNodeContainer, 1);\r
+                       \r
+               }*/\r
+\r
+               if(object != null){\r
+                       StructuredSelection selection = new StructuredSelection(object);\r
+                       viewer.setSelection(selection, true);\r
+               }\r
+\r
+               super.changed(object);\r
+       }\r
+       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()\r
+        */\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       protected ISelection getInitialSelection() {\r
+               if(getEditor() != null){\r
+                       return new StructuredSelection(getEditor().getEditorInput());\r
+               }       \r
+               \r
+               return super.getInitialSelection();\r
+       }\r
+       \r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public boolean postOperation(CdmBase objectAffectedByOperation) {\r
+               return super.postOperation(objectAffectedByOperation);\r
+       }\r
+       \r
+       @Override\r
+       public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
+               if(EditorUtil.getActiveEditor() == null){\r
+                       showEmptyPage();\r
+                       return;\r
+               }\r
+               \r
+               if(part instanceof BulkEditor){\r
+                       showEmptyPage();\r
+                       return;\r
+               }\r
+               \r
+               if(part instanceof AbstractGraphKeyEditor){\r
+                       showEmptyPage();\r
+                       return;\r
+               }\r
+               \r
+               if(part instanceof MultiPageTaxonEditor){\r
+                       if(! part.equals(this.part)){\r
+                               TaxonEditorInput input = (TaxonEditorInput)((IEditorPart) part).getEditorInput();\r
+                               featureNodeContainerCache.clear();\r
+                               //showViewer(part, new StructuredSelection(CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(input.getTaxonNode().getTaxon(), null, null, null, null, null, null)));\r
+                               showViewer(part, new StructuredSelection(input));\r
+                       }\r
+                       showViewer();\r
+               }\r
+               \r
+       }\r
+\r
+       @Override\r
+       public boolean onComplete() {\r
+               return false;\r
+       }\r
+\r
+       /*@Override\r
+       public void showViewer(IWorkbenchPart part, IStructuredSelection selection) {\r
+               this.part = part;               \r
+       \r
+               Object element = selection.getFirstElement();\r
+               \r
+               getViewer().setInput(descService.listTaxonDescriptions((Taxon) element, null, null, null, null, null, null));\r
+               \r
+               showViewer();   \r
+       }*/\r
+       \r
+       @Override\r
+       public Viewer getViewer() {\r
+               return viewer;\r
+       }\r
+       \r
+       private class ToggleDescriptionAction extends Action{\r
+               private boolean expanded;\r
+               \r
+               public ToggleDescriptionAction(boolean expand){\r
+                       super(null, Action.AS_PUSH_BUTTON);\r
+                       expanded = expand;\r
+                       setImageAndTooltip();\r
+               }\r
+               \r
+               private void setImageAndTooltip(){\r
+                       setImageDescriptor(new ImageDescriptor() {\r
+                               @Override\r
+                               public ImageData getImageData() {\r
+                                       setText(expanded ? "Collapse All" : "Expand All");\r
+                                       String resource = expanded ? ImageResources.COLLAPSE_ALL : ImageResources.EXPAND_ALL;\r
+                                       return ImageResources.getImage(resource).getImageData();\r
+                               }\r
+                       });\r
+                       \r
+                       String toolTipText = expanded ? "Collapse all" : "Show all descriptive data";\r
+                       setToolTipText(toolTipText);\r
+               }\r
+               \r
+               @Override\r
+               public void run() {\r
+                       if(expanded){\r
+                               viewer.collapseAll();\r
+                       }else{\r
+                               viewer.expandAll();\r
+                       }\r
+                       setImageAndTooltip();\r
+               }\r
+       }\r
+\r
+       \r
+\r
+}\r
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/CreateUseHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/CreateUseHandler.java
new file mode 100644 (file)
index 0000000..e9a71d5
--- /dev/null
@@ -0,0 +1,49 @@
+package eu.etaxonomy.taxeditor.editor.view.uses.handler;\r
+\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.IWorkbenchPart;\r
+import org.eclipse.ui.forms.editor.FormEditor;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.editor.view.uses.operation.CreateTaxonUseOperation;\r
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
+\r
+public class CreateUseHandler extends AbstractHandler {\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
+        */\r
+       /** {@inheritDoc} */\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+               IWorkbenchPart part = HandlerUtil.getActivePart(event);\r
+               IPostOperationEnabled postOperationEnabled = (part instanceof IPostOperationEnabled) ? (IPostOperationEnabled) part : null;\r
+               \r
+               \r
+               IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
+               if (editor instanceof FormEditor) {\r
+                       editor = ((FormEditor) editor).getActiveEditor();\r
+               }\r
+               IEditorInput input = editor.getEditorInput();\r
+               if (input instanceof TaxonEditorInput) {\r
+                       Taxon taxon = ((TaxonEditorInput) input).getTaxon();    \r
+                       AbstractPostOperation operation;\r
+                       try {\r
+                               // TODO use undo context specific to editor\r
+                               operation = new CreateTaxonUseOperation(event.getCommand().getName(), \r
+                                               EditorUtil.getUndoContext(), taxon, postOperationEnabled);\r
+                               EditorUtil.executeOperation(operation);\r
+                       } catch (NotDefinedException e) {\r
+                               EditorUtil.warn(getClass(), "Command name not set.");\r
+                       }\r
+               } \r
+               return null;\r
+       }\r
+}\r
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/DynamicFeatureMenu.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/DynamicFeatureMenu.java
new file mode 100644 (file)
index 0000000..a12fd2e
--- /dev/null
@@ -0,0 +1,144 @@
+package eu.etaxonomy.taxeditor.editor.view.uses.handler;\r
+\r
+//$Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+import org.eclipse.jface.action.ContributionItem;\r
+import org.eclipse.jface.action.IContributionItem;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Menu;\r
+import org.eclipse.swt.widgets.MenuItem;\r
+import org.eclipse.ui.ISelectionService;\r
+import org.eclipse.ui.actions.CompoundContributionItem;\r
+import org.eclipse.ui.handlers.IHandlerService;\r
+\r
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.FeatureNode;\r
+import eu.etaxonomy.cdm.model.description.FeatureTree;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.CreateDescriptionElementOperation;\r
+import eu.etaxonomy.taxeditor.editor.view.uses.UsesViewPart;\r
+import eu.etaxonomy.taxeditor.editor.view.uses.operation.CreateTaxonUseOperation;\r
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;\r
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
+\r
+/**\r
+ * <p>DynamicFeatureMenu class.</p>\r
+ *\r
+ * @author n.hoffmann\r
+ * @created 17.04.2009\r
+ * @version 1.0\r
+ */\r
+public class DynamicFeatureMenu extends CompoundContributionItem {\r
+       \r
+       private ISelectionService selectionService = EditorUtil.getActivePart().getSite().getWorkbenchWindow().getSelectionService();\r
+       private IHandlerService handlerService = (IHandlerService) EditorUtil.getService(IHandlerService.class);\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()\r
+        */\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       protected IContributionItem[] getContributionItems() {\r
+               \r
+               return new IContributionItem[] {\r
+                               new ContributionItem() {\r
+                                       public void fill(Menu menu, int index){\r
+                                                               \r
+                                               ISelection selection = selectionService.getSelection(UsesViewPart.ID);\r
+                                               \r
+                                               if(selection instanceof IStructuredSelection){\r
+                                                       IStructuredSelection structuredSelection = (IStructuredSelection) selection;\r
+                                                       Object selectedElement = structuredSelection.getFirstElement();\r
+                                                       \r
+                                                       if(selectedElement instanceof TaxonDescription){\r
+                                                               FeatureTree featureTree = getFeatureTree((TaxonDescription) selectedElement);\r
+                                                               \r
+                                                               for(FeatureNode childNode : featureTree.getRootChildren()){\r
+                                                                       createMenuItem(menu, childNode.getFeature());\r
+                                                               }\r
+                                                       }\r
+                                                       else if(selectedElement instanceof FeatureNodeContainer){\r
+                                                               FeatureNode featureNode = ((FeatureNodeContainer) selectedElement).getFeatureNode();\r
+                                                               \r
+                                                               // add the feature to the menu\r
+                                                               createMenuItem(menu, featureNode.getFeature());\r
+                                                               \r
+                                                               // add possible children to the menu\r
+                                                               for(FeatureNode childNode : featureNode.getChildren()){\r
+                                                                       createMenuItem(menu, childNode.getFeature());\r
+                                                               }\r
+                                                       }\r
+                                                       else if(selectedElement instanceof DescriptionElementBase){\r
+                                                               Feature feature = ((DescriptionElementBase) selectedElement).getFeature();\r
+                                                               createMenuItem(menu, feature);\r
+                                                       }\r
+                                               }       \r
+                                       }\r
+                               }\r
+               };\r
+       }       \r
+       \r
+       private void createMenuItem(Menu menu, final Feature feature) {\r
+               MenuItem menuItem = new MenuItem(menu, -1);\r
+               final Feature deproxiedFeature = (Feature) HibernateProxyHelper.deproxy(feature);\r
+               menuItem.setText(deproxiedFeature.getLabel());\r
+               menuItem.addSelectionListener(new SelectionListener(){\r
+\r
+                       public void widgetDefaultSelected(SelectionEvent e) {}\r
+\r
+                       public void widgetSelected(SelectionEvent ev) {\r
+                               Event event = new Event();\r
+                               event.data = deproxiedFeature;\r
+                               try {\r
+                                       //handlerService.executeCommand(CreateTaxonUseOperation.ID, event);\r
+                               } catch (Exception e) {\r
+                                       EditorUtil.error(getClass(), e);\r
+                               }\r
+                       }                               \r
+               });\r
+       }\r
+       \r
+       /**\r
+        * Retrieves the feature tree associated with the given description\r
+        * \r
+        * TODO as of now this is always the same thing because feature trees may not be associated \r
+        * to descriptions yet.\r
+        * \r
+        * @param description\r
+        * @return\r
+        */\r
+       private FeatureTree getFeatureTree(DescriptionBase description){\r
+               FeatureTree featureTree = null;\r
+               \r
+               // TODO change this to the feature tree associated with this taxon description\r
+               if (description.hasStructuredData()){                                   \r
+                       featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription();\r
+               }else{\r
+                       featureTree = PreferencesUtil.getDefaultFeatureTreeForTextualDescription();\r
+               }\r
+               \r
+               if(featureTree == null){\r
+                       featureTree = FeatureTree.NewInstance(CdmStore.getTermManager().getPreferredFeatures());\r
+               }\r
+               \r
+               return featureTree;\r
+       }\r
+}\r
+\r
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateTaxonUseOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateTaxonUseOperation.java
new file mode 100644 (file)
index 0000000..d7e47cf
--- /dev/null
@@ -0,0 +1,113 @@
+package eu.etaxonomy.taxeditor.editor.view.uses.operation;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+\r
+import eu.etaxonomy.cdm.model.common.Marker;\r
+import eu.etaxonomy.cdm.model.common.MarkerType;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.media.Media;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
+\r
+public class CreateTaxonUseOperation extends AbstractPostOperation {\r
+       private TaxonDescription description;\r
+       private boolean isImageGallery;\r
+       private Set<MarkerType> markerTypes = new HashSet<MarkerType>();\r
+       private Marker marker;\r
+\r
+       /**\r
+        * <p>Constructor for CreateTaxonDescriptionOperation.</p>\r
+        *\r
+        * @param label a {@link java.lang.String} object.\r
+        * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.\r
+        * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.\r
+        * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.\r
+        */\r
+       public CreateTaxonUseOperation(String label, IUndoContext undoContext,\r
+                       Taxon taxon, IPostOperationEnabled postOperationEnabled) {\r
+               this(label, undoContext, taxon, postOperationEnabled, false);\r
+       }\r
+\r
+       /**\r
+        * <p>Constructor for CreateTaxonDescriptionOperation.</p>\r
+        *\r
+        * @param label a {@link java.lang.String} object.\r
+        * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.\r
+        * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.\r
+        * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.\r
+        * @param isImageGallery a boolean.\r
+        */\r
+       public CreateTaxonUseOperation(String label, IUndoContext undoContext,\r
+                       Taxon taxon, IPostOperationEnabled postOperationEnabled, boolean isImageGallery) {\r
+               super(label, undoContext, taxon, postOperationEnabled);\r
+               this.isImageGallery  = isImageGallery;\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               description = TaxonDescription.NewInstance(taxon);\r
+               monitor.worked(20);\r
+               this.markerTypes.addAll(CdmStore.getTermManager().getPreferredMarkerTypes());\r
+               Set<MarkerType> typesToDisdplay = new HashSet<MarkerType>();\r
+               for (MarkerType markerType : markerTypes) {\r
+                       if (markerType.getTitleCache().equals("use")) {\r
+                               marker = Marker.NewInstance(markerType, true);\r
+                               description.addMarker(marker);\r
+                       }\r
+               }\r
+               if(isImageGallery){\r
+                       description.setImageGallery(isImageGallery);\r
+                       // add the description element to hold the media elements for this image gallery\r
+                       TextData element = TextData.NewInstance(Feature.IMAGE());\r
+                       element.addMedia(Media.NewInstance());\r
+                       description.addElement(element);\r
+               }\r
+               monitor.worked(40);\r
+\r
+               return postExecute(description);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               taxon.addDescription(description);\r
+               \r
+               return postExecute(description);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+\r
+               taxon.removeDescription(description);\r
+               \r
+               return postExecute(null);\r
+       }\r
+}\r
+\r
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/DeleteTaxonUseOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/DeleteTaxonUseOperation.java
new file mode 100644 (file)
index 0000000..66a5073
--- /dev/null
@@ -0,0 +1,70 @@
+package eu.etaxonomy.taxeditor.editor.view.uses.operation;\r
+\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
+\r
+public class DeleteTaxonUseOperation extends AbstractPostOperation {\r
+               \r
+               private TaxonDescription description;\r
+\r
+               /**\r
+                * <p>Constructor for DeleteTaxonDescriptionOperation.</p>\r
+                *\r
+                * @param label a {@link java.lang.String} object.\r
+                * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.\r
+                * @param description a {@link eu.etaxonomy.cdm.model.description.TaxonDescription} object.\r
+                * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.\r
+                */\r
+               public DeleteTaxonUseOperation(String label, IUndoContext undoContext,\r
+                               TaxonDescription description, IPostOperationEnabled postOperationEnabled) {\r
+                       super(label, undoContext, postOperationEnabled);\r
+                       \r
+                       this.description = description;\r
+                       taxon = description.getTaxon();\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+                */\r
+               /** {@inheritDoc} */\r
+               @Override\r
+               public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                               throws ExecutionException {\r
+\r
+                       monitor.worked(20);\r
+                       taxon.removeDescription(description);\r
+                       monitor.worked(40);\r
+\r
+                       return postExecute(description);\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+                */\r
+               /** {@inheritDoc} */\r
+               @Override\r
+               public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                               throws ExecutionException {\r
+                       return execute(monitor, info);\r
+               }\r
+\r
+               /* (non-Javadoc)\r
+                * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+                */\r
+               /** {@inheritDoc} */\r
+               @Override\r
+               public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                               throws ExecutionException {\r
+\r
+                       taxon.addDescription(description);\r
+                       \r
+                       return postExecute(null);\r
+               }\r
+}\r
index 149ddba5fa20611edb3f9bfaa96a9b3a453b280a..f81f8742802337fd66d79363f64f714e063252f8 100644 (file)
@@ -46,7 +46,8 @@ Export-Package: eu.etaxonomy.cdm,
  eu.etaxonomy.taxeditor.view.datasource,
  eu.etaxonomy.taxeditor.view.datasource.handler,
  eu.etaxonomy.taxeditor.view.detail,
- eu.etaxonomy.taxeditor.view.supplementaldata
+ eu.etaxonomy.taxeditor.view.supplementaldata,
+ eu.etaxonomy.taxeditor.view.userecords
 Require-Bundle: org.eclipse.osgi,
  org.eclipse.ui,
  org.eclipse.jface.text,
diff --git a/eu.etaxonomy.taxeditor.store/icons/leaf_detail.png b/eu.etaxonomy.taxeditor.store/icons/leaf_detail.png
new file mode 100644 (file)
index 0000000..217c601
Binary files /dev/null and b/eu.etaxonomy.taxeditor.store/icons/leaf_detail.png differ
index 33e09770c35a59bf7b92bb813d5a657fb71110f3..5e8dbe3a6469f1443d41c36e9da49f8432fcec9f 100644 (file)
         id="eu.etaxonomy.taxeditor.view.detail"
         name="Details"
         restorable="true">
+  </view>
+  <view
+        class="eu.etaxonomy.taxeditor.view.userecords.UseRecordsViewPart"
+        icon="icons/leaf_detail.png"
+        id="eu.etaxonomy.taxeditor.view.userecords"
+        name="Use Records"
+        restorable="true">
   </view>
    </extension>
    <extension
index 835ca848861e3ca54cf337cd585e213e8608ccf4..7b53cb8364a35792a04dac7f55b2dc9df8330049 100644 (file)
@@ -56,6 +56,7 @@ import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 import eu.etaxonomy.taxeditor.view.AbstractCdmDataViewer;
 import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
 import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
+import eu.etaxonomy.taxeditor.view.userecords.UseRecordsViewPart;
 
 /**
  * <p>
@@ -909,4 +910,30 @@ public abstract class AbstractUtility {
                                        .reflow();
                }
        }
+       
+       public static UseRecordsViewPart getUseRecordsView() {
+               return (UseRecordsViewPart) getView(UseRecordsViewPart.ID, false);
+       }
+
+       /**
+        * <p>
+        * refreshUseRecordsViewer
+        * </p>
+        */
+       public static void refreshUseRecordsViewer() {
+               if (getUseRecordsView() != null) {
+                       ((AbstractCdmDataViewer) getUseRecordsView().getViewer()).refresh();
+               }
+       }
+
+       /**
+        * <p>
+        * reflowUseRecordsViewer
+        * </p>
+        */
+       public static void reflowUseRecordsViewer() {
+               if (getUseRecordsView() != null) {
+                       ((AbstractCdmDataViewer) getUseRecordsView().getViewer()).reflow();
+               }
+       }
 }
index 467acc68ab268218e6d620a4d43adfe3b71d7ca8..bada117220dbfd9975e381ca66da82d828ecf4d5 100644 (file)
@@ -381,6 +381,7 @@ public class DescriptionHelper {
                if (text == null || text.length() == 0) {
                        text = "No label provided";
                }
+               
                return "Description: " + text;
        }
        
index a4b948615669e059bc9a282fb8e07903d592d4a6..c1f46e81db39ecfa98e04ee3f42d20c39399cb2b 100644 (file)
@@ -51,7 +51,7 @@ public class DescriptionDetailElement extends AbstractCdmDetailElement<Descripti
                detailDescription = formFactory.createMultilineTextWithLabel(this, "Label", 50, SWT.WRAP);
                detailDescription.setText(entity.getTitleCache());
                
-//             selection_featureTree = (FeatureTreeSelectionElement) formFactory.createSelectionElement(SelectionType.FEATURE_TREE, getConversationHolder(), formElement, "Feature Tree", null, style);
+               selection_featureTree = (FeatureTreeSelectionElement) formFactory.createSelectionElement(SelectionType.FEATURE_TREE, getConversationHolder(), formElement, "Feature Tree", null, style, 1);
        }
        
        /** {@inheritDoc} */
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewPart.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewPart.java
new file mode 100644 (file)
index 0000000..c87beb8
--- /dev/null
@@ -0,0 +1,98 @@
+package eu.etaxonomy.taxeditor.view.userecords;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.IWorkbenchPart;\r
+\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;\r
+import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;\r
+import eu.etaxonomy.taxeditor.store.StoreUtil;\r
+import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;\r
+import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart;\r
+\r
+\r
+       public class UseRecordsViewPart extends AbstractCdmEditorViewPart implements IPartContentHasSupplementalData{\r
+               \r
+               public static String ID = "eu.etaxonomy.taxeditor.view.userecords";\r
+               private UseRecordsViewer viewer;\r
+               \r
+               @Override\r
+               public void createViewer(Composite parent) {\r
+                       //selectionService.addPostSelectionListener(this);\r
+                       \r
+                       viewer = new UseRecordsViewer(parent, this);\r
+                       getSite().setSelectionProvider(viewer);\r
+                       \r
+               }\r
+               \r
+               @Override\r
+               public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
+                       if(StoreUtil.getActiveEditor() == null){\r
+                               showEmptyPage();\r
+                               return;\r
+                       }\r
+                       \r
+                       if(part == this){\r
+                               return;\r
+                       }\r
+                       \r
+                       if(!(selection instanceof IStructuredSelection)){\r
+                               return;\r
+                       }\r
+                       \r
+                       IStructuredSelection structuredSelection = (IStructuredSelection) selection;\r
+                       \r
+                       if((part instanceof IEditorPart) || (part instanceof AbstractCdmViewPart)) {\r
+                               if(structuredSelection.size() != 1){\r
+                                       showEmptyPage();\r
+                                       return;\r
+                               }\r
+                               \r
+                               // do not show details for feature nodes TODO really? \r
+                               if(structuredSelection.getFirstElement() instanceof FeatureNodeContainer){\r
+                                       // do show the map for distributions\r
+                                       Feature feature = ((FeatureNodeContainer) ((IStructuredSelection) selection).getFirstElement()).getFeature();\r
+                                       if(!feature.equals(Feature.DISTRIBUTION())){\r
+                                               showEmptyPage();\r
+                                               return;\r
+                                       }\r
+                               }\r
+                               \r
+                               showViewer(part, structuredSelection);\r
+                       }else{\r
+                               showEmptyPage();                \r
+                       }       \r
+                       \r
+               }\r
+               \r
+               @Override\r
+               public Viewer getViewer() {\r
+                       return viewer;\r
+               }\r
+\r
+               /** {@inheritDoc} */\r
+               @Override\r
+               public void dispose() {\r
+                       super.dispose();\r
+                       selectionService.removePostSelectionListener(this);\r
+               }\r
+\r
+               /**\r
+                * <p>onComplete</p>\r
+                *\r
+                * @return a boolean.\r
+                */\r
+               public boolean onComplete() {\r
+                       return true;\r
+               }\r
+\r
+               \r
+\r
+               \r
+\r
+       \r
+       }\r
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewer.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewer.java
new file mode 100644 (file)
index 0000000..495fff8
--- /dev/null
@@ -0,0 +1,266 @@
+package eu.etaxonomy.taxeditor.view.userecords;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.taxeditor.ui.forms.RootElement;\r
+import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.DetailType;\r
+import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.EntityDetailType;\r
+import eu.etaxonomy.taxeditor.ui.section.description.DescribedSpecimenSection;\r
+import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailSection;\r
+import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailSection;\r
+import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementMediaSection;\r
+import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementSourceSection;\r
+import eu.etaxonomy.taxeditor.ui.section.description.DescriptionSourceSection;\r
+import eu.etaxonomy.taxeditor.ui.section.description.NaturalLanguageSection;\r
+import eu.etaxonomy.taxeditor.ui.section.description.ScopeSection;\r
+import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailSection;\r
+import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;\r
+import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;\r
+import eu.etaxonomy.taxeditor.ui.section.name.ProtologueSection;\r
+import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;\r
+import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;\r
+import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;\r
+import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;\r
+import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailSection;\r
+import eu.etaxonomy.taxeditor.view.AbstractCdmDataViewer;\r
+import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart;\r
+\r
+\r
+\r
+\r
+\r
+public class UseRecordsViewer extends AbstractCdmDataViewer {\r
+       private enum VIEW_PART {\r
+               TAXON,\r
+               ECO_REGION,\r
+               COUNTRY,\r
+               PLANT_PART,\r
+               USE_CATEGORY,\r
+               USE_SUBCATEGORY,\r
+               ETHNIC_GROUP,\r
+               HUMAN_GROUP,\r
+               DESCRIPTION, \r
+               DESCRIPTION_ELEMENT,\r
+               REFEERENCE, \r
+               TEAM, \r
+               PERSON, \r
+               TEAM_OR_PERSON_BASE,\r
+               EMPTY,\r
+               IMAGE_GALLERY\r
+       }\r
+\r
+       private VIEW_PART currentViewPart;\r
+\r
+       private ISelection selection;\r
+       \r
+       public UseRecordsViewer(Composite parent, AbstractCdmViewPart viewPart) {\r
+               super(parent, viewPart);\r
+       }\r
+       @Override\r
+       protected void showParts() {\r
+               if (getInput() instanceof TaxonBase) {\r
+                       if (currentViewPart != VIEW_PART.TAXON) {\r
+                               createTaxonSections(rootElement);\r
+                               currentViewPart = VIEW_PART.TAXON;\r
+                       }\r
+               } else if (getInput() instanceof Reference) {\r
+                       if (currentViewPart != VIEW_PART.REFEERENCE) {\r
+                               createReferenceSections(rootElement);\r
+                               currentViewPart = VIEW_PART.REFEERENCE;\r
+                       }\r
+               } else if (getInput() instanceof DescriptionBase) {\r
+                       if (((DescriptionBase) getInput()).isImageGallery()) {\r
+                               if (currentViewPart != VIEW_PART.IMAGE_GALLERY) {\r
+                                       createImageGallerySection(rootElement);\r
+                                       currentViewPart = VIEW_PART.IMAGE_GALLERY;\r
+                               }\r
+                       } else {\r
+                               if (currentViewPart != VIEW_PART.DESCRIPTION) {\r
+                                       createDescriptionSection(rootElement);\r
+                                       currentViewPart = VIEW_PART.DESCRIPTION;\r
+                               }\r
+                       }\r
+               } else if (getInput() instanceof DescriptionElementBase) {\r
+                       if (currentViewPart != VIEW_PART.DESCRIPTION_ELEMENT) {\r
+                               createDescriptionElementSection(rootElement);\r
+                               currentViewPart = VIEW_PART.DESCRIPTION_ELEMENT;\r
+                       }\r
+               } else {\r
+                       destroySections();\r
+                       currentViewPart = VIEW_PART.EMPTY;\r
+               }\r
+               layout();\r
+               \r
+       }\r
+       private void createTaxonSections(RootElement parent) {\r
+               destroySections();\r
+\r
+               TaxonBaseDetailSection taxonBaseDetailSection = (TaxonBaseDetailSection) formFactory\r
+                               .createCdmDetailSection(DetailType.TAXONBASE,\r
+                                               getConversationHolder(), parent, this, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               NonViralNameDetailSection nonViralNameSection = (NonViralNameDetailSection) formFactory\r
+                               .createCdmDetailSection(DetailType.NONVIRALNAME,\r
+                                               getConversationHolder(), parent, this, Section.TWISTIE\r
+                                                               | Section.EXPANDED);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               NomenclaturalReferenceDetailSection referenceDetailSection = (NomenclaturalReferenceDetailSection) formFactory\r
+                               .createCdmDetailSection(DetailType.NOMENCLATURALREFERENCE,\r
+                                               getConversationHolder(), parent, this, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               NomenclaturalStatusSection nomenclaturalStatusSection = (NomenclaturalStatusSection) formFactory\r
+                               .createEntityDetailSection(\r
+                                               EntityDetailType.NOMENCLATURALSTATUS,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               ProtologueSection protologSection = (ProtologueSection) formFactory\r
+                               .createEntityDetailSection(EntityDetailType.PROTOLOG,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               TypeDesignationSection typeDesignationSection = (TypeDesignationSection) formFactory\r
+                               .createEntityDetailSection(EntityDetailType.TYPEDESIGNATION,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               NameRelationshipDetailSection nameRelationshipSection = (NameRelationshipDetailSection) formFactory\r
+                               .createEntityDetailSection(EntityDetailType.NAME_RELATIONSHIP,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               ParsingMessagesSection parsingMessagesSection = (ParsingMessagesSection) formFactory\r
+                               .createCdmDetailSection(DetailType.PARSINGMESSAGE,\r
+                                               getConversationHolder(), parent, this, Section.EXPANDED);\r
+\r
+               addPart(taxonBaseDetailSection);\r
+               addPart(nonViralNameSection);\r
+               addPart(nomenclaturalStatusSection);\r
+               addPart(protologSection);\r
+               addPart(referenceDetailSection);\r
+               addPart(typeDesignationSection);\r
+               addPart(nameRelationshipSection);\r
+               addPart(parsingMessagesSection);\r
+       }\r
+       private void createDescriptionElementSection(RootElement parent) {\r
+               destroySections();\r
+\r
+               DescriptionElementDetailSection descriptionElementDetailSection = (DescriptionElementDetailSection) formFactory\r
+                               .createCdmDetailSection(DetailType.DESCRIPTIONELEMENT,\r
+                                               getConversationHolder(), parent, this, Section.TWISTIE\r
+                                                               | Section.EXPANDED);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               DescriptionElementSourceSection descriptionElementSourceSection = (DescriptionElementSourceSection) formFactory\r
+                               .createEntityDetailSection(\r
+                                               EntityDetailType.DESCRIPTIONELEMENTSOURCE,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               DescriptionElementMediaSection descriptionElementMediaSection = (DescriptionElementMediaSection) formFactory\r
+                               .createEntityDetailSection(\r
+                                               EntityDetailType.DESCRIPTIONELEMENTMEDIA,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               addPart(descriptionElementDetailSection);\r
+               addPart(descriptionElementSourceSection);\r
+               addPart(descriptionElementMediaSection);\r
+       }\r
+       \r
+       private void createDescriptionSection(RootElement parent) {\r
+               destroySections();\r
+               DescriptionDetailSection descriptionDetailSection = (DescriptionDetailSection) formFactory\r
+                               .createCdmDetailSection(DetailType.DESCRIPTION,\r
+                                               getConversationHolder(), parent, this, Section.TWISTIE\r
+                                                               | Section.EXPANDED);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               NaturalLanguageSection naturalLanguageSection = (NaturalLanguageSection) formFactory\r
+                               .createCdmDetailSection(DetailType.NATURAL_LANGUAGE,\r
+                                               getConversationHolder(), parent, this, Section.TWISTIE\r
+                                                               | Section.EXPANDED);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               DescribedSpecimenSection describedSpecimenSection = (DescribedSpecimenSection) formFactory\r
+                               .createEntityDetailSection(EntityDetailType.DESCRIBED_SPECIMEN,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               DescriptionSourceSection descriptionSourceSection = (DescriptionSourceSection) formFactory\r
+                               .createEntityDetailSection(EntityDetailType.DESCRIPTIONSOURCE,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               ScopeSection scopeSection = (ScopeSection) formFactory\r
+                               .createEntityDetailSection(EntityDetailType.SCOPE,\r
+                                               getConversationHolder(), parent, Section.TWISTIE);\r
+\r
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);\r
+\r
+               addPart(descriptionDetailSection);\r
+               addPart(naturalLanguageSection);\r
+               addPart(describedSpecimenSection);\r
+               addPart(descriptionSourceSection);\r
+               addPart(scopeSection);\r
+       }\r
+       \r
+       private void createImageGallerySection(RootElement parent) {\r
+               destroySections();\r
+               DescriptionDetailSection descriptionDetailSection = (DescriptionDetailSection) formFactory\r
+                               .createCdmDetailSection(DetailType.DESCRIPTION,\r
+                                               getConversationHolder(), parent, this, Section.TWISTIE\r
+                                                               | Section.EXPANDED);\r
+\r
+               addPart(descriptionDetailSection);\r
+       }\r
+       \r
+       private void createReferenceSections(RootElement parent) {\r
+               destroySections();\r
+\r
+               ReferenceDetailSection referenceDetailSection = (ReferenceDetailSection) formFactory\r
+                               .createCdmDetailSection(DetailType.REFERENCEBASE,\r
+                                               getConversationHolder(), parent, this, Section.TWISTIE\r
+                                                               | Section.EXPANDED);\r
+\r
+               addPart(referenceDetailSection);\r
+               \r
+       }\r
+       @Override\r
+       public ISelection getSelection() {\r
+               return selection;\r
+       }\r
+       @Override\r
+       public void setSelection(ISelection selection, boolean reveal) {\r
+               this.selection = selection;\r
+               SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(\r
+                               this, selection);\r
+               fireSelectionChanged(selectionChangedEvent);\r
+       }\r
+\r
+}\r