Refactored description editor per #577
authorp.ciardelli <p.ciardelli@localhost>
Thu, 5 Feb 2009 18:25:27 +0000 (18:25 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Thu, 5 Feb 2009 18:25:27 +0000 (18:25 +0000)
23 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/AddDescriptionElementCompositeAction.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/DeleteElementCompositeAction.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/EditorController.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorGroupComposite.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupCompositeLabel.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionElementComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionFeatureGroupComposite.java [moved from eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/FeatureGroupComposite.java with 51% similarity]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionGroupComposite.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionLabelComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/IDescriptionEditorCompositeRepository.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditor.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditorView.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/INameEditorCompositeRepository.java [moved from eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/INameEditorCompositeRepository.java with 92% similarity]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/AddElementOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/RemoveElementOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/RemoveSynonymOperation.java

index a3d364565c468b4fa6b3b3c22e2082a27007b496..b686d3cda2fc02442482f08822251d66e609983e 100644 (file)
@@ -438,8 +438,6 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Ope
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenNameRelationsListWizardAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenNewTaxonEditorAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenTaxonEditorAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/AddDescriptionElementCompositeAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/DeleteElementCompositeAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/EditorController.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/GlobalController.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/PropertySheetController.java -text
@@ -454,7 +452,6 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/Abstrac
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/CompositeBorderDecorator.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/ContextMenu.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorDetailsPage.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorGroupComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyEditorView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/ErrorAnnotation.java -text
@@ -465,7 +462,6 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/Grouped
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFavoritesDraggable.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IHasPropertySource.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/INameEditorCompositeRepository.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IParentDataAdapter.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/LineBreakListener.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/LineWrapSquigglesStrategy.java -text
@@ -480,15 +476,18 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/UndoVie
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/ViewerConfiguration.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/WarningAnnotation.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionElementComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionFeatureGroupComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionGroupComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionLabelComposite.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/FeatureGroupComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/IDescriptionEditorCompositeRepository.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionComposite.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditorView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/AcceptedNameComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/CdmParserController.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/ConceptComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/ConceptGroupComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/HomotypicalGroupComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/INameEditorCompositeRepository.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/IterableSynonymyList.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedGroupComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedNameComposite.java -text
@@ -520,6 +519,8 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/Abs
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/ChangeTaxonToSynonymOperation.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/DeleteTaxonOperation.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/AddElementOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/RemoveElementOperation.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeConceptRelationOperation.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeHomotypicGroupOperation.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeMisappliedNameToSynonymOperation.java -text
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/AddDescriptionElementCompositeAction.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/AddDescriptionElementCompositeAction.java
deleted file mode 100644 (file)
index a6d3fd1..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/**\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
-package eu.etaxonomy.taxeditor.actions.ui.description;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-\r
-import eu.etaxonomy.cdm.model.common.Language;\r
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\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.description.TextFormat;\r
-import eu.etaxonomy.taxeditor.controller.GlobalController;\r
-import eu.etaxonomy.taxeditor.editor.description.DescriptionElementComposite;\r
-import eu.etaxonomy.taxeditor.editor.description.FeatureGroupComposite;\r
-\r
-/**\r
- * Checks whether the <code>TaxonDescriptionComposite</code> contains a\r
- * a <code>FeatureGroupComposite</code> for the <code>Feature</code>; creates a\r
- * new <code>FeatureGroupComposite</code> if necessary. Then adds a new \r
- * <code>DescriptionElementComposite</code> to the <code>FeatureGroupComposite</code>.\r
- * \r
- * @author p.ciardelli\r
- * @created 04.06.2008\r
- * @version 1.0\r
- */\r
-public class AddDescriptionElementCompositeAction extends Action {\r
-       private static final Logger logger = Logger\r
-                       .getLogger(AddDescriptionElementCompositeAction.class);\r
-\r
-       private String text;\r
-       private ImageDescriptor image = null;\r
-\r
-       private IUndoableOperation operation;\r
-\r
-       private TaxonDescription taxonDescription;\r
-       private Composite taxonDescriptionComposite;\r
-       private IManagedForm managedForm;\r
-       private Feature feature;\r
-\r
-       /**\r
-        * descriptionElement and descriptionElementComposite are created when\r
-        * the action is executed, and disposed as part of any undo.\r
-        */\r
-       private DescriptionElementBase descriptionElement;\r
-       private DescriptionElementComposite descriptionElementComposite;\r
-       \r
-       private AddDescriptionElementCompositeAction(String text) {\r
-               super(text);\r
-               this.text = text;\r
-               if (image != null) {\r
-                       setImageDescriptor(image);\r
-               }\r
-       }\r
-\r
-       public AddDescriptionElementCompositeAction(Composite taxonDescriptionComposite,\r
-                       IManagedForm managedForm, Feature feature) {\r
-               \r
-               // The feature's label will be shown in the menu entry \r
-               this(feature.getLabel());\r
-\r
-               // Make sure TaxonDescriptionComposite has a TaxonDescription in its data field\r
-               if (taxonDescriptionComposite.getData() instanceof TaxonDescription) {\r
-                       this.taxonDescription = (TaxonDescription) taxonDescriptionComposite.getData();\r
-               } else {\r
-                       throw new IllegalArgumentException(\r
-                                       "This action requires a composite with a TaxonDescription in its data field.");\r
-               }\r
-\r
-               this.taxonDescriptionComposite = taxonDescriptionComposite;\r
-               this.managedForm = managedForm;\r
-               this.feature = feature;\r
-               \r
-               operation = new AddDescriptionElementOperation();\r
-               \r
-       }\r
-\r
-       public void run() {\r
-               IOperationHistory operationHistory = GlobalController.getOperationHistory();\r
-               IUndoContext undoContext = GlobalController.getWorkbenchUndoContext();\r
-               operation.addContext(undoContext);\r
-               try {\r
-                       operationHistory.execute(operation, null, null);\r
-                       operationHistory.add(operation);\r
-               } catch (ExecutionException e) {\r
-                       e.printStackTrace();\r
-               }\r
-       }\r
-\r
-       class AddDescriptionElementOperation extends AbstractOperation {\r
-\r
-               public AddDescriptionElementOperation() {\r
-                       super("'" + text + "'");\r
-               }\r
-\r
-               @Override\r
-               public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
-                               throws ExecutionException {\r
-                                               \r
-                       // Look for a FeatureGroupComposite containing the current Feature\r
-                       FeatureGroupComposite featureGroupComposite = null;\r
-                       for (Control child : taxonDescriptionComposite.getChildren()) {\r
-                               if (child instanceof FeatureGroupComposite && child.getData() != null\r
-                                               && child.getData().equals(feature)) {\r
-                                       featureGroupComposite = (FeatureGroupComposite) child;\r
-                                       break;\r
-                               }\r
-                       }\r
-                       \r
-                       // Otherwise, create a new FeatureGroupComposite\r
-                       if (featureGroupComposite == null) {\r
-                               featureGroupComposite = new FeatureGroupComposite(taxonDescriptionComposite, \r
-                                               managedForm, feature);\r
-                       }\r
-                       \r
-                       // Create new element, set it as the data for a new element composite\r
-                       descriptionElement = TextData.NewInstance("", Language.DEFAULT(), null);\r
-                       descriptionElement.setFeature(feature);\r
-                       taxonDescription.addElement(descriptionElement);\r
-                       descriptionElementComposite = new DescriptionElementComposite(\r
-                                       featureGroupComposite, managedForm, descriptionElement);\r
-                       \r
-                       return Status.OK_STATUS;\r
-               }\r
-\r
-               @Override\r
-               public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
-                               throws ExecutionException {\r
-                       // TODO Auto-generated method stub\r
-                       return Status.OK_STATUS;\r
-               }\r
-\r
-               @Override\r
-               public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
-                               throws ExecutionException {\r
-                       // TODO Auto-generated method stub\r
-                       return Status.OK_STATUS;\r
-               }\r
-       }\r
-}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/DeleteElementCompositeAction.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/DeleteElementCompositeAction.java
deleted file mode 100644 (file)
index f6f0be0..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/**\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
-package eu.etaxonomy.taxeditor.actions.ui.description;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.swt.widgets.Composite;\r
-\r
-import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.controller.GlobalController;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 04.06.2008\r
- * @version 1.0\r
- */\r
-public class DeleteElementCompositeAction extends Action {\r
-       private static final Logger logger = Logger\r
-                       .getLogger(DeleteElementCompositeAction.class);\r
-\r
-       private static String text = "Delete description element";\r
-       private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
-                       .getImageDescriptor(ITaxEditorConstants.ACTIVE_DELETE_ICON);\r
-\r
-       private IUndoableOperation operation;\r
-       private DescriptionElementBase descriptionElement;\r
-       private Taxon taxon;\r
-\r
-       private Composite elementComposite;\r
-       private Composite featureComposite;\r
-       private Composite descriptionComposite;\r
-       private DescriptionBase description;\r
-\r
-       private DeleteElementCompositeAction() {\r
-               super(text);\r
-               setImageDescriptor(image);\r
-       }\r
-\r
-       public DeleteElementCompositeAction(Composite elementComposite, \r
-                       Taxon taxon) {\r
-               this();\r
-\r
-               this.elementComposite = elementComposite;\r
-               \r
-               if (elementComposite.getData() instanceof DescriptionElementBase) {\r
-                       this.descriptionElement = (DescriptionElementBase) elementComposite.getData();\r
-               } else {\r
-                       throw new IllegalArgumentException(\r
-                                       "This action requires an elementComposite with a DescriptionElementBase in its data field.");\r
-               }\r
-               this.taxon = taxon;\r
-               \r
-               featureComposite = elementComposite.getParent();\r
-               descriptionComposite = featureComposite.getParent();\r
-               if (descriptionComposite.getData() instanceof DescriptionBase) {\r
-                       this.description = (DescriptionBase) descriptionComposite.getData();\r
-               } else {\r
-                       throw new IllegalArgumentException(\r
-                                       "This action requires that the element composite's \"grandparent\" has a Description in its data field.");\r
-               }\r
-               operation = new DeleteElementOperation();\r
-       }\r
-\r
-       public void run() {\r
-               IOperationHistory operationHistory = GlobalController.getOperationHistory();\r
-               IUndoContext undoContext = GlobalController.getWorkbenchUndoContext();\r
-               operation.addContext(undoContext);\r
-               try {\r
-                       operationHistory.execute(operation, null, null);\r
-                       operationHistory.add(operation);\r
-               } catch (ExecutionException e) {\r
-                       e.printStackTrace();\r
-               }\r
-       }\r
-\r
-       class DeleteElementOperation extends AbstractOperation {\r
-\r
-               public DeleteElementOperation() {\r
-                       super("'" + text + "'");\r
-               }\r
-\r
-               @Override\r
-               public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
-                               throws ExecutionException {\r
-                       \r
-                       // Delete element from description\r
-                       description.removeElement(descriptionElement);\r
-                       \r
-                       // Dipose element composite\r
-                       elementComposite.dispose();\r
-                       \r
-                       return Status.OK_STATUS;\r
-               }\r
-\r
-               @Override\r
-               public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
-                               throws ExecutionException {\r
-                       // TODO Auto-generated method stub\r
-                       return Status.OK_STATUS;\r
-               }\r
-\r
-               @Override\r
-               public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
-                               throws ExecutionException {\r
-                       // TODO Auto-generated method stub\r
-                       return Status.OK_STATUS;\r
-               }\r
-       }\r
-}\r
index 67b57a3752e55a1078a25b8126741fb1d5345460..03193e4705e38689647d364f3da72b8a836f5563 100644 (file)
@@ -28,7 +28,9 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.taxeditor.datasource.CdmTransactionController;\r
+import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.description.TaxonDescriptionEditor;\r
 import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
@@ -44,9 +46,8 @@ import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;
 public class EditorController {\r
        private static final Logger logger = Logger.getLogger(EditorController.class);\r
 \r
-\r
        private static Map<Taxon, TaxonNameEditor> taxonNameEditors;\r
-\r
+       private static Map<Taxon, TaxonDescriptionEditor> taxonDescriptionEditors;\r
 \r
        private static boolean isSaving = false;\r
        \r
@@ -184,18 +185,32 @@ public class EditorController {
         */\r
        public static boolean redraw(Taxon taxon){\r
                \r
-               TaxonNameEditor editor = EditorController.getEditor(taxon);\r
+               // TODO handle this in AbstractEditorOperation?\r
                \r
+               return redraw(EditorController.getNameEditor(taxon)) &&\r
+                               redraw(EditorController.getDescriptionEditor(taxon));\r
+//             TaxonNameEditor editor = EditorController.getNameEditor(taxon);\r
+//             \r
+//             if(editor == null || editor.redraw()){\r
+//                     \r
+//                     // Mark editor as changed and unsaved\r
+//                     editor.setDirty();\r
+//                     \r
+//                     return true;    \r
+//             }       \r
+//             return false;\r
+       }\r
+\r
+       private static boolean redraw(AbstractTaxonEditor editor) {     \r
                if(editor == null || editor.redraw()){\r
                        \r
                        // Mark editor as changed and unsaved\r
-                       editor.setDirty();\r
-                       \r
+                       editor.setDirty();      \r
                        return true;    \r
                }       \r
-               return false;\r
+               return false;           \r
        }\r
-\r
+       \r
        /**\r
         * @param taxon\r
         * @param save\r
@@ -281,7 +296,7 @@ public class EditorController {
                return isSaving;\r
        }\r
 \r
-       public static void addEditor(\r
+       public static void addNameEditor(\r
                        Taxon taxon, TaxonNameEditor taxonNameEditor) {\r
                if (taxonNameEditors == null) {\r
                        taxonNameEditors = new HashMap<Taxon, TaxonNameEditor>();\r
@@ -289,13 +304,28 @@ public class EditorController {
                taxonNameEditors.put(taxon, taxonNameEditor);\r
        }\r
 \r
-       public static TaxonNameEditor getEditor(Taxon taxon) {\r
+       public static TaxonNameEditor getNameEditor(Taxon taxon) {\r
                if (taxonNameEditors == null) {\r
                        return null;\r
                }\r
                return taxonNameEditors.get(taxon);\r
        }\r
 \r
+       public static void addDescriptionEditor(\r
+                       Taxon taxon, TaxonDescriptionEditor taxonDescriptionEditor) {\r
+               if (taxonDescriptionEditors == null) {\r
+                       taxonDescriptionEditors = new HashMap<Taxon, TaxonDescriptionEditor>();\r
+               }\r
+               taxonDescriptionEditors.put(taxon, taxonDescriptionEditor);\r
+       }\r
+\r
+       public static TaxonDescriptionEditor getDescriptionEditor(Taxon taxon) {\r
+               if (taxonDescriptionEditors == null) {\r
+                       return null;\r
+               }\r
+               return taxonDescriptionEditors.get(taxon);\r
+       }\r
+       \r
        /**\r
         * Returns a set of all currently open \r
         * <code>MultiPageTaxonEditor</code>s.\r
index b42a79a0cc1f0b943534aae766cd62ad4220e2af..65c8f860ee0c17250cbef9111b19175b36fd81e9 100644 (file)
@@ -321,4 +321,11 @@ public abstract class AbstractTaxonEditor extends EditorPart implements
        public void setDirty() {\r
                managedForm.dirtyStateChanged();\r
        }\r
+\r
+       public boolean redraw() {\r
+               this.selectedObject = null;             \r
+               managedForm.getForm().dispose();                \r
+               createManagedForm(partComposite);\r
+               return true;\r
+       }\r
 }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorGroupComposite.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorGroupComposite.java
deleted file mode 100644 (file)
index 92a117d..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/**\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
-package eu.etaxonomy.taxeditor.editor;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/** \r
- * Formats <code>GroupComposite</code> with cosmetic and layout properties specific to the\r
- * Editor. This should be used to maintain a consistent look and feel for all Editor \r
- * freetext area group components, such as <code>HomotypicalGroup</code>.\r
- * <p>\r
- * Its <code>IManagedForm</code> is required to have a <code>Taxon</code> in its \r
- * own <code>getData()</code>.\r
- * </p> \r
- * \r
- * @author p.ciardelli\r
- * @created 02.06.2008\r
- * @version 1.0\r
- */\r
-public class EditorGroupComposite extends GroupComposite {\r
-       private static final Logger logger = Logger.getLogger(EditorGroupComposite.class);\r
-       \r
-       private IManagedForm managedForm;\r
-       private Taxon taxon;\r
-\r
-       private CompositeBorderDecorator borderSupport;\r
-       \r
-       public EditorGroupComposite(Composite parent, IManagedForm managedForm, Object data) {\r
-               this(parent, managedForm);\r
-               \r
-               setData(data);\r
-       }\r
-\r
-       public EditorGroupComposite(Composite parent, IManagedForm managedForm) {\r
-               super(parent);\r
-\r
-               this.managedForm = managedForm;\r
-               \r
-               Object formData = managedForm.getForm().getBody().getData();\r
-               Assert.isTrue(formData instanceof Taxon, \r
-                               "Managed form must have a Taxon in its data field.");\r
-               taxon = (Taxon) formData;\r
-               \r
-               createBorderSupport();\r
-       }\r
-\r
-       private void createBorderSupport() {\r
-               borderSupport = new CompositeBorderDecorator(this, managedForm);\r
-               addFocusListener(borderSupport);\r
-       }\r
-       \r
-       public IManagedForm getManagedForm() {\r
-               return managedForm;\r
-       }\r
-       \r
-       public Taxon getTaxon() {\r
-               return taxon;\r
-       }\r
-       \r
-       public void dispose() {\r
-               \r
-               removeFocusListener(borderSupport);\r
-               \r
-               super.dispose();\r
-       }\r
-}
\ No newline at end of file
index a9ca3cd9ce9197d4f0d073e61cfd366bbb6653cd..a56efd23c20028a853f5e31d39e0fd830a88a297 100644 (file)
@@ -17,11 +17,18 @@ import org.eclipse.core.runtime.Assert;
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.ui.forms.IManagedForm;\r
 \r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
 import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionElementComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionFeatureGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.description.DescriptionLabelComposite;\r
 import eu.etaxonomy.taxeditor.editor.name.AcceptedNameComposite;\r
 import eu.etaxonomy.taxeditor.editor.name.ConceptComposite;\r
 import eu.etaxonomy.taxeditor.editor.name.ConceptGroupComposite;\r
@@ -42,12 +49,7 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
        private static IFreeTextElementFactory factory;\r
        \r
        private Map<Taxon, IManagedForm> nameForms;\r
-       \r
-\r
-       /**\r
-        * Returns a taxon's composite which holds all misapplied names.\r
-        */\r
-       private Map<Taxon, Composite> misappliedComposites;\r
+       private Map<Taxon, IManagedForm> descriptionForms;\r
        \r
        public static IFreeTextElementFactory getDefault() {\r
                if (factory == null) {\r
@@ -60,7 +62,7 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
                \r
                // Put the taxon's form in the form map\r
                Assert.isNotNull(form, "A non-null IManagedForm must be provided.");\r
-               getTaxonForms().put(taxon, form);\r
+               getTaxonNameForms().put(taxon, form);\r
                \r
                // Create a homotypic group composite for the accepted taxon\r
                HomotypicalGroup group = taxon.getHomotypicGroup();\r
@@ -70,7 +72,6 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
                // Create a name composite for the accepted taxon\r
                Composite acceptedNameComposite =\r
                                new AcceptedNameComposite(groupComposite, form, taxon);\r
-               \r
        \r
                // Return the name composite\r
                return acceptedNameComposite;\r
@@ -79,7 +80,7 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
        public Composite createSynonym(Taxon taxon, Synonym synonym) {\r
                \r
                // Get the taxon's form\r
-               IManagedForm form = getForm(taxon);\r
+               IManagedForm form = getNameForm(taxon);\r
                Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");\r
                \r
                // Get the synonym's homotypic group\r
@@ -88,7 +89,7 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
                \r
                // If the group doesn't yet have a composite, create one and add it to the repository\r
                Composite groupComposite = \r
-                               EditorController.getEditor(taxon).getHomotypicGroup(group);\r
+                               EditorController.getNameEditor(taxon).getHomotypicGroup(group);\r
                if (groupComposite == null) {\r
                        groupComposite = createHomotypicalGroup(taxon, group);\r
                }\r
@@ -104,13 +105,13 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
        public Composite createMisappliedName(Taxon taxon, Taxon misappliedName) {\r
 \r
                // Get the taxon's form\r
-               IManagedForm form = getForm(taxon);\r
+               IManagedForm form = getNameForm(taxon);\r
                Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");\r
                                \r
                // If there is no composite for misapplied names, \r
                //      create one and add it to the repository\r
                Composite groupComposite = \r
-                               EditorController.getEditor(taxon).getMisappliedGroup();\r
+                               EditorController.getNameEditor(taxon).getMisappliedGroup();\r
                if (groupComposite == null) {\r
                        groupComposite = createMisappliedGroup(taxon);\r
                }\r
@@ -126,7 +127,8 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
        public Composite createMisappliedGroup(Taxon taxon) {\r
                \r
                // Get the taxon's form\r
-               IManagedForm form = getForm(taxon);\r
+               IManagedForm form = getNameForm(taxon);\r
+               Assert.isNotNull(form, "No IManagedForm has been provided for the misapplied group's accepted taxon.");\r
 \r
                // Create the group composite\r
                Composite groupComposite = new MisappliedGroupComposite(getTopLevelComposite(form), taxon);\r
@@ -134,7 +136,7 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
                \r
                // Put the group composite before concept group composite, if any\r
                Composite conceptGroupComposite = \r
-                       EditorController.getEditor(taxon).getConceptGroup();\r
+                       EditorController.getNameEditor(taxon).getConceptGroup();\r
                if (conceptGroupComposite != null) {\r
                        groupComposite.moveAbove(conceptGroupComposite);\r
                }\r
@@ -145,7 +147,8 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
        public Composite createHomotypicalGroup(Taxon taxon, HomotypicalGroup group) {\r
 \r
                // Get the taxon's form\r
-               IManagedForm form = getForm(taxon);\r
+               IManagedForm form = getNameForm(taxon);\r
+               Assert.isNotNull(form, "No IManagedForm has been provided for the homotypical group's accepted taxon.");\r
 \r
                // Create the group composite\r
                Composite groupComposite = new HomotypicalGroupComposite(getTopLevelComposite(form), taxon, group);\r
@@ -154,15 +157,15 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
                return groupComposite;\r
        }\r
 \r
-       private Map<Taxon, IManagedForm> getTaxonForms() {\r
+       private Map<Taxon, IManagedForm> getTaxonNameForms() {\r
                if (nameForms == null) {\r
                        nameForms = new HashMap<Taxon, IManagedForm>();\r
                }\r
                return nameForms;\r
        }\r
        \r
-       private IManagedForm getForm(Taxon taxon) {\r
-               return getTaxonForms().get(taxon);\r
+       private IManagedForm getNameForm(Taxon taxon) {\r
+               return getTaxonNameForms().get(taxon);\r
        }\r
                \r
        private Composite getTopLevelComposite(IManagedForm form) {\r
@@ -172,13 +175,13 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
        @Override\r
        public Composite createConcept(Taxon taxon, TaxonRelationship relationship) {\r
                // Get the taxon's form\r
-               IManagedForm form = getForm(taxon);\r
+               IManagedForm form = getNameForm(taxon);\r
                Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");\r
                                \r
                // If there is no composite for misapplied names, \r
                //      create one and add it to the repository\r
                Composite groupComposite = \r
-                               EditorController.getEditor(taxon).getConceptGroup();\r
+                               EditorController.getNameEditor(taxon).getConceptGroup();\r
                if (groupComposite == null) {\r
                        groupComposite = createConceptGroup(taxon);\r
                }\r
@@ -194,7 +197,8 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
        public Composite createConceptGroup(Taxon taxon) {\r
                \r
                // Get the taxon's form\r
-               IManagedForm form = getForm(taxon);\r
+               IManagedForm form = getNameForm(taxon);\r
+               Assert.isNotNull(form, "No IManagedForm has been provided for the concept group's accepted taxon.");\r
 \r
                // Create the group composite\r
                Composite groupComposite = new ConceptGroupComposite(getTopLevelComposite(form), taxon);\r
@@ -202,7 +206,7 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
                \r
                // Put the group composite after misapplied group composite, if any\r
                Composite misappliedGroupComposite = \r
-                       EditorController.getEditor(taxon).getMisappliedGroup();\r
+                       EditorController.getNameEditor(taxon).getMisappliedGroup();\r
                if (misappliedGroupComposite != null) {\r
                        groupComposite.moveBelow(misappliedGroupComposite);\r
                }\r
@@ -210,4 +214,99 @@ public class FreeTextElementFactory implements IFreeTextElementFactory {
                return groupComposite;\r
 \r
        }\r
+\r
+       @Override\r
+       public Composite createDescriptionLabel(IManagedForm form, Taxon taxon,\r
+                       TaxonDescription description) {\r
+               \r
+               // Put the taxon's form in the form map if no other description has done so\r
+               Assert.isNotNull(form, "A non-null IManagedForm must be provided.");\r
+               getTaxonDescriptionForms().put(taxon, form);\r
+               \r
+               // Create a group composite for the description\r
+               Composite groupComposite = createDescriptionGroup(taxon, description);\r
+                               \r
+               // Create label composite\r
+               Composite labelComposite =\r
+                               new DescriptionLabelComposite(groupComposite, form, description);\r
+       \r
+               // Return the label composite\r
+               return labelComposite;\r
+       }\r
+\r
+       @Override\r
+       public Composite createDescriptionElement(Taxon taxon, TaxonDescription description,\r
+                       DescriptionElementBase element) {\r
+               \r
+               // Get the taxon's form\r
+               IManagedForm form = getDescriptionForm(taxon);\r
+               Assert.isNotNull(form, "No IManagedForm has been provided for the element's taxon.");\r
+\r
+               // Get the element's feature\r
+               Feature feature = element.getFeature();\r
+               Assert.isNotNull(feature, "Element does not have a feature.");\r
+                                                       \r
+               // If the feature doesn't yet have a composite, create one and add it to the repository\r
+               Composite groupComposite = EditorController.getDescriptionEditor(taxon)\r
+                                                                               .getDescriptionFeatureGroup(description, feature);\r
+               if (groupComposite == null) {\r
+                       groupComposite = createDescriptionFeatureGroup(taxon, description, feature);\r
+               }\r
+                               \r
+               // Create an element composite in the feature group\r
+               Composite elementComposite = \r
+                               new DescriptionElementComposite(groupComposite, form, element);\r
+                               \r
+               return elementComposite;\r
+       }\r
+\r
+       @Override\r
+       public Composite createDescriptionGroup(Taxon taxon,\r
+                       TaxonDescription description) {\r
+               \r
+               // Get the taxon's form\r
+               IManagedForm form = getDescriptionForm(taxon);\r
+               Assert.isNotNull(form, "No IManagedForm has been provided for the description's taxon.");\r
+\r
+               // Create the group composite\r
+               GroupComposite groupComposite = new DescriptionGroupComposite(getTopLevelComposite(form), taxon, description);\r
+               groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, form));\r
+               groupComposite.setDroppable(false);\r
+                               \r
+               return groupComposite;\r
+       }\r
+               \r
+       @Override\r
+       public Composite createDescriptionFeatureGroup(Taxon taxon,\r
+                       TaxonDescription description, Feature feature) {\r
+\r
+               // Get the taxon's form\r
+               IManagedForm form = getDescriptionForm(taxon);\r
+               Assert.isNotNull(form, "No IManagedForm has been provided for the feature's taxon.");\r
+               \r
+               // Description label should be created before adding features\r
+               Composite descriptionGroupComposite = \r
+                       EditorController.getDescriptionEditor(taxon).getDescriptionGroup(description);\r
+               Assert.isNotNull(descriptionGroupComposite, \r
+                               "Description group must be created - usually by creating its label - before adding features.");\r
+               \r
+               // Create the group composite\r
+               Composite groupComposite = new DescriptionFeatureGroupComposite\r
+                                                                               (descriptionGroupComposite, taxon, description, feature);\r
+               groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, form));    \r
+               \r
+               return groupComposite;          \r
+       }\r
+       \r
+       private Map<Taxon, IManagedForm> getTaxonDescriptionForms() {\r
+               if (descriptionForms == null) {\r
+                       descriptionForms = new HashMap<Taxon, IManagedForm>();\r
+               }\r
+               return descriptionForms;\r
+       }\r
+       \r
+\r
+       private IManagedForm getDescriptionForm(Taxon taxon) {\r
+               return getTaxonDescriptionForms().get(taxon);\r
+       }\r
 }\r
index 4829c8e8a79fb1ffb2d362074dd6cbf8d63ab533..16b4b13f0be469cf5e23f685fa1239112ff8c6f8 100644 (file)
@@ -19,7 +19,6 @@ import org.eclipse.swt.dnd.DropTargetListener;
 import org.eclipse.swt.dnd.Transfer;\r
 import org.eclipse.swt.graphics.Color;\r
 import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
 import org.eclipse.ui.forms.widgets.TableWrapData;\r
 import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
 \r
@@ -47,7 +46,6 @@ public class GroupComposite extends Composite {
                Color groupBackgroundColor = TaxEditorPlugin.getDefault().\r
                                getColor(ITaxEditorConstants.GROUP_GRAY_BKG_COLOR);\r
                this.setBackground(groupBackgroundColor);\r
-//             this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
 \r
                // Drop functionality\r
                this.setDroppable(true);\r
@@ -92,11 +90,11 @@ public class GroupComposite extends Composite {
                \r
                target.removeDropListener(dropListener);\r
                \r
-               for (Control control : getChildren()) {\r
-                       if (!control.isDisposed()) {\r
-                               control.dispose();\r
-                       }\r
-               }\r
+//             for (Control control : getChildren()) {\r
+//                     if (!control.isDisposed()) {\r
+//                             control.dispose();\r
+//                     }\r
+//             }\r
                \r
                super.dispose();\r
        }\r
index ad0c5006c2b560b522ac11bceaeec9a18d3979a5..3329e715bddd56c2df1c35152f5d938bbaf80bdb 100644 (file)
@@ -40,6 +40,6 @@ public class GroupCompositeLabel extends Composite {
                \r
                // Add the label\r
                final Label label = new Label(this, SWT.NONE);\r
-               label.setText(labelText);\r
+               label.setText(labelText.toUpperCase());\r
        }\r
 }\r
index ae649c23e511c32ab3f4fb9d23d2c762fd1fcaab..a64c11b0b06dee29b9e737ba5d45d65e2a44ea8b 100644 (file)
@@ -12,6 +12,9 @@ package eu.etaxonomy.taxeditor.editor;
 import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.ui.forms.IManagedForm;\r
 \r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
@@ -24,6 +27,8 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
  */\r
 public interface IFreeTextElementFactory {\r
 \r
+       /* Taxon name editor elements */\r
+       \r
        public Composite createAcceptedTaxon(IManagedForm form, Taxon taxon);\r
        \r
        public Composite createSynonym(Taxon taxon, Synonym synonym);\r
@@ -38,4 +43,14 @@ public interface IFreeTextElementFactory {
 \r
        public Composite createConcept(Taxon taxon, TaxonRelationship relationship);\r
        \r
+       /* Taxon description editor elements */\r
+       \r
+       public Composite createDescriptionLabel(IManagedForm form, Taxon taxon, TaxonDescription description);\r
+       \r
+       public Composite createDescriptionElement(Taxon taxon, TaxonDescription description, DescriptionElementBase element);\r
+       \r
+       public Composite createDescriptionGroup(Taxon taxon, TaxonDescription description);\r
+       \r
+       public Composite createDescriptionFeatureGroup(Taxon taxon, TaxonDescription description, Feature feature);\r
+\r
 }\r
index c5569f0c680cdc5e300e2370d112f984f684603b..3d479abaf7459d40f4eadc0ebc877533851e84b2 100644 (file)
@@ -24,7 +24,7 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.actions.SaveAllAction;\r
 import eu.etaxonomy.taxeditor.actions.cdm.SaveTaxonAction;\r
-import eu.etaxonomy.taxeditor.editor.description.TaxonDescriptionEditorView;\r
+import eu.etaxonomy.taxeditor.editor.description.TaxonDescriptionEditor;\r
 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
@@ -67,7 +67,7 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart {
                        setPageText(0, "Name");\r
                        \r
                        // TODO lazy create\r
-                       addPage(1, new TaxonDescriptionEditorView(), getEditorInput());\r
+                       addPage(1, new TaxonDescriptionEditor(), getEditorInput());\r
                        setPageText(1, "Descriptive");\r
                        \r
 //                     addPage(2, new EmptyEditorView(), getEditorInput());\r
index 9bd3706aa3649679fd1c3ff083862db48e0dfea3..853af63847b9ce86ab5b38b0491cafe34329d4f8 100644 (file)
 package eu.etaxonomy.taxeditor.editor.description;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
 import org.eclipse.core.runtime.Assert;\r
 import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
 import org.eclipse.jface.text.Document;\r
 import org.eclipse.jface.text.source.SourceViewer;\r
 import org.eclipse.swt.SWT;\r
@@ -29,11 +32,13 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.TextData;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.actions.ui.description.DeleteElementCompositeAction;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
 import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
 import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
 import eu.etaxonomy.taxeditor.editor.LineWrapSupport;\r
 import eu.etaxonomy.taxeditor.editor.ParseListener;\r
+import eu.etaxonomy.taxeditor.operations.description.RemoveElementOperation;\r
 import eu.etaxonomy.taxeditor.propertysheet.description.DescriptionElementPropertySource;\r
 \r
 /**\r
@@ -78,7 +83,9 @@ public class DescriptionElementComposite extends GroupedComposite {
         */\r
        public Action CHANGE_TAXON_TO_SYNONYM_ACTION;\r
 \r
-//     private DescriptionElementBase element;\r
+       private DescriptionElementBase element;\r
+\r
+       private IUndoContext undoContext;\r
 \r
        private static final String EMPTY_NAME_PROMPT = "Click to add descriptive element text";\r
 \r
@@ -95,6 +102,10 @@ public class DescriptionElementComposite extends GroupedComposite {
                        DescriptionElementBase element) {\r
                super(parent, managedForm);\r
                \r
+               this.element = element;\r
+               \r
+               this.undoContext = EditorController.getUndoContext(taxon);\r
+               \r
                createTextViewer();\r
                createBorderSupport();\r
                createLineWrapSupport();\r
@@ -106,6 +117,10 @@ public class DescriptionElementComposite extends GroupedComposite {
                setFocus();\r
        }\r
 \r
+       public DescriptionElementBase getElement() {\r
+               return element;\r
+       }\r
+       \r
        protected void createLineWrapSupport() {\r
                new LineWrapSupport(getTextViewer(), managedForm);\r
        }\r
@@ -182,11 +197,18 @@ public class DescriptionElementComposite extends GroupedComposite {
                ContextMenu contextMenu = new ContextMenu(getDraggableLabel());\r
                \r
                // Delete this description element\r
-               Action deleteElementAction = new DeleteElementCompositeAction(\r
-                               this, getTaxon());\r
-               contextMenu.addAction(deleteElementAction);\r
-               \r
-               // Add new text \r
+               String text = "Delete description element";\r
+               ImageDescriptor image = TaxEditorPlugin.getDefault()\r
+                               .getImageDescriptor(ITaxEditorConstants.ACTIVE_DELETE_ICON);\r
+               contextMenu.addAction(new Action(text, image){\r
+                                               \r
+                       public void run() {\r
+                               IUndoableOperation operation = new RemoveElementOperation\r
+                                               (this.getText(), undoContext, taxon, element);\r
+                               \r
+                               GlobalController.executeOperation(operation);\r
+                       }\r
+               });\r
        }\r
        \r
        @Override\r
@@ -198,7 +220,7 @@ public class DescriptionElementComposite extends GroupedComposite {
                \r
                // If feature only has 1 child that is not DescriptionElementComposite,\r
                //      composite is empty\r
-               if (!(featureComponent instanceof FeatureGroupComposite)) {\r
+               if (!(featureComponent instanceof DescriptionFeatureGroupComposite)) {\r
                        return;\r
                }\r
                \r
@@ -11,11 +11,12 @@ package eu.etaxonomy.taxeditor.editor.description;
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.forms.IManagedForm;\r
 import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
 \r
 import eu.etaxonomy.cdm.model.description.Feature;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.GroupComposite;\r
 import eu.etaxonomy.taxeditor.editor.GroupCompositeLabel;\r
 \r
 /**\r
@@ -23,14 +24,23 @@ import eu.etaxonomy.taxeditor.editor.GroupCompositeLabel;
  * @created 11.09.2008\r
  * @version 1.0\r
  */\r
-public class FeatureGroupComposite extends EditorGroupComposite {\r
+public class DescriptionFeatureGroupComposite extends GroupComposite {\r
        private static final Logger logger = Logger\r
-                       .getLogger(FeatureGroupComposite.class);\r
+                       .getLogger(DescriptionFeatureGroupComposite.class);\r
+       \r
+       private Taxon taxon;\r
+       private TaxonDescription description;\r
+       private Feature feature;\r
 \r
-       public FeatureGroupComposite(Composite parent, IManagedForm managedForm,\r
-                       Feature feature) {\r
-               super(parent, managedForm, feature);\r
+       public DescriptionFeatureGroupComposite(Composite parent, Taxon taxon,\r
+                       TaxonDescription description, Feature feature) {\r
+               \r
+               super(parent);\r
 \r
+               this.taxon = taxon;\r
+               this.description = description;\r
+               this.feature = feature;\r
+               \r
                TableWrapLayout tlLayout = new TableWrapLayout();\r
                tlLayout.topMargin = 0;\r
                tlLayout.leftMargin = 10;\r
@@ -38,4 +48,16 @@ public class FeatureGroupComposite extends EditorGroupComposite {
                \r
                Composite groupCompositeLabel = new GroupCompositeLabel(this, feature.getLabel());\r
        }\r
+       \r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
+       \r
+       public TaxonDescription getDescription() {\r
+               return description;\r
+       }\r
+       \r
+       public Feature getFeature() {\r
+               return feature;\r
+       }\r
 }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionGroupComposite.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionGroupComposite.java
new file mode 100644 (file)
index 0000000..66b3922
--- /dev/null
@@ -0,0 +1,47 @@
+/**\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
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.GroupComposite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class DescriptionGroupComposite extends GroupComposite {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(DescriptionGroupComposite.class);\r
+       \r
+       private Taxon taxon;\r
+       private TaxonDescription description;\r
+       \r
+       public DescriptionGroupComposite(Composite parent, Taxon taxon,\r
+                       TaxonDescription description) {\r
+               \r
+               super(parent);\r
+               \r
+               this.taxon = taxon;\r
+               this.description = description;\r
+       }\r
+       \r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
+       \r
+       public TaxonDescription getDescription() {\r
+               return description;\r
+       }\r
+}\r
index 5061cd34610809eba8279672a689ad3f6ea7e6d2..d4061dfda7e5cebae45bed272469a436ba6040f3 100644 (file)
@@ -10,6 +10,8 @@
 package eu.etaxonomy.taxeditor.editor.description;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
 import org.eclipse.core.runtime.Assert;\r
 import org.eclipse.jface.action.Action;\r
 import org.eclipse.jface.action.IMenuListener;\r
@@ -31,10 +33,12 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.actions.ui.description.AddDescriptionElementCompositeAction;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
 import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
 import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
 import eu.etaxonomy.taxeditor.editor.ParseListener;\r
+import eu.etaxonomy.taxeditor.operations.description.AddElementOperation;\r
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
 import eu.etaxonomy.taxeditor.propertysheet.description.TaxonDescriptionPropertySource;\r
 \r
@@ -62,21 +66,33 @@ public class DescriptionLabelComposite extends GroupedComposite {
                        .getImage(ITaxEditorConstants.BLACK_SQUARE_ICON);       \r
        \r
        private static final String EMPTY_NAME_PROMPT = "Click to add description label";\r
+\r
+       private TaxonDescription description;\r
+\r
+       private IUndoContext undoContext;\r
        \r
-       public DescriptionLabelComposite(Composite parent, IManagedForm managedForm, TaxonDescription taxonDescription) {\r
+       public DescriptionLabelComposite(Composite parent, IManagedForm managedForm, TaxonDescription description) {\r
                super(parent, managedForm);\r
                \r
+               this.description = description;\r
+               \r
+               this.undoContext = EditorController.getUndoContext(taxon);\r
+               \r
                createLabelViewer();\r
                createBorderSupport();\r
                createLineWrapSupport();\r
 \r
-               setData(taxonDescription);\r
+               setData(description);\r
                transform(null);\r
 \r
                createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
                setFocus();\r
        }\r
 \r
+       public TaxonDescription getDescription() {\r
+               return description;\r
+       }\r
+       \r
        public void transform(String transformation) {\r
                setIsDraggable(false);\r
                setFont(DESCRIPTION_LABEL_FONT);\r
@@ -97,16 +113,21 @@ public class DescriptionLabelComposite extends GroupedComposite {
        \r
        private void createMenu() {\r
                \r
-               final Composite parentComposite = this.getParent();\r
-               \r
                MenuManager featuresMenu = new MenuManager("Add description element");\r
                featuresMenu.setRemoveAllWhenShown(true);\r
                featuresMenu.addMenuListener(new IMenuListener() {\r
                        public void menuAboutToShow(IMenuManager manager) {\r
-                               for (Feature feature : PreferencesUtil.getPreferredFeatures()) {\r
-                                       Action action = new AddDescriptionElementCompositeAction(\r
-                                                       parentComposite, managedForm, feature);\r
-                                       manager.add(action);\r
+                               for (final Feature feature : PreferencesUtil.getPreferredFeatures()) {\r
+                                       \r
+                                       String text = feature.getLabel();\r
+                                       manager.add(new Action(text){\r
+                                               \r
+                                               public void run() {\r
+                                                       IUndoableOperation operation = new AddElementOperation\r
+                                                                       (this.getText(), undoContext, taxon, description, feature);\r
+                                                       GlobalController.executeOperation(operation);\r
+                                               }\r
+                                       });\r
                                }\r
                        }\r
                });\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/IDescriptionEditorCompositeRepository.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/IDescriptionEditorCompositeRepository.java
new file mode 100644 (file)
index 0000000..a1034db
--- /dev/null
@@ -0,0 +1,33 @@
+/**\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
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+\r
+/**\r
+ * @author p.ciardell\r
+ * @created 22.12.2008\r
+ * @version 1.0\r
+ */\r
+public interface IDescriptionEditorCompositeRepository {\r
+\r
+       public Composite getDescriptionLabel(TaxonDescription description);\r
+       \r
+       public Composite getDescriptionElement(DescriptionElementBase element);\r
+       \r
+       public Composite getDescriptionGroup(TaxonDescription description);\r
+       \r
+       public Composite getDescriptionFeatureGroup(TaxonDescription description,\r
+                       Feature feature);\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditor.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditor.java
new file mode 100644 (file)
index 0000000..3cc4501
--- /dev/null
@@ -0,0 +1,219 @@
+/**\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
+package eu.etaxonomy.taxeditor.editor.description;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorSite;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.FreeTextElementFactory;\r
+import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
+\r
+/**\r
+ * Displays the <code>TaxonDescription</code>s attached to a <code>Taxon</code>.\r
+ * <p>\r
+ * For each <code>TaxonDescription</code>:\r
+ * <ul>\r
+ *     <li>Displays a <code>DescriptionLabelComposite</code> with <code>TaxonDescription#getTextCache()</code></li>\r
+ *     <li>Displays a <code>DescriptionFeatureGroupComposite</code> for each <code>Feature</code> for which there are descriptive elements</li>\r
+ *     <li>Displays a <code>DescriptionElementComposite</code> for each <code>TaxonDescription#getElements()</code></li>\r
+ * </ul>\r
+ * </p> \r
+ * <p>\r
+ * If the <Taxon> has no descriptions, creates a <code>TaxonDescription</code> that is saved when \r
+ * <code>firePropertyChange()</code> is called with <code>PROP_DIRTY</code>.\r
+ * </p>\r
+ * @author p.ciardelli\r
+ * @created 25.08.2008\r
+ * @version 1.0\r
+ */\r
+public class TaxonDescriptionEditor extends AbstractTaxonEditor \r
+               implements IDescriptionEditorCompositeRepository {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(TaxonDescriptionEditor.class);\r
+       \r
+       /**\r
+        * If this view is opened and the <code>Taxon</code> has no <code>Description</code>,\r
+        * a <code>Description</code> element is created and saved to <code>emptyDescription</code>.\r
+        * It should not be added to the <code>Taxon</code> until it has been changed.\r
+        * \r
+        * @see firePropertyChange(int)\r
+        */\r
+       private TaxonDescription emptyDescription;\r
+       \r
+       private boolean pageInitialized = false; \r
+\r
+       @Override\r
+       public void doSave(IProgressMonitor monitor) {}\r
+\r
+       @Override\r
+       public void doSaveAs() {}\r
+\r
+       @Override\r
+       public void init(IEditorSite site, IEditorInput input)\r
+                       throws PartInitException {\r
+                               \r
+               super.init(site, input);\r
+               \r
+               Taxon taxon = getTaxon();       \r
+               EditorController.addDescriptionEditor(taxon, this);\r
+       }\r
+       \r
+       @Override\r
+       public boolean isDirty() {\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public boolean isSaveAsAllowed() {\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       protected void createManagedForm(Composite composite) {\r
+               \r
+               super.createManagedForm(composite);\r
+       \r
+               Taxon taxon = getTaxon();\r
+               \r
+               Set<TaxonDescription> descriptions = taxon.getDescriptions();\r
+               \r
+               // If the taxon has no descriptions, give it an empty one to display\r
+               if (descriptions == null || descriptions.size() == 0) {\r
+                       emptyDescription = TaxonDescription.NewInstance();\r
+                       TaxonDescription description = emptyDescription;\r
+                       description.setTitleCache("");\r
+                       descriptions.add(description);\r
+               }\r
+               \r
+               GroupedComposite firstLabelComposite = null;\r
+               \r
+               // Iterate through taxon's descriptions\r
+               for (TaxonDescription description : descriptions) {\r
+                       \r
+                       // Draw description label\r
+                       Composite labelComposite = \r
+                                       FreeTextElementFactory.getDefault().createDescriptionLabel(managedForm, taxon, description);\r
+                       \r
+                       // Note whether this is the first label drawn\r
+                       if (firstLabelComposite == null) {\r
+                               firstLabelComposite = (GroupedComposite) labelComposite;\r
+                       }\r
+                       \r
+                       // Draw each element in description \r
+                       for (DescriptionElementBase element : description.getElements()) {\r
+                               FreeTextElementFactory.getDefault().createDescriptionElement(taxon, description, element);\r
+                       }\r
+               }\r
+               \r
+               // Redraw composite\r
+               composite.layout();\r
+               \r
+               setSelection(firstLabelComposite);\r
+               firstLabelComposite.drawBorder();\r
+               \r
+               pageInitialized = true;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.ui.part.WorkbenchPart#firePropertyChange(int)\r
+        */\r
+       protected void firePropertyChange(final int propertyId) {\r
+               if (pageInitialized && propertyId == PROP_DIRTY && emptyDescription != null) {\r
+                       getTaxon().addDescription(emptyDescription);\r
+                       emptyDescription = null;\r
+               }\r
+               super.firePropertyChange(propertyId);\r
+       }\r
+\r
+       private HashSet<Composite> getAllComposites(){\r
+               HashSet<Composite> composites = new HashSet<Composite>();\r
+               composites.add(parent);\r
+               composites.addAll(getComposites(parent));\r
+               return composites;\r
+       }\r
+       \r
+       private HashSet<Composite> getComposites(Composite composite){\r
+               HashSet<Composite> composites = new HashSet<Composite>();\r
+               for(Control child : composite.getChildren()){\r
+                       if(child instanceof Composite){\r
+                               composites.add((Composite)child);\r
+                               composites.addAll(getComposites((Composite)child));\r
+                       }\r
+               }\r
+               return composites;\r
+       }\r
+       \r
+       @Override\r
+       public Composite getDescriptionElement(DescriptionElementBase element) {\r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof DescriptionElementComposite){\r
+                               if (element.equals \r
+                                               (((DescriptionElementComposite) c).getElement())) {\r
+                                       return c;\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Composite getDescriptionFeatureGroup(TaxonDescription description,\r
+                       Feature feature) {\r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof DescriptionFeatureGroupComposite){\r
+                               if (description.equals(((DescriptionFeatureGroupComposite) c).getDescription()) &&\r
+                                               feature.equals(((DescriptionFeatureGroupComposite) c).getFeature())) {\r
+                                       return c;\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Composite getDescriptionGroup(TaxonDescription description) {\r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof DescriptionGroupComposite){\r
+                               if (description.equals \r
+                                               (((DescriptionGroupComposite) c).getDescription())) {\r
+                                       return c;\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Composite getDescriptionLabel(TaxonDescription description) {\r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof DescriptionLabelComposite){\r
+                               if (description.equals \r
+                                               (((DescriptionLabelComposite) c).getDescription())) {\r
+                                       return c;\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditorView.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditorView.java
deleted file mode 100644 (file)
index 82f27ee..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/**\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
-package eu.etaxonomy.taxeditor.editor.description;\r
-\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.swt.widgets.Composite;\r
-\r
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
-import eu.etaxonomy.cdm.model.description.Feature;\r
-import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
-import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
-import eu.etaxonomy.taxeditor.editor.IHasPropertySource;\r
-\r
-/**\r
- * Displays the <code>TaxonDescription</code>s attached to a <code>Taxon</code>.\r
- * <p>\r
- * For each <code>TaxonDescription</code>:\r
- * <ul>\r
- *     <li>Displays a <code>DescriptionLabelComposite</code> with <code>TaxonDescription#getTextCache()</code></li>\r
- *     <li>Displays a <code>FeatureGroupComposite</code> for each <code>Feature</code> for which there are descriptive elements</li>\r
- *     <li>Displays a <code>DescriptionElementComposite</code> for each <code>TaxonDescription#getElements()</code></li>\r
- * </ul>\r
- * </p> \r
- * <p>\r
- * If the <Taxon> has no descriptions, creates a <code>TaxonDescription</code> that is saved when \r
- * <code>firePropertyChange()</code> is called with <code>PROP_DIRTY</code>.\r
- * </p>\r
- * @author p.ciardelli\r
- * @created 25.08.2008\r
- * @version 1.0\r
- */\r
-public class TaxonDescriptionEditorView extends AbstractTaxonEditor {\r
-       private static final Logger logger = Logger\r
-                       .getLogger(TaxonDescriptionEditorView.class);\r
-       \r
-       /**\r
-        * If this view is opened and the <code>Taxon</code> has no <code>Description</code>,\r
-        * a <code>Description</code> element is created and saved to <code>emptyDescription</code>.\r
-        * It should not be added to the <code>Taxon</code> until it has been changed.\r
-        * \r
-        * @see firePropertyChange(int)\r
-        */\r
-       private TaxonDescription emptyDescription;\r
-       \r
-       private boolean pageInitialized = false; \r
-\r
-       @Override\r
-       public void doSave(IProgressMonitor monitor) {\r
-               // TODO Auto-generated method stub\r
-               \r
-       }\r
-\r
-       @Override\r
-       public void doSaveAs() {\r
-               // TODO Auto-generated method stub\r
-               \r
-       }\r
-\r
-       @Override\r
-       public boolean isDirty() {\r
-               // TODO Auto-generated method stub\r
-               return false;\r
-       }\r
-\r
-       @Override\r
-       public boolean isSaveAsAllowed() {\r
-               // TODO Auto-generated method stub\r
-               return false;\r
-       }\r
-       \r
-       @Override\r
-       public void createPartControl(Composite composite) {\r
-\r
-               super.createPartControl(composite);\r
-               \r
-               Taxon taxon = getTaxon();\r
-               \r
-               Set<TaxonDescription> descriptions = taxon.getDescriptions();\r
-               \r
-               GroupedComposite firstEditableComposite = null;\r
-               \r
-               // If the Taxon has no descriptions, give it an empty one to display\r
-               if (descriptions == null || descriptions.size() == 0) {\r
-                       emptyDescription = TaxonDescription.NewInstance();\r
-                       TaxonDescription description = emptyDescription;\r
-                       description.setTitleCache("");\r
-                       descriptions.add(description);\r
-               }\r
-               \r
-               // Iterate through taxon's descriptions\r
-               for (TaxonDescription description : descriptions) {\r
-                                               \r
-                       // Create a composite for the description\r
-                       EditorGroupComposite descriptionComposite = new EditorGroupComposite(\r
-                                       parent, managedForm, description);\r
-                       descriptionComposite.setDroppable(false);\r
-                       \r
-                       // Add a grouped composite for the description's label\r
-                       GroupedComposite descriptionLabelComposite = new DescriptionLabelComposite(\r
-                                       descriptionComposite, managedForm, description);\r
-                       \r
-                       if (firstEditableComposite == null) {\r
-                               firstEditableComposite = descriptionLabelComposite;\r
-                       }\r
-                       \r
-                       // Iterate through description's elements, group by feature\r
-                       Map<Feature, Set<DescriptionElementBase>> features =  \r
-                                       new HashMap<Feature, Set<DescriptionElementBase>>(); \r
-                       for (DescriptionElementBase element : description.getElements()) {\r
-                               Feature feature = element.getFeature();\r
-                               Set<DescriptionElementBase> elements = features.get(feature);\r
-                               if (elements == null) {\r
-                                       elements = new HashSet<DescriptionElementBase>();\r
-                                       features.put(feature, elements);\r
-                               }\r
-                               elements.add(element);\r
-                       }\r
-                       \r
-                       // Create a composite for each feature, composites for its elements\r
-                       for (Feature feature : features.keySet()) {\r
-                               EditorGroupComposite featureComposite = new FeatureGroupComposite(\r
-                                               descriptionComposite, managedForm, feature);\r
-                               \r
-                               for (DescriptionElementBase element : features.get(feature)) {\r
-                                       new DescriptionElementComposite(\r
-                                                       featureComposite, managedForm, element);\r
-                               }\r
-                       }\r
-               }\r
-               \r
-               // We've added elements to the managed form, so redraw it\r
-               scrolledForm.reflow(true);\r
-               \r
-               // Set focus on the first label composite to give a border and send it\r
-               //      to the property sheet\r
-               setSelection(firstEditableComposite);\r
-               firstEditableComposite.drawBorder();\r
-               \r
-               pageInitialized = true;\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.part.WorkbenchPart#firePropertyChange(int)\r
-        */\r
-       protected void firePropertyChange(final int propertyId) {\r
-               if (pageInitialized && propertyId == PROP_DIRTY && emptyDescription != null) {\r
-                       getTaxon().addDescription(emptyDescription);\r
-                       emptyDescription = null;\r
-               }\r
-               super.firePropertyChange(propertyId);\r
-       }\r
-}\r
index b51e4dc209b7b2caa7ac48e15e7bb98755631168..347f6953221976213657c4818ea9d38afcd43427 100644 (file)
@@ -44,7 +44,6 @@ import eu.etaxonomy.taxeditor.controller.EditorController;
 import eu.etaxonomy.taxeditor.controller.GlobalController;\r
 import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
 import eu.etaxonomy.taxeditor.editor.FreeTextElementFactory;\r
-import eu.etaxonomy.taxeditor.editor.INameEditorCompositeRepository;\r
 import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
 import eu.etaxonomy.taxeditor.operations.name.ChangeMisappliedNameToSynonymOperation;\r
 \r
@@ -54,7 +53,7 @@ import eu.etaxonomy.taxeditor.operations.name.ChangeMisappliedNameToSynonymOpera
  * @version 1.0\r
  */\r
 public class TaxonNameEditor extends AbstractTaxonEditor \r
-               implements INameEditorCompositeRepository{\r
+               implements INameEditorCompositeRepository {\r
        private static final Logger logger = Logger.getLogger(TaxonNameEditor.class);\r
                \r
        /**\r
@@ -82,8 +81,7 @@ public class TaxonNameEditor extends AbstractTaxonEditor
                super.init(site, input);\r
                \r
                Taxon taxon = getTaxon();\r
-       \r
-               EditorController.addEditor(taxon, this);\r
+               EditorController.addNameEditor(taxon, this);\r
                \r
                // Register listeners for any change in accepted name or set of relations\r
                taxon.getName().addPropertyChangeListener(taxonChangeListener);\r
@@ -99,17 +97,20 @@ public class TaxonNameEditor extends AbstractTaxonEditor
        public boolean isSaveAsAllowed() {\r
                return false;\r
        }\r
-                       \r
+       \r
+       @Override\r
        protected void createManagedForm(Composite composite) {\r
                \r
                super.createManagedForm(composite);\r
                \r
                Taxon taxon = getTaxon();\r
                \r
+               // Draw accepted name element\r
                NameComposite acceptedNameComposite = \r
                                (NameComposite) FreeTextElementFactory.getDefault().\r
                                                createAcceptedTaxon(managedForm, taxon);\r
                                \r
+               // Draw synonym and misapplied name elements\r
                for (TaxonBase taxonBase : new IterableSynonymyList(taxon)) {\r
                        if (taxonBase instanceof Synonym) {\r
                                FreeTextElementFactory.getDefault().createSynonym(taxon, (Synonym) taxonBase);                          \r
@@ -118,6 +119,7 @@ public class TaxonNameEditor extends AbstractTaxonEditor
                        }\r
                }\r
 \r
+               // Draw concept relation elements\r
                Set<TaxonRelationship> taxonRelations = taxon.getTaxonRelations();\r
                for (TaxonRelationship relationship : taxonRelations) {\r
                        \r
@@ -167,28 +169,13 @@ public class TaxonNameEditor extends AbstractTaxonEditor
                        }               \r
                });\r
                                \r
-               // We've added elements to the managed form, so redraw it\r
+               // Redraw composite\r
                composite.layout();\r
                \r
                setSelection(acceptedNameComposite);\r
                acceptedNameComposite.drawBorder();\r
-               \r
        }\r
-       \r
-       public boolean redraw(){\r
                \r
-               this.selectedObject = null;\r
-               \r
-               managedForm.getForm().dispose();\r
-                               \r
-               createManagedForm(partComposite);\r
-               \r
-               return true;\r
-       }\r
-       \r
-\r
-\r
-       \r
        private HashSet<Composite> getAllComposites(){\r
                HashSet<Composite> composites = new HashSet<Composite>();\r
                composites.add(parent);\r
@@ -210,7 +197,6 @@ public class TaxonNameEditor extends AbstractTaxonEditor
        \r
        @Override\r
        public Composite getAcceptedName() {\r
-               \r
                for(Composite c : getAllComposites()){\r
                        if(c instanceof AcceptedNameComposite){\r
                                return c;\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/AddElementOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/AddElementOperation.java
new file mode 100644 (file)
index 0000000..79084c5
--- /dev/null
@@ -0,0 +1,85 @@
+/**\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
+package eu.etaxonomy.taxeditor.operations.description;\r
+\r
+import org.apache.log4j.Logger;\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.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 05.02.2009\r
+ * @version 1.0\r
+ */\r
+public class AddElementOperation extends AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(AddElementOperation.class);\r
+       \r
+       private TaxonDescription description;\r
+       private Feature feature;\r
+       private TextData element;\r
+\r
+       public AddElementOperation(String label, IUndoContext undoContext,\r
+                       Taxon taxon, TaxonDescription description, Feature feature) {\r
+               super(label, undoContext, taxon);\r
+               \r
+               this.description = description;\r
+               this.feature = feature;\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
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               element = TextData.NewInstance(feature);\r
+               description.addElement(element);\r
+               \r
+               // Redraw editor if exists\r
+               return redrawOpenEditor();\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
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               description.addElement(element);\r
+               \r
+               // Redraw editor if exists\r
+               return redrawOpenEditor();\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
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               description.removeElement(element);\r
+               \r
+               // Redraw editor if exists\r
+               return redrawOpenEditor();\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/RemoveElementOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/description/RemoveElementOperation.java
new file mode 100644 (file)
index 0000000..63336b0
--- /dev/null
@@ -0,0 +1,91 @@
+/**\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
+package eu.etaxonomy.taxeditor.operations.description;\r
+\r
+import org.apache.log4j.Logger;\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.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 05.02.2009\r
+ * @version 1.0\r
+ */\r
+public class RemoveElementOperation extends AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(RemoveElementOperation.class);\r
+       \r
+       private DescriptionElementBase element;\r
+       private TaxonDescription description = null;\r
+\r
+       public RemoveElementOperation(String label, IUndoContext undoContext,\r
+                       Taxon taxon, DescriptionElementBase element) {\r
+               super(label, undoContext, taxon);\r
+               \r
+               this.element = element;\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
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+                               \r
+               // Find description to which element belongs\r
+               for (TaxonDescription descr : taxon.getDescriptions()) {\r
+                       for (DescriptionElementBase elem : descr.getElements()) {\r
+                               if (elem.equals(element)) {\r
+                                       description = descr;\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+               \r
+               // Remove element from description\r
+               if (description == null) {\r
+                       logger.error("Couldn't find element's description!");\r
+               } else {\r
+                       description.removeElement(element);\r
+               }\r
+               \r
+               // Redraw editor if exists\r
+               return redrawOpenEditor();\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
+       @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
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+\r
+               description.addElement(element);\r
+               \r
+               return redrawOpenEditor();\r
+       }\r
+}\r
index 3e15169b465cc5822fb356cf936e524dff917654..80115e0cd994d0f9ac1b43fe11a0ca7043905df5 100644 (file)
@@ -13,18 +13,14 @@ import java.util.Set;
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\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
-import org.eclipse.core.runtime.Status;\r
 \r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.controller.GlobalController;\r
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
 import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
 \r
 /**\r