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
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
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
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
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
--- /dev/null
+/**\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
<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
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,
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">
--- /dev/null
+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
--- /dev/null
+\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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
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,
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
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>
.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();
+ }
+ }
}
if (text == null || text.length() == 0) {
text = "No label provided";
}
+
return "Description: " + text;
}
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} */
--- /dev/null
+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
--- /dev/null
+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