eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/Messages.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/UiUtil.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/NameTransfer.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/SaveAllAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/SynonymRelationshipTransfer.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenTaxonEditorAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/AddDescriptionElementCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/DeleteElementCompositeAction.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/EditorController.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/GlobalController.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/PropertySheetController.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/SearchController.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/controller/TreeController.java -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/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/ChangeTaxonToSynonymOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/DeleteTaxonOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeHomotypicGroupOperation.java -text
*/
public static void disposeImages() {
SWTResourceManager.disposeImages();
- //
- for (Iterator<Image> I = m_DescriptorImageMap.values().iterator(); I.hasNext();)
- I.next().dispose();
- m_DescriptorImageMap.clear();
+ // dispose ImageDescriptor images
+ {
+ for (Iterator<Image> I = m_DescriptorImageMap.values().iterator(); I.hasNext();)
+ I.next().dispose();
+ m_DescriptorImageMap.clear();
+ }
+ // dispose plugin images
+ {
+ for (Iterator<Image> I = m_URLImageMap.values().iterator(); I.hasNext();)
+ I.next().dispose();
+ m_URLImageMap.clear();
+ }
+ // dispose decorated images
+ for (Iterator<HashMap<Image, Image>> I = m_ImageToDecoratorMap.values().iterator(); I.hasNext();) {
+ HashMap<Image, Image> decoratedMap = I.next();
+ for (Iterator<Image> J = decoratedMap.values().iterator(); J.hasNext();) {
+ Image decoratedImage = J.next();
+ decoratedImage.dispose();
+ }
+ }
}
//////////////////////////////
* @return URL The URL representing the file at the specified path
* @throws Exception
*/
- @SuppressWarnings("unchecked") //$NON-NLS-1$
private static URL getPluginImageURL(Object plugin, String name) throws Exception {
// try to work with 'plugin' as with OSGI BundleContext
try {
- Class bundleClass = Class.forName("org.osgi.framework.Bundle"); //$NON-NLS-1$
- Class bundleContextClass = Class.forName("org.osgi.framework.BundleContext"); //$NON-NLS-1$
+ Class<?> bundleClass = Class.forName("org.osgi.framework.Bundle"); //$NON-NLS-1$
+ Class<?> bundleContextClass = Class.forName("org.osgi.framework.BundleContext"); //$NON-NLS-1$
if (bundleContextClass.isAssignableFrom(plugin.getClass())) {
- Method getBundleMethod = bundleContextClass.getMethod("getBundle", new Class[]{}); //$NON-NLS-1$
- Object bundle = getBundleMethod.invoke(plugin, new Object[]{});
+ Method getBundleMethod = bundleContextClass.getMethod("getBundle", new Class[0]); //$NON-NLS-1$
+ Object bundle = getBundleMethod.invoke(plugin, new Object[0]);
//
- Class ipathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
- Class pathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
- Constructor pathConstructor = pathClass.getConstructor(new Class[]{String.class});
+ Class<?> ipathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
+ Class<?> pathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
+ Constructor<?> pathConstructor = pathClass.getConstructor(new Class[]{String.class});
Object path = pathConstructor.newInstance(new Object[]{name});
//
- Class platformClass = Class.forName("org.eclipse.core.runtime.Platform"); //$NON-NLS-1$
+ Class<?> platformClass = Class.forName("org.eclipse.core.runtime.Platform"); //$NON-NLS-1$
Method findMethod = platformClass.getMethod("find", new Class[]{bundleClass, ipathClass}); //$NON-NLS-1$
return (URL) findMethod.invoke(null, new Object[]{bundle, path});
}
}
// else work with 'plugin' as with usual Eclipse plugin
{
- Class pluginClass = Class.forName("org.eclipse.core.runtime.Plugin"); //$NON-NLS-1$
+ Class<?> pluginClass = Class.forName("org.eclipse.core.runtime.Plugin"); //$NON-NLS-1$
if (pluginClass.isAssignableFrom(plugin.getClass())) {
//
- Class ipathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
- Class pathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
- Constructor pathConstructor = pathClass.getConstructor(new Class[]{String.class});
+ Class<?> ipathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
+ Class<?> pathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
+ Constructor<?> pathConstructor = pathClass.getConstructor(new Class[]{String.class});
Object path = pathConstructor.newInstance(new Object[]{name});
//
Method findMethod = pluginClass.getMethod("find", new Class[]{ipathClass}); //$NON-NLS-1$
* Dispose all of the cached fonts
*/
public static void disposeFonts() {
+ // clear fonts
for (Iterator<Font> iter = m_FontMap.values().iterator(); iter.hasNext();)
iter.next().dispose();
m_FontMap.clear();
+ // clear bold fonts
+ for (Iterator<Font> iter = m_FontToBoldFontMap.values().iterator(); iter.hasNext();)
+ iter.next().dispose();
+ m_FontToBoldFontMap.clear();
}
//////////////////////////////
import eu.etaxonomy.taxeditor.actions.io.ExportAction;
import eu.etaxonomy.taxeditor.actions.io.ImportAction;
import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;
+import eu.etaxonomy.taxeditor.controller.GlobalController;
/**
* An action bar advisor is responsible for creating, adding, and disposing of
// Registering also provides automatic disposal of the actions when
// the window is closed.
- UiUtil.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
+ GlobalController.setStatusLineManager(getActionBarConfigurer().getStatusLineManager());
saveAction = ActionFactory.SAVE.create(window);
register(saveAction);
public void initialize(IWorkbenchConfigurer configurer) {
super.initialize(configurer);
- // Remembers the user's layout and window size
+ // Remembers the user's view layout, window size, window location etc.
// for the next time application is started
-// configurer.setSaveAndRestore(true);
+
+ // IMPORTANT as we don not have a mechanism to open views via a menu
+ // at the moment this has to be set to false everytime a new view is added,
+ // otherwise the view will not show because it is not stored in the memento
+ configurer.setSaveAndRestore(false);
}
-
}
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.taxeditor.controller.GlobalController;
import eu.etaxonomy.taxeditor.preference.InitNomenclaturalCodePrefDialog;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
if (PreferencesUtil.getPreferredNomenclaturalCode() == null) {
// Query user re: preferred nom. code
- Dialog dialog = new InitNomenclaturalCodePrefDialog(UiUtil.getShell());
+ Dialog dialog = new InitNomenclaturalCodePrefDialog(GlobalController.getShell());
int returnCode = dialog.open();
// Short message confirming user's choice
String code = PreferencesUtil.getPreferredNomenclaturalCodeAsString();
- MessageDialog.openInformation(UiUtil.getShell(), "Nomenclatural code set",
+ MessageDialog.openInformation(GlobalController.getShell(), "Nomenclatural code set",
"The following has been set as your preferred nomenclatural code:\n\n\t" +
code + "\n\nYou can change the botanical code at any time in the \"Preferences\" menu.");
}
* To remember the user's layout and window sizes for the next time they
* start your application, add configurer.setSaveAndRestore(true); to the
* initialize() method of WorkbenchAdvisor.
+ *
+ * IMPORTANT:
+ * If you set configurer.setSaveAndRestore(true) and you are adding a new view
+ * to the perspective make sure you set it to false for at least one start.
+ * Otherwise the new view will not show.
+ *
*/
public static final String ID = "eu.etaxonomy.taxeditor.perspective.freetextproperties";
\r
package eu.etaxonomy.taxeditor;\r
\r
-import org.apache.log4j.Logger;\r
\r
/**\r
* @author p.ciardelli\r
* @version 1.0\r
*/\r
public class ITaxEditorConstants {\r
- private static final Logger logger = Logger\r
- .getLogger(ITaxEditorConstants.class);\r
\r
/* ***************************************************************************************\r
ICONS\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;\r
-\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-import java.util.SortedSet;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.OperationHistoryFactory;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.IStatusLineManager;\r
-import org.eclipse.swt.graphics.Color;\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.IActionBars;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorPart;\r
-import org.eclipse.ui.IEditorReference;\r
-import org.eclipse.ui.IPageLayout;\r
-import org.eclipse.ui.IViewPart;\r
-import org.eclipse.ui.IViewReference;\r
-import org.eclipse.ui.IWorkbench;\r
-import org.eclipse.ui.IWorkbenchPage;\r
-import org.eclipse.ui.PartInitException;\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.description.Feature;\r
-import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.actions.cdm.SaveTaxonAction;\r
-import eu.etaxonomy.taxeditor.datasource.CdmTransactionController;\r
-import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
-import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\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.SearchResult;\r
-import eu.etaxonomy.taxeditor.navigation.SearchResultView;\r
-import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
-import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView;\r
-import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
-import eu.etaxonomy.taxeditor.propertysheet.CustomSortPropertySheetEntry;\r
-\r
-/**\r
- * A collection of useful methods related to the UI.\r
- * \r
- * @author p.ciardelli\r
- * @created 27.05.2008\r
- * @version 1.0\r
- */\r
-public class UiUtil {\r
- private static final Logger logger = Logger.getLogger(UiUtil.class);\r
-\r
- public static Set<Feature> preferredFeatureSet;\r
- public static Set<Rank> preferredRankSet;\r
- private static IViewPart treeView;\r
-\r
- private static IOperationHistory operationHistory;\r
- \r
- public static IViewPart getPropertySheet() {\r
- for (IViewReference reference : getActivePage().getViewReferences()) {\r
- if (reference.getId().equals(IPageLayout.ID_PROP_SHEET)) {\r
- logger.warn(reference.getView(false).getSite().getPart().getTitle());\r
- return reference.getView(false);\r
- }\r
- }\r
- return null;\r
- }\r
- \r
- /**\r
- * By default, property sheet has buttons in the toolbar for \r
- * "Show advanced properties" and "Show categories".\r
- * <p>\r
- * This is confusing for the user, hence a method to remove them\r
- * until such time as advanced properties or categories are implemented.\r
- */\r
- public static void hidePropertySheetToolbar() {\r
- PropertySheet propertySheet = (PropertySheet) getPropertySheet();\r
- IActionBars actionBars = propertySheet.getViewSite().getActionBars();\r
- actionBars.getToolBarManager().removeAll();\r
- actionBars.getMenuManager().removeAll();\r
- }\r
- \r
- /**\r
- * The property sheet listener ensures only property sheets\r
- * with data cause the Property Sheet to be updated.\r
- */\r
- public static void addPropertySheetInputListener() {\r
- IViewPart propertySheet = getPropertySheet();\r
-// propertySheet.get\r
- PropertySheet ps = (PropertySheet) propertySheet;\r
-// ps.addPartPropertyListener(listener)\r
-// ps.addPropertyListener(l)\r
- }\r
- \r
- public static void saveAll(){\r
- setIsSaving(true);\r
- \r
- // Get all open windows\r
- for (IEditorPart taxonEditor : getOpenTaxonEditors()) {\r
-\r
- // Save the dirty ones\r
- if (taxonEditor.isDirty()) {\r
- \r
- \r
- IEditorInput input = taxonEditor.getEditorInput();\r
- if (input.getAdapter(Taxon.class) != null) {\r
- Taxon taxon = (Taxon) input.getAdapter(Taxon.class);\r
- CdmSessionDataRepository.getDefault().saveTaxon(taxon);\r
- if (taxonEditor instanceof MultiPageTaxonEditor) {\r
- ((MultiPageTaxonEditor) taxonEditor).setDirtyExtern(false);\r
- }\r
- }\r
- }\r
- }\r
-\r
- // Commit the transaction \r
- CdmTransactionController.commitTransaction();\r
- \r
- // Force library objects to be associated with new transaction\r
- CdmSessionDataRepository.getDefault().clearNonTaxonData();\r
- \r
- // Start a new transaction\r
- CdmTransactionController.startTransaction();\r
- \r
- // Put all open taxa in the new transaction\r
- CdmTransactionController.addSessionTaxaToTransaction();\r
- \r
- setIsSaving(false);\r
- // TODO: delete undoHistory\r
- }\r
- \r
- //public void deleteTaxon()\r
- \r
- /**\r
- * @param input\r
- * @return\r
- * @throws PartInitException\r
- */\r
- public static IEditorPart getEditorByInput(IEditorInput input)\r
- throws PartInitException {\r
- for (IEditorReference reference : getActivePage().getEditorReferences()) {\r
- if (reference.getEditorInput().equals(input)) {\r
- IEditorPart editor = reference.getEditor(false);\r
- return editor;\r
- }\r
- }\r
- return null;\r
- }\r
- \r
- /**\r
- * Returns a set of all currently open \r
- * <code>MultiPageTaxonEditor</code>s.\r
- * \r
- * @return\r
- */\r
- public static Set<IEditorPart> getOpenTaxonEditors() {\r
- \r
- Set<IEditorPart> taxonEditors = new HashSet<IEditorPart>();\r
- \r
- for (IEditorReference reference : getActivePage().getEditorReferences()) {\r
- IEditorPart editor = reference.getEditor(false);\r
- if (editor instanceof MultiPageTaxonEditor) {\r
- taxonEditors.add(editor);\r
- }\r
- }\r
- return taxonEditors;\r
- }\r
-\r
- public static boolean closeOpenTaxonEditors() {\r
- for (IEditorPart editor : getOpenTaxonEditors()) {\r
- if (!getActivePage().closeEditor(editor, true)) {\r
- return false;\r
- }\r
- }\r
- return true;\r
- }\r
- \r
- public static IEditorPart getEditorByTaxon(Taxon taxon)\r
- throws PartInitException {\r
- IEditorInput input = new NameEditorInput(taxon);\r
- return getEditorByInput(input);\r
- }\r
- \r
- /**\r
- * @return\r
- */\r
- public static IWorkbenchPage getActivePage() {\r
- return TaxEditorPlugin.getDefault().getWorkbench()\r
- .getActiveWorkbenchWindow().getActivePage();\r
- }\r
-\r
- /**\r
- * @return\r
- */\r
- public static Shell getShell() {\r
- return TaxEditorPlugin.getDefault().getWorkbench()\r
- .getActiveWorkbenchWindow().getShell();\r
- }\r
-\r
- /**\r
- * @param input\r
- * @param editorId\r
- * @return \r
- * @throws PartInitException\r
- */\r
- public static IEditorPart openEditor(IEditorInput input, String editorId)\r
- throws PartInitException {\r
- return getActivePage().openEditor(input, editorId);\r
- }\r
- \r
- /**\r
- * Open an emtpy taxon editor\r
- * \r
- * @return\r
- * @throws PartInitException\r
- */\r
- public static IEditorPart openTaxonEditor() \r
- throws PartInitException{\r
- return openTaxonEditor(null);\r
- }\r
- \r
- /** \r
- * Open a taxon editor for the given taxon\r
- * \r
- * @param taxon\r
- * @return\r
- * @throws PartInitException\r
- */\r
- public static IEditorPart openTaxonEditor(Taxon taxon)\r
- throws PartInitException{\r
- if(taxon == null){\r
- TaxonNameBase name = CdmParserController.parseFullReference("", null, null);\r
- name.setFullTitleCache("", false);\r
- name.setTitleCache("", false);\r
- taxon = Taxon.NewInstance(name, \r
- CdmSessionDataRepository.getDefault().getDefaultSec());\r
- }else{\r
- // If this taxon is not visible in the tree, open node\r
- TaxonomicTreeViewer treeViewer = getTreeViewer(); \r
- if (treeViewer != null) {\r
- treeViewer.revealTaxon(taxon);\r
- }\r
- \r
- // Add to recent names list\r
- RecentNamesView.addRecentName(taxon);\r
- }\r
- \r
- IEditorInput input = new NameEditorInput(taxon);\r
- return openEditor(input, MultiPageTaxonEditor.ID);\r
- }\r
-\r
- /**\r
- * Redraws an open editor if it exists for the given taxon\r
- * \r
- * @param taxon\r
- * @return\r
- */\r
- public static boolean redrawEditor(Taxon taxon){\r
- \r
- TaxonNameEditor editor = UiUtil.getTaxonNameEditor(taxon);\r
- \r
- if(editor == null || editor.redraw()){\r
- \r
- // Mark editor as changed and unsaved\r
- editor.setDirty();\r
- \r
- return true; \r
- } \r
- return false;\r
- }\r
- \r
- /**\r
- * @param taxon\r
- * @param save\r
- * @throws PartInitException\r
- */\r
- public static void closeEditor(Taxon taxon, boolean save)\r
- throws PartInitException {\r
- IEditorPart editor = getEditorByTaxon(taxon);\r
- closeEditor(editor, save);\r
- }\r
- \r
- /**\r
- * @param input\r
- * @param save\r
- * @throws PartInitException\r
- */\r
- public static void closeEditor(IEditorInput input, boolean save)\r
- throws PartInitException {\r
- IEditorPart editor = getEditorByInput(input);\r
- closeEditor(editor, save);\r
- }\r
-\r
- /**\r
- * @param editor\r
- * @param save\r
- * @throws PartInitException\r
- */\r
- public static void closeEditor(IEditorPart editor, boolean save)\r
- throws PartInitException {\r
- if (editor != null) {\r
- getActivePage().closeEditor(editor, save);\r
- }\r
- }\r
-\r
- public static IViewPart getViewById(String id) {\r
- return TaxEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().\r
- getActivePage().findView(id);\r
- }\r
- \r
-\r
- /**\r
- * Returns the <code>TaxonomicTreeViewer</code> used for navigation. Not to \r
- * be confused with the window that contains it, <code>TaxonomicTreeView</code>. \r
- * \r
- * @return\r
- */\r
- public static TaxonomicTreeViewer getTreeViewer() {\r
- TaxonomicTreeView view = getTreeView();\r
- if (view == null) {\r
- return null;\r
- }\r
- return view.getTreeViewer();\r
- }\r
-\r
- /**\r
- * @see eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView#createTreeViewer()\r
- * \r
- * @return\r
- */\r
- public static TaxonomicTreeViewer createTreeViewer() {\r
- TaxonomicTreeView view = getTreeView();\r
- if (view == null) {\r
- return null;\r
- }\r
- return view.createTreeViewer();\r
- }\r
- \r
- /**\r
- * Returns the <code>TaxonomicTreeView</code> containing the \r
- * <code>TaxonomicTreeViewer</code> used for navigation. \r
- * \r
- * @return\r
- */ \r
- public static TaxonomicTreeView getTreeView() {\r
- if (treeView == null) {\r
- treeView = getViewById(TaxonomicTreeView.ID);\r
- if (!(treeView instanceof TaxonomicTreeView)) {\r
- treeView = null;\r
- }\r
- }\r
- return (TaxonomicTreeView) treeView;\r
- }\r
- \r
-\r
- public static IWorkbenchOperationSupport getOperationSupport() {\r
- IWorkbench workbench = TaxEditorPlugin.getDefault().getWorkbench();\r
- return workbench.getOperationSupport();\r
- }\r
- \r
- public static IOperationHistory 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
- // TODO make this more specific than GLOBAL_UNDO_CONTEXT\r
-// return getOperationSupport().getUndoContext();\r
- return IOperationHistory.GLOBAL_UNDO_CONTEXT;\r
- }\r
-\r
- public static void doEditorSave(Taxon taxon, boolean confirm) {\r
- IEditorPart editor = null;\r
- try {\r
- editor = getEditorByTaxon(taxon);\r
- } catch (PartInitException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- if (editor != null) {\r
- getActivePage().saveEditor(editor, confirm);\r
- }\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
- \r
- public static void setStatusMessage(String msg) {\r
- getPropertySheet().getViewSite().getActionBars().getStatusLineManager().setMessage(msg); \r
- }\r
-\r
- public static void setPropertySheetTree(Tree tree) {\r
- TaxEditorPlugin.getDefault().setPropertySheetTree(tree); \r
- }\r
- \r
- public static Tree getPropertySheetTree() {\r
- return TaxEditorPlugin.getDefault().getPropertySheetTree(); \r
- }\r
-\r
- public static void setPropertySheetPage(PropertySheetPage page) {\r
- TaxEditorPlugin.getDefault().setPropertySheetPage(page);\r
- }\r
- \r
- public static PropertySheetPage getPropertySheetPage() {\r
- return TaxEditorPlugin.getDefault().getPropertySheetPage(); \r
- }\r
- \r
- /**\r
- * UiUtil.paintPropertySheetRow(P_DATEPUBLISHED, new Color(Display.getDefault(), WarningAnnotation.WARNING_RGB), true);\r
- * UiUtil.unpaintPropertySheetRow(P_DATEPUBLISHED);\r
- * \r
- * @param id\r
- * @param color\r
- * @param doPaintChildren\r
- */\r
- public static void paintPropertySheetRow(String id, Color color, boolean doPaintChildren) {\r
- \r
- // Catch null property sheet name\r
- if (id == null) {\r
- return;\r
- }\r
- \r
- // Catch uninit'ed property sheet tree\r
- if (getPropertySheetTree() == null) {\r
- return;\r
- }\r
- \r
- paintPropertySheetRow(id, color, doPaintChildren, getPropertySheetTree());\r
- }\r
- \r
- private static void paintPropertySheetRow(String id, Color color, boolean doPaintChildren, Object treeOrItem) {\r
- \r
- // Init items w zero-length array\r
- TreeItem[] items = new TreeItem[]{};\r
- \r
- // Get child items depending to class\r
- if (treeOrItem instanceof Tree) {\r
- items = ((Tree) treeOrItem).getItems();\r
- }\r
- if (treeOrItem instanceof TreeItem) {\r
- items = ((TreeItem) treeOrItem).getItems();\r
- }\r
- \r
- // If array hasn't been populated by the above, return\r
- if (items.length == 0) {\r
- return;\r
- }\r
-\r
- // Prop. sheet id's take the form "01:xxxx" for sorting - truncate\r
- id = CustomSortPropertySheetEntry.truncateDisplayName(id);\r
- \r
- // Iterate through child items\r
- for (TreeItem item : items) {\r
-\r
- // Item found, paint it\r
- if (id.equals(item.getText())) {\r
- paintItem(item, color, doPaintChildren);\r
- return;\r
- } \r
-\r
- // Recursively search for item to paint in child items\r
- if (item.getItemCount() > 0) {\r
- paintPropertySheetRow(id, color, doPaintChildren, item);\r
- }\r
- } \r
- }\r
- \r
- /**\r
- * Note: children are only painted if submenu has already been created, i.e. opened once.\r
- * \r
- * @param item\r
- * @param color\r
- * @param doPaintChildren\r
- */\r
- private static void paintItem(TreeItem item, Color color, boolean doPaintChildren) {\r
- \r
- // Paint the item\r
- item.setBackground(color);\r
- \r
- // Recursively paint child items if requested\r
- if (doPaintChildren) {\r
- for (TreeItem childItem : item.getItems()) {\r
- paintItem(childItem, color, doPaintChildren);\r
- }\r
- }\r
- }\r
- \r
- public static void unpaintPropertySheetRow(String id) {\r
- \r
- // Catch uninit'ed property sheet tree\r
- if (getPropertySheetTree() == null) {\r
- return;\r
- }\r
- \r
- // Get tree's background color to "unpaint"\r
- Color color = getPropertySheetTree().getBackground();\r
- \r
- paintPropertySheetRow(id, color, true);\r
- }\r
-\r
- /**\r
- * Get the name out of the session's name relations vocabulary, not directly\r
- * from the object. \r
- * \r
- * @param type\r
- * @return\r
- */\r
- public static String getNameRelationLabelType(NameRelationshipType type) {\r
- SortedSet<NameRelationshipType> vocab = \r
- CdmSessionDataRepository.getDefault().getNameRelationshipTypes();\r
- for (NameRelationshipType type1 : vocab) {\r
- if (type1.equals(type)) {\r
- return type1.getLabel();\r
- }\r
- }\r
- return "";\r
- }\r
-\r
- static boolean isSaving = false;\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
- \r
- public static boolean getIsSaving() {\r
- return isSaving;\r
- }\r
-\r
- public static void setStatusLineManager(IStatusLineManager manager) {\r
- statusLineManager = manager;\r
- }\r
-\r
- public static void setStatusLine(String message) {\r
- statusLineManager.setMessage(message);\r
- }\r
- \r
- public static IProgressMonitor getStatusLineProgressMonitor() {\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
- \r
- static String srv = "";\r
- \r
- public static void openSearchResultsView(SearchResult searchResult) {\r
- srv += "1";\r
- logger.warn("opening search results window " + srv);\r
- try {\r
- IViewPart resultsView = getActivePage().showView(SearchResultView.ID, \r
- srv, IWorkbenchPage.VIEW_VISIBLE);\r
- ((SearchResultView) resultsView).setResult(searchResult);\r
- } catch (PartInitException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- }\r
-}
\ No newline at end of file
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.taxeditor.UiUtil;
import eu.etaxonomy.taxeditor.actions.cdm.SaveTaxonAction;
+import eu.etaxonomy.taxeditor.controller.EditorController;
import eu.etaxonomy.taxeditor.datasource.CdmTransactionController;
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;
*/
public void run(IAction action) {
- UiUtil.setIsSaving(true);
+ EditorController.setSaving(true);
// Get all open windows
- for (IEditorPart taxonEditor : UiUtil.getOpenTaxonEditors()) {
+ for (IEditorPart taxonEditor : EditorController.getOpenEditors()) {
// Save the dirty ones
if (taxonEditor.isDirty()) {
// Put all open taxa in the new transaction
CdmTransactionController.addSessionTaxaToTransaction();
- UiUtil.setIsSaving(false);
+ EditorController.setSaving(false);
// TODO: delete undoHistory
}
import org.eclipse.jface.action.Action;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
\r
/**\r
* @author p.ciardelli\r
\r
\r
public void run() { \r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
+ IOperationHistory operationHistory = GlobalController.getOperationHistory();\r
+ IUndoContext undoContext = GlobalController.getWorkbenchUndoContext();\r
operation.addContext(undoContext);\r
try {\r
operationHistory.execute(operation, null, null);\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.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.operations.DeleteTaxonOperation;\r
\r
/**\r
private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
.getImageDescriptor(ITaxEditorConstants.ACTIVE_DELETE_ICON);\r
\r
- private IOperationHistory operationHistory;\r
private IUndoContext undoContext;\r
\r
Taxon taxon;\r
super(text);\r
setImageDescriptor(image);\r
\r
- operationHistory = UiUtil.getOperationHistory();\r
- undoContext = UiUtil.getWorkbenchUndoContext();\r
+ undoContext = GlobalController.getWorkbenchUndoContext();\r
}\r
\r
public DeleteTaxonAction(Taxon taxon) {\r
IUndoableOperation operation = new DeleteTaxonOperation\r
(this.getText(), undoContext, taxon);\r
\r
- IProgressMonitor monitor = UiUtil.getStatusLineProgressMonitor();\r
- \r
- try {\r
- IStatus status = operationHistory.execute(operation, monitor, null);\r
- } catch (ExecutionException e) {\r
- logger.error("Error deleting taxon", e);\r
- } \r
- \r
- // Handle this in an operation so we are able to undo it\r
- \r
-// \r
-// // Get taxon name for progress monitor\r
-// String taxonName = CdmUtil.getDisplayName(taxon);\r
-// \r
-// // Get and start progress monitor\r
-// IProgressMonitor monitor = UiUtil.getStatusLineProgressMonitor();\r
-// monitor.beginTask("Deleting taxon '" + taxonName + "'.", 10);\r
-// \r
-// // Call save all action\r
-// new SaveAllAction().run(null);\r
-// monitor.worked(2);\r
-// \r
-// // If the taxon has children, cancel operation\r
-// // TODO add option to continue, and delete children\r
-// if (taxon.hasTaxonomicChildren()) {\r
-// MessageDialog.openInformation(UiUtil.getShell(), "Cannot delete taxon", \r
-// "'" + CdmUtil.getDisplayName(taxon) + "' has taxonomic children. " +\r
-// "These must be manually deleted before their parent.");\r
-// monitor.done();\r
-// return;\r
-// }\r
-// monitor.worked(1);\r
-// \r
-// \r
-// // Close taxon's editor, if any is active\r
-// try {\r
-// UiUtil.closeEditor(taxon, true);\r
-// } catch (PartInitException e) {\r
-// e.printStackTrace();\r
-// }\r
-// monitor.worked(1);\r
-//\r
-// // Delete taxon from CDM layer\r
-// CdmSessionDataRepository.getDefault().deleteTaxon(taxon);\r
-// monitor.worked(4);\r
-// \r
-// \r
-// \r
-// // Call save all action\r
-// new SaveAllAction().run(null);\r
-// monitor.worked(2);\r
-// \r
-// // Close the progress monitor\r
-// monitor.done();\r
-// \r
-// // Announce taxon was deleted on status line\r
-// UiUtil.setStatusLine("Deleted taxon '" + taxonName + "'.");\r
-// \r
-//// Status status = new Status(IStatus.INFO, TaxEditorPlugin.PLUGIN_ID, \r
-//// "Deleted.", null);\r
-//// StatusManager.getManager().handle(status, StatusManager.SHOW);\r
+ GlobalController.executeOperation(operation);\r
}\r
}
\ No newline at end of file
\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.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
\r
public class SaveTaxonAction extends Action {\r
private static final Logger logger = Logger.getLogger(SaveTaxonAction.class);\r
\r
- Taxon taxon;\r
+ private Taxon taxon;\r
\r
public SaveTaxonAction(Taxon taxon) {\r
this.taxon = taxon;\r
\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.cdm.model.taxon.TaxonRelationshipType;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
/**\r
// instead of implementing the logic here\r
\r
try {\r
- IEditorPart oldEditor = UiUtil.getEditorByTaxon(taxon);\r
+ IEditorPart oldEditor = EditorController.getEditorByTaxon(taxon);\r
if (oldEditor.isDirty()) {\r
- if (!MessageDialog.openConfirm(UiUtil.getShell(), "Save before proceeding", \r
+ if (!MessageDialog.openConfirm(GlobalController.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;\r
}\r
} catch (PartInitException e) {\r
e.printStackTrace();\r
- MessageDialog.openError(UiUtil.getShell(), "Error", "Error swapping synonym and taxon");\r
+ MessageDialog.openError(GlobalController.getShell(), "Error", "Error swapping synonym and taxon");\r
return;\r
}\r
\r
import eu.etaxonomy.cdm.database.ICdmDataSource;\r
import eu.etaxonomy.cdm.io.common.CdmDefaultExport;\r
import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;\r
\r
/**\r
String title = "Export " + getText();\r
\r
// Get file from user\r
- dialog = new FileDialog(UiUtil.getShell(), SWT.SAVE);\r
+ dialog = new FileDialog(GlobalController.getShell(), SWT.SAVE);\r
dialog.setFileName("export.xml");\r
String filePath = dialog.open();\r
file = new File(filePath); \r
\r
// Tell user whether import was a success or a dismal failure\r
if (isSuccessfulExport) {\r
- MessageDialog.openInformation(UiUtil.getShell(), title, "Export successful");\r
+ MessageDialog.openInformation(GlobalController.getShell(), title, "Export successful");\r
} else {\r
- MessageDialog.openError(UiUtil.getShell(), title, "Export was unsuccessful.");\r
+ MessageDialog.openError(GlobalController.getShell(), title, "Export was unsuccessful.");\r
}\r
}\r
}\r
\r
import eu.etaxonomy.cdm.database.ICdmDataSource;\r
import eu.etaxonomy.cdm.io.common.ImportWrapper;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.TreeController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;\r
\r
/**\r
String title = "Import " + getText();\r
\r
// Make sure user is aware of the implications of an import\r
- boolean doProceed = MessageDialog.openConfirm(UiUtil.getShell(), title, \r
+ boolean doProceed = MessageDialog.openConfirm(GlobalController.getShell(), title, \r
"Import may require a great deal of time and system resources.\n\n" +\r
"Are you sure you would like to proceed?");\r
if (!doProceed) {\r
}\r
\r
// Get file from user\r
- dialog = new FileDialog(UiUtil.getShell());\r
+ dialog = new FileDialog(GlobalController.getShell());\r
String filePath = dialog.open();\r
file = new File(filePath);\r
\r
source = file.toURI().toURL().toString();\r
//source = file.toString();\r
} catch (/*MalformedURL*/Exception e) {\r
- MessageDialog.openError(UiUtil.getShell(), title, "File could not be read.");\r
+ MessageDialog.openError(GlobalController.getShell(), title, "File could not be read.");\r
return;\r
}\r
\r
\r
// Tell user whether import was a success or a dismal failure\r
if (isSuccessfulImport) {\r
- MessageDialog.openInformation(UiUtil.getShell(), title, "Import successful");\r
- UiUtil.getTreeViewer().refresh();\r
+ MessageDialog.openInformation(GlobalController.getShell(), title, "Import successful");\r
+ TreeController.getTreeViewer().refresh();\r
} else {\r
- MessageDialog.openError(UiUtil.getShell(), title, "Import was unsuccessful.");\r
+ MessageDialog.openError(GlobalController.getShell(), title, "Import was unsuccessful.");\r
}\r
\r
}\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.controller.TreeController;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
\r
firePropertyChange(ITaxEditorConstants.QUICK_NAME_TAXON, null, quickNameTaxon);\r
\r
- TaxonomicTreeViewer treeViewer = UiUtil.getTreeViewer();\r
+ TaxonomicTreeViewer treeViewer = TreeController.getTreeViewer();\r
if (treeViewer == null) {\r
return;\r
}\r
* @author p.ciardelli\r
* @created 09.06.2008\r
* @version 1.0\r
+ * \r
+ * @deprecated\r
+ * TODO seems like this is not beeing used at the moment\r
*/\r
public class ChangeCompositeToNewTaxonAction extends UndoableAction {\r
private static final Logger logger = Logger\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.actions.UndoableAction;\r
import eu.etaxonomy.taxeditor.actions.cdm.SwapSynonymAndTaxonAction;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
Taxon newTaxon = (Taxon) event.getNewValue();\r
\r
// Close editor for existing taxon\r
- IEditorPart oldEditor;\r
- try {\r
- oldEditor = UiUtil.getEditorByTaxon(taxon);\r
- UiUtil.closeEditor(oldEditor, true);\r
- } catch (PartInitException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
+ EditorController.close(taxon, true);\r
+ \r
\r
// Remove old taxon from tree\r
CdmSessionDataRepository.getDefault().removeTaxon(taxon);\r
package eu.etaxonomy.taxeditor.actions.ui;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.dialogs.MessageDialog;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.ui.IEditorPart;\r
-import org.eclipse.ui.PartInitException;\r
\r
-import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\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.model.CdmSessionDataRepository;\r
-import eu.etaxonomy.taxeditor.model.CdmUtil;\r
-import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
+import eu.etaxonomy.taxeditor.operations.ChangeTaxonToSynonymOperation;\r
\r
/**\r
* @author p.ciardelli\r
private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
.getImageRegistry().getDescriptor(ITaxEditorConstants.TAXON_TO_SYNONYM_ICON);\r
\r
- private Taxon oldTaxon;\r
+ private Taxon taxon;\r
\r
private ChangeTaxonToSynonymAction() {\r
super(text);\r
setImageDescriptor(image);\r
}\r
\r
- public ChangeTaxonToSynonymAction(Taxon oldTaxon) {\r
+ public ChangeTaxonToSynonymAction(Taxon taxon) {\r
this();\r
- this.oldTaxon = oldTaxon;\r
+ this.taxon = taxon;\r
}\r
\r
public void run() {\r
+ IUndoableOperation operation = new ChangeTaxonToSynonymOperation(getText(), \r
+ GlobalController.getWorkbenchUndoContext(), taxon);\r
\r
- IEditorPart oldEditor = null;\r
- \r
- try { \r
- // Prompt user "Would you like to save?" before showing dialog\r
- // "Cancel" cancels action - "No" does not\r
- oldEditor = UiUtil.getEditorByTaxon(oldTaxon);\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;\r
- }\r
- oldEditor.doSave(null);\r
- }\r
-// if (UiUtil.getActivePage().saveEditor(oldEditor, true) == false) {\r
-// return;\r
-// }\r
- } catch (PartInitException e1) {\r
- e1.printStackTrace();\r
- }\r
- \r
- // Get destination taxon from dialog\r
- Shell shell = UiUtil.getShell();\r
- SelectTaxonDialog dialog = new SelectTaxonDialog(shell, SelectTaxonDialog.TAXON_TO_SYNONYM);\r
- Taxon destinationTaxon = dialog.open(oldTaxon);\r
- \r
- // Abort action if user cancelled dialog without choosing a taxon\r
- if (destinationTaxon == null) {\r
- return;\r
- }\r
- \r
- // Move oldTaxon in CDM\r
- TaxonNameBase synonymName = oldTaxon.getName();\r
- SynonymRelationshipType synonymType;\r
- if (CdmUtil.isNameHomotypic(synonymName, destinationTaxon)) {\r
-// makeTaxonSynonym\r
-// oldTaxon.makeSynonym();\r
-// destinationTaxon.addHomotypicSynonymName(synonymName);\r
- synonymType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();\r
- } else {\r
-// destinationTaxon.addHeterotypicSynonymName(synonymName);\r
- synonymType = SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF();\r
- }\r
- CdmUtil.makeTaxonSynonym(oldTaxon, destinationTaxon, synonymType,\r
- null, null);\r
- \r
- // TODO move any children, descriptions, synonyms\r
- for (TaxonDescription description: oldTaxon.getDescriptions()) {\r
- destinationTaxon.addDescription(description);\r
- oldTaxon.removeDescription(description);\r
- }\r
- \r
- for (TaxonRelationship fromRelation : oldTaxon.getRelationsFromThisTaxon()) {\r
- fromRelation.setFromTaxon(destinationTaxon);\r
- }\r
- \r
- for (TaxonRelationship toRelation : oldTaxon.getRelationsToThisTaxon()) {\r
- toRelation.setToTaxon(destinationTaxon);\r
- }\r
- \r
-// if (!TaxEditorPlugin.getDefault().getObservableRecentNamesList().\r
-// contains(oldTaxon)) { \r
-// TaxEditorPlugin.getDefault().getObservableRecentNamesList().\r
-// remove(oldTaxon);\r
-// RecentNamesView.removeRecentName(oldTaxon);\r
-// }\r
- \r
- CdmSessionDataRepository.getDefault().removeTaxon(oldTaxon); \r
- \r
- // Close open editor for oldTaxon without forcing save.\r
- // User has already saved or declined to do so above.\r
- try {\r
- UiUtil.closeEditor(oldEditor, false);\r
- } catch (PartInitException e) {\r
- e.printStackTrace();\r
- }\r
- \r
- // Open editor for new oldTaxon\r
- new SaveTaxonAction(destinationTaxon).run();\r
- new OpenTaxonEditorAction(destinationTaxon).run();\r
+ GlobalController.executeOperation(operation);\r
}\r
}
\ No newline at end of file
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.actions.cdm.DeleteMisappliedNameFromTaxonAction;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
\r
/**\r
}\r
\r
public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
+ IOperationHistory operationHistory = GlobalController.getOperationHistory();\r
+ IUndoContext undoContext = GlobalController.getWorkbenchUndoContext();\r
operation.addContext(undoContext);\r
try {\r
operationHistory.execute(operation, null, null);\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.actions.cdm.DeleteSynonymFromTaxonAction;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
\r
/**\r
* @author p.ciardelli\r
* @created 04.06.2008\r
* @version 1.0\r
+ * \r
+ * @deprecated \r
+ * \r
+ * TODO delete this deprecated class\r
*/\r
public class DeleteSynonymCompositeAction extends Action {\r
private static final Logger logger = Logger\r
}\r
\r
public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
+ IOperationHistory operationHistory = GlobalController.getOperationHistory();\r
+ IUndoContext undoContext = GlobalController.getWorkbenchUndoContext();\r
operation.addContext(undoContext);\r
try {\r
operationHistory.execute(operation, null, null);\r
package eu.etaxonomy.taxeditor.actions.ui;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
import org.eclipse.jface.action.Action;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
import org.eclipse.swt.widgets.Shell;\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.actions.cdm.MoveTaxonAction;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.SelectTaxonDialog;\r
import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
+import eu.etaxonomy.taxeditor.operations.MoveTaxonOperation;\r
\r
/**\r
* @author p.ciardelli\r
try { \r
// Prompt user "Would you like to save?" before showing dialog\r
// "Cancel" cancels action - "No" does not\r
- IEditorInput editorInput = new NameEditorInput(taxon);\r
- editor = UiUtil.getEditorByInput(editorInput);\r
- if (UiUtil.getActivePage().saveEditor(editor, true) == false) {\r
+ editor = EditorController.getEditorByTaxon(taxon);\r
+ if (GlobalController.getActivePage().saveEditor(editor, true) == false) {\r
return;\r
}\r
} catch (PartInitException e1) {\r
}\r
\r
// Get destination taxon from dialog\r
- Shell shell = UiUtil.getShell();\r
+ Shell shell = GlobalController.getShell();\r
SelectTaxonDialog dialog = new SelectTaxonDialog(shell, SelectTaxonDialog.TAXON_TO_NEW_PARENT);\r
Taxon destinationTaxon = dialog.open(taxon);\r
\r
}\r
\r
// Move taxon in CDM\r
-// Taxon oldParent = taxon.getTaxonomicParent();\r
- new MoveTaxonAction(taxon, destinationTaxon).run();\r
+ IUndoableOperation operation = new MoveTaxonOperation(this.getText(), \r
+ GlobalController.getWorkbenchUndoContext(), taxon, destinationTaxon);\r
+ \r
+ GlobalController.executeOperation(operation);\r
\r
// For some reason, old parent is not getting the hint that one of its children is gone\r
// new SaveTaxonAction(oldParent).run();\r
\r
import eu.etaxonomy.cdm.model.name.NameRelationship;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.propertysheet.namerelationswizard.NameRelationWizard;\r
import eu.etaxonomy.taxeditor.propertysheet.namerelationswizard.NameRelationWizardModel;\r
\r
\r
Wizard wizard = new NameRelationWizard(relationModel);\r
\r
- WizardDialog dialog = new WizardDialog(UiUtil.getShell(), wizard);\r
+ WizardDialog dialog = new WizardDialog(GlobalController.getShell(), wizard);\r
dialog.create();\r
dialog.open();\r
}\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.propertysheet.namerelationswizard.NameRelationsListWizard;\r
\r
/**\r
Wizard wizard = new NameRelationsListWizard(name);\r
\r
// Instantiates the wizard container with the wizard and opens it\r
- WizardDialog dialog = new WizardDialog(UiUtil.getShell(), wizard);\r
+ WizardDialog dialog = new WizardDialog(GlobalController.getShell(), wizard);\r
dialog.create();\r
dialog.open();\r
}\r
import org.apache.log4j.Logger;\r
import org.eclipse.jface.action.Action;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.ui.PartInitException;\r
\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\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.controller.EditorController;\r
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
\r
/**\r
parentTaxon.addTaxonomicChild(taxon, null, null);\r
\r
// Open editor for new taxon\r
- try {\r
- UiUtil.openTaxonEditor(taxon);\r
- } catch (PartInitException e) {\r
- e.printStackTrace();\r
- }\r
+ EditorController.open(taxon);\r
+ \r
\r
//new OpenTaxonEditorAction(taxon).run();\r
}\r
import org.eclipse.jface.action.IAction;\r
import org.eclipse.jface.resource.ImageDescriptor;\r
import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.ui.IEditorInput;\r
import org.eclipse.ui.IWorkbenchWindow;\r
import org.eclipse.ui.IWorkbenchWindowActionDelegate;\r
-import org.eclipse.ui.PartInitException;\r
\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\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.NameEditorInput;\r
-import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
-import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
\r
/**\r
* Opens a taxon editor for an existing or new taxon.\r
@Override\r
public void run() {\r
\r
- try {\r
- UiUtil.openTaxonEditor(taxon);\r
- } catch (PartInitException e) {\r
- e.printStackTrace();\r
- }\r
+ EditorController.open(taxon);\r
\r
// For clients who re-use the same instance of this class, \r
// taxon is re-initalized to ensure a new Taxon is opened every time\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.cdm.model.description.TextData;\r
import eu.etaxonomy.cdm.model.description.TextFormat;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.description.DescriptionElementComposite;\r
import eu.etaxonomy.taxeditor.editor.description.FeatureGroupComposite;\r
\r
}\r
\r
public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
+ IOperationHistory operationHistory = GlobalController.getOperationHistory();\r
+ IUndoContext undoContext = GlobalController.getWorkbenchUndoContext();\r
operation.addContext(undoContext);\r
try {\r
operationHistory.execute(operation, null, null);\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.controller.GlobalController;\r
\r
/**\r
* @author p.ciardelli\r
}\r
\r
public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
+ IOperationHistory operationHistory = GlobalController.getOperationHistory();\r
+ IUndoContext undoContext = GlobalController.getWorkbenchUndoContext();\r
operation.addContext(undoContext);\r
try {\r
operationHistory.execute(operation, null, null);\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.controller;\r
+\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.operations.IOperationHistory;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.IEditorReference;\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.datasource.CdmTransactionController;\r
+import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\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.RecentNamesView;\r
+import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
+\r
+/**\r
+ * @author n.hoffmann\r
+ * @created 20.01.2009\r
+ * @version 1.0\r
+ */\r
+public class EditorController {\r
+ private static final Logger logger = Logger.getLogger(EditorController.class);\r
+\r
+\r
+ private static Map<Taxon, TaxonNameEditor> taxonNameEditors;\r
+\r
+\r
+ private static boolean isSaving = false;\r
+ \r
+ private static IWorkbenchPage getActivePage(){\r
+ return GlobalController.getActivePage();\r
+ }\r
+ \r
+ /**\r
+ * @param input\r
+ * @return\r
+ * @throws PartInitException\r
+ */\r
+ private static IEditorPart getEditorByInput(IEditorInput input)\r
+ throws PartInitException {\r
+ for (IEditorReference reference : getActivePage().getEditorReferences()) {\r
+ if (reference.getEditorInput().equals(input)) {\r
+ IEditorPart editor = reference.getEditor(false);\r
+ return editor;\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ public static boolean closeAll() {\r
+ for (IEditorPart editor : getOpenEditors()) {\r
+ if (!getActivePage().closeEditor(editor, true)) {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+\r
+ public static IEditorPart getEditorByTaxon(Taxon taxon)\r
+ throws PartInitException {\r
+ IEditorInput input = new NameEditorInput(taxon);\r
+ return getEditorByInput(input);\r
+ }\r
+\r
+ /**\r
+ * @param input\r
+ * @param editorId\r
+ * @return \r
+ * @throws PartInitException\r
+ */\r
+ private static IEditorPart open(IEditorInput input, String editorId)\r
+ throws PartInitException {\r
+ return getActivePage().openEditor(input, editorId);\r
+ }\r
+\r
+ /**\r
+ * Open an emtpy taxon editor\r
+ * \r
+ * @return\r
+ * @throws PartInitException\r
+ */\r
+ public static IEditorPart open() \r
+ throws PartInitException{\r
+ return open(null);\r
+ }\r
+\r
+ /** \r
+ * Open a taxon editor for the given taxon\r
+ * \r
+ * @param taxon\r
+ * @return\r
+ * @throws PartInitException\r
+ */\r
+ public static IEditorPart open(Taxon taxon){\r
+ if(taxon == null){\r
+ TaxonNameBase name = CdmParserController.parseFullReference("", null, null);\r
+ name.setFullTitleCache("", false);\r
+ name.setTitleCache("", false);\r
+ taxon = Taxon.NewInstance(name, \r
+ CdmSessionDataRepository.getDefault().getDefaultSec());\r
+ }else{\r
+ // If this taxon is not visible in the tree, open node\r
+ TaxonomicTreeViewer treeViewer = TreeController.getTreeViewer(); \r
+ if (treeViewer != null) {\r
+ treeViewer.revealTaxon(taxon);\r
+ }\r
+ \r
+ // Add to recent names list\r
+ RecentNamesView.addRecentName(taxon);\r
+ }\r
+ \r
+ IEditorInput input = new NameEditorInput(taxon);\r
+ \r
+ try {\r
+ return open(input, MultiPageTaxonEditor.ID);\r
+ } catch (PartInitException e) {\r
+ logger.error("Error opening editor.", e);\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * Redraws an open editor if it exists for the given taxon\r
+ * \r
+ * @param taxon\r
+ * @return\r
+ */\r
+ public static boolean redraw(Taxon taxon){\r
+ \r
+ TaxonNameEditor editor = EditorController.getEditor(taxon);\r
+ \r
+ if(editor == null || editor.redraw()){\r
+ \r
+ // Mark editor as changed and unsaved\r
+ editor.setDirty();\r
+ \r
+ return true; \r
+ } \r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * @param taxon\r
+ * @param save\r
+ */\r
+ public static void close(Taxon taxon, boolean save) {\r
+ IEditorPart editor;\r
+ try {\r
+ editor = getEditorByTaxon(taxon);\r
+ close(editor, save);\r
+ } catch (PartInitException e) {\r
+ logger.error("Error closing taxon editor", e);\r
+ }\r
+ \r
+ }\r
+\r
+ /**\r
+ * @param editor\r
+ * @param save\r
+ * @throws PartInitException\r
+ */\r
+ private static void close(IEditorPart editor, boolean save)\r
+ throws PartInitException {\r
+ if (editor != null) {\r
+ getActivePage().closeEditor(editor, save);\r
+ }\r
+ }\r
+\r
+ public static void save(Taxon taxon, boolean confirm) {\r
+ IEditorPart editor = null;\r
+ try {\r
+ editor = getEditorByTaxon(taxon);\r
+ } catch (PartInitException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ if (editor != null) {\r
+ GlobalController.getActivePage().saveEditor(editor, confirm);\r
+ }\r
+ }\r
+\r
+ public static void saveAll(){\r
+ setSaving(true);\r
+ \r
+ // Get all open windows\r
+ for (IEditorPart taxonEditor : getOpenEditors()) {\r
+ \r
+ // Save the dirty ones\r
+ if (taxonEditor.isDirty()) {\r
+ \r
+ \r
+ IEditorInput input = taxonEditor.getEditorInput();\r
+ if (input.getAdapter(Taxon.class) != null) {\r
+ Taxon taxon = (Taxon) input.getAdapter(Taxon.class);\r
+ CdmSessionDataRepository.getDefault().saveTaxon(taxon);\r
+ if (taxonEditor instanceof MultiPageTaxonEditor) {\r
+ ((MultiPageTaxonEditor) taxonEditor).setDirtyExtern(false);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ // Commit the transaction \r
+ CdmTransactionController.commitTransaction();\r
+ \r
+ // Force library objects to be associated with new transaction\r
+ CdmSessionDataRepository.getDefault().clearNonTaxonData();\r
+ \r
+ // Start a new transaction\r
+ CdmTransactionController.startTransaction();\r
+ \r
+ // Put all open taxa in the new transaction\r
+ CdmTransactionController.addSessionTaxaToTransaction();\r
+ \r
+ setSaving(false);\r
+ // TODO: delete undoHistory\r
+ }\r
+\r
+ public static void setSaving(boolean isSaving) {\r
+ EditorController.isSaving = isSaving;\r
+ }\r
+\r
+ public static boolean isSaving() {\r
+ return isSaving;\r
+ }\r
+\r
+ public static void addEditor(\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 getEditor(Taxon taxon) {\r
+ if (taxonNameEditors == null) {\r
+ return null;\r
+ }\r
+ return taxonNameEditors.get(taxon);\r
+ }\r
+\r
+ /**\r
+ * Returns a set of all currently open \r
+ * <code>MultiPageTaxonEditor</code>s.\r
+ * \r
+ * @return\r
+ */\r
+ public static Set<IEditorPart> getOpenEditors() {\r
+ \r
+ Set<IEditorPart> taxonEditors = new HashSet<IEditorPart>();\r
+ \r
+ for (IEditorReference reference : getActivePage().getEditorReferences()) {\r
+ IEditorPart editor = reference.getEditor(false);\r
+ if (editor instanceof MultiPageTaxonEditor) {\r
+ taxonEditors.add(editor);\r
+ }\r
+ }\r
+ return taxonEditors;\r
+ }\r
+\r
+ public static IUndoContext getUndoContext(Taxon taxon) {\r
+ // TODO make this taxon name editor specific\r
+ // return getTaxonNameEditor(taxon).getUndoContext();\r
+ return IOperationHistory.GLOBAL_UNDO_CONTEXT;\r
+ }\r
+\r
+\r
+ \r
+\r
+}\r
--- /dev/null
+/**\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy \r
+ * http://www.e-taxonomy.eu\r
+ * \r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+\r
+package eu.etaxonomy.taxeditor.controller;\r
+\r
+import java.util.Set;\r
+import java.util.SortedSet;\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.core.runtime.Status;\r
+import org.eclipse.jface.action.IStatusLineManager;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.ui.IViewPart;\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.operations.IWorkbenchOperationSupport;\r
+\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.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+\r
+/**\r
+ * A collection of useful methods related to the UI.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 27.05.2008\r
+ * @version 1.0\r
+ */\r
+public class GlobalController {\r
+ private static final Logger logger = Logger.getLogger(GlobalController.class);\r
+\r
+ private static Set<Feature> preferredFeatureSet;\r
+ private static Set<Rank> preferredRankSet;\r
+ \r
+ /**\r
+ * @return\r
+ */\r
+ public static IWorkbenchPage getActivePage() {\r
+ return TaxEditorPlugin.getDefault().getWorkbench()\r
+ .getActiveWorkbenchWindow().getActivePage();\r
+ }\r
+\r
+ /**\r
+ * @return\r
+ */\r
+ public static Shell getShell() {\r
+ return TaxEditorPlugin.getDefault().getWorkbench()\r
+ .getActiveWorkbenchWindow().getShell();\r
+ }\r
+\r
+ public static IViewPart getViewById(String id) {\r
+ return TaxEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().\r
+ getActivePage().findView(id);\r
+ }\r
+ \r
+\r
+ public static IWorkbenchOperationSupport getOperationSupport() {\r
+ return TaxEditorPlugin.getDefault().getWorkbench().\r
+ getOperationSupport();\r
+ }\r
+ \r
+ public static IOperationHistory 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
+ // TODO make this more specific than GLOBAL_UNDO_CONTEXT\r
+// return getOperationSupport().getUndoContext();\r
+ return IOperationHistory.GLOBAL_UNDO_CONTEXT;\r
+ }\r
+\r
+ public static void setStatusMessage(String msg) {\r
+ PropertySheetController.getPropertySheet().getViewSite().getActionBars().getStatusLineManager().setMessage(msg); \r
+ }\r
+\r
+ /**\r
+ * Get the name out of the session's name relations vocabulary, not directly\r
+ * from the object. \r
+ * \r
+ * @param type\r
+ * @return\r
+ */\r
+ public static String getNameRelationLabelType(NameRelationshipType type) {\r
+ SortedSet<NameRelationshipType> vocab = \r
+ CdmSessionDataRepository.getDefault().getNameRelationshipTypes();\r
+ for (NameRelationshipType type1 : vocab) {\r
+ if (type1.equals(type)) {\r
+ return type1.getLabel();\r
+ }\r
+ }\r
+ return "";\r
+ }\r
+ \r
+ private static IStatusLineManager statusLineManager;\r
+\r
+ public static void setStatusLineManager(IStatusLineManager manager) {\r
+ statusLineManager = manager;\r
+ }\r
+\r
+ public static void setStatusLine(String message) {\r
+ statusLineManager.setMessage(message);\r
+ }\r
+ \r
+ public static IProgressMonitor getStatusLineProgressMonitor() {\r
+ statusLineManager.setCancelEnabled(false);\r
+ return statusLineManager.getProgressMonitor();\r
+ }\r
+\r
+ public static Set<Feature> getPreferredFeatures() {\r
+ return preferredFeatureSet;\r
+ }\r
+\r
+ public static void setPreferredFeatures(Set<Feature> preferredFeatureSet) {\r
+ GlobalController.preferredFeatureSet = preferredFeatureSet;\r
+ }\r
+\r
+ public static Set<Rank> getPreferredRanks() {\r
+ return preferredRankSet;\r
+ }\r
+\r
+ public static void setPreferredRanks(Set<Rank> preferredRankSet) {\r
+ GlobalController.preferredRankSet = preferredRankSet;\r
+ }\r
+\r
+ public static void addPreferredRank(Rank rank) {\r
+ preferredRankSet.add(rank);\r
+ }\r
+\r
+ public static void addPreferredFeature(Feature feature) {\r
+ GlobalController.preferredFeatureSet.add(feature); \r
+ }\r
+ \r
+ public static void executeOperation(IUndoableOperation operation){\r
+ try {\r
+ IStatus status = getOperationHistory().execute(operation, getStatusLineProgressMonitor(), null);\r
+ String statusString = status.equals(Status.OK_STATUS) ? "completed" : "cancelled";\r
+ setStatusLine(operation.getLabel() + " " + statusString + ".");\r
+ } catch (ExecutionException e) {\r
+ logger.error("Error executing operation: " + operation.getLabel(), e);\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.controller;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.swt.widgets.TreeItem;\r
+import org.eclipse.ui.IActionBars;\r
+import org.eclipse.ui.IPageLayout;\r
+import org.eclipse.ui.IViewPart;\r
+import org.eclipse.ui.IViewReference;\r
+import org.eclipse.ui.views.properties.PropertySheet;\r
+import org.eclipse.ui.views.properties.PropertySheetPage;\r
+\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.propertysheet.CustomSortPropertySheetEntry;\r
+\r
+/**\r
+ * @author n.hoffmann\r
+ * @created 20.01.2009\r
+ * @version 1.0\r
+ */\r
+public class PropertySheetController {\r
+ private static final Logger logger = Logger\r
+ .getLogger(PropertySheetController.class);\r
+\r
+ public static IViewPart getPropertySheet() {\r
+ for (IViewReference reference : GlobalController.getActivePage().getViewReferences()) {\r
+ if (reference.getId().equals(IPageLayout.ID_PROP_SHEET)) {\r
+ logger.warn(reference.getView(false).getSite().getPart().getTitle());\r
+ return reference.getView(false);\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * By default, property sheet has buttons in the toolbar for \r
+ * "Show advanced properties" and "Show categories".\r
+ * <p>\r
+ * This is confusing for the user, hence a method to remove them\r
+ * until such time as advanced properties or categories are implemented.\r
+ */\r
+ public static void hidePropertySheetToolbar() {\r
+ PropertySheet propertySheet = (PropertySheet) getPropertySheet();\r
+ IActionBars actionBars = propertySheet.getViewSite().getActionBars();\r
+ actionBars.getToolBarManager().removeAll();\r
+ actionBars.getMenuManager().removeAll();\r
+ }\r
+\r
+ /**\r
+ * The property sheet listener ensures only property sheets\r
+ * with data cause the Property Sheet to be updated.\r
+ */\r
+ public static void addPropertySheetInputListener() {\r
+ IViewPart propertySheet = getPropertySheet();\r
+ // propertySheet.get\r
+ PropertySheet ps = (PropertySheet) propertySheet;\r
+ // ps.addPartPropertyListener(listener)\r
+ // ps.addPropertyListener(l)\r
+ }\r
+\r
+ public static void setPropertySheetTree(Tree tree) {\r
+ TaxEditorPlugin.getDefault().setPropertySheetTree(tree); \r
+ }\r
+\r
+ public static Tree getPropertySheetTree() {\r
+ return TaxEditorPlugin.getDefault().getPropertySheetTree(); \r
+ }\r
+\r
+ public static void setPropertySheetPage(PropertySheetPage page) {\r
+ TaxEditorPlugin.getDefault().setPropertySheetPage(page);\r
+ }\r
+\r
+ public static PropertySheetPage getPropertySheetPage() {\r
+ return TaxEditorPlugin.getDefault().getPropertySheetPage(); \r
+ }\r
+\r
+ /**\r
+ * UiUtil.paintPropertySheetRow(P_DATEPUBLISHED, new Color(Display.getDefault(), WarningAnnotation.WARNING_RGB), true);\r
+ * UiUtil.unpaintPropertySheetRow(P_DATEPUBLISHED);\r
+ * \r
+ * @param id\r
+ * @param color\r
+ * @param doPaintChildren\r
+ */\r
+ public static void paintPropertySheetRow(String id, Color color, boolean doPaintChildren) {\r
+ \r
+ // Catch null property sheet name\r
+ if (id == null) {\r
+ return;\r
+ }\r
+ \r
+ // Catch uninit'ed property sheet tree\r
+ if (getPropertySheetTree() == null) {\r
+ return;\r
+ }\r
+ \r
+ paintPropertySheetRow(id, color, doPaintChildren, getPropertySheetTree());\r
+ }\r
+\r
+ private static void paintPropertySheetRow(String id, Color color, boolean doPaintChildren, Object treeOrItem) {\r
+ \r
+ // Init items w zero-length array\r
+ TreeItem[] items = new TreeItem[]{};\r
+ \r
+ // Get child items depending to class\r
+ if (treeOrItem instanceof Tree) {\r
+ items = ((Tree) treeOrItem).getItems();\r
+ }\r
+ if (treeOrItem instanceof TreeItem) {\r
+ items = ((TreeItem) treeOrItem).getItems();\r
+ }\r
+ \r
+ // If array hasn't been populated by the above, return\r
+ if (items.length == 0) {\r
+ return;\r
+ }\r
+ \r
+ // Prop. sheet id's take the form "01:xxxx" for sorting - truncate\r
+ id = CustomSortPropertySheetEntry.truncateDisplayName(id);\r
+ \r
+ // Iterate through child items\r
+ for (TreeItem item : items) {\r
+ \r
+ // Item found, paint it\r
+ if (id.equals(item.getText())) {\r
+ paintItem(item, color, doPaintChildren);\r
+ return;\r
+ } \r
+ \r
+ // Recursively search for item to paint in child items\r
+ if (item.getItemCount() > 0) {\r
+ paintPropertySheetRow(id, color, doPaintChildren, item);\r
+ }\r
+ } \r
+ }\r
+\r
+ public static void unpaintPropertySheetRow(String id) {\r
+ \r
+ // Catch uninit'ed property sheet tree\r
+ if (getPropertySheetTree() == null) {\r
+ return;\r
+ }\r
+ \r
+ // Get tree's background color to "unpaint"\r
+ Color color = getPropertySheetTree().getBackground();\r
+ \r
+ paintPropertySheetRow(id, color, true);\r
+ }\r
+\r
+ /**\r
+ * Note: children are only painted if submenu has already been created, i.e. opened once.\r
+ * \r
+ * @param item\r
+ * @param color\r
+ * @param doPaintChildren\r
+ */\r
+ public static void paintItem(TreeItem item, Color color, boolean doPaintChildren) {\r
+ \r
+ // Paint the item\r
+ item.setBackground(color);\r
+ \r
+ // Recursively paint child items if requested\r
+ if (doPaintChildren) {\r
+ for (TreeItem childItem : item.getItems()) {\r
+ paintItem(childItem, color, doPaintChildren);\r
+ }\r
+ }\r
+ }\r
+ \r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.controller;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.ui.IViewPart;\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.navigation.SearchResult;\r
+import eu.etaxonomy.taxeditor.navigation.SearchResultView;\r
+\r
+/**\r
+ * @author n.hoffmann\r
+ * @created 20.01.2009\r
+ * @version 1.0\r
+ */\r
+public class SearchController {\r
+ private static final Logger logger = Logger\r
+ .getLogger(SearchController.class);\r
+ private static String srv = "";\r
+\r
+ public static void openSearchResultsView(SearchResult searchResult) {\r
+ srv += "1";\r
+ logger.warn("opening search results window " + srv);\r
+ try {\r
+ IViewPart resultsView = UiUtil.getActivePage().showView(SearchResultView.ID, \r
+ srv, IWorkbenchPage.VIEW_VISIBLE);\r
+ ((SearchResultView) resultsView).setResult(searchResult);\r
+ } catch (PartInitException e) {\r
+ logger.error("Error opening search result.", e);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.controller;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.ui.IViewPart;\r
+\r
+import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView;\r
+import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
+\r
+/**\r
+ * @author n.hoffmann\r
+ * @created 20.01.2009\r
+ * @version 1.0\r
+ */\r
+public class TreeController {\r
+ private static final Logger logger = Logger.getLogger(TreeController.class);\r
+ private static IViewPart treeView;\r
+\r
+ /**\r
+ * Returns the <code>TaxonomicTreeViewer</code> used for navigation. Not to \r
+ * be confused with the window that contains it, <code>TaxonomicTreeView</code>. \r
+ * \r
+ * @return\r
+ */\r
+ public static TaxonomicTreeViewer getTreeViewer() {\r
+ TaxonomicTreeView view = getTreeView();\r
+ if (view == null) {\r
+ return null;\r
+ }\r
+ return view.getTreeViewer();\r
+ }\r
+\r
+ /**\r
+ * @see eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView#createTreeViewer()\r
+ * \r
+ * @return\r
+ */\r
+ public static TaxonomicTreeViewer createTreeViewer() {\r
+ TaxonomicTreeView view = getTreeView();\r
+ if (view == null) {\r
+ return null;\r
+ }\r
+ return view.createTreeViewer();\r
+ }\r
+\r
+ /**\r
+ * Returns the <code>TaxonomicTreeView</code> containing the \r
+ * <code>TaxonomicTreeViewer</code> used for navigation. \r
+ * \r
+ * @return\r
+ */ \r
+ public static TaxonomicTreeView getTreeView() {\r
+ if (treeView == null) {\r
+ treeView = GlobalController.getViewById(TaxonomicTreeView.ID);\r
+ if (!(treeView instanceof TaxonomicTreeView)) {\r
+ treeView = null;\r
+ }\r
+ }\r
+ return (TaxonomicTreeView) treeView;\r
+ }\r
+ \r
+ \r
+}\r
import eu.etaxonomy.cdm.database.CdmPersistentDataSource;\r
import eu.etaxonomy.cdm.database.DatabaseTypeEnum;\r
import eu.etaxonomy.cdm.database.ICdmDataSource;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
/**\r
* List of database types comes from {@link eu.etaxonomy.cdm.database.DatabaseTypeEnum}.\r
* \r
createMySqlForm(dataSource);\r
} else {\r
// TODO Intrusive - change to text\r
- MessageDialog.openInformation(UiUtil.getShell(), "Database not yet implemented", \r
+ MessageDialog.openInformation(GlobalController.getShell(), "Database not yet implemented", \r
"Creation of datasources using a(n) '" + type.getName() + "' database not yet implemented.");\r
}\r
}\r
usernameText.getText(), \r
passwordText.getText());\r
if (dataSource.testConnection()) {\r
- MessageDialog.openConfirm(UiUtil.getShell(), "Test successful", "Test successful");\r
+ MessageDialog.openConfirm(GlobalController.getShell(), "Test successful", "Test successful");\r
} else {\r
- MessageDialog.openWarning(UiUtil.getShell(), "Test unsuccessful", "Test unsuccessful"); \r
+ MessageDialog.openWarning(GlobalController.getShell(), "Test unsuccessful", "Test unsuccessful"); \r
}\r
}\r
\r
import eu.etaxonomy.cdm.database.ICdmDataSource;\r
import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.TreeController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
private boolean changeDataSource(final ICdmDataSource dataSource) {\r
\r
// Close all open editors before showing progress monitor\r
- if (!UiUtil.closeOpenTaxonEditors()) {\r
+ if (!EditorController.closeAll()) {\r
\r
// User has canceled operation \r
return false;\r
\r
// Get session root taxa\r
// TODO get listener in tree content provider to take care of this\r
- UiUtil.getTreeViewer().setInput(\r
+ TreeController.getTreeViewer().setInput(\r
CdmSessionDataRepository.getDefault().getRootTaxa());\r
\r
monitor.worked(11);\r
}\r
\r
};\r
- new ProgressMonitorDialog(UiUtil.getShell()).run(false, true, op);\r
+ new ProgressMonitorDialog(GlobalController.getShell()).run(false, true, op);\r
} catch (InvocationTargetException e) {\r
e.printStackTrace();\r
return false;\r
import org.eclipse.ui.views.properties.PropertySheetPage;\r
\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.PropertySheetController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.propertysheet.CustomSortPropertySheetEntry;\r
\r
/**\r
// Save the property sheet tree for easy access as needed\r
if (!control.isDisposed()) {\r
if (control instanceof Tree) {\r
- UiUtil.setPropertySheetTree((Tree) control);\r
+ PropertySheetController.setPropertySheetTree((Tree) control);\r
}\r
}\r
return control;\r
}; \r
\r
// Try out PartListener to intercept selections\r
- IWorkbenchPage activePage = UiUtil.getActivePage();\r
+ IWorkbenchPage activePage = GlobalController.getActivePage();\r
// IWorkbenchPart active = activePage.getActivePart();\r
IPartListener2 partListener = new IPartListener2() {\r
\r
};\r
activePage.addPartListener(partListener);\r
\r
- UiUtil.setPropertySheetPage(page);\r
+ PropertySheetController.setPropertySheetPage(page);\r
\r
CustomSortPropertySheetEntry entry = new CustomSortPropertySheetEntry();\r
page.setRootEntry(entry);\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.controller.EditorController;\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
\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
+ EditorController.getEditor(taxon).getHomotypicGroup(group);\r
if (groupComposite == null) {\r
groupComposite = createHomotypicalGroup(taxon, group);\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
+ EditorController.getEditor(taxon).getMisappliedGroup();\r
if (groupComposite == null) {\r
groupComposite = createMisappliedGroup(taxon);\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.graphics.Font;\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.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
import eu.etaxonomy.taxeditor.operations.name.ChangeMisappliedNameToSynonymOperation;\r
import eu.etaxonomy.taxeditor.operations.name.RemoveMisappliedNameOperation;\r
\r
ContextMenu contextMenu = createContextMenu();\r
\r
- final IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- final IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ final IUndoContext undoContext = EditorController.getUndoContext(taxon);\r
\r
// Remove misapplied name from taxon\r
String text = "Remove misapplied name from taxon"; //$NON-NLS-1$\r
public void run() {\r
IUndoableOperation operation = new RemoveMisappliedNameOperation\r
(this.getText(), undoContext, taxon, misappliedName);\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
+ GlobalController.executeOperation(operation);\r
}\r
});\r
}\r
HomotypicalGroup homotypicalGroup = \r
((HomotypicalGroupComposite)parent).getGroup();\r
\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ IUndoContext undoContext = EditorController.getUndoContext(taxon);\r
IUndoableOperation operation = new ChangeMisappliedNameToSynonymOperation\r
("change misapplication to synonym", 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
+ GlobalController.executeOperation(operation);\r
}\r
return true;\r
\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.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
import eu.etaxonomy.taxeditor.editor.LineBreakListener;\r
import eu.etaxonomy.taxeditor.editor.ParseListener;\r
return;\r
}\r
\r
- if (UiUtil.getIsSaving()) {\r
+ if (EditorController.isSaving()) {\r
return;\r
}\r
\r
public void handleSplitText(String text) {\r
\r
// Create a synonym in a new homotypic group using text as name\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ IUndoContext undoContext = EditorController.getUndoContext(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
+ GlobalController.executeOperation(operation);\r
\r
// getTextViewer().removeLineBreakListener(this);\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.graphics.Font;\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.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
* @version 1.0\r
*/\r
public class SynonymComposite extends NameComposite {\r
+ @SuppressWarnings("unused")\r
private static final Logger logger = Logger\r
.getLogger(SynonymComposite.class);\r
\r
private Synonym synonym;\r
\r
+ private IUndoContext undoContext;\r
+ \r
public SynonymComposite(Composite parent, IManagedForm form,\r
Taxon taxon, Synonym synonym) {\r
super(parent, form, null, synonym);\r
this.taxon = taxon;\r
this.synonym = synonym;\r
\r
+ this.undoContext = EditorController.getUndoContext(taxon);\r
+ \r
setDraggable(true);\r
setFont(getViewerFont());\r
setIndent(SYNONYM_INDENT);\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
+ GlobalController.executeOperation(operation);\r
}\r
\r
// Has this been moved to a HomotypicalGroup?\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
+ GlobalController.executeOperation(operation);\r
}\r
return true;\r
\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
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
+ GlobalController.executeOperation(operation);\r
}\r
});\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
+ GlobalController.executeOperation(operation); \r
}\r
});\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
+ GlobalController.executeOperation(operation); \r
}\r
};\r
contextMenu.addAction(makeBasionymAction); \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
+ GlobalController.executeOperation(operation); \r
}\r
};\r
contextMenu.addAction(unmakeBasionymAction);\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
+ GlobalController.executeOperation(operation); \r
}\r
};\r
contextMenu.addAction(swapAction);\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
+ GlobalController.executeOperation(operation); \r
}\r
});\r
}\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 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.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
import eu.etaxonomy.taxeditor.editor.FreeTextElementFactory;\r
\r
Taxon taxon = getTaxon();\r
\r
- UiUtil.addTaxonNameEditor(taxon, this);\r
+ EditorController.addEditor(taxon, this);\r
\r
// Register listeners for any change in accepted name or set of relations\r
taxon.getName().addPropertyChangeListener(taxonChangeListener);\r
\r
public void drop(DropTargetEvent event) {\r
\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(getTaxon());\r
+ IUndoContext undoContext = EditorController.getUndoContext(getTaxon());\r
IUndoableOperation operation = null;\r
\r
// Synonym being dropped\r
if (operation == null) {\r
logger.warn("User unsuccessfully tried to drop " + event.data.getClass());\r
} else {\r
- try {\r
-// WidgetTransfer.getInstance().setWidget(null);\r
- IStatus status = operationHistory.execute(operation, null, null);\r
- } catch (ExecutionException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
+ GlobalController.executeOperation(operation);\r
}\r
} \r
});\r
\r
private SortedSet<Rank> ranks;\r
\r
- private TermVocabulary<NomenclaturalStatusType> nomStatii;\r
+ private TermVocabulary<NomenclaturalStatusType> nomStatus;\r
\r
private SortedSet<NameRelationshipType> nameRelationshipTypes;\r
\r
public void clearNonTaxonData() {\r
features = null;\r
ranks = null;\r
- nomStatii = null;\r
+ nomStatus = null;\r
\r
// Parser is also transaction-, and therefore session-, dependent\r
CdmParserController.clearNonViralNameParser();\r
}\r
\r
@Override\r
- public TermVocabulary<NomenclaturalStatusType> getNomStatii() {\r
- if (nomStatii == null) {\r
- nomStatii = getApplicationController().getNameService()\r
+ public TermVocabulary<NomenclaturalStatusType> getNomStatus() {\r
+ if (nomStatus == null) {\r
+ nomStatus = getApplicationController().getNameService()\r
.getStatusTypeVocabulary();\r
}\r
- return nomStatii;\r
+ return nomStatus;\r
}\r
\r
@Override\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.navigation.SearchResult;\r
\r
/**\r
try {\r
resultsList = getReferenceService().getReferencesByTitle(reference);\r
} catch (RuntimeException e) {\r
- MessageDialog.openError(UiUtil.getShell(), "Search reference error", \r
+ MessageDialog.openError(GlobalController.getShell(), "Search reference error", \r
"Reference search returned an error. This could be a Hibernate concurrency problem. " +\r
"Please try saving your work, then searching again.");\r
e.printStackTrace();\r
\r
public SortedSet<Rank> getRanks();\r
\r
- public TermVocabulary<NomenclaturalStatusType> getNomStatii();\r
+ public TermVocabulary<NomenclaturalStatusType> getNomStatus();\r
\r
public SortedSet<NameRelationshipType> getNameRelationshipTypes();\r
}\r
\r
package eu.etaxonomy.taxeditor.navigation;\r
\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
import org.apache.log4j.Logger;\r
import org.eclipse.jface.action.IMenuManager;\r
import org.eclipse.jface.action.IToolBarManager;\r
\r
import com.swtdesigner.SWTResourceManager;\r
\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.SearchController;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
/**\r
\r
// If there are results, open a view in the center pane\r
if (searchResult.size() > 0) {\r
- UiUtil.openSearchResultsView(searchResult);\r
+ SearchController.openSearchResultsView(searchResult);\r
} else {\r
\r
// Display "no results found" message\r
import eu.etaxonomy.cdm.database.ICdmDataSource;\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.OpenTaxonEditorAction;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.datasource.CdmDataSourceDialog;\r
import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
newDataSourceMenuItem.setText("Edit data sources ...");\r
newDataSourceMenuItem.addSelectionListener(new SelectionAdapter() {\r
public void widgetSelected(SelectionEvent event) {\r
- Dialog dialog = new CdmDataSourceDialog(UiUtil.getShell());\r
+ Dialog dialog = new CdmDataSourceDialog(GlobalController.getShell());\r
dialog.open();\r
\r
// Refresh menu to reflect any changes in data \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.IOperationHistory;\r
import org.eclipse.core.commands.operations.IUndoContext;\r
import org.eclipse.core.commands.operations.IUndoableOperation;\r
import org.eclipse.core.databinding.observable.set.IObservableSet;\r
-import org.eclipse.core.runtime.IStatus;\r
import org.eclipse.jface.action.Action;\r
import org.eclipse.jface.action.IMenuListener;\r
import org.eclipse.jface.action.IMenuManager;\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.PartInitException;\r
\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\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.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
import eu.etaxonomy.taxeditor.actions.TaxonTransfer;\r
import eu.etaxonomy.taxeditor.actions.cdm.DeleteTaxonAction;\r
-import eu.etaxonomy.taxeditor.actions.cdm.MoveTaxonAction;\r
-import eu.etaxonomy.taxeditor.actions.cdm.SaveTaxonAction;\r
import eu.etaxonomy.taxeditor.actions.ui.AddQuickNameAction;\r
import eu.etaxonomy.taxeditor.actions.ui.OpenNewChildNameEditorAction;\r
import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;\r
import eu.etaxonomy.taxeditor.model.ICdmTaxonSetListener;\r
import eu.etaxonomy.taxeditor.model.TaxonomicTreeContentProvider;\r
import eu.etaxonomy.taxeditor.operations.MoveTaxonOperation;\r
-import eu.etaxonomy.taxeditor.operations.name.RemoveSynonymOperation;\r
\r
/**\r
* Taxon tree viewer which responds to events within individual taxa.\r
\r
private boolean quickAddMode;\r
\r
- private IOperationHistory operationHistory;\r
private IUndoContext undoContext;\r
\r
private boolean initialized = false;\r
// SW.VIRTUAL causes nodes to be loaded on-demand, improving performance\r
super(parent, SWT.VIRTUAL);\r
\r
- operationHistory = UiUtil.getOperationHistory();\r
- undoContext = UiUtil.getWorkbenchUndoContext();\r
+ undoContext = GlobalController.getWorkbenchUndoContext();\r
\r
tree = this.getTree();\r
tree.setLinesVisible(false);\r
// Make sure parentTaxon is not a child\r
if (CdmUtil.isTaxonChildOfTaxon(parentTaxon, taxon)) {\r
\r
- MessageDialog.openError(UiUtil.getShell(), "Can't move taxon.",\r
+ MessageDialog.openError(GlobalController.getShell(), "Can't move taxon.",\r
"'" + CdmUtil.getDisplayName(taxon) + "' sits above " +\r
"'" + CdmUtil.getDisplayName(parentTaxon) + "' " +\r
"in the taxonomic hierarchy.");\r
\r
IUndoableOperation operation = new MoveTaxonOperation\r
(text, undoContext, taxon, parentTaxon);\r
- try {\r
- IStatus status = operationHistory.execute(operation, null, null);\r
- } catch (ExecutionException e) {\r
- logger.error("Error moving taxon", e);\r
- } \r
+ \r
+ GlobalController.executeOperation(operation); \r
}\r
});\r
}\r
this.addDoubleClickListener(new IDoubleClickListener() {\r
\r
public void doubleClick(DoubleClickEvent event) {\r
- Taxon taxon = null;\r
if (event.getSelection() instanceof StructuredSelection) {\r
Object element = ((StructuredSelection) event\r
.getSelection()).getFirstElement();\r
if (element instanceof Taxon) {\r
-// new OpenTaxonEditorAction((Taxon) element).run();\r
- try {\r
- UiUtil.openTaxonEditor((Taxon) element);\r
- } catch (PartInitException e) {\r
- logger.error("Error opening taxon editor", e);\r
- }\r
+ EditorController.open((Taxon) element);\r
}\r
}\r
}\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.controller.EditorController;\r
\r
/**\r
* @author p.ciardelli\r
* @return\r
*/\r
protected IStatus redrawOpenEditor() { \r
- return UiUtil.redrawEditor(taxon) ? Status.OK_STATUS : Status.CANCEL_STATUS;\r
+ return EditorController.redraw(taxon) ? Status.OK_STATUS : 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;\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.swt.widgets.Shell;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
+import eu.etaxonomy.taxeditor.editor.SelectTaxonDialog;\r
+import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * @author n.hoffmann\r
+ * @created 20.01.2009\r
+ * @version 1.0\r
+ */\r
+public class ChangeTaxonToSynonymOperation extends AbstractEditorOperation{\r
+ \r
+ private static final Logger logger = Logger\r
+ .getLogger(ChangeTaxonToSynonymOperation.class);\r
+\r
+ private Taxon destinationTaxon;\r
+ \r
+ public ChangeTaxonToSynonymOperation(String label,\r
+ IUndoContext undoContext, Taxon taxon) {\r
+ super(label, undoContext, taxon);\r
+ }\r
+\r
+ @Override\r
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+\r
+ IEditorPart editor = null;\r
+ \r
+ try { \r
+ // Prompt user "Would you like to save?" before showing dialog\r
+ // "Cancel" cancels action - "No" does not\r
+ editor = EditorController.getEditorByTaxon(taxon);\r
+ if (editor.isDirty()) {\r
+ if (!MessageDialog.openConfirm(GlobalController.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
+ editor.doSave(null);\r
+ }\r
+// if (UiUtil.getActivePage().saveEditor(oldEditor, true) == false) {\r
+// return;\r
+// }\r
+ } catch (PartInitException e1) {\r
+ e1.printStackTrace();\r
+ }\r
+ \r
+ // Get destination taxon from dialog\r
+ Shell shell = GlobalController.getShell();\r
+ SelectTaxonDialog dialog = new SelectTaxonDialog(shell, SelectTaxonDialog.TAXON_TO_SYNONYM);\r
+ destinationTaxon = dialog.open(taxon);\r
+ \r
+ // Abort action if user cancelled dialog without choosing a taxon\r
+ if (destinationTaxon == null) {\r
+ return Status.CANCEL_STATUS;\r
+ }\r
+ \r
+ \r
+ return makeTaxonSynonym(taxon, destinationTaxon) ? Status.OK_STATUS : Status.CANCEL_STATUS;\r
+ }\r
+\r
+ private boolean makeTaxonSynonym(Taxon taxon, Taxon destinationTaxon){\r
+ // Move taxon in CDM to new destinationTaxon\r
+ TaxonNameBase synonymName = taxon.getName();\r
+ SynonymRelationshipType synonymType;\r
+ if (CdmUtil.isNameHomotypic(synonymName, destinationTaxon)) {\r
+ synonymType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();\r
+ } else {\r
+ synonymType = SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF();\r
+ }\r
+ CdmUtil.makeTaxonSynonym(taxon, destinationTaxon, synonymType,\r
+ null, null);\r
+ \r
+ // TODO move any children, descriptions, synonyms\r
+ for (TaxonDescription description: taxon.getDescriptions()) {\r
+ destinationTaxon.addDescription(description);\r
+ taxon.removeDescription(description);\r
+ }\r
+ \r
+ for (TaxonRelationship fromRelation : taxon.getRelationsFromThisTaxon()) {\r
+ fromRelation.setFromTaxon(destinationTaxon);\r
+ }\r
+ \r
+ for (TaxonRelationship toRelation : taxon.getRelationsToThisTaxon()) {\r
+ toRelation.setToTaxon(destinationTaxon);\r
+ }\r
+ \r
+ CdmSessionDataRepository.getDefault().removeTaxon(taxon); \r
+ \r
+ // Close open editor for oldTaxon without forcing save.\r
+ // User has already saved or declined to do so above.\r
+ EditorController.close(taxon, false);\r
+ CdmSessionDataRepository.getDefault().saveTaxon(destinationTaxon);\r
+ // Open editor for destinationTaxon\r
+ EditorController.open(destinationTaxon);\r
+ \r
+ return true;\r
+ }\r
+ \r
+ @Override\r
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ return makeTaxonSynonym(taxon, destinationTaxon) ? Status.OK_STATUS : Status.CANCEL_STATUS;\r
+ }\r
+\r
+ @Override\r
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ // TODO implement undo\r
+ throw new NotImplementedException();\r
+ }\r
+}\r
import org.eclipse.ui.PartInitException;\r
\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
\r
/**\r
String taxonName = taxon.getName().getTitleCache();\r
\r
// Prompt user for confirmation\r
- if(! MessageDialog.openConfirm(UiUtil.getShell(), "Confirm Deletion", "Are you sure you want to delete taxon '" + taxonName + "'?")){\r
+ if(! MessageDialog.openConfirm(GlobalController.getShell(), "Confirm Deletion", "Are you sure you want to delete taxon '" + taxonName + "'?")){\r
monitor.done();\r
return Status.CANCEL_STATUS;\r
}\r
monitor.beginTask("Deleting taxon '" + taxonName + "'.", 10);\r
\r
// Call save all\r
- UiUtil.saveAll();\r
+ EditorController.saveAll();\r
monitor.worked(2);\r
\r
// If the taxon has children, cancel operation\r
// TODO add option to continue, and delete children\r
if (taxon.hasTaxonomicChildren()) {\r
- MessageDialog.openInformation(UiUtil.getShell(), "Cannot delete taxon", \r
+ MessageDialog.openInformation(GlobalController.getShell(), "Cannot delete taxon", \r
"'" + taxonName + "' has taxonomic children. " +\r
"These must be manually deleted before their parent.");\r
monitor.done();\r
\r
\r
// Close taxon's editor, if any is active\r
- try {\r
- UiUtil.closeEditor(taxon, true);\r
- } catch (PartInitException e) {\r
- e.printStackTrace();\r
- }\r
+ EditorController.close(taxon, true);\r
monitor.worked(1);\r
\r
// Delete taxon from CDM layer\r
- CdmSessionDataRepository.getDefault().removeTaxon(taxon);\r
+ CdmSessionDataRepository.getDefault().deleteTaxon(taxon);\r
monitor.worked(4);\r
\r
// Call save all\r
- UiUtil.saveAll();\r
+ EditorController.saveAll();\r
monitor.worked(2);\r
\r
// Close the progress monitor\r
monitor.done();\r
\r
// Announce taxon was deleted on status line\r
- UiUtil.setStatusLine("Deleted taxon '" + taxonName + "'.");\r
+ GlobalController.setStatusLine("Deleted taxon '" + taxonName + "'.");\r
\r
return Status.OK_STATUS;\r
}\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.controller.EditorController;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
\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
+ EditorController.open(newTaxon);\r
+ \r
\r
return redrawOpenEditor();\r
}\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.controller.EditorController;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\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
+ IEditorPart oldEditor = EditorController.getEditorByTaxon(taxon);\r
if (oldEditor.isDirty()) {\r
- if (!MessageDialog.openConfirm(UiUtil.getShell(), "Save before proceeding", \r
+ if (!MessageDialog.openConfirm(GlobalController.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
+ EditorController.close(taxon, true);\r
}\r
} catch (PartInitException e) {\r
- e.printStackTrace();\r
- MessageDialog.openError(UiUtil.getShell(), "Error", "Error saving and closing taxon");\r
+ logger.error("Error while trying to save and close old editor.", e);\r
+ MessageDialog.openError(GlobalController.getShell(), "Error", "Error saving and closing taxon");\r
return Status.CANCEL_STATUS;\r
}\r
\r
CdmSessionDataRepository.getDefault().addTaxon(newAcceptedTaxon);\r
\r
// Open editor for new accepted taxon\r
- try {\r
- UiUtil.openTaxonEditor(newAcceptedTaxon);\r
- } catch (PartInitException e) {\r
- e.printStackTrace();\r
- }\r
+ EditorController.open(newAcceptedTaxon);\r
+\r
// Remove old taxon from recent names list\r
RecentNamesView.addRecentName(taxon);\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.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
\r
import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
\r
/**\r
public static Set<Feature> getPreferredFeatures() {\r
\r
// Initialize preferredFeatureSet as necessary\r
- if (UiUtil.preferredFeatureSet == null) {\r
+ if (GlobalController.getPreferredFeatures() == null) {\r
\r
- UiUtil.preferredFeatureSet = new HashSet<Feature>(); \r
+ GlobalController.setPreferredFeatures(new HashSet<Feature>()); \r
\r
for (Feature feature : CdmSessionDataRepository.getDefault().getFeatures()) {\r
\r
// If the feature is set to show, add it to preferredFeatureSet\r
if (PreferencesUtil.getFeaturePreference(feature)) {\r
- UiUtil.preferredFeatureSet.add(feature);\r
+ GlobalController.addPreferredFeature(feature);\r
}\r
}\r
\r
}\r
- return UiUtil.preferredFeatureSet;\r
+ return GlobalController.getPreferredFeatures();\r
}\r
\r
/**\r
* @param show\r
*/\r
public static void setFeaturePreference(Feature feature, boolean show) {\r
- UiUtil.preferredFeatureSet = null;\r
+ GlobalController.setPreferredFeatures(null);\r
PreferencesUtil.getPrefStore().setValue(PreferencesUtil.getPreferenceKey(feature), show);\r
}\r
\r
*/\r
public static Set<Rank> getPreferredRanks() {\r
\r
- // Initialize preferredFeatureSet as necessary\r
- if (UiUtil.preferredRankSet == null) {\r
+ // Initialize preferredRankSet as necessary\r
+ if (GlobalController.getPreferredRanks() == null) {\r
\r
- UiUtil.preferredRankSet = new HashSet<Rank>(); \r
+ GlobalController.setPreferredRanks(new HashSet<Rank>()); \r
\r
SortedSet<Rank> ranks = CdmSessionDataRepository.getDefault().getRanks();\r
if (ranks != null) {\r
\r
// If the feature is set to show, add it to preferredFeatureSet\r
if (PreferencesUtil.getRankPreference(rank)) {\r
- UiUtil.preferredRankSet.add(rank);\r
+ GlobalController.addPreferredRank(rank);\r
}\r
}\r
} // else { TODO: error message\r
\r
}\r
- return UiUtil.preferredRankSet;\r
+ return GlobalController.getPreferredRanks();\r
}\r
\r
/**\r
* @param show\r
*/ \r
public static void setRankPreference(Rank rank, boolean show) {\r
- UiUtil.preferredRankSet = null;\r
+ GlobalController.setPreferredRanks(null);\r
getPrefStore().setValue(PreferencesUtil.getPreferenceKey(rank), show);\r
\r
}\r
import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.propertysheet.CollectionPropertySource;\r
\r
public class NameRelationsPropertySource extends CollectionPropertySource {\r
NameRelationshipType type = nameRelation.getType();\r
\r
// or the label? LABEL\r
- String label = UiUtil.getNameRelationLabelType(type);\r
+ String label = GlobalController.getNameRelationLabelType(type);\r
if (isZoological && \r
nameRelation.getType().equals(NameRelationshipType.BASIONYM())) {\r
label = "original combination";\r
// Get terms from nom status vocabulary\r
List<NomenclaturalStatusType> nomStatusTypesList = new ArrayList<NomenclaturalStatusType>();\r
nomStatusTypesList.addAll(\r
- CdmSessionDataRepository.getDefault().getNomStatii().getTerms());\r
+ CdmSessionDataRepository.getDefault().getNomStatus().getTerms());\r
\r
// Populate nom status type menu labels \r
List<String> nomStatusTypesMenuList = new ArrayList<String>();\r
// Get terms from nom status vocabulary\r
List<NomenclaturalStatusType> nomStatusTypesList = new ArrayList<NomenclaturalStatusType>();\r
TermVocabulary<NomenclaturalStatusType> statusVocab = \r
- CdmSessionDataRepository.getDefault().getNomStatii();\r
+ CdmSessionDataRepository.getDefault().getNomStatus();\r
\r
// If there is no status vocabulary, init type and status w empty arrays and return\r
if (statusVocab == null) {\r
import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.propertysheet.reference.IReferenceSearch;\r
import eu.etaxonomy.taxeditor.propertysheet.reference.ReferencePropertySource;\r
import eu.etaxonomy.taxeditor.propertysheet.reference.ReferenceSearchDescriptor;\r
import eu.etaxonomy.cdm.model.name.ZoologicalName;\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.DeleteNameRelationAction;\r
import eu.etaxonomy.taxeditor.actions.ui.OpenNameRelationWizardAction;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
\r
/**\r
type = "original combination";\r
} else {\r
// type = nameRelationship.getType().getLabel();\r
- type = UiUtil.getNameRelationLabelType(nameRelationship.getType());\r
+ type = GlobalController.getNameRelationLabelType(nameRelationship.getType());\r
}\r
}\r
if (nameRelationship.getToName() == null) {\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.controller.GlobalController;\r
\r
/**\r
* This subclass is for cases where only one subclass of <code>ReferenceBase</code>\r