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
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
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
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
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
+++ /dev/null
-/**\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
+++ /dev/null
-/**\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
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
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
*/\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
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
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
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
+++ /dev/null
-/**\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
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
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
\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
// 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
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
\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
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
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
\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
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
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
@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
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
\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
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
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
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
\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
\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
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
*/\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
\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
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
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
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
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
*/\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
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
setFocus();\r
}\r
\r
+ public DescriptionElementBase getElement() {\r
+ return element;\r
+ }\r
+ \r
protected void createLineWrapSupport() {\r
new LineWrapSupport(getTextViewer(), managedForm);\r
}\r
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
\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
\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
* @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
\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
--- /dev/null
+/**\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
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
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
.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
\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
--- /dev/null
+/**\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
--- /dev/null
+/**\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
+++ /dev/null
-/**\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
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
\r
-package eu.etaxonomy.taxeditor.editor;\r
+package eu.etaxonomy.taxeditor.editor.name;\r
\r
import org.eclipse.swt.widgets.Composite;\r
\r
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
* @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
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
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
}\r
}\r
\r
+ // Draw concept relation elements\r
Set<TaxonRelationship> taxonRelations = taxon.getTaxonRelations();\r
for (TaxonRelationship relationship : taxonRelations) {\r
\r
} \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
\r
@Override\r
public Composite getAcceptedName() {\r
- \r
for(Composite c : getAllComposites()){\r
if(c instanceof AcceptedNameComposite){\r
return c;\r
--- /dev/null
+/**\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
--- /dev/null
+/**\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
\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