eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/CreateNewHeterotypicCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/DeleteMisappliedNameCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/DeleteSynonymCompositeAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Messages.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveCompositeToMisappliedCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveTaxonDialogAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenNameRelationWizardAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/RemoveBasionymCompositeAction.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/actions/ui/messages.properties -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmDataSourceDialog.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmDataSourceRepository.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmTransactionController.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/ICdmDataSourceRepository.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/RegisterDatabaseDialog.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditorView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AnnotationMarkerAccess.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/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/FreeTextElementFactory.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupComposite.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupCompositeLabel.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupedComposite.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFavoritesDraggable.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementRepository.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/description/FeatureGroupComposite.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/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/HomotypicalGroupComposite.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/Messages.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/editor/name/NameComposite.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/NameViewer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditorView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/messages.properties -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/io/InputWizard.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/io/InputWizard2.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeLabelProvider.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeViewer.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/AbstractEditorOperation.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
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToMisappliedNameOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToTaxonOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/CreateSynonymInNewGroupOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymAcceptedOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymGroupBasionymOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/RemoveSynonymOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/UnmakeSynonymGroupBasionymOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/CdmPreferences.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/DescriptionPreferences.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/FeaturePreferences.java -text
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.operations.UndoActionHandler;
import eu.etaxonomy.cdm.io.common.ImportWrapper;
import eu.etaxonomy.taxeditor.actions.io.ExportAction;
private IWorkbenchAction saveAction;
private IWorkbenchAction preferencesAction;
private IWorkbenchAction undoAction;
+ private IWorkbenchAction redoAction;
private IAction newNameAction;
private IAction exportJaxbAction;
+
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
undoAction = ActionFactory.UNDO.create(window);
register(undoAction);
+ redoAction = ActionFactory.REDO.create(window);
+ register(redoAction);
+
exitAction = ActionFactory.QUIT.create(window);
register(exitAction);
MenuManager fileMenu = new MenuManager("&File",
null);
+ MenuManager editMenu = new MenuManager("&Edit", null);
+
// Create submenu for imports
MenuManager importMenu = new MenuManager("Import ...", null);
menuBar.add(fileMenu);
fileMenu.add(newNameAction);
fileMenu.add(saveAction);
- fileMenu.add(undoAction);
fileMenu.add(new Separator());
fileMenu.add(importMenu);
fileMenu.add(exportMenu);
fileMenu.add(new Separator());
fileMenu.add(exitAction);
+ menuBar.add(editMenu);
+ editMenu.add(undoAction);
+ editMenu.add(redoAction);
+
// Populate submenu for imports
for (IAction importAction : importActionList) {
importMenu.add(importAction);
return applicationController;\r
}\r
\r
- /***************************************************************************\r
- * OBSERVABLE LISTS\r
- **************************************************************************/\r
-\r
- private WritableList observableRecentNamesList = null;\r
- private WritableList observableFavoritesList = null;\r
-\r
- public WritableList getObservableRecentNamesList() {\r
- if (observableRecentNamesList == null) {\r
- observableRecentNamesList = new WritableList();\r
- }\r
- return observableRecentNamesList;\r
- }\r
-\r
- public WritableList getObservableFavoritesList() {\r
- if (observableFavoritesList == null) {\r
- observableFavoritesList = new WritableList();\r
- }\r
- return observableFavoritesList;\r
- }\r
- \r
- public void clearObservableLists() {\r
- observableRecentNamesList = null;\r
- observableFavoritesList = null;\r
- }\r
-\r
/***************************************************************************\r
* IMAGE REGISTRY\r
**************************************************************************/\r
\r
package eu.etaxonomy.taxeditor;\r
\r
+import java.util.HashMap;\r
import java.util.HashSet;\r
+import java.util.Map;\r
import java.util.Set;\r
import java.util.SortedSet;\r
\r
import org.eclipse.core.runtime.IProgressMonitor;\r
import org.eclipse.jface.action.IStatusLineManager;\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.swt.widgets.Shell;\r
import org.eclipse.swt.widgets.Tree;\r
import org.eclipse.swt.widgets.TreeItem;\r
import org.eclipse.ui.IWorkbench;\r
import org.eclipse.ui.IWorkbenchPage;\r
import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.forms.IManagedForm;\r
import org.eclipse.ui.operations.IWorkbenchOperationSupport;\r
import org.eclipse.ui.views.properties.PropertySheet;\r
import org.eclipse.ui.views.properties.PropertySheetPage;\r
\r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.editor.CompositeBorderDecorator;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView;\r
throws PartInitException {\r
return getActivePage().openEditor(input, editorId);\r
}\r
+ \r
+ public static IEditorPart openTaxonEditor(Taxon taxon)\r
+ throws PartInitException{\r
+ IEditorInput input = new NameEditorInput(taxon);\r
+ return openEditor(input, MultiPageTaxonEditor.ID);\r
+ }\r
\r
/**\r
* @param taxon\r
}\r
\r
public static IOperationHistory getOperationHistory() {\r
- if (operationHistory == null) {\r
- operationHistory = OperationHistoryFactory.getOperationHistory();\r
- }\r
- return operationHistory;\r
-// return getOperationSupport().getOperationHistory();\r
+// if (operationHistory == null) {\r
+//// operationHistory = getOperationSupport().getOperationHistory();\r
+// operationHistory = OperationHistoryFactory.getOperationHistory();\r
+// }\r
+// return operationHistory;\r
+ return getOperationSupport().getOperationHistory();\r
}\r
\r
public static IUndoContext getWorkbenchUndoContext() {\r
}\r
\r
\r
- public static EditorGroupComposite getMisappliedNameGroupComposite(\r
- IManagedForm managedForm) {\r
-\r
- // Iterate through parent's children until we find a composite which has a data field\r
- // for MISAPPLIED_NAME\r
- Composite parent = managedForm.getForm().getBody();\r
- for (Control groupComposite : parent.getChildren()) {\r
- if (groupComposite instanceof EditorGroupComposite) {\r
- if (groupComposite.getData(ITaxEditorConstants.MISAPPLIED_NAME) != null) {\r
- return (EditorGroupComposite) groupComposite;\r
- }\r
- }\r
- }\r
- return null;\r
- }\r
-\r
- public static EditorGroupComposite createMisappliedNameGroupComposite(\r
- IManagedForm managedForm) {\r
- \r
- Composite parent = managedForm.getForm().getBody();\r
- \r
- EditorGroupComposite composite = new EditorGroupComposite(parent, managedForm);\r
- composite.setData(ITaxEditorConstants.MISAPPLIED_NAME,"");\r
- new CompositeBorderDecorator(composite, managedForm);\r
- return composite;\r
- }\r
+// public static EditorGroupComposite getMisappliedNameGroupComposite(\r
+// IManagedForm managedForm) {\r
+//\r
+// // Iterate through parent's children until we find a composite which has a data field\r
+// // for MISAPPLIED_NAME\r
+// Composite parent = managedForm.getForm().getBody();\r
+// for (Control groupComposite : parent.getChildren()) {\r
+// if (groupComposite instanceof EditorGroupComposite) {\r
+// if (groupComposite.getData(ITaxEditorConstants.MISAPPLIED_NAME) != null) {\r
+// return (EditorGroupComposite) groupComposite;\r
+// }\r
+// }\r
+// }\r
+// return null;\r
+// }\r
+\r
+// public static EditorGroupComposite createMisappliedNameGroupComposite(\r
+// IManagedForm managedForm) {\r
+// \r
+// Composite parent = managedForm.getForm().getBody();\r
+// \r
+// EditorGroupComposite composite = new EditorGroupComposite(parent, managedForm);\r
+// composite.setData(ITaxEditorConstants.MISAPPLIED_NAME,"");\r
+// new CompositeBorderDecorator(composite, managedForm);\r
+// return composite;\r
+// }\r
\r
public static void setStatusMessage(String msg) {\r
getPropertySheet().getViewSite().getActionBars().getStatusLineManager().setMessage(msg); \r
\r
private static IStatusLineManager statusLineManager;\r
\r
+ private static Map<Taxon, TaxonNameEditor> taxonNameEditors;\r
+\r
public static void setIsSaving(boolean isSavin) {\r
isSaving = isSavin;\r
}\r
statusLineManager.setCancelEnabled(false);\r
return statusLineManager.getProgressMonitor();\r
}\r
+\r
+ public static void addTaxonNameEditor(\r
+ Taxon taxon, TaxonNameEditor taxonNameEditor) {\r
+ if (taxonNameEditors == null) {\r
+ taxonNameEditors = new HashMap<Taxon, TaxonNameEditor>();\r
+ }\r
+ taxonNameEditors.put(taxon, taxonNameEditor);\r
+ }\r
+\r
+ public static TaxonNameEditor getTaxonNameEditor(Taxon taxon) {\r
+ if (taxonNameEditors == null) {\r
+ return null;\r
+ }\r
+ return taxonNameEditors.get(taxon);\r
+ }\r
+\r
+ public static IUndoContext getTaxonNameEditorUndoContext(Taxon taxon) {\r
+ // TODO make this taxon name editor specific\r
+// return getTaxonNameEditor(taxon).getUndoContext();\r
+ return IOperationHistory.GLOBAL_UNDO_CONTEXT;\r
+ }\r
}
\ No newline at end of file
CdmTransactionController.addSessionTaxaToTransaction();
UiUtil.setIsSaving(false);
+ // TODO: delete undoHistory
}
/**
\r
// Save the taxon to the CDM\r
CdmSessionDataRepository.getDefault().saveTaxon(taxon);\r
+ // TODO delete undoHistory for this editor\r
}\r
}
\ No newline at end of file
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.UiUtil;\r
import eu.etaxonomy.taxeditor.actions.cdm.MakeGroupBasionymAction;\r
+import eu.etaxonomy.taxeditor.editor.name.Messages;\r
import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
import eu.etaxonomy.taxeditor.actions.cdm.SwapSynonymAndTaxonAction;\r
import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
\r
/**\r
* @author p.ciardelli\r
new OpenTaxonEditorAction(newTaxon).run();\r
\r
// Remove old taxon from recent names list\r
- TaxEditorPlugin.getDefault()\r
- .getObservableRecentNamesList().remove(taxon);\r
+ RecentNamesView.addRecentName(taxon);\r
}\r
\r
}\r
package eu.etaxonomy.taxeditor.actions.ui;\r
\r
import org.apache.log4j.Logger;\r
-import org.eclipse.core.databinding.observable.set.IObservableSet;\r
import org.eclipse.jface.action.Action;\r
import org.eclipse.jface.dialogs.MessageDialog;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\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.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.UiUtil;\r
import eu.etaxonomy.taxeditor.actions.cdm.SaveTaxonAction;\r
import eu.etaxonomy.taxeditor.editor.SelectTaxonDialog;\r
-import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
\r
/**\r
* @author p.ciardelli\r
\r
// if (!TaxEditorPlugin.getDefault().getObservableRecentNamesList().\r
// contains(oldTaxon)) { \r
- TaxEditorPlugin.getDefault().getObservableRecentNamesList().\r
- remove(oldTaxon);\r
+// TaxEditorPlugin.getDefault().getObservableRecentNamesList().\r
+// remove(oldTaxon);\r
+// RecentNamesView.removeRecentName(oldTaxon);\r
// }\r
\r
CdmSessionDataRepository.getDefault().removeTaxon(oldTaxon); \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
-package eu.etaxonomy.taxeditor.actions.ui;\r
-\r
-import java.util.Locale;\r
-import java.util.MissingResourceException;\r
-import java.util.ResourceBundle;\r
-\r
-import org.apache.log4j.Logger;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 09.10.2008\r
- * @version 1.0\r
- */\r
-public class Messages {\r
- private static final Logger logger = Logger.getLogger(Messages.class);\r
- private static final String BUNDLE_NAME = "eu.etaxonomy.taxeditor.actions.ui.messages"; //$NON-NLS-1$\r
-\r
- private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle\r
- .getBundle(BUNDLE_NAME, Locale.getDefault());\r
-\r
- private Messages() {\r
- }\r
-\r
- public static String getString(String key) {\r
- try {\r
- return RESOURCE_BUNDLE.getString(PreferencesUtil.concatCodeMessageSuffix(key));\r
- } catch (MissingResourceException e1) {\r
- try {\r
- return RESOURCE_BUNDLE.getString(key);\r
- } catch (MissingResourceException e2) {\r
- return '!' + key + '!';\r
- } \r
- }\r
- }\r
-\r
- public static String getString(String key, TaxonNameBase name) {\r
- if (name instanceof BotanicalName) {\r
- key += "." + ITaxEditorConstants.CODE_PREFERENCE_ICBN;\r
- } else if (name instanceof ZoologicalName) {\r
- key += "." + ITaxEditorConstants.CODE_PREFERENCE_ICZN;\r
- } else {\r
- getString(key);\r
- }\r
- try {\r
- return RESOURCE_BUNDLE.getString(key);\r
- } catch (MissingResourceException e2) {\r
- return '!' + key + '!';\r
- }\r
- }\r
-}\r
\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;\r
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
-import eu.etaxonomy.taxeditor.model.CdmUtil;\r
import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
\r
/**\r
name.setTitleCache("", false);\r
this.taxon = Taxon.NewInstance(name, \r
CdmSessionDataRepository.getDefault().getDefaultSec());\r
+ \r
+ // Note: don't add taxon to repository - it's not yet valid\r
+\r
} else {\r
\r
// If this taxon is not visible in the tree, open node\r
treeViewer.revealTaxon(taxon);\r
}\r
\r
- // Add to recent names list if not already there \r
- if (!TaxEditorPlugin.getDefault().getObservableRecentNamesList().contains(taxon)) {\r
- TaxEditorPlugin.getDefault().getObservableRecentNamesList().add(0, taxon);\r
- }\r
+ // Add to recent names list\r
+ RecentNamesView.addRecentName(taxon);\r
}\r
\r
- IEditorInput input = new NameEditorInput(taxon);\r
try {\r
- UiUtil.openEditor(input, MultiPageTaxonEditor.ID);\r
+ UiUtil.openTaxonEditor(taxon);\r
} catch (PartInitException e) {\r
e.printStackTrace();\r
}\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.UiUtil;\r
import eu.etaxonomy.taxeditor.actions.cdm.RemoveBasionymFromGroupAction;\r
+import eu.etaxonomy.taxeditor.editor.name.Messages;\r
import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
+++ /dev/null
-AddBasionymCompositeAction.0.ICBN=Set as basionym for homotypical group\r
-AddBasionymCompositeAction.0.ICZN=Set as original combination for homotypical group\r
-RemoveBasionymCompositeAction.0.ICBN=Remove as basionym for homotypical group\r
-RemoveBasionymCompositeAction.0.ICZN=Remove as original combination for homotypical group\r
package eu.etaxonomy.taxeditor.editor;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.ObjectUndoContext;\r
import org.eclipse.core.runtime.IAdaptable;\r
import org.eclipse.core.runtime.IProgressMonitor;\r
import org.eclipse.jface.action.IMenuManager;\r
import org.eclipse.jface.action.IStatusLineManager;\r
import org.eclipse.jface.action.IToolBarManager;\r
-import org.eclipse.jface.viewers.ISelection;\r
import org.eclipse.jface.viewers.ISelectionProvider;\r
import org.eclipse.jface.viewers.StructuredSelection;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.widgets.Control;\r
import org.eclipse.swt.widgets.Display;\r
import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.ui.IActionBars;\r
import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IEditorSite;\r
import org.eclipse.ui.IPartListener2;\r
-import org.eclipse.ui.ISelectionListener;\r
import org.eclipse.ui.IWorkbenchPage;\r
-import org.eclipse.ui.IWorkbenchPart;\r
import org.eclipse.ui.IWorkbenchPartReference;\r
import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.actions.ActionFactory;\r
import org.eclipse.ui.forms.IManagedForm;\r
import org.eclipse.ui.forms.ManagedForm;\r
import org.eclipse.ui.forms.widgets.ScrolledForm;\r
import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+import org.eclipse.ui.operations.RedoActionHandler;\r
+import org.eclipse.ui.operations.UndoActionHandler;\r
import org.eclipse.ui.part.EditorPart;\r
import org.eclipse.ui.views.properties.IPropertySheetPage;\r
import org.eclipse.ui.views.properties.IPropertySource;\r
* <code>IAdaptable</code> in order to display properties of the objects whose UI elements have focus. \r
* <p>\r
* Implementing classes can choose to show an object in the property sheet when the\r
- * <code>AbstractTaxonEditorView</code> gets focus, by passing the object to the method\r
+ * <code>AbstractTaxonEditor</code> gets focus, by passing the object to the method\r
* <code>setDefaultPropertySheetObject</code>, for instance, in the method<code>init</code>.\r
* </p>\r
* @author p.ciardelli\r
* @created 10.09.2008\r
* @version 1.0\r
*/\r
-public abstract class AbstractTaxonEditorView extends EditorPart implements\r
+public abstract class AbstractTaxonEditor extends EditorPart implements\r
IAdaptable {\r
private static final Logger logger = Logger\r
- .getLogger(AbstractTaxonEditorView.class);\r
+ .getLogger(AbstractTaxonEditor.class);\r
\r
private Taxon taxon;\r
\r
protected ScrolledForm scrolledForm; \r
protected Composite parent;\r
protected ISelectionProvider provider;\r
+ protected IUndoContext undoContext;\r
\r
- private IHasPropertySource selectedObject;\r
+ protected IHasPropertySource selectedObject;\r
\r
/* (non-Javadoc)\r
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)\r
this.getSite().setSelectionProvider(provider);\r
}\r
\r
+ private void initUndoContext() { \r
+ undoContext = new ObjectUndoContext(this); \r
+ // getEditorSite returns multipageeditor, NOT this\r
+ // UndoActionHandler expects a IWorkbenchPartSite\r
+\r
+// UndoActionHandler undoHandler = new UndoActionHandler(getEditorSite(), undoContext);\r
+// IActionBars actionBars = getEditorSite().getActionBars();\r
+ UndoActionHandler undoHandler = new UndoActionHandler(getSite(), undoContext);\r
+ RedoActionHandler redoHandler = new RedoActionHandler(getSite(), undoContext);\r
+ IActionBars actionBars = getEditorSite().getActionBars();\r
+ actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(), undoHandler);\r
+ actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(), redoHandler);\r
+ }\r
+ \r
+ public IUndoContext getUndoContext() {\r
+ return undoContext;\r
+ }\r
+\r
/* (non-Javadoc)\r
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()\r
*/\r
* @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)\r
*/\r
public void createPartControl(Composite composite) {\r
+\r
+ initUndoContext();\r
\r
managedForm = new ManagedForm(composite) {\r
public void dirtyStateChanged() {\r
protected Taxon getTaxon() {\r
return taxon;\r
}\r
+ \r
+ public void setDirty() {\r
+ managedForm.dirtyStateChanged();\r
+ }\r
}\r
protected TableWrapLayout layout;\r
private Label draggableLabel;\r
protected IManagedForm managedForm;\r
- private Taxon taxon;\r
+ protected Taxon taxon;\r
\r
private CompositeBorderDecorator borderDecorator;\r
\r
protected void createLineWrapSupport() {\r
new LineWrapSupport(getTextViewer(), managedForm);\r
}\r
- \r
- /**\r
- * Makes cosmetic changes to an <code>EditorGroupedComposite</code> appropriate\r
- * to the object in its <code>data</code> field. For instance, if the <code>data</code>\r
- * type changes, this method would be called to change the <code>Composite</code>'s \r
- * appearance. \r
- * \r
- * @param transformation\r
- */\r
- abstract public void transform(String transformation);\r
- \r
+ \r
/* (non-Javadoc)\r
* @see eu.etaxonomy.taxeditor.editor.name.GroupedComposite#createContent()\r
*/\r
*/\r
protected ContextMenu createContextMenu() {\r
return new ContextMenu(getDraggableLabel());\r
-// return new ContextMenu(this);\r
}\r
\r
public void unpaintBorder() {\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 java.util.HashMap;\r
+import java.util.Map;\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.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.name.AcceptedNameComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.HomotypicalGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.MisappliedGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.MisappliedNameComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.SynonymComposite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 08.01.2009\r
+ * @version 1.0\r
+ */\r
+public class FreeTextElementFactory implements IFreeTextElementFactory {\r
+ private static final Logger logger = Logger\r
+ .getLogger(FreeTextElementFactory.class);\r
+ \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
+ \r
+ public static IFreeTextElementFactory getDefault() {\r
+ if (factory == null) {\r
+ factory = new FreeTextElementFactory();\r
+ }\r
+ return factory;\r
+ }\r
+ \r
+ public Composite createAcceptedTaxon(IManagedForm form, Taxon taxon) {\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
+ \r
+ // Create a homotypic group composite for the accepted taxon\r
+ HomotypicalGroup group = taxon.getHomotypicGroup();\r
+ Assert.isNotNull(group, "Taxon does not have a homotypic group");\r
+ Composite groupComposite = createHomotypicalGroup(taxon, group);\r
+ \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
+ }\r
+ \r
+ public Composite createSynonym(Synonym synonym, Taxon taxon) {\r
+ \r
+ // Get the taxon's form\r
+ IManagedForm form = getForm(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
+ HomotypicalGroup group = synonym.getHomotypicGroup();\r
+ Assert.isNotNull(group, "Synonym does not have a 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
+ UiUtil.getTaxonNameEditor(taxon).getHomotypicGroup(group);\r
+ if (groupComposite == null) {\r
+ groupComposite = createHomotypicalGroup(taxon, group);\r
+ }\r
+ \r
+ // Create a synonym composite in the homotypic group\r
+ Composite synonymComposite = \r
+ new SynonymComposite(groupComposite, form, taxon, synonym);\r
+ \r
+ return synonymComposite;\r
+ }\r
+ \r
+ @Override\r
+ public Composite createMisappliedName(Taxon misappliedName, Taxon taxon) {\r
+\r
+ // Get the taxon's form\r
+ IManagedForm form = getForm(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
+ UiUtil.getTaxonNameEditor(taxon).getMisappliedGroup();\r
+ if (groupComposite == null) {\r
+ groupComposite = createMisappliedGroup(taxon);\r
+ }\r
+ \r
+ // Create the name's composite\r
+ Composite composite = new MisappliedNameComposite\r
+ (groupComposite, form, taxon, misappliedName);\r
+ \r
+ return composite;\r
+ }\r
+ \r
+ \r
+ public Composite createMisappliedGroup(Taxon taxon) {\r
+ \r
+ // Get the taxon's form\r
+ IManagedForm form = getForm(taxon);\r
+\r
+ // Create the group composite\r
+ Composite groupComposite = new MisappliedGroupComposite(getTopLevelComposite(form), taxon);\r
+ new CompositeBorderDecorator(groupComposite, form);\r
+ \r
+ return groupComposite;\r
+ }\r
+ \r
+ public Composite createHomotypicalGroup(Taxon taxon, HomotypicalGroup group) {\r
+\r
+ // Get the taxon's form\r
+ IManagedForm form = getForm(taxon);\r
+\r
+ // Create the group composite\r
+ Composite groupComposite = new HomotypicalGroupComposite(getTopLevelComposite(form), taxon, group);\r
+ new CompositeBorderDecorator(groupComposite, form); \r
+ \r
+ return groupComposite;\r
+ }\r
+\r
+ private Map<Taxon, IManagedForm> getTaxonForms() {\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
+ }\r
+ \r
+ private Composite getTopLevelComposite(IManagedForm form) {\r
+ return form.getForm().getBody();\r
+ }\r
+}\r
\r
private DropTarget target;\r
private DropTargetListener dropListener;\r
- \r
- /**\r
- * Sets whether or not to dispose of this <code>Composite</code>\r
- * when all its children have been disposed.\r
- */\r
- private boolean isDisposeEmpty;\r
- \r
+ \r
public GroupComposite(Composite parent) {\r
super(parent, SWT.NONE);\r
\r
}\r
}\r
}\r
-\r
- public boolean isDisposeEmpty() {\r
- return isDisposeEmpty;\r
- }\r
-\r
- public void setDisposeEmpty(boolean isDisposeEmpty) {\r
- this.isDisposeEmpty = isDisposeEmpty;\r
- }\r
}\r
if (draggable) {\r
\r
if (dragger != null) {\r
- // Already initalized\r
+ // Already initialized\r
return;\r
}\r
\r
Composite oldGrandparent = oldParent.getParent();\r
\r
if (super.setParent(parent)) {\r
- if (oldParent instanceof EditorGroupComposite\r
+ if (oldParent instanceof GroupComposite\r
&& oldParent.getChildren().length == 0) {\r
oldParent.dispose();\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.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\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
+/** \r
+ * @author p.ciardelli\r
+ * @created 08.01.2009\r
+ * @version 1.0\r
+ */\r
+public interface IFreeTextElementFactory {\r
+\r
+ public Composite createAcceptedTaxon(IManagedForm form, Taxon taxon);\r
+ \r
+ public Composite createSynonym(Synonym synonym, Taxon taxon);\r
+\r
+ public Composite createMisappliedName(Taxon misappliedName, Taxon taxon);\r
+ \r
+ public Composite createHomotypicalGroup(Taxon taxon, HomotypicalGroup group);\r
+ \r
+ public Composite createMisappliedGroup(Taxon taxon);\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.eclipse.swt.widgets.Composite;\r
-\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
-/**\r
- * @author p.ciardelli\r
- * @created 22.12.2008\r
- * @version 1.0\r
- */\r
-public interface IFreeTextElementRepository {\r
-\r
- public Composite getTaxon(Taxon taxon);\r
- \r
- public Composite createTaxon(Taxon taxon);\r
- \r
- public Composite getSynonym(Taxon taxon, Synonym synonym);\r
- \r
- public Composite createSynonym(Taxon taxon, Synonym synonym);\r
- \r
- public Composite getHomotypicGroup(Taxon taxon, HomotypicalGroup group);\r
- \r
- public Composite getMisappliedName(Taxon taxon, Taxon misappliedName);\r
- \r
- public Composite createMisappliedName(Taxon taxon, Taxon misappliedName);\r
- \r
- public Composite getMisappliedNameGroup(Taxon taxon);\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.eclipse.swt.widgets.Composite;\r
+\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.TaxonBase;\r
+\r
+/**\r
+ * @author p.ciardell\r
+ * @created 22.12.2008\r
+ * @version 1.0\r
+ */\r
+public interface INameEditorCompositeRepository {\r
+\r
+ public Composite getAcceptedName();\r
+ \r
+ public Composite getSynonym(Synonym synonym);\r
+ \r
+ public Composite getHomotypicGroup(HomotypicalGroup group);\r
+ \r
+ public Composite getMisappliedName(Taxon misappliedName);\r
+ \r
+ public Composite getMisappliedGroup();\r
+}\r
import org.eclipse.swt.custom.StyledText;\r
import org.eclipse.swt.events.ModifyEvent;\r
import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.ui.forms.IManagedForm;\r
import org.eclipse.ui.forms.widgets.ScrolledForm;\r
\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.name.TaxonNameEditorView;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
/**\r
* \r
- * Generates the tabbed editor with <code>TaxonNameEditorView</code> on top and tabs for\r
+ * Generates the tabbed editor with <code>TaxonNameEditor</code> on top and tabs for\r
* "Desriptions", "Concepts", "Geography", etc.\r
* \r
* @author p.ciardelli\r
protected void createPages() {\r
\r
try {\r
- addPage(0, new TaxonNameEditorView(), getEditorInput());\r
+ addPage(0, new TaxonNameEditor(), getEditorInput());\r
setPageText(0, "Name");\r
\r
// TODO lazy create\r
setFocus();\r
}\r
\r
- @Override\r
public void transform(String transformation) {\r
setDraggable(false);\r
setFont(DESCRIPTION_LABEL_FONT);\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.AbstractTaxonEditorView;\r
+import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
import eu.etaxonomy.taxeditor.editor.IHasPropertySource;\r
* @created 25.08.2008\r
* @version 1.0\r
*/\r
-public class TaxonDescriptionEditorView extends AbstractTaxonEditorView {\r
+public class TaxonDescriptionEditorView extends AbstractTaxonEditor {\r
private static final Logger logger = Logger\r
.getLogger(TaxonDescriptionEditorView.class);\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.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.actions.ui.ChangeTaxonToSynonymAction;\r
+import eu.etaxonomy.taxeditor.actions.ui.MoveTaxonDialogAction;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class AcceptedNameComposite extends NameComposite {\r
+ private static final Logger logger = Logger\r
+ .getLogger(AcceptedNameComposite.class);\r
+ \r
+ public AcceptedNameComposite(Composite groupComposite, IManagedForm form,\r
+ Taxon taxon) {\r
+ super(groupComposite, form, NameComposite.ACCEPTED_TAXON, taxon);\r
+ \r
+ setDraggable(false);\r
+ setIcon(ACCEPTED_ICON);\r
+ setFont(ACCEPTED_FONT);\r
+ setIndent(ACCEPTED_INDENT);\r
+\r
+ createMenu();\r
+ }\r
+\r
+ private void createMenu() {\r
+ ContextMenu contextMenu = createContextMenu();\r
+\r
+ // TODO Make action "Create autonym and subspecies"\r
+\r
+ Action changeTaxonAction = new ChangeTaxonToSynonymAction(getTaxon());\r
+ contextMenu.addAction(changeTaxonAction);\r
+\r
+ Action moveTaxonAction = new MoveTaxonDialogAction(getTaxon());\r
+ contextMenu.addAction(moveTaxonAction);\r
+ }\r
+}
\ No newline at end of file
--- /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.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\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 HomotypicalGroupComposite extends GroupComposite {\r
+ private static final Logger logger = Logger\r
+ .getLogger(HomotypicalGroupComposite.class);\r
+ \r
+ private Taxon taxon;\r
+ private HomotypicalGroup group;\r
+ \r
+ public HomotypicalGroupComposite(Composite parent, Taxon taxon,\r
+ HomotypicalGroup group) {\r
+ \r
+ super(parent);\r
+ \r
+ this.taxon = taxon;\r
+ this.group = group;\r
+ }\r
+ \r
+ public Taxon getTaxon() {\r
+ return taxon;\r
+ }\r
+ \r
+ public HomotypicalGroup getGroup() {\r
+ return group;\r
+ }\r
+}\r
+/**\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy \r
+ * http://www.e-taxonomy.eu\r
+ * \r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
package eu.etaxonomy.taxeditor.editor.name;\r
\r
+import java.util.Locale;\r
import java.util.MissingResourceException;\r
import java.util.ResourceBundle;\r
\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 09.10.2008\r
+ * @version 1.0\r
+ */\r
public class Messages {\r
+ private static final Logger logger = Logger.getLogger(Messages.class);\r
private static final String BUNDLE_NAME = "eu.etaxonomy.taxeditor.editor.name.messages"; //$NON-NLS-1$\r
\r
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle\r
- .getBundle(BUNDLE_NAME);\r
+ .getBundle(BUNDLE_NAME, Locale.getDefault());\r
\r
private Messages() {\r
}\r
\r
public static String getString(String key) {\r
+ try {\r
+ return RESOURCE_BUNDLE.getString(PreferencesUtil.concatCodeMessageSuffix(key));\r
+ } catch (MissingResourceException e1) {\r
+ try {\r
+ return RESOURCE_BUNDLE.getString(key);\r
+ } catch (MissingResourceException e2) {\r
+ return '!' + key + '!';\r
+ } \r
+ }\r
+ }\r
+\r
+ public static String getString(String key, TaxonNameBase name) {\r
+ if (name instanceof BotanicalName) {\r
+ key += "." + ITaxEditorConstants.CODE_PREFERENCE_ICBN;\r
+ } else if (name instanceof ZoologicalName) {\r
+ key += "." + ITaxEditorConstants.CODE_PREFERENCE_ICZN;\r
+ } else {\r
+ getString(key);\r
+ }\r
try {\r
return RESOURCE_BUNDLE.getString(key);\r
- } catch (MissingResourceException e) {\r
+ } catch (MissingResourceException e2) {\r
return '!' + key + '!';\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.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.widgets.Composite;\r
+\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 MisappliedGroupComposite extends GroupComposite {\r
+ private static final Logger logger = Logger\r
+ .getLogger(MisappliedGroupComposite.class);\r
+ \r
+ private Taxon taxon;\r
+ \r
+ public MisappliedGroupComposite(Composite parent, Taxon taxon) {\r
+ super(parent);\r
+ \r
+ this.taxon = taxon;\r
+ }\r
+ \r
+ public Taxon getTaxon() {\r
+ return taxon;\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.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\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.IStatus;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.actions.ui.DeleteMisappliedNameCompositeAction;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeMisappliedNameToSynonymOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeSynonymToMisappliedNameOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class MisappliedNameComposite extends NameComposite {\r
+ private static final Logger logger = Logger\r
+ .getLogger(MisappliedNameComposite.class);\r
+ \r
+ private Taxon misappliedName;\r
+ \r
+ public MisappliedNameComposite(Composite parent, IManagedForm form,\r
+ Taxon taxon, Taxon misappliedName) {\r
+ super(parent, form, NameComposite.MISAPPLIED_NAME, misappliedName);\r
+ \r
+ this.taxon = taxon;\r
+ this.misappliedName = misappliedName;\r
+ \r
+ setDraggable(true);\r
+ setIcon(MISAPPLIEDNAME_ICON);\r
+ setFont(MISAPPLIEDNAME_FONT);\r
+ setIndent(MISAPPLIEDNAME_INDENT);\r
+\r
+ createMenu();\r
+ }\r
+ \r
+ public Taxon getMisappliedName() {\r
+ return misappliedName;\r
+ }\r
+ \r
+ private void createMenu() {\r
+\r
+ ContextMenu contextMenu = createContextMenu();\r
+\r
+ Action deleteMisappliedNameAction = new DeleteMisappliedNameCompositeAction(\r
+ this, getTaxon());\r
+ contextMenu.addAction(deleteMisappliedNameAction);\r
+ }\r
+ \r
+ public boolean setParent(Composite parent) {\r
+\r
+ if (super.setParent(parent)) { \r
+ \r
+ // If this has been moved to the misapplied names group, do nothing\r
+ if (parent instanceof MisappliedGroupComposite) {\r
+ return true;\r
+ }\r
+\r
+ // Has this been moved to a HomotypicalGroup?\r
+ if (parent instanceof HomotypicalGroupComposite) {\r
+ \r
+ HomotypicalGroup homotypicalGroup = \r
+ ((HomotypicalGroupComposite)parent).getGroup();\r
+ \r
+ IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+ IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ IUndoableOperation operation = new ChangeMisappliedNameToSynonymOperation\r
+ ("change type", undoContext, taxon, misappliedName, homotypicalGroup);\r
+ \r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ return true;\r
+\r
+ }\r
+ return false;\r
+ }\r
+}\r
import java.beans.PropertyChangeListener;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\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.Assert;\r
+import org.eclipse.core.runtime.IStatus;\r
import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
import org.eclipse.swt.events.FocusAdapter;\r
import org.eclipse.swt.events.FocusEvent;\r
import org.eclipse.swt.graphics.Font;\r
import org.eclipse.ui.views.properties.IPropertySource;\r
\r
import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.actions.ui.AdaptCompositeToGroupAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.AddBasionymCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.ChangeCompositeToMisappliedNameAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.ChangeCompositeToNewTaxonAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.ChangeSynonymToTaxonUiAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.ChangeTaxonToSynonymAction;\r
import eu.etaxonomy.taxeditor.actions.ui.CreateNewHeterotypicCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.DeleteMisappliedNameCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.DeleteSynonymCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.MoveCompositeToMisappliedCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.MoveTaxonDialogAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.RemoveBasionymCompositeAction;\r
-import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
import eu.etaxonomy.taxeditor.editor.LineBreakListener;\r
import eu.etaxonomy.taxeditor.editor.ParseListener;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.CreateSynonymInNewGroupOperation;\r
import eu.etaxonomy.taxeditor.propertysheet.name.BotanicalNamePropertySource;\r
import eu.etaxonomy.taxeditor.propertysheet.name.NonViralNamePropertySource;\r
import eu.etaxonomy.taxeditor.propertysheet.name.TaxonBasePropertySource;\r
* @param parent\r
* @param managedForm\r
*/\r
- public NameComposite(Composite parent, IManagedForm managedForm, String compositeType, TaxonBase data) {\r
+ public NameComposite(Composite parent, IManagedForm managedForm, \r
+ String compositeType, TaxonBase data) {\r
super(parent, managedForm);\r
\r
createNameViewer();\r
createLineWrapSupport();\r
\r
setData(data);\r
- transform(compositeType);\r
+// if (compositeType != null) {\r
+// transform(compositeType);\r
+// }\r
\r
createParser(); \r
createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
}\r
}\r
\r
- /**\r
- * All cosmetic - non-data-related, i.e. icons, fonts, etc. -\r
- * transformations take place in this method.\r
- * \r
- * @param transformation\r
- */\r
- public void transform(String transformation) {\r
-\r
- // A name that is a basionym for its group\r
- if (transformation.equals(ADD_GROUP_BASIONYM)) {\r
- if (compositeType.equals(HOMOTYPIC_SYNONYM)) {\r
- setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
- } else {\r
- setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
- }\r
- }\r
-\r
- // A name that is NOT a basionym for its group \r
- if (transformation.equals(REMOVE_GROUP_BASIONYM)) {\r
- if (compositeType.equals(HOMOTYPIC_SYNONYM)) {\r
- setIcon(HOMOTYPIC_SYNONYM_ICON);\r
- } else {\r
- setIcon(HETEROTYPIC_SYNONYM_ICON);\r
- }\r
- }\r
-\r
- // A name that is the taxon's accepted name \r
- if (transformation.equals(ACCEPTED_TAXON)) {\r
- setDraggable(false);\r
- setIcon(ACCEPTED_ICON);\r
- setFont(ACCEPTED_FONT);\r
- setIndent(ACCEPTED_INDENT);\r
-\r
- createAcceptedMenu();\r
-\r
- compositeType = ACCEPTED_TAXON;\r
- }\r
-\r
- // A name that is a synonym for the taxon \r
- if (transformation.equals(HOMOTYPIC_SYNONYM)\r
- || transformation.equals(HETEROTYPIC_SYNONYM)) {\r
- setDraggable(true);\r
- setFont(SYNONYM_FONT);\r
- setIndent(SYNONYM_INDENT);\r
-\r
- createSynonymMenu();\r
- }\r
-\r
- // A name that is a homotypic synonym for the taxon \r
- if (transformation.equals(HOMOTYPIC_SYNONYM)) {\r
- if (!(getData() instanceof Synonym)) {\r
- return;\r
- }\r
- Synonym synonym = (Synonym) getData();\r
- if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
- setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
- } else {\r
- setIcon(HOMOTYPIC_SYNONYM_ICON);\r
- }\r
- compositeType = HOMOTYPIC_SYNONYM;\r
- }\r
-\r
- // A name that is a heterotypic synonym for the taxon \r
- if (transformation.equals(HETEROTYPIC_SYNONYM)) {\r
- if (!(getData() instanceof Synonym)) {\r
- return;\r
- }\r
- Synonym synonym = (Synonym) getData();\r
- if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
- setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
- } else {\r
- setIcon(HETEROTYPIC_SYNONYM_ICON);\r
- }\r
- compositeType = HETEROTYPIC_SYNONYM;\r
- }\r
-\r
- // A name that is a misapplied name for the taxon \r
- if (transformation.equals(MISAPPLIED_NAME)) {\r
-\r
- setDraggable(true);\r
- setIcon(MISAPPLIEDNAME_ICON);\r
- setFont(MISAPPLIEDNAME_FONT);\r
- setIndent(MISAPPLIEDNAME_INDENT);\r
-\r
- createMisappliedNameMenu();\r
-\r
- compositeType = MISAPPLIED_NAME;\r
- }\r
-\r
- // Prompt save before closing this editor\r
- setDirty(true);\r
- \r
- // Redraw\r
- managedForm.getForm().layout();\r
- }\r
-\r
/**\r
* Override of Composite.setData() which passes data along to\r
* <code>NameComposite</code>'s <code>TextViewer</code> where appropriate.\r
Composite parent = getParent();\r
final Composite grandParent = parent.getParent();\r
\r
- new CreateNewHeterotypicCompositeAction(text, managedForm)\r
- .run();\r
+// new CreateNewHeterotypicCompositeAction(text, managedForm)\r
+// .run();\r
+ \r
+ IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+ IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ IUndoableOperation operation = new CreateSynonymInNewGroupOperation\r
+ ("new heterotypic synonym", undoContext, taxon, text); //$NON-NLS-1$\r
+ \r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
\r
// setDirty(true);\r
}\r
\r
return (NameViewer) getTextViewer();\r
}\r
-\r
- /**\r
- * @param nameComposite\r
- */\r
- private void createSynonymMenu() {\r
-\r
- if (!(getData() instanceof Synonym)) {\r
- return;\r
- }\r
-\r
- // Create right-click context menu\r
- Synonym synonym = (Synonym) getData();\r
- ContextMenu contextMenu = createContextMenu();\r
-\r
- // Action to change composite to a misapplied name\r
- Action misappliedNameAction = new MoveCompositeToMisappliedCompositeAction(\r
- this, managedForm);\r
- contextMenu.addAction(misappliedNameAction);\r
-\r
- // Action to delete composite\r
- Action deleteSynonymAction = new DeleteSynonymCompositeAction(this,\r
- getTaxon());\r
- contextMenu.addAction(deleteSynonymAction);\r
-\r
- // Separator\r
- contextMenu.addSeparator();\r
-\r
- // Action to make the composite the basionym of the homotypic group\r
- final Action addBasionymAction = new AddBasionymCompositeAction(this);\r
- contextMenu.addAction(addBasionymAction);\r
-\r
- // Action to remove the composite as basionym of the homotypic group\r
- final Action removeBasionymAction = new RemoveBasionymCompositeAction(\r
- this);\r
- contextMenu.addAction(removeBasionymAction);\r
-\r
- // Listeners to activate / reactivate the above two actions as necessary\r
- addBasionymAction\r
- .addPropertyChangeListener(new IPropertyChangeListener() {\r
- public void propertyChange(\r
- org.eclipse.jface.util.PropertyChangeEvent event) {\r
- if (event.getProperty().equals(\r
- ITaxEditorConstants.BASIONYM)) {\r
- removeBasionymAction.setEnabled(true);\r
- transform(NameComposite.ADD_GROUP_BASIONYM);\r
- }\r
- }\r
- });\r
- removeBasionymAction\r
- .addPropertyChangeListener(new IPropertyChangeListener() {\r
- public void propertyChange(\r
- org.eclipse.jface.util.PropertyChangeEvent event) {\r
- if (event.getProperty().equals(\r
- ITaxEditorConstants.BASIONYM)) {\r
- addBasionymAction.setEnabled(true);\r
- transform(NameComposite.REMOVE_GROUP_BASIONYM);\r
- }\r
- }\r
- });\r
-\r
- // Separator\r
- contextMenu.addSeparator();\r
-\r
- // Action to change this synonym to the taxon's accepted name\r
- Action changeToThisTaxon = new ChangeSynonymToTaxonUiAction(synonym,\r
- getTaxon());\r
- contextMenu.addAction(changeToThisTaxon);\r
-\r
- // Action to make a new taxon with this synonym as the accepted name\r
- Action changeToNewAccepted = new ChangeCompositeToNewTaxonAction(this,\r
- getTaxon());\r
- contextMenu.addAction(changeToNewAccepted);\r
- }\r
-\r
- /**\r
- * @param nameComposite\r
- */\r
- private void createAcceptedMenu() {\r
-\r
- ContextMenu contextMenu = createContextMenu();\r
-\r
- // TODO Make action "Create autonym and subspecies"\r
-\r
- Action changeTaxonAction = new ChangeTaxonToSynonymAction(getTaxon());\r
- contextMenu.addAction(changeTaxonAction);\r
-\r
- Action moveTaxonAction = new MoveTaxonDialogAction(getTaxon());\r
- contextMenu.addAction(moveTaxonAction);\r
- }\r
-\r
- /**\r
- * @param nameComposite\r
- */\r
- private void createMisappliedNameMenu() {\r
-\r
- ContextMenu contextMenu = createContextMenu();\r
-\r
- Action deleteMisappliedNameAction = new DeleteMisappliedNameCompositeAction(\r
- this, getTaxon());\r
- contextMenu.addAction(deleteMisappliedNameAction);\r
- }\r
-\r
- public boolean setParent(Composite parent) {\r
-\r
- if (super.setParent(parent)) {\r
-\r
- // Has this been moved to the misapplied names group?\r
- if (parent.getData(ITaxEditorConstants.MISAPPLIED_NAME) != null) {\r
- new ChangeCompositeToMisappliedNameAction(this, managedForm)\r
- .run();\r
- }\r
-\r
- // Has this been moved to a HomotypicalGroup?\r
- if (parent.getData() instanceof HomotypicalGroup) {\r
- new AdaptCompositeToGroupAction(this,\r
- (EditorGroupComposite) parent).run();\r
- }\r
- return true;\r
-\r
- }\r
- return false;\r
- }\r
\r
public void setText(String text) {\r
Assert.isNotNull(getTextViewer(), \r
this.nameViewer = textViewer;\r
}\r
\r
- @Override\r
public IPropertySource getPropertySource() {\r
\r
// Property source for misapplied name\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.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\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.IStatus;\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.ui.forms.IManagedForm;\r
+\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.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeSynonymToMisappliedNameOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeSynonymToTaxonOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.MakeSynonymAcceptedOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.MakeSynonymGroupBasionymOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.RemoveSynonymOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.UnmakeSynonymGroupBasionymOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class SynonymComposite extends NameComposite {\r
+ private static final Logger logger = Logger\r
+ .getLogger(SynonymComposite.class);\r
+ \r
+ private Synonym synonym;\r
+ \r
+ public SynonymComposite(Composite parent, IManagedForm form,\r
+ Taxon taxon, Synonym synonym) {\r
+ super(parent, form, null, synonym);\r
+ \r
+ this.taxon = taxon;\r
+ this.synonym = synonym;\r
+ \r
+ setDraggable(true);\r
+ setFont(SYNONYM_FONT);\r
+ setIndent(SYNONYM_INDENT);\r
+ \r
+ if (isHomotypic()) {\r
+ if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
+ setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
+ } else {\r
+ setIcon(HOMOTYPIC_SYNONYM_ICON);\r
+ } \r
+ } else {\r
+ if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
+ setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
+ } else {\r
+ setIcon(HETEROTYPIC_SYNONYM_ICON);\r
+ }\r
+ }\r
+\r
+ createMenu();\r
+ }\r
+ \r
+ private boolean isHomotypic() {\r
+ HomotypicalGroup group = synonym.getHomotypicGroup();\r
+ return group.equals(taxon.getHomotypicGroup()); \r
+ }\r
+ \r
+ public Synonym getSynonym() {\r
+ return synonym;\r
+ }\r
+ \r
+ public boolean setParent(Composite parent) {\r
+\r
+ if (super.setParent(parent)) { \r
+ \r
+ // Has this been moved to the misapplied names group?\r
+ if (parent instanceof MisappliedGroupComposite) {\r
+ \r
+ IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+ IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ IUndoableOperation operation = new ChangeSynonymToMisappliedNameOperation\r
+ ("change to misapplication", undoContext, taxon, synonym); //$NON-NLS-1$\r
+ \r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ // Has this been moved to a HomotypicalGroup?\r
+ if (parent instanceof HomotypicalGroupComposite) {\r
+ \r
+ HomotypicalGroup homotypicalGroup = \r
+ ((HomotypicalGroupComposite)parent).getGroup();\r
+ \r
+ // Make sure we are not dropping synonym on its own group\r
+ if (homotypicalGroup.equals(synonym.getHomotypicGroup())) {\r
+ return true;\r
+ }\r
+\r
+ IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+ IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ IUndoableOperation operation = new ChangeHomotypicGroupOperation\r
+ ("change type", undoContext, taxon, synonym, homotypicalGroup); //$NON-NLS-1$\r
+ \r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ return true;\r
+\r
+ }\r
+ return false;\r
+ }\r
+ \r
+ /**\r
+ * @param nameComposite\r
+ */\r
+ private void createMenu() {\r
+\r
+ ContextMenu contextMenu = createContextMenu();\r
+\r
+ final IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+ final IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ \r
+ // Change composite to a misapplied name\r
+ String text = "Change synonym to misapplied name"; //$NON-NLS-1$\r
+ ImageDescriptor image = TaxEditorPlugin.getDefault()\r
+ .getImageDescriptor(ITaxEditorConstants.MISAPPLIED_NAME_ICON);\r
+ contextMenu.addAction(new Action(text, image){\r
+ \r
+ public void run() {\r
+ IUndoableOperation operation = new ChangeSynonymToMisappliedNameOperation\r
+ (this.getText(), undoContext, taxon, synonym);\r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ });\r
+ \r
+ // Remove composite\r
+ text = "Remove synonym from taxon"; //$NON-NLS-1$\r
+ 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 RemoveSynonymOperation\r
+ (this.getText(), undoContext, taxon, synonym);\r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } \r
+ }\r
+ });\r
+ \r
+ // Separator\r
+ contextMenu.addSeparator();\r
+ \r
+ // Make the synonym the basionym of the homotypic group\r
+ text = Messages.getString\r
+ ("AddBasionymCompositeAction.0", synonym.getName()); //$NON-NLS-1$\r
+ image = TaxEditorPlugin.getDefault()\r
+ .getImageDescriptor(ITaxEditorConstants.BASIONYM_ICON);\r
+ Action makeBasionymAction = new Action(text, image){\r
+ \r
+ public void run() {\r
+ IUndoableOperation operation = new MakeSynonymGroupBasionymOperation\r
+ (this.getText(), undoContext, taxon, synonym);\r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } \r
+ }\r
+ };\r
+ contextMenu.addAction(makeBasionymAction); \r
+ \r
+ // Action to remove the composite as basionym of the homotypic group\r
+ text = Messages.getString\r
+ ("RemoveBasionymCompositeAction.0", synonym.getName()); //$NON-NLS-1$\r
+ image = TaxEditorPlugin.getDefault()\r
+ .getImageDescriptor(ITaxEditorConstants.BASIONYM_ICON);\r
+ Action unmakeBasionymAction = new Action(text, image){\r
+ \r
+ public void run() {\r
+ IUndoableOperation operation = new UnmakeSynonymGroupBasionymOperation\r
+ (this.getText(), undoContext, taxon, synonym);\r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } \r
+ }\r
+ };\r
+ contextMenu.addAction(unmakeBasionymAction);\r
+ \r
+ if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
+ \r
+ // Gray out action for "make synonym group basionym"\r
+ makeBasionymAction.setEnabled(false);\r
+ } else {\r
+ \r
+ // Gray out action for "unmake synonym group basionym"\r
+ unmakeBasionymAction.setEnabled(false);\r
+ }\r
+ \r
+ // Separator\r
+ contextMenu.addSeparator();\r
+\r
+ // Change this synonym to the taxon's accepted name\r
+ text = "Make synonym this taxon's accepted taxon"; //$NON-NLS-1$\r
+ image = TaxEditorPlugin.getDefault()\r
+ .getImageDescriptor(ITaxEditorConstants.SWAP_SYNONYM_AND_TAXON_ICON);\r
+ Action swapAction = new Action(text, image){\r
+ \r
+ public void run() {\r
+ IUndoableOperation operation = new MakeSynonymAcceptedOperation\r
+ (this.getText(), undoContext, taxon, synonym);\r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } \r
+ }\r
+ };\r
+ contextMenu.addAction(swapAction);\r
+ // TODO fix operation\r
+ swapAction.setEnabled(false);\r
+ \r
+ // Make a new taxon with this synonym as the accepted name\r
+ text = "Use synonym name to make a new taxon"; //$NON-NLS-1$\r
+ image = TaxEditorPlugin.getDefault()\r
+ .getImageDescriptor(ITaxEditorConstants.SYNONYM_TO_TAXON_ICON);\r
+\r
+ contextMenu.addAction(new Action(text, image){\r
+ \r
+ public void run() {\r
+ IUndoableOperation operation = new ChangeSynonymToTaxonOperation\r
+ (this.getText(), undoContext, taxon, synonym);\r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } \r
+ }\r
+ });\r
+ }\r
+}
\ No newline at end of file
--- /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.name;\r
+\r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
+import java.util.HashSet;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\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.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.jface.dialogs.IMessageProvider;\r
+import org.eclipse.swt.dnd.DND;\r
+import org.eclipse.swt.dnd.DropTarget;\r
+import org.eclipse.swt.dnd.DropTargetAdapter;\r
+import org.eclipse.swt.dnd.DropTargetEvent;\r
+import org.eclipse.swt.dnd.Transfer;\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.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.actions.WidgetTransfer;\r
+import eu.etaxonomy.taxeditor.actions.ui.AdaptCompositeToGroupAction;\r
+import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.FreeTextElementFactory;\r
+import eu.etaxonomy.taxeditor.editor.INameEditorCompositeRepository;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.05.2008\r
+ * @version 1.0\r
+ */\r
+public class TaxonNameEditor extends AbstractTaxonEditor \r
+ implements INameEditorCompositeRepository{\r
+ private static final Logger logger = Logger.getLogger(TaxonNameEditor.class);\r
+ \r
+ /**\r
+ * Shared listener that sets dirty state to true \r
+ * when any registered property changes \r
+ */\r
+ private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
+ public void propertyChange(PropertyChangeEvent event) {\r
+ if (event.getPropertyName().equals(ITaxEditorConstants.PROPERTY_SHEET_CHANGE)) {\r
+ firePropertyChange(PROP_DIRTY);\r
+ }\r
+ }\r
+ }; \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
+ \r
+ UiUtil.addTaxonNameEditor(taxon, this);\r
+ \r
+ // Register listeners for any change in accepted name or set of relations\r
+ taxon.getName().addPropertyChangeListener(taxonChangeListener);\r
+ taxon.addPropertyChangeListener(taxonChangeListener);\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
+ public void createPartControl(final Composite composite) {\r
+\r
+ super.createPartControl(composite);\r
+ \r
+ Taxon taxon = getTaxon();\r
+ \r
+ NameComposite acceptedNameComposite = \r
+ (NameComposite) FreeTextElementFactory.getDefault().\r
+ createAcceptedTaxon(managedForm, taxon);\r
+ \r
+ for (TaxonBase taxonBase : new IterableSynonymyList(taxon)) {\r
+ if (taxonBase instanceof Synonym) {\r
+ FreeTextElementFactory.getDefault().createSynonym((Synonym) taxonBase, taxon); \r
+ } else {\r
+ FreeTextElementFactory.getDefault().createMisappliedName((Taxon) taxonBase, taxon);\r
+ }\r
+ }\r
+ \r
+// // Create a homotypic group composite for the accepted taxon\r
+// HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup();\r
+// EditorGroupComposite homotypicGroupComposite = new EditorGroupComposite(parent, managedForm, homotypicGroup); \r
+// homotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
+// \r
+// NameComposite nameCompositeWithWarning = null;\r
+// \r
+// // Add accepted taxon to the group\r
+// NameComposite acceptedNameComposite = new NameComposite(homotypicGroupComposite, managedForm, NameComposite.ACCEPTED_TAXON, taxon);\r
+// \r
+// warnIfNameConflictWithParent(acceptedNameComposite);\r
+// \r
+// IterableSynonymyList synonymyList = new IterableSynonymyList(taxon);\r
+// HomotypicalGroup lastHeterotypicGroup = null;\r
+// HomotypicalGroup currentHeterotypicGroup = null;\r
+// EditorGroupComposite heterotypicGroupComposite = null;\r
+// EditorGroupComposite misappliedNameGroupComposite = null;\r
+// \r
+// for (TaxonBase synonymOrMisName : synonymyList) {\r
+// if (synonymOrMisName instanceof Synonym) {\r
+// \r
+// Synonym synonym = (Synonym) synonymOrMisName;\r
+// currentHeterotypicGroup = synonym.getHomotypicGroup();\r
+// \r
+// if (currentHeterotypicGroup.equals(homotypicGroup)) {\r
+// \r
+// NameComposite homotypicSynonymComposite = new NameComposite(homotypicGroupComposite, managedForm, NameComposite.HOMOTYPIC_SYNONYM, synonym);\r
+// \r
+// } else {\r
+// \r
+// if (!currentHeterotypicGroup.equals(lastHeterotypicGroup)) {\r
+// \r
+// // Create a new group composite\r
+// heterotypicGroupComposite = new EditorGroupComposite(parent, managedForm, currentHeterotypicGroup);\r
+// heterotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
+// lastHeterotypicGroup = currentHeterotypicGroup;\r
+// }\r
+// \r
+// NameComposite heterotypicSynonymComposite = new NameComposite(heterotypicGroupComposite, managedForm, NameComposite.HETEROTYPIC_SYNONYM, synonym);\r
+// }\r
+// } else {\r
+// \r
+// Taxon misappliedName = (Taxon) synonymOrMisName;\r
+// if (UiUtil.getMisappliedNameGroupComposite(managedForm) == null) {\r
+// misappliedNameGroupComposite = UiUtil.createMisappliedNameGroupComposite(managedForm);\r
+// }\r
+// NameComposite misappliedNameComposite = new NameComposite(misappliedNameGroupComposite, managedForm, NameComposite.MISAPPLIED_NAME, misappliedName);\r
+// }\r
+// }\r
+ \r
+ // Listen for names being dragged outside of existing homotypic groups -\r
+ // user wants to create a new group\r
+ Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};\r
+ int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
+ DropTarget target = new DropTarget(parent, operations);\r
+ target.setTransfer(types);\r
+ target.addDropListener(new DropTargetAdapter() {\r
+ \r
+ public void drop(DropTargetEvent event) {\r
+ \r
+ IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+ \r
+ Synonym synonym = null;\r
+ if(event.data instanceof SynonymComposite){\r
+ synonym = ((SynonymComposite)event.data).getSynonym();\r
+ }\r
+ \r
+ IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(getTaxon());\r
+ IUndoableOperation operation = new ChangeHomotypicGroupOperation\r
+ ("change type", undoContext, \r
+ getTaxon(), synonym, HomotypicalGroup.NewInstance());\r
+ \r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ \r
+ } \r
+ });\r
+ \r
+ // We've added elements to the managed form, so redraw it\r
+ scrolledForm.reflow(true);\r
+ \r
+ setSelection(acceptedNameComposite);\r
+ acceptedNameComposite.drawBorder();\r
+ }\r
+ \r
+ \r
+ \r
+ public boolean redraw(){\r
+ \r
+ Taxon taxon = getTaxon();\r
+ \r
+ for (Control child : parent.getChildren()){\r
+ child.dispose();\r
+ }\r
+ \r
+ this.selectedObject = null;\r
+ \r
+ NameComposite acceptedNameComposite = \r
+ (NameComposite) FreeTextElementFactory.getDefault().\r
+ createAcceptedTaxon(managedForm, taxon);\r
+ \r
+ for (TaxonBase taxonBase : new IterableSynonymyList(taxon)) {\r
+ if (taxonBase instanceof Synonym) {\r
+ FreeTextElementFactory.getDefault().createSynonym((Synonym) taxonBase, taxon); \r
+ } else {\r
+ FreeTextElementFactory.getDefault().createMisappliedName((Taxon) taxonBase, taxon);\r
+ }\r
+ }\r
+ \r
+ scrolledForm.reflow(true);\r
+ \r
+ return true;\r
+ }\r
+ \r
+ private NameComposite warnIfNameConflictWithParent(NameComposite nameComposite) {\r
+ \r
+ String message = null;\r
+ Taxon taxon = getTaxon();\r
+ \r
+ if (nameComposite.getData() instanceof Taxon) {\r
+ taxon = (Taxon) nameComposite.getData();\r
+ Taxon parentTaxon = taxon.getTaxonomicParent();\r
+ \r
+ if (parentTaxon != null && taxon.getName() instanceof NonViralName \r
+ && parentTaxon.getName() instanceof NonViralName) {\r
+ NonViralName name = (NonViralName) taxon.getName();\r
+ NonViralName parentName = (NonViralName) parentTaxon.getName();\r
+ \r
+ Rank rank = name.getRank();\r
+ if (rank != null) {\r
+ if (rank.equals(Rank.SPECIES())) {\r
+ String genus = name.getGenusOrUninomial();\r
+ String parentGenus = parentName.getGenusOrUninomial();\r
+\r
+ // If either taxon has a problem, name fields will be null\r
+ if (genus != null && parentGenus != null) {\r
+ if (!parentGenus.equals(genus)) {\r
+ message = "Warning: taxon's genus does not match parent taxon's genus.";\r
+ }\r
+ }\r
+ }\r
+ \r
+ if (rank.equals(Rank.SUBSPECIES())) {\r
+ String specificEpithet = name.getSpecificEpithet();\r
+ String parentSpecificEpithet = parentName.getSpecificEpithet();\r
+ \r
+ // If either taxon has a problem, name fields will be null\r
+ if (specificEpithet != null && parentSpecificEpithet != null) {\r
+ if (!parentSpecificEpithet.equals(specificEpithet)) {\r
+ message = "Warning: taxon's specific epithet does not match parent taxon's specific epithet.";\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ }\r
+ }\r
+ \r
+ if (message != null && nameComposite.getTextViewer() != null) {\r
+ managedForm.getMessageManager().addMessage\r
+ ("TEST2", message, null, IMessageProvider.WARNING, \r
+ nameComposite.getTextViewer().getTextWidget());\r
+ scrolledForm.setMessage(null, 0, null);\r
+ }\r
+ return nameComposite;\r
+ }\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
+ \r
+ @Override\r
+ public Composite getAcceptedName() {\r
+ \r
+ for(Composite c : getAllComposites()){\r
+ if(c instanceof AcceptedNameComposite){\r
+ return c;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public Composite getHomotypicGroup(HomotypicalGroup group) {\r
+ for(Composite c : getAllComposites()){\r
+ if(c instanceof HomotypicalGroupComposite){\r
+ if (group.equals(\r
+ ((HomotypicalGroupComposite) c).getGroup())) {\r
+ return c;\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public Composite getMisappliedGroup() {\r
+ for(Composite c : getAllComposites()){\r
+ if(c instanceof MisappliedGroupComposite){\r
+ return c;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public Composite getMisappliedName(Taxon misappliedName) {\r
+ for(Composite c : getAllComposites()){\r
+ if(c instanceof MisappliedNameComposite){\r
+ if (misappliedName.equals(\r
+ ((MisappliedNameComposite) c).getMisappliedName())) {\r
+ return c;\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public Composite getSynonym(Synonym synonym) {\r
+ for(Composite c : getAllComposites()){\r
+ if(c instanceof SynonymComposite){\r
+ if (synonym.equals \r
+ (((SynonymComposite) c).getSynonym())) {\r
+ return c;\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+}
\ No newline at end of file
+++ /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.name;\r
-\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.dialogs.IMessageProvider;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DropTarget;\r
-import org.eclipse.swt.dnd.DropTargetAdapter;\r
-import org.eclipse.swt.dnd.DropTargetEvent;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.widgets.Composite;\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.name.HomotypicalGroup;\r
-import eu.etaxonomy.cdm.model.name.NonViralName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.actions.WidgetTransfer;\r
-import eu.etaxonomy.taxeditor.actions.ui.AdaptCompositeToGroupAction;\r
-import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditorView;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 15.05.2008\r
- * @version 1.0\r
- */\r
-public class TaxonNameEditorView extends AbstractTaxonEditorView {\r
- private static final Logger logger = Logger.getLogger(TaxonNameEditorView.class);\r
- \r
- /**\r
- * Shared listener that sets dirty state to true \r
- * when any registered property changes \r
- */\r
- private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
- public void propertyChange(PropertyChangeEvent event) {\r
- if (event.getPropertyName().equals(ITaxEditorConstants.PROPERTY_SHEET_CHANGE)) {\r
- firePropertyChange(PROP_DIRTY);\r
- }\r
- }\r
- }; \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
- \r
- // Register listeners for any change in accepted name or set of relations\r
- taxon.getName().addPropertyChangeListener(taxonChangeListener);\r
- taxon.addPropertyChangeListener(taxonChangeListener);\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
- public void createPartControl(final Composite composite) {\r
-\r
- super.createPartControl(composite);\r
- \r
- Taxon taxon = getTaxon();\r
- \r
- // Create a homotypic group composite for the accepted taxon\r
- HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup();\r
- EditorGroupComposite homotypicGroupComposite = new EditorGroupComposite(parent, managedForm, homotypicGroup); \r
- homotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
- \r
- NameComposite nameCompositeWithWarning = null;\r
- \r
- // Add accepted taxon to the group\r
- NameComposite acceptedNameComposite = new NameComposite(homotypicGroupComposite, managedForm, NameComposite.ACCEPTED_TAXON, taxon);\r
- \r
- warnIfNameConflictWithParent(acceptedNameComposite);\r
- \r
- IterableSynonymyList synonymyList = new IterableSynonymyList(taxon);\r
- HomotypicalGroup lastHeterotypicGroup = null;\r
- HomotypicalGroup currentHeterotypicGroup = null;\r
- EditorGroupComposite heterotypicGroupComposite = null;\r
- EditorGroupComposite misappliedNameGroupComposite = null;\r
- \r
- for (TaxonBase synonymOrMisName : synonymyList) {\r
- if (synonymOrMisName instanceof Synonym) {\r
- \r
- Synonym synonym = (Synonym) synonymOrMisName;\r
- currentHeterotypicGroup = synonym.getHomotypicGroup();\r
- \r
- if (currentHeterotypicGroup.equals(homotypicGroup)) {\r
- \r
- NameComposite homotypicSynonymComposite = new NameComposite(homotypicGroupComposite, managedForm, NameComposite.HOMOTYPIC_SYNONYM, synonym);\r
- \r
- } else {\r
- \r
- if (!currentHeterotypicGroup.equals(lastHeterotypicGroup)) {\r
- \r
- // Create a new group composite\r
- heterotypicGroupComposite = new EditorGroupComposite(parent, managedForm, currentHeterotypicGroup);\r
- heterotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
- lastHeterotypicGroup = currentHeterotypicGroup;\r
- }\r
- \r
- NameComposite heterotypicSynonymComposite = new NameComposite(heterotypicGroupComposite, managedForm, NameComposite.HETEROTYPIC_SYNONYM, synonym);\r
- }\r
- } else {\r
- \r
- Taxon misappliedName = (Taxon) synonymOrMisName;\r
- if (UiUtil.getMisappliedNameGroupComposite(managedForm) == null) {\r
- misappliedNameGroupComposite = UiUtil.createMisappliedNameGroupComposite(managedForm);\r
- }\r
- NameComposite misappliedNameComposite = new NameComposite(misappliedNameGroupComposite, managedForm, NameComposite.MISAPPLIED_NAME, misappliedName);\r
- }\r
- }\r
- \r
- // Listen for names being dragged outside of existing homotypic groups -\r
- // user wants to create a new group\r
- Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};\r
- int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
- DropTarget target = new DropTarget(parent, operations);\r
- target.setTransfer(types);\r
- target.addDropListener(new DropTargetAdapter() {\r
- \r
- public void drop(DropTargetEvent event) {\r
- \r
- EditorGroupComposite newGroupComposite = new EditorGroupComposite(parent, managedForm, new HomotypicalGroup()); \r
- \r
- NameComposite nameComposite = (NameComposite) event.data;\r
- nameComposite.setParent(newGroupComposite); \r
- \r
- new AdaptCompositeToGroupAction(nameComposite, newGroupComposite).run();\r
- } \r
- });\r
- \r
- // We've added elements to the managed form, so redraw it\r
- scrolledForm.reflow(true);\r
- \r
- setSelection(acceptedNameComposite);\r
- acceptedNameComposite.drawBorder();\r
- }\r
- \r
- \r
- private NameComposite warnIfNameConflictWithParent(NameComposite nameComposite) {\r
- \r
- String message = null;\r
- Taxon taxon = getTaxon();\r
- \r
- if (nameComposite.getData() instanceof Taxon) {\r
- taxon = (Taxon) nameComposite.getData();\r
- Taxon parentTaxon = taxon.getTaxonomicParent();\r
- \r
- if (parentTaxon != null && taxon.getName() instanceof NonViralName \r
- && parentTaxon.getName() instanceof NonViralName) {\r
- NonViralName name = (NonViralName) taxon.getName();\r
- NonViralName parentName = (NonViralName) parentTaxon.getName();\r
- \r
- Rank rank = name.getRank();\r
- if (rank != null) {\r
- if (rank.equals(Rank.SPECIES())) {\r
- String genus = name.getGenusOrUninomial();\r
- String parentGenus = parentName.getGenusOrUninomial();\r
-\r
- // If either taxon has a problem, name fields will be null\r
- if (genus != null && parentGenus != null) {\r
- if (!parentGenus.equals(genus)) {\r
- message = "Warning: taxon's genus does not match parent taxon's genus.";\r
- }\r
- }\r
- }\r
- \r
- if (rank.equals(Rank.SUBSPECIES())) {\r
- String specificEpithet = name.getSpecificEpithet();\r
- String parentSpecificEpithet = parentName.getSpecificEpithet();\r
- \r
- // If either taxon has a problem, name fields will be null\r
- if (specificEpithet != null && parentSpecificEpithet != null) {\r
- if (!parentSpecificEpithet.equals(specificEpithet)) {\r
- message = "Warning: taxon's specific epithet does not match parent taxon's specific epithet.";\r
- }\r
- }\r
- }\r
- }\r
- \r
- }\r
- }\r
- \r
- if (message != null && nameComposite.getTextViewer() != null) {\r
- managedForm.getMessageManager().addMessage\r
- ("TEST2", message, null, IMessageProvider.WARNING, \r
- nameComposite.getTextViewer().getTextWidget());\r
- scrolledForm.setMessage(null, 0, null);\r
- }\r
- return nameComposite;\r
- }\r
-\r
-}
\ No newline at end of file
-TaxonCompositeFactory.1=Change to misapplied name\r
+AddBasionymCompositeAction.0.ICBN=Set as basionym for homotypical group\r
+AddBasionymCompositeAction.0.ICZN=Set as original combination for homotypical group\r
+RemoveBasionymCompositeAction.0.ICBN=Remove as basionym for homotypical group\r
+RemoveBasionymCompositeAction.0.ICZN=Remove as original combination for homotypical group\r
+SynonymComposite.0=asdflkjasdlkfjs\r
import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.datasource.CdmTransactionController;\r
import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
\r
/**\r
* @author p.ciardelli\r
public void clearTaxonData() {\r
removeAllTaxa();\r
\r
- // Clear "recent names" and "favorites" lists\r
- TaxEditorPlugin.getDefault().clearObservableLists();\r
+ // Clear "recent names" list\r
+ RecentNamesView.clearRecentNames();\r
}\r
\r
@Override\r
}\r
\r
// Remove from recent names list\r
- TaxEditorPlugin.getDefault().\r
- getObservableRecentNamesList().remove(taxon);\r
+ RecentNamesView.removeRecentName(taxon);\r
}\r
\r
private void removeTaxonomicChild(Taxon taxon, Taxon parentTaxon) {\r
import org.eclipse.swt.widgets.Composite;\r
\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.actions.TaxonTransfer;\r
import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;\r
\r
});\r
\r
// Listens for new taxa opened for editing\r
- this.setInput(TaxEditorPlugin.getDefault().getObservableFavoritesList());\r
+ this.setInput(FavoritesView.getObservableFavorites());\r
\r
// On double click, open name editor\r
this.addDoubleClickListener(new IDoubleClickListener(){\r
target.addDropListener(new DropTargetAdapter() {\r
\r
public void dragEnter(DropTargetEvent event) {\r
-// System.out.println("hello");\r
}\r
\r
public void drop(DropTargetEvent event) {\r
\r
// Add event to favorites list \r
- TaxEditorPlugin.getDefault().getObservableFavoritesList().add(event.data);\r
+ FavoritesView.addFavorite(event.data);\r
}\r
});\r
}\r
package eu.etaxonomy.taxeditor.navigation;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
import org.eclipse.jface.action.IMenuManager;\r
import org.eclipse.jface.action.IToolBarManager;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.widgets.Label;\r
import org.eclipse.ui.part.ViewPart;\r
\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
/**\r
* The left navigation pane.\r
* \r
public void setFocus() {\r
// Set the focus\r
}\r
+ \r
+ private static WritableList observableFavoritesList = null;\r
+ \r
+ public static void addFavorite(Object favorite) {\r
+ if (!getObservableFavorites().contains(favorite)) {\r
+ getObservableFavorites().add(favorite);\r
+ }\r
+ }\r
+ \r
+ public static void removeFavorite(Object favorite) {\r
+ getObservableFavorites().remove(favorite);\r
+ }\r
+ \r
+ public static WritableList getObservableFavorites() {\r
+ if (observableFavoritesList == null) {\r
+ observableFavoritesList = new WritableList();\r
+ }\r
+ return observableFavoritesList; \r
+ }\r
+\r
+ public static void clearFavorites() {\r
+ observableFavoritesList = null;\r
+ }\r
}\r
import org.eclipse.swt.widgets.Composite;\r
\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
});\r
\r
// Listens for new taxa opened for editing\r
- this.setInput(TaxEditorPlugin.getDefault().getObservableRecentNamesList());\r
+ this.setInput(RecentNamesView.getObservableRecentNames());\r
\r
// On double click, open name editor\r
this.addDoubleClickListener(new IDoubleClickListener(){\r
package eu.etaxonomy.taxeditor.navigation;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
import org.eclipse.jface.action.IMenuManager;\r
import org.eclipse.jface.action.IToolBarManager;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.widgets.Display;\r
import org.eclipse.ui.part.ViewPart;\r
\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
/**\r
* The left navigation pane.\r
* \r
@Override\r
public void setFocus() {\r
// Set the focus\r
- } \r
+ }\r
+ \r
+ private static WritableList observableRecentNamesList = null;\r
+ \r
+ public static void addRecentName(Taxon taxon) {\r
+ if (!getObservableRecentNames().contains(taxon)) {\r
+ getObservableRecentNames().add(taxon);\r
+ }\r
+ }\r
+ \r
+ public static void removeRecentName(Taxon taxon) {\r
+ getObservableRecentNames().remove(taxon);\r
+ }\r
+ \r
+ public static WritableList getObservableRecentNames() {\r
+ if (observableRecentNamesList == null) {\r
+ observableRecentNamesList = new WritableList();\r
+ }\r
+ return observableRecentNamesList; \r
+ }\r
+\r
+ public static void clearRecentNames() {\r
+ observableRecentNamesList = null;\r
+ }\r
}\r
\r
import eu.etaxonomy.cdm.database.DatabaseTypeEnum;\r
import eu.etaxonomy.cdm.database.ICdmDataSource;\r
-import eu.etaxonomy.cdm.database.types.H2DatabaseType;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.UiUtil;\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;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.operations.AbstractOperation;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.01.2009\r
+ * @version 1.0\r
+ */\r
+public abstract class AbstractEditorOperation extends AbstractOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(AbstractEditorOperation.class);\r
+ \r
+ protected Taxon taxon;\r
+\r
+ public AbstractEditorOperation(String label, IUndoContext undoContext,\r
+ Taxon taxon) {\r
+ super(label);\r
+ addContext(undoContext);\r
+ \r
+ this.taxon = taxon;\r
+ }\r
+ \r
+ protected IStatus redrawOpenEditor() {\r
+ \r
+ // Redraw editor if exists\r
+ TaxonNameEditor editor = UiUtil.getTaxonNameEditor(taxon);\r
+ if(editor == null || editor.redraw()){\r
+ \r
+ // Mark editor as changed and unsaved\r
+ editor.setDirty();\r
+ \r
+ return Status.OK_STATUS; \r
+ } \r
+ return Status.CANCEL_STATUS;\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.name;\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
+import org.eclipse.core.runtime.Status;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+public class ChangeHomotypicGroupOperation extends AbstractEditorOperation {\r
+ \r
+ private static final Logger logger = Logger\r
+ .getLogger(ChangeHomotypicGroupOperation.class);\r
+\r
+ private Synonym synonym; \r
+ private HomotypicalGroup oldHomotypicalGroup;\r
+ private HomotypicalGroup newHomotypicalGroup;\r
+ \r
+ public ChangeHomotypicGroupOperation(String label, IUndoContext undoContext, \r
+ Taxon taxon, Synonym synonym, HomotypicalGroup newHomotypicalGroup) {\r
+ super(label, undoContext, taxon);\r
+ \r
+ this.synonym = synonym;\r
+ if(synonym == null){\r
+ throw new IllegalArgumentException(\r
+ "A null synonym was provided.");\r
+ }\r
+ \r
+ this.oldHomotypicalGroup = synonym.getHomotypicGroup();\r
+ this.newHomotypicalGroup = newHomotypicalGroup;\r
+ }\r
+\r
+\r
+ @Override\r
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+\r
+ // Get synonym name\r
+ TaxonNameBase synonymName = this.synonym.getName();\r
+ \r
+ // TODO pass in homotypical group's taxon in case we are dragging from one editor to another\r
+ \r
+ // Switch groups\r
+ oldHomotypicalGroup.removeTypifiedName(synonymName);\r
+ newHomotypicalGroup.addTypifiedName(synonymName); \r
+ \r
+ // Redraw editor if it exists\r
+ return redrawOpenEditor();\r
+ }\r
+\r
+ @Override\r
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ return execute(monitor, info);\r
+ }\r
+\r
+ @Override\r
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ \r
+ // Get synonym name\r
+ TaxonNameBase synonymName = this.synonym.getName();\r
+ if(synonymName == null){\r
+ // TODO\r
+ }\r
+ \r
+ // TODO pass in homotypical group's taxon in case we are dragging from one editor to another\r
+ \r
+ // Switch groups\r
+ newHomotypicalGroup.removeTypifiedName(synonymName);\r
+ oldHomotypicalGroup.addTypifiedName(synonymName); \r
+ \r
+ // Redraw editor if it 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.name;\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.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\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.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.01.2009\r
+ * @version 1.0\r
+ */\r
+public class ChangeMisappliedNameToSynonymOperation extends\r
+ AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(ChangeMisappliedNameToSynonymOperation.class);\r
+ \r
+ private Taxon misappliedName;\r
+ private HomotypicalGroup homotypicalGroup;\r
+\r
+ public ChangeMisappliedNameToSynonymOperation(String label,\r
+ IUndoContext undoContext, Taxon taxon, Taxon misappliedName,\r
+ HomotypicalGroup homotypicalGroup) {\r
+ super(label, undoContext, taxon);\r
+ \r
+ this.misappliedName = misappliedName;\r
+ this.homotypicalGroup = homotypicalGroup;\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
+ // Create new synonym using misapplication's name\r
+ TaxonNameBase synonymName = misappliedName.getName();\r
+ Synonym synonym = Synonym.NewInstance(synonymName, taxon.getSec());\r
+ \r
+ // Remove misapplied name relation from taxon\r
+ taxon.removeTaxon(misappliedName, TaxonRelationshipType.MISAPPLIED_NAME_FOR());\r
+\r
+ // Add synonym to taxon\r
+// if (homotypicalGroup.equals(taxon.getHomotypicGroup())) {\r
+// \r
+// // Note: synonymName is implicitly added to taxon's homotypical group\r
+// taxon.addSynonym(synonym, SynonymRelationshipType.SYNONYM_OF() .HOMOTYPIC_SYNONYM_OF()); \r
+// } else {\r
+// taxon.addSynonym(synonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+// \r
+// // Add synonym to homotypical group\r
+// homotypicalGroup.addTypifiedName(synonymName);\r
+// }\r
+\r
+ taxon.addSynonym(synonym, SynonymRelationshipType.SYNONYM_OF());\r
+ \r
+ // Add synonym to homotypical group\r
+ homotypicalGroup.addTypifiedName(synonymName);\r
+ \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
+ // TODO Auto-generated method stub\r
+ return null;\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
+ // TODO Auto-generated method stub\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.operations.name;\r
+\r
+import java.util.Set;\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.name.TaxonNameBase;\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.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.01.2009\r
+ * @version 1.0\r
+ */\r
+public class ChangeSynonymToMisappliedNameOperation extends AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(ChangeSynonymToMisappliedNameOperation.class);\r
+\r
+ private Synonym synonym;\r
+ private Taxon misapplication;\r
+ private Set<SynonymRelationshipType> synonymTypes;\r
+\r
+ public ChangeSynonymToMisappliedNameOperation(String label,\r
+ IUndoContext undoContext, Taxon taxon, Synonym synonym) {\r
+ super(label, undoContext, taxon);\r
+ \r
+ this.synonym = synonym;\r
+ }\r
+\r
+ @Override\r
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ \r
+ // get name from synonym\r
+ TaxonNameBase synonymName = synonym.getName();\r
+ \r
+ // make misapplied name with synonym name\r
+ // TODO prompt user for sec\r
+ misapplication = Taxon.NewInstance(synonymName, null);\r
+ \r
+ // store synonymRelationshipType for later undo operations\r
+ synonymTypes = synonym.getRelationType(taxon);\r
+ \r
+ // remove synonym from taxon \r
+ taxon.removeSynonym(synonym);\r
+ \r
+ // add misapplied name to taxon\r
+ // TODO add citation for misapplied name to property sheet\r
+ taxon.addMisappliedName(misapplication, null, null);\r
+ \r
+ // redraw editor if exists\r
+ return redrawOpenEditor();\r
+ }\r
+\r
+ @Override\r
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ // add misapplied name to taxon\r
+ // TODO add citation for misapplied name to property sheet\r
+ taxon.addMisappliedName(misapplication, null, null);\r
+ \r
+ // remove synonym from taxon\r
+ taxon.removeSynonym(synonym);\r
+ \r
+ // redraw editor if exists\r
+ return redrawOpenEditor();\r
+ }\r
+\r
+ @Override\r
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ \r
+ // remove misapplied name from taxon\r
+ // TODO add citation for misapplied name to property sheet\r
+ taxon.removeTaxon(misapplication, TaxonRelationshipType.MISAPPLIED_NAME_FOR());\r
+ \r
+ // add synonym to taxon\r
+ for (SynonymRelationshipType synonymType : synonymTypes){\r
+ taxon.addSynonym(synonym, synonymType);\r
+ }\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.name;\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
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.01.2009\r
+ * @version 1.0\r
+ */\r
+public class ChangeSynonymToTaxonOperation extends AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(ChangeSynonymToTaxonOperation.class);\r
+ private Synonym synonym;\r
+\r
+ public ChangeSynonymToTaxonOperation(String text, IUndoContext undoContext,\r
+ Taxon taxon, Synonym synonym) {\r
+ super(text, undoContext, taxon);\r
+ \r
+ this.synonym = synonym;\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
+ // Remove synonym from taxon\r
+ taxon.removeSynonym(synonym);\r
+ \r
+ // Create new taxon with synonym name\r
+ Taxon newTaxon = Taxon.NewInstance(synonym.getName(), synonym.getSec());\r
+ \r
+ // Add new taxon to session data repository\r
+ taxon.setTaxonomicParent(null, null, null);\r
+ CdmSessionDataRepository.getDefault().addTaxon(newTaxon);\r
+ \r
+ // Open editor for new taxon\r
+ try {\r
+ UiUtil.openTaxonEditor(newTaxon);\r
+ } catch (PartInitException e) {\r
+ e.printStackTrace();\r
+ }\r
+ \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
+ // TODO Auto-generated method stub\r
+ return null;\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
+ // TODO Auto-generated method stub\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.operations.name;\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.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 16.01.2009\r
+ * @version 1.0\r
+ */\r
+public class CreateSynonymInNewGroupOperation extends AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(CreateSynonymInNewGroupOperation.class);\r
+ \r
+ private String newSynonymText;\r
+ private SynonymRelationship newSynonymRelationship;\r
+\r
+ public CreateSynonymInNewGroupOperation(String label,\r
+ IUndoContext undoContext, Taxon taxon, String synonymText) {\r
+ super(label, undoContext, taxon);\r
+ \r
+ this.newSynonymText = synonymText;\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
+ // Create synonym name using newSynonymText\r
+ TaxonNameBase synonymName = CdmParserController.parseFullReference(newSynonymText, null, null);\r
+ \r
+ // Add name to new homotypic group\r
+ HomotypicalGroup.NewInstance().addTypifiedName(synonymName);\r
+ \r
+ // Create a new synonym for the taxon\r
+ newSynonymRelationship = taxon.addHeterotypicSynonymName(synonymName);\r
+ \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
+ // TODO Auto-generated method stub\r
+ return null;\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
+ // Remove the synonym \r
+ taxon.removeSynonymRelation(newSynonymRelationship);\r
+ newSynonymRelationship = null;\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.operations.name;\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
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.MessageDialog;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;\r
+import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/** \r
+ * @author p.ciardelli\r
+ * @created 15.01.2009\r
+ * @version 1.0\r
+ */\r
+public class MakeSynonymAcceptedOperation extends AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(MakeSynonymAcceptedOperation.class);\r
+ private Synonym synonym;\r
+ private Taxon parentTaxon;\r
+\r
+ public MakeSynonymAcceptedOperation(String text, IUndoContext undoContext,\r
+ Taxon taxon, Synonym synonym) {\r
+ super(text, undoContext, taxon);\r
+ \r
+ this.synonym = synonym;\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
+ // If taxon editor is dirty force user to save before proceeding, then close editor\r
+ try {\r
+ IEditorPart oldEditor = UiUtil.getEditorByTaxon(taxon);\r
+ if (oldEditor.isDirty()) {\r
+ if (!MessageDialog.openConfirm(UiUtil.getShell(), "Save before proceeding", \r
+ "All changes must be saved before proceeding with this action.\n\n" +\r
+ "Press \"OK\" to save and continue, or \"Cancel\" to cancel this action.")) {\r
+ return Status.CANCEL_STATUS;\r
+ }\r
+ oldEditor.doSave(null);\r
+ UiUtil.closeEditor(oldEditor, true);\r
+ }\r
+ } catch (PartInitException e) {\r
+ e.printStackTrace();\r
+ MessageDialog.openError(UiUtil.getShell(), "Error", "Error saving and closing taxon");\r
+ return Status.CANCEL_STATUS;\r
+ }\r
+ \r
+ // Create new taxon for synonym to be swapped into\r
+ TaxonNameBase synonymName = synonym.getName();\r
+ Taxon newAcceptedTaxon = Taxon.NewInstance(synonymName, synonym.getSec());\r
+ \r
+ // Get taxon service and call its swap method\r
+ ITaxonService taxonService = TaxEditorPlugin.getDefault().getApplicationController().getTaxonService();\r
+ // TODO prompt user for citation \r
+ // TODO bug, anahit. new accepted taxon is not removed from synonymy \r
+ taxonService.makeTaxonSynonym(taxon, newAcceptedTaxon, null, null, null);\r
+ \r
+ // Remove old taxon from tree\r
+ CdmSessionDataRepository.getDefault().removeTaxon(taxon);\r
+\r
+ // Add new taxon to tree\r
+ CdmSessionDataRepository.getDefault().addTaxon(newAcceptedTaxon);\r
+\r
+ // Open editor for new taxon\r
+ new OpenTaxonEditorAction(newAcceptedTaxon).run();\r
+\r
+ // Remove old taxon from recent names list\r
+ RecentNamesView.addRecentName(taxon);\r
+ \r
+ return Status.OK_STATUS;\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
+ logger.warn(this.getLabel() + ": Redo not yet implemented.");\r
+ return null;\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
+ logger.warn(this.getLabel() + ": Undo not yet implemented.");\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.operations.name;\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.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.01.2009\r
+ * @version 1.0\r
+ */\r
+public class MakeSynonymGroupBasionymOperation extends AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(MakeSynonymGroupBasionymOperation.class);\r
+ private Synonym synonym;\r
+ private HomotypicalGroup homotypicGroup;\r
+\r
+ public MakeSynonymGroupBasionymOperation(String text, IUndoContext undoContext,\r
+ Taxon taxon, Synonym synonym) {\r
+ super(text, undoContext, taxon);\r
+ \r
+ this.synonym = synonym;\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
+// // Get basionym for synonyms homotypic group\r
+// homotypicGroup = synonym.getHomotypicGroup();\r
+// TaxonNameBase basionym = homotypicGroup.getBasionym();\r
+// \r
+// // Check if synonym is already basionym\r
+// if(basionym != null && basionym.equals(synonym.getName())){\r
+// return Status.OK_STATUS;\r
+// }\r
+ \r
+ // TODO replace w method from cdmlib\r
+ CdmUtil.setGroupBasionym(synonym.getName());\r
+ \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
+ // TODO replace w method from cdmlib\r
+ CdmUtil.removeGroupBasionym(synonym.getName());\r
+ \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.name;\r
+\r
+import java.util.Set;\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.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.01.2009\r
+ * @version 1.0\r
+ */\r
+public class RemoveSynonymOperation extends AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(RemoveSynonymOperation.class);\r
+ \r
+ private Synonym synonym;\r
+ private Set<SynonymRelationshipType> synonymTypes;\r
+\r
+ public RemoveSynonymOperation(String label, IUndoContext undoContext,\r
+ Taxon taxon, Synonym synonym) {\r
+ super(label, undoContext, taxon);\r
+ this.synonym = synonym;\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
+ // Store synonymRelationshipType for later undo operations\r
+ synonymTypes = synonym.getRelationType(taxon);\r
+ \r
+ // Remove synonym from taxon\r
+ taxon.removeSynonym(synonym);\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
+ // Add synonym to taxon\r
+ for (SynonymRelationshipType synonymType : synonymTypes){\r
+ taxon.addSynonym(synonym, synonymType);\r
+ }\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.name;\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.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.01.2009\r
+ * @version 1.0\r
+ */\r
+public class UnmakeSynonymGroupBasionymOperation extends\r
+ AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(UnmakeSynonymGroupBasionymOperation.class);\r
+ private Synonym synonym;\r
+\r
+ public UnmakeSynonymGroupBasionymOperation(String text,\r
+ IUndoContext undoContext, Taxon taxon, Synonym synonym) {\r
+ super(text, undoContext, taxon);\r
+ \r
+ this.synonym = synonym;\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
+ // TODO replace w method from cdmlib\r
+ CdmUtil.removeGroupBasionym(synonym.getName());\r
+ \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
+ // TODO replace w method from cdmlib\r
+ CdmUtil.setGroupBasionym(synonym.getName());\r
+ \r
+ return redrawOpenEditor();\r
+ }\r
+}\r