eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/TaxonActionFactory.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/io/ExportAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/io/ImportAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/AdaptCompositeToGroupAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/AddBasionymCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/AddQuickNameAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeCompositeToMisappliedNameAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeCompositeToNewTaxonAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeSynonymToTaxonUiAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeTaxonToSynonymAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/CreateNewHeterotypicCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/DeleteMisappliedNameCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/DeleteSynonymCompositeAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveCompositeToMisappliedCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveTaxonDialogAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenNameRelationWizardAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenNameRelationsListWizardAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenNewChildNameEditorAction.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/RemoveBasionymCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/AddDescriptionElementCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/DeleteElementCompositeAction.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmDataSourceDialog.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/FavoritesView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/RecentNamesTableViewer.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/RecentNamesView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/SearchResult.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/SearchResultView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/SearchView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeLabelProvider.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeView.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/CreateSynonymInNewGroupOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymAcceptedOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymGroupBasionymOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/RemoveMisappliedNameOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/RemoveSynonymOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/UnmakeSynonymGroupBasionymOperation.java -text
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/CdmPreferences.java -text
import org.eclipse.ui.IFolderLayout;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.views.properties.PropertySheetPage;
import eu.etaxonomy.taxeditor.navigation.RecentNamesView;
+import eu.etaxonomy.taxeditor.navigation.SearchView;
import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView;
/**
IFolderLayout folderLayoutLeft = layout.createFolder("leftfolder", IPageLayout.LEFT, 0.3f, editorArea);
folderLayoutLeft.addView(TaxonomicTreeView.ID);
-// folderLayoutLeft.addView(SearchView.ID);
+ folderLayoutLeft.addView(SearchView.ID);
IFolderLayout folderLayoutBottomLeft = layout.createFolder("bottomleftfolder", IPageLayout.BOTTOM, 0.75f, "leftfolder");
folderLayoutBottomLeft.addView(RecentNamesView.ID);
\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
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
// 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
+++ /dev/null
-/**\r
- * Copyright (C) 2007 EDIT\r
- * European Distributed Institute of Taxonomy \r
- * http://www.e-taxonomy.eu\r
- * \r
- * The contents of this file are subject to the Mozilla Public License Version 1.1\r
- * See LICENSE.TXT at the top of this package for the full license terms.\r
- */\r
-\r
-package eu.etaxonomy.taxeditor.actions.ui;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
-\r
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.actions.cdm.ChangeSynonymHomotypicGroupAction;\r
-import eu.etaxonomy.taxeditor.actions.cdm.ChangeTaxonRelationToSynonymAction;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
-import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
-import eu.etaxonomy.taxeditor.model.CdmUtil;\r
-\r
-/**\r
- * Reassigns the synonym attached to the NameComposite's data object to the\r
- * HomotypicalGroup specified in the EditorGroupComposite's data object.\r
- * \r
- * If this is successful, new Synonym is attached to the NameComposite's data\r
- * object, and NameComposite is cosmetically transformed according to its\r
- * synonymy type.\r
- * \r
- * @author p.ciardelli\r
- * @created 02.06.2008\r
- * @version 1.0\r
- */\r
-public class AdaptCompositeToGroupAction extends Action {\r
- private static final Logger logger = Logger\r
- .getLogger(AdaptCompositeToGroupAction.class);\r
-\r
- private static String text = "Move name composite to new homotypic group";\r
- private ImageDescriptor image = null;\r
-\r
- private IUndoableOperation operation;\r
-\r
- private NameComposite composite;\r
- // private Synonym synonym = null;\r
- private TaxonBase taxonBase = null;\r
- private HomotypicalGroup newHomotypicGroup;\r
- private Taxon taxon;\r
-\r
- private AdaptCompositeToGroupAction() {\r
- super(text);\r
- setImageDescriptor(image);\r
- }\r
-\r
- public AdaptCompositeToGroupAction(final NameComposite composite,\r
- EditorGroupComposite groupComposite) {\r
- this();\r
-\r
- if (composite.getData() instanceof TaxonBase) {\r
- this.taxonBase = (TaxonBase) composite.getData();\r
- } else {\r
- throw new IllegalArgumentException(\r
- "This action requires a NameComposite with a TaxonBase (Synonym or Taxon) in its data field.");\r
- }\r
-\r
- if (groupComposite.getData() instanceof HomotypicalGroup) {\r
- this.newHomotypicGroup = (HomotypicalGroup) groupComposite\r
- .getData();\r
- } else {\r
- throw new IllegalArgumentException(\r
- "This action requires a EditorGroupComposite with a HomotypicalGroup in its data field.");\r
- }\r
-\r
- this.composite = composite;\r
-\r
- if (groupComposite.getParent().getData() instanceof Taxon) {\r
- this.taxon = (Taxon) groupComposite.getParent().getData();\r
- } else {\r
- throw new IllegalArgumentException(\r
- "This action requires a EditorGroupComposite whose parent has a Taxon in its data field.");\r
- }\r
-\r
- operation = new ChangeHomotypicGroupOperation();\r
-\r
- }\r
-\r
- public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
- operation.addContext(undoContext);\r
- try {\r
- operationHistory.execute(operation, null, null);\r
- operationHistory.add(operation);\r
- } catch (ExecutionException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- class ChangeHomotypicGroupOperation extends AbstractOperation {\r
-\r
- public ChangeHomotypicGroupOperation() {\r
- super("'" + text + "'");\r
- }\r
-\r
- @Override\r
- public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- Action changeHomotypicGroupAction = null;\r
- if (taxonBase instanceof Synonym) {\r
- changeHomotypicGroupAction = new ChangeSynonymHomotypicGroupAction(\r
- (Synonym) taxonBase, taxon, newHomotypicGroup);\r
- }\r
- if (taxonBase instanceof Taxon) {\r
- changeHomotypicGroupAction = new ChangeTaxonRelationToSynonymAction(\r
- (Taxon) taxonBase, taxon, newHomotypicGroup);\r
- }\r
- changeHomotypicGroupAction\r
- .addPropertyChangeListener(new IPropertyChangeListener() {\r
- public void propertyChange(\r
- org.eclipse.jface.util.PropertyChangeEvent event) {\r
- if (event.getProperty().equals(\r
- ITaxEditorConstants.HOMOTYPIC_GROUP)) {\r
-\r
- Synonym newSynonym = null;\r
- if (event.getNewValue() instanceof Synonym) {\r
- newSynonym = (Synonym) event.getNewValue();\r
- } else {\r
- throw new IllegalArgumentException(\r
- "ChangeSynonymHomotypicGroupAction event did not return a Synonym in its newValue field.");\r
- }\r
-\r
- composite.setData(newSynonym);\r
- \r
- if (newSynonym.getName() == null) {\r
- return;\r
- }\r
-\r
- if (CdmUtil.isNameHomotypic(newSynonym.getName(), taxon)) {\r
- composite.transform(NameComposite.HOMOTYPIC_SYNONYM);\r
- } else {\r
- composite.transform(NameComposite.HETEROTYPIC_SYNONYM);\r
- }\r
- }\r
- }\r
- });\r
- changeHomotypicGroupAction.run();\r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- return execute(monitor, info);\r
- }\r
-\r
- @Override\r
- public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- return Status.OK_STATUS;\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.actions.ui;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
-import org.eclipse.jface.util.PropertyChangeEvent;\r
-\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\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.MakeGroupBasionymAction;\r
-import eu.etaxonomy.taxeditor.editor.name.Messages;\r
-import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
-import eu.etaxonomy.taxeditor.model.CdmUtil;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 04.06.2008\r
- * @version 1.0\r
- */\r
-public class AddBasionymCompositeAction extends Action {\r
- private static final Logger logger = Logger\r
- .getLogger(AddBasionymCompositeAction.class);\r
-\r
- private String text;\r
- private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
- .getImageDescriptor(ITaxEditorConstants.BASIONYM_ICON);\r
-\r
- private TaxonNameBase basionymName;\r
-\r
- private NameComposite composite;\r
- private IUndoableOperation operation;\r
-\r
- private AddBasionymCompositeAction() {\r
- super();\r
- setImageDescriptor(image);\r
- }\r
-\r
- public AddBasionymCompositeAction(NameComposite composite) {\r
- this();\r
- \r
- if (composite.getData() instanceof Synonym) {\r
- Synonym synonym = (Synonym) composite.getData();\r
- this.basionymName = synonym.getName();\r
- } else {\r
- throw new IllegalArgumentException(\r
- "This action requires a composite with a Synonym in its data field."); //$NON-NLS-1$\r
- }\r
-\r
- text = Messages.getString("AddBasionymCompositeAction.0", basionymName); //$NON-NLS-1$\r
- setText(text);\r
- \r
- this.composite = composite;\r
-\r
- operation = new AddBasionymOperation();\r
- \r
- if (CdmUtil.isNameGroupBasionym(basionymName)) {\r
- setEnabled(false);\r
- } else {\r
- setEnabled(true); \r
- }\r
- }\r
-\r
- public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
- operation.addContext(undoContext);\r
- try {\r
- operationHistory.execute(operation, null, null);\r
- operationHistory.add(operation);\r
- } catch (ExecutionException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- class AddBasionymOperation extends AbstractOperation {\r
-\r
- public AddBasionymOperation() {\r
- super("'" + text + "'"); //$NON-NLS-1$ //$NON-NLS-2$\r
- }\r
-\r
- @Override\r
- public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- Action action = new MakeGroupBasionymAction(basionymName);\r
- action.addPropertyChangeListener(new IPropertyChangeListener() {\r
- public void propertyChange(PropertyChangeEvent event) {\r
- if (event.getProperty().equals(\r
- ITaxEditorConstants.BASIONYM)) {\r
- composite.transform(NameComposite.ADD_GROUP_BASIONYM);\r
- setEnabled(false);\r
- firePropertyChange(ITaxEditorConstants.BASIONYM, null, basionymName);\r
- }\r
- }\r
- }); \r
- action.run();\r
- \r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- // TODO Auto-generated method stub\r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- // TODO Auto-generated method stub\r
- return Status.OK_STATUS;\r
- }\r
- }\r
-}\r
+++ /dev/null
-/**\r
- * Copyright (C) 2007 EDIT\r
- * European Distributed Institute of Taxonomy \r
- * http://www.e-taxonomy.eu\r
- * \r
- * The contents of this file are subject to the Mozilla Public License Version 1.1\r
- * See LICENSE.TXT at the top of this package for the full license terms.\r
- */\r
-\r
-package eu.etaxonomy.taxeditor.actions.ui;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
-import org.eclipse.jface.util.PropertyChangeEvent;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.actions.cdm.ChangeMisappliedNameToSynonymAction;\r
-import eu.etaxonomy.taxeditor.actions.cdm.ChangeSynonymToMisappliedNameAction;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
-import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 02.06.2008\r
- * @version 1.0\r
- */\r
-public class ChangeCompositeToMisappliedNameAction extends Action {\r
- private static final Logger logger = Logger\r
- .getLogger(ChangeCompositeToMisappliedNameAction.class);\r
-\r
- private static String text = "Change synonym to misapplied name";\r
- private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
- .getImageDescriptor(ITaxEditorConstants.MISAPPLIED_NAME_ICON);\r
-\r
- private Synonym synonym;\r
- private Taxon taxon;\r
- private Taxon misappliedNameTaxon;\r
-\r
- private Action misappliedNameCdmAction;\r
- private Action misappliedNameCdmUndoAction;\r
-\r
- private IUndoableOperation operation;\r
- private NameComposite composite;\r
- private IManagedForm managedForm;\r
-\r
- private ChangeCompositeToMisappliedNameAction() {\r
- super(text);\r
- setImageDescriptor(image);\r
- }\r
-\r
- public ChangeCompositeToMisappliedNameAction(NameComposite composite,\r
- IManagedForm managedForm) {\r
- this();\r
-\r
- if (composite.getData() instanceof Synonym) {\r
- this.synonym = (Synonym) composite.getData();\r
- } else {\r
- throw new IllegalArgumentException(\r
- "This action requires a composite with a Synonym in its data field.");\r
- }\r
-\r
- Composite parent = composite.getParent();\r
- if (parent.getParent() == null\r
- || !(parent.getParent().getData() instanceof Taxon)) {\r
- throw new IllegalArgumentException(\r
- "The parent of the DescriptionElementComposite's parent does not have a Taxon in its data field as required.");\r
- }\r
-\r
- this.taxon = (Taxon) parent.getParent().getData();\r
- this.composite = composite;\r
- this.managedForm = managedForm;\r
-\r
- operation = new MisappliedNameOperation();\r
-\r
- }\r
-\r
- public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
- operation.addContext(undoContext);\r
- try {\r
- operationHistory.execute(operation, null, null);\r
- operationHistory.add(operation);\r
- } catch (ExecutionException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- class MisappliedNameOperation extends AbstractOperation {\r
-\r
- public MisappliedNameOperation() {\r
- super("'" + text + "'");\r
- }\r
-\r
- @Override\r
- public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- misappliedNameCdmAction = new ChangeSynonymToMisappliedNameAction(\r
- synonym, taxon);\r
- misappliedNameCdmAction\r
- .addPropertyChangeListener(new IPropertyChangeListener() {\r
- public void propertyChange(\r
- org.eclipse.jface.util.PropertyChangeEvent event) {\r
- if (event.getProperty().equals(\r
- ITaxEditorConstants.MISAPPLIED_NAME)) {\r
-\r
- misappliedNameTaxon = (Taxon) event.getNewValue();\r
- composite.setData(misappliedNameTaxon);\r
- composite.transform(NameComposite.MISAPPLIED_NAME);\r
-\r
- EditorGroupComposite groupComposite = UiUtil\r
- .getMisappliedNameGroupComposite(managedForm);\r
- if (groupComposite == null) {\r
- groupComposite = UiUtil\r
- .createMisappliedNameGroupComposite(managedForm);\r
- }\r
-// composite.setParent(groupComposite);\r
- }\r
- }\r
- });\r
- misappliedNameCdmAction.run();\r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- return execute(monitor, info);\r
- }\r
-\r
- @Override\r
- public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- logger.warn("performing undo");\r
- misappliedNameCdmUndoAction = new ChangeMisappliedNameToSynonymAction(\r
- misappliedNameTaxon, taxon);\r
- misappliedNameCdmUndoAction\r
- .addPropertyChangeListener(new IPropertyChangeListener() {\r
-\r
- public void propertyChange(PropertyChangeEvent event) {\r
- if (event.getProperty().equals(\r
- ITaxEditorConstants.SYNONYM)) {\r
- synonym = (Synonym) event.getNewValue();\r
- composite.setData(misappliedNameTaxon);\r
- composite.transform(NameComposite.HETEROTYPIC_SYNONYM);\r
- }\r
- }\r
- });\r
- misappliedNameCdmUndoAction.run();\r
- return Status.OK_STATUS;\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.actions.ui;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
-import org.eclipse.jface.util.PropertyChangeEvent;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.actions.cdm.AddHeterotypicSynonymToTaxonAction;\r
-import eu.etaxonomy.taxeditor.editor.CompositeBorderDecorator;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
-import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
-\r
-/**\r
- * Creates a new homotypic group with one new heterotypic synonym, then creates\r
- * the corresponding UI elements. The synonym is created with text which is \r
- * subsequently parsed.\r
- * \r
- * @author p.ciardelli\r
- * @created 04.06.2008\r
- * @version 1.0\r
- */\r
-public class CreateNewHeterotypicCompositeAction extends Action {\r
- private static final Logger logger = Logger\r
- .getLogger(CreateNewHeterotypicCompositeAction.class);\r
-\r
- private static String text = "Create a heterotypic synonym in a new homotypic group";\r
- private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
- .getImageDescriptor(ITaxEditorConstants.HETEROTYPIC_SYN_ICON);\r
-\r
- private IUndoableOperation operation;\r
-\r
- private Taxon taxon;\r
- private String synonymText;\r
- private IManagedForm managedForm;\r
- \r
- private CreateNewHeterotypicCompositeAction() {\r
- super(text);\r
- setImageDescriptor(image);\r
- }\r
-\r
- public CreateNewHeterotypicCompositeAction(String synonymText, IManagedForm managedForm) {\r
- this();\r
-\r
- this.synonymText = synonymText;\r
- this.managedForm = managedForm;\r
- \r
- if (managedForm.getForm().getBody().getData() instanceof Taxon) {\r
- this.taxon = (Taxon) managedForm.getForm().getBody().getData(); \r
- } else {\r
- throw new IllegalArgumentException(\r
- "The IManagedForm's body does not have a Taxon in its data field as required.");\r
- }\r
-\r
- operation = new CreateCompositesAction();\r
- }\r
- \r
- public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
- operation.addContext(undoContext);\r
- try {\r
- operationHistory.execute(operation, null, null);\r
- operationHistory.add(operation);\r
- } catch (ExecutionException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- class CreateCompositesAction extends AbstractOperation {\r
-\r
- public CreateCompositesAction() {\r
- super("'" + text + "'");\r
- }\r
-\r
- @Override\r
- public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- \r
- Action action = \r
- new AddHeterotypicSynonymToTaxonAction(synonymText, taxon);\r
- \r
- action.addPropertyChangeListener(new IPropertyChangeListener() {\r
- public void propertyChange(PropertyChangeEvent event) {\r
- if (event.getProperty()\r
- .equals(ITaxEditorConstants.SYNONYM)) {\r
- if (event.getNewValue() instanceof Synonym) {\r
- \r
- // Get synonym from property change event\r
- Synonym synonym = (Synonym) event.getNewValue();\r
- \r
- // Get homotypic group's parent composite \r
- Composite grandParent = managedForm.getForm().getBody();\r
- \r
- // Create new homotypic group composite\r
- Object data = synonym.getName().getHomotypicalGroup();\r
- EditorGroupComposite newGroupComposite = new EditorGroupComposite(grandParent, managedForm, data);\r
- \r
- // Put new group composite above misapplied names as necessary\r
- EditorGroupComposite misappliedNameGroupComposite = UiUtil\r
- .getMisappliedNameGroupComposite(managedForm);\r
- if (misappliedNameGroupComposite != null) {\r
- newGroupComposite.moveAbove(misappliedNameGroupComposite);\r
- }\r
- \r
- // Create new heterotypic synonym composite, init w unparsed string\r
- NameComposite newNameComposite = new NameComposite(newGroupComposite, managedForm, NameComposite.HETEROTYPIC_SYNONYM, synonym);\r
- newNameComposite.setText(synonymText);\r
- \r
- grandParent.layout();\r
- }\r
- }\r
- }\r
- });\r
- action.run();\r
-\r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- // TODO Auto-generated method stub\r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- // TODO Auto-generated method stub\r
- return Status.OK_STATUS;\r
- }\r
- }\r
-}\r
+++ /dev/null
-/**\r
- * Copyright (C) 2007 EDIT\r
- * European Distributed Institute of Taxonomy \r
- * http://www.e-taxonomy.eu\r
- * \r
- * The contents of this file are subject to the Mozilla Public License Version 1.1\r
- * See LICENSE.TXT at the top of this package for the full license terms.\r
- */\r
-\r
-package eu.etaxonomy.taxeditor.actions.ui;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.forms.IManagedForm;\r
-\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
-\r
-/**\r
- * Looks for a EditorGroupComposite on an IManagedForm which has a value set for\r
- * composite.getData(ITaxEditorConstants.MISAPPLIED_NAME); if not found, creates\r
- * it.\r
- * \r
- * Then puts the DescriptionElementComposite onto the misapplied name EditorGroupComposite. \r
- * \r
- * @author p.ciardelli\r
- * @created 02.06.2008\r
- * @version 1.0\r
- */\r
-public class MoveCompositeToMisappliedCompositeAction extends Action {\r
- private static final Logger logger = Logger\r
- .getLogger(MoveCompositeToMisappliedCompositeAction.class);\r
-\r
- private static String text = "Change synonym to misapplied name";\r
- private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
- .getImageDescriptor(ITaxEditorConstants.MISAPPLIED_NAME_ICON);\r
-\r
- private IUndoableOperation operation;\r
- private NameComposite composite;\r
- private IManagedForm managedForm;\r
-\r
- private MoveCompositeToMisappliedCompositeAction() {\r
- super(text);\r
- setImageDescriptor(image);\r
- }\r
-\r
- public MoveCompositeToMisappliedCompositeAction(NameComposite composite,\r
- IManagedForm managedForm) {\r
- this();\r
-\r
- this.composite = composite;\r
- this.managedForm = managedForm;\r
-\r
- operation = new MisappliedNameOperation();\r
-\r
- }\r
-\r
- public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
- operation.addContext(undoContext);\r
- try {\r
- operationHistory.execute(operation, null, null);\r
- operationHistory.add(operation);\r
- } catch (ExecutionException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- class MisappliedNameOperation extends AbstractOperation {\r
-\r
- public MisappliedNameOperation() {\r
- super("'" + text + "'");\r
- }\r
-\r
- @Override\r
- public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- \r
- Composite groupComposite = UiUtil.getMisappliedNameGroupComposite(managedForm);\r
- if (groupComposite == null) {\r
- groupComposite = UiUtil.createMisappliedNameGroupComposite(managedForm);\r
- }\r
- composite.setParent(groupComposite);\r
- \r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- return execute(monitor, info);\r
- }\r
-\r
- @Override\r
- public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- return Status.OK_STATUS;\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.actions.ui;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
-import org.eclipse.core.commands.operations.IOperationHistory;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.IUndoableOperation;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
-import org.eclipse.jface.util.PropertyChangeEvent;\r
-\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\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.RemoveBasionymFromGroupAction;\r
-import eu.etaxonomy.taxeditor.editor.name.Messages;\r
-import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
-import eu.etaxonomy.taxeditor.model.CdmUtil;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 04.06.2008\r
- * @version 1.0\r
- */\r
-public class RemoveBasionymCompositeAction extends Action {\r
- private static final Logger logger = Logger\r
- .getLogger(RemoveBasionymCompositeAction.class);\r
-\r
- private static String text;\r
- private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
- .getImageDescriptor(ITaxEditorConstants.BASIONYM_ICON);\r
-\r
- private TaxonNameBase basionymName;\r
-\r
- private NameComposite composite;\r
- private IUndoableOperation operation;\r
-\r
- private RemoveBasionymCompositeAction() {\r
- super();\r
- setImageDescriptor(image);\r
- }\r
-\r
- public RemoveBasionymCompositeAction(NameComposite composite) {\r
- this();\r
-\r
- if (composite.getData() instanceof Synonym) {\r
- Synonym synonym = (Synonym) composite.getData();\r
- this.basionymName = synonym.getName();\r
- } else {\r
- throw new IllegalArgumentException(\r
- "This action requires a composite with a Synonym in its data field."); //$NON-NLS-1$\r
- }\r
-\r
- String text = Messages.getString("RemoveBasionymCompositeAction.0", basionymName); //$NON-NLS-1$\r
- setText(text);\r
- \r
- this.composite = composite;\r
-\r
- operation = new AddBasionymOperation();\r
- \r
- if (CdmUtil.isNameGroupBasionym(basionymName)) {\r
- setEnabled(true);\r
- } else {\r
- setEnabled(false); \r
- } \r
- \r
- }\r
-\r
- public void run() {\r
- IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
- IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
- operation.addContext(undoContext);\r
- try {\r
- operationHistory.execute(operation, null, null);\r
- operationHistory.add(operation);\r
- } catch (ExecutionException e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- class AddBasionymOperation extends AbstractOperation {\r
-\r
- public AddBasionymOperation() {\r
- super("'" + text + "'"); //$NON-NLS-1$ //$NON-NLS-2$\r
- }\r
-\r
- @Override\r
- public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- Action action = new RemoveBasionymFromGroupAction(basionymName);\r
- action.addPropertyChangeListener(new IPropertyChangeListener() {\r
- public void propertyChange(PropertyChangeEvent event) {\r
- if (event.getProperty().equals(\r
- ITaxEditorConstants.BASIONYM)) {\r
- composite.transform(NameComposite.REMOVE_GROUP_BASIONYM);\r
- setEnabled(false);\r
- firePropertyChange(ITaxEditorConstants.BASIONYM, null, basionymName);\r
- }\r
- }\r
- }); \r
- action.run();\r
- \r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- // TODO Auto-generated method stub\r
- return Status.OK_STATUS;\r
- }\r
-\r
- @Override\r
- public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
- throws ExecutionException {\r
- // TODO Auto-generated method stub\r
- return Status.OK_STATUS;\r
- }\r
- }\r
-}\r
\r
initUndoContext();\r
\r
+ createManagedForm(composite);\r
+ }\r
+ \r
+ protected void createManagedForm(Composite composite) {\r
+ \r
managedForm = new ManagedForm(composite) {\r
public void dirtyStateChanged() {\r
firePropertyChange(PROP_DIRTY);\r
import org.eclipse.ui.forms.widgets.FormToolkit;\r
import org.eclipse.ui.forms.widgets.ScrolledForm;\r
\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
-\r
/**\r
* Draws a border on a Composite on an IManagedForm when it gets focus, \r
* undraws it when the Composite loses focus.\r
* @author p.ciardelli\r
*\r
*/\r
-public class CompositeBorderDecorator {\r
+public class CompositeBorderDecorator implements FocusListener { \r
+ \r
private FormToolkit toolkit;\r
private ScrolledForm scrolledForm;\r
private Composite borderedComposite;\r
\r
- private FocusListener listener = new PaintBorderListener();\r
- \r
/**\r
* If true, the <code>borderedComposite</code>'s border is erased when\r
* it loses focus.\r
private boolean doLoseFocus = true;\r
\r
public CompositeBorderDecorator(Composite composite, IManagedForm form) {\r
+ \r
this.borderedComposite = composite;\r
this.toolkit = form.getToolkit();\r
this.scrolledForm = form.getForm();\r
\r
+ // Make sure composite retains its color scheme after being adapted to toolkit\r
+ Color backgroundColor = composite.getBackground();\r
+ \r
toolkit.adapt(composite);\r
\r
- Color groupBackgroundColor = TaxEditorPlugin.getDefault().\r
- getColor(ITaxEditorConstants.GROUP_GRAY_BKG_COLOR); \r
- composite.setBackground(groupBackgroundColor);\r
+ composite.setBackground(backgroundColor);\r
\r
- composite.addFocusListener(listener);\r
+ }\r
+ \r
+ @Override\r
+ public void focusGained(FocusEvent e) {\r
+ paintBorder();\r
+ }\r
+\r
+ @Override\r
+ public void focusLost(FocusEvent e) {\r
+ if (doLoseFocus) {\r
+ unpaintBorder();\r
+ }\r
}\r
\r
/**\r
toolkit.paintBordersFor(borderedComposite.getParent());\r
scrolledForm.reflow(false);\r
}\r
- \r
- /**\r
- * If the border should actually be drawn elsewhere when \r
- * the main Composite gets focus, i.e. the textviewer should\r
- * get a border when its Composite has focus, set the\r
- * Composite here.\r
- * \r
- * @param composite\r
- */\r
- public void setBorderedComposite(Composite composite) {\r
- this.borderedComposite = composite;\r
- borderedComposite.addFocusListener(listener);\r
- }\r
- \r
- class PaintBorderListener implements FocusListener {\r
- public void focusGained(FocusEvent e) {\r
- paintBorder();\r
- }\r
-\r
- public void focusLost(FocusEvent e) {\r
- if (doLoseFocus) {\r
- unpaintBorder();\r
- }\r
- }\r
- }\r
}
\ No newline at end of file
\r
private IManagedForm managedForm;\r
private Taxon taxon;\r
+\r
+ private CompositeBorderDecorator borderSupport;\r
\r
public EditorGroupComposite(Composite parent, IManagedForm managedForm, Object data) {\r
this(parent, managedForm);\r
}\r
\r
private void createBorderSupport() {\r
- new CompositeBorderDecorator(this, managedForm);\r
+ borderSupport = new CompositeBorderDecorator(this, managedForm);\r
+ addFocusListener(borderSupport);\r
}\r
\r
public IManagedForm getManagedForm() {\r
public Taxon getTaxon() {\r
return taxon;\r
}\r
+ \r
+ public void dispose() {\r
+ \r
+ removeFocusListener(borderSupport);\r
+ \r
+ super.dispose();\r
+ }\r
}
\ No newline at end of file
\r
import org.apache.log4j.Logger;\r
import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.jface.text.IDocument;\r
import org.eclipse.jface.text.TextViewer;\r
import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.dnd.DND;\r
+import org.eclipse.swt.dnd.DragSource;\r
+import org.eclipse.swt.dnd.DragSourceAdapter;\r
+import org.eclipse.swt.dnd.DragSourceEvent;\r
+import org.eclipse.swt.dnd.DragSourceListener;\r
+import org.eclipse.swt.dnd.Transfer;\r
+import org.eclipse.swt.events.FocusEvent;\r
+import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.graphics.Color;\r
import org.eclipse.swt.graphics.Font;\r
import org.eclipse.swt.graphics.Image;\r
import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
import org.eclipse.swt.widgets.Display;\r
import org.eclipse.swt.widgets.Label;\r
import org.eclipse.swt.widgets.Menu;\r
import org.eclipse.ui.forms.widgets.TableWrapLayout;\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.actions.WidgetTransfer;\r
\r
/** \r
* Formats <code>GroupedComposite</code> with cosmetic and layout properties specific to the\r
* @created 02.06.2008\r
* @version 1.0\r
*/\r
-abstract public class EditorGroupedComposite extends GroupedComposite implements IHasPropertySource {\r
+//abstract public class EditorGroupedComposite extends GroupedComposite implements IHasPropertySource {\r
+abstract public class EditorGroupedComposite extends Composite implements IHasPropertySource { \r
private static final Logger logger = Logger.getLogger(EditorGroupedComposite.class);\r
\r
protected TextViewer textViewer;\r
* @param managedForm\r
*/\r
public EditorGroupedComposite(Composite parent, IManagedForm managedForm) {\r
- super(parent);\r
+// super(parent);\r
+ super(parent, SWT.NONE);\r
+ \r
+ createContent();\r
\r
this.managedForm = managedForm;\r
\r
new LineWrapSupport(getTextViewer(), managedForm);\r
}\r
\r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.editor.name.GroupedComposite#createContent()\r
- */\r
- @Override\r
protected void createContent() {\r
setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
layout = new TableWrapLayout();\r
layout.leftMargin = 0;\r
setLayout(layout);\r
\r
- setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+ Color groupBackgroundColor = TaxEditorPlugin.getDefault().\r
+ getColor(ITaxEditorConstants.GROUP_GRAY_BKG_COLOR);\r
+ setBackground(groupBackgroundColor); \r
\r
draggableLabel = new Label(this, SWT.NONE);\r
draggableLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
\r
setDraggableControl(draggableLabel);\r
}\r
- \r
+ \r
public Taxon getTaxon() {\r
return taxon;\r
}\r
getTextViewer().getTextWidget().setFont(font);\r
}\r
\r
+ FocusListener focusListener;\r
+ \r
/**\r
* If <code>textViewer</code> has already been set, it will show a \r
* <code>prompt</code> along the lines of "Click here to start entering data" \r
* \r
* @param prompt\r
*/\r
- /**\r
- * @param prompt\r
- */\r
- public void createEmptyViewerPrompt(String prompt) {\r
- \r
+ public void createEmptyViewerPrompt(final String prompt) {\r
Assert.isNotNull(getTextViewer());\r
+// new EmptyTextViewerPrompt(getTextViewer(), prompt);\r
+ \r
+ final StyledText textControl = getTextViewer().getTextWidget();\r
+ final IDocument document = getTextViewer().getDocument();\r
+ final Font promptFont = TaxEditorPlugin.getDefault()\r
+ .getFont(ITaxEditorConstants.DEFAULT_PROMPT_FONT);\r
+ setFocusListener(new FocusListener() {\r
+\r
+ @Override\r
+ public void focusGained(FocusEvent e) {\r
+ if (document.get().equals(prompt)) {\r
+ textControl.setFont(getViewerFont());\r
+ document.set("");\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void focusLost(FocusEvent e) {\r
+ if (document.getLength() == 0) {\r
+ initEmptyText();\r
+ } else {\r
+// managedForm.reflow(true);\r
+ }\r
+ }\r
+ \r
+ });\r
+ textControl.addFocusListener(getFocusListener());\r
\r
- new EmptyTextViewerPrompt(getTextViewer().getDocument(), \r
- getTextViewer().getTextWidget(), prompt);\r
+ if (document.getLength() == 0) {\r
+ textControl.setFont(promptFont);\r
+ document.set(prompt);\r
+ }\r
}\r
\r
+ abstract protected Font getViewerFont();\r
+\r
+ protected void initEmptyText() {\r
+ getTextViewer().getTextWidget().setFont(\r
+ TaxEditorPlugin.getDefault()\r
+ .getFont(ITaxEditorConstants.DEFAULT_PROMPT_FONT));\r
+ \r
+ getTextViewer().getDocument().set(getEmptyTextPrompt());\r
+ }\r
+\r
+ protected String getEmptyTextPrompt() {\r
+ return "Click to edit";\r
+ }\r
+\r
+ private void setFocusListener(FocusListener focusListener) {\r
+ this.focusListener = focusListener;\r
+ }\r
+\r
+ private FocusListener getFocusListener() {\r
+ return focusListener;\r
+ }\r
+ \r
+// abstract protected Font getNameCompositeFont();\r
+\r
/* (non-Javadoc)\r
* @see org.eclipse.swt.widgets.Control#getMenu()\r
*/\r
* \r
*/\r
public void createBorderSupport() {\r
- borderDecorator = new CompositeBorderDecorator(\r
- this, managedForm);\r
+// borderDecorator = new CompositeBorderDecorator(\r
+// this, managedForm);\r
+ \r
if (getTextViewer() == null) {\r
logger.warn("Could not create border support - getTextViewer() returned null.");\r
} else {\r
- borderDecorator.setBorderedComposite(getTextViewer().getTextWidget());\r
+ borderDecorator = new CompositeBorderDecorator(\r
+ getTextViewer().getTextWidget(), managedForm); \r
+// borderDecorator.setBorderedComposite(getTextViewer().getTextWidget());\r
borderDecorator.setLoseFocus(false);\r
+ getTextViewer().getTextWidget().addFocusListener(borderDecorator);\r
}\r
}\r
\r
*/\r
public void dispose () {\r
\r
+ logger.warn("disposing");\r
+ \r
// Nullify decorator to stop its listener to listening for\r
// composite focus\r
- borderDecorator = null;\r
+// borderDecorator.dispose();\r
\r
- super.dispose();\r
+ if (dragSource != null) {\r
+ dragSource.removeDragListener(dragSourceListener);\r
+ }\r
\r
- // A disposed graphic element means that the taxon has changed\r
- setDirty(true);\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.editor.name.GroupedComposite#setParent(org.eclipse.swt.widgets.Composite)\r
- */\r
- public boolean setParent(Composite parent) {\r
- if (super.setParent(parent)) {\r
- \r
- // Has this been moved to a new IManagedForm?\r
- if (parent instanceof EditorGroupComposite) {\r
- IManagedForm parentForm = ((EditorGroupComposite) parent)\r
- .getManagedForm();\r
- if (!parentForm.equals(managedForm)) {\r
- managedForm = parentForm;\r
- }\r
- }\r
- \r
- setDirty(true);\r
- return true;\r
+ if (getFocusListener() != null && getTextViewer() != null \r
+ && getTextViewer().getTextWidget() != null) {\r
+ getTextViewer().getTextWidget().removeFocusListener(getFocusListener());\r
+ getTextViewer().getTextWidget().removeFocusListener(borderDecorator);\r
+ getTextViewer().getTextWidget().dispose();\r
}\r
- return false;\r
+\r
+ super.dispose();\r
}\r
\r
- \r
/**\r
* Returns a <code>ContextMenu</code> opened by right-clicking on\r
* <code>draggableLabel</code>.\r
borderDecorator.unpaintBorder();\r
}\r
}\r
+ \r
+ private Control draggableControl;\r
+ private DragSource dragSource;\r
+ \r
+ protected void setDraggableControl(Control control) {\r
+ draggableControl = control;\r
+ }\r
+\r
+ public void setDraggable(boolean draggable) {\r
+\r
+ if (draggable) {\r
+\r
+ if (dragSource != null) {\r
+ // Already initialized\r
+ return;\r
+ }\r
+\r
+ if (draggableControl == null) {\r
+ throw new NullPointerException(\r
+ "Draggable control must be set to add draggability");\r
+ }\r
+ \r
+ Transfer[] types = new Transfer[] { WidgetTransfer.getInstance() }; \r
+ int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
+\r
+ dragSource = new DragSource(draggableControl, operations);\r
+ dragSource.setTransfer(types);\r
+ dragSource.addDragListener(dragSourceListener);\r
+\r
+ } else {\r
+ dragSource = null;\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Drag listener which passes the Composite as the data in a drag event.\r
+ */\r
+ DragSourceListener dragSourceListener = new DragSourceAdapter() {\r
+\r
+ public void dragStart(DragSourceEvent event) {\r
+ EditorGroupedComposite.this.setFocus();\r
+ event.doit = true;\r
+ }\r
+ \r
+ public void dragSetData(DragSourceEvent event) {\r
+ WidgetTransfer.getInstance().setWidget(EditorGroupedComposite.this);\r
+ }\r
+ \r
+ public void dragFinished(DragSourceEvent event){\r
+ ((DragSource) event.widget).dispose();\r
+ }\r
+ };\r
}
\ No newline at end of file
import org.eclipse.jface.text.DocumentEvent;\r
import org.eclipse.jface.text.IDocument;\r
import org.eclipse.jface.text.IDocumentListener;\r
+import org.eclipse.jface.text.TextViewer;\r
import org.eclipse.swt.custom.StyledText;\r
+import org.eclipse.swt.events.DisposeEvent;\r
+import org.eclipse.swt.events.DisposeListener;\r
import org.eclipse.swt.events.FocusEvent;\r
import org.eclipse.swt.events.FocusListener;\r
import org.eclipse.swt.graphics.Font;\r
import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
\r
/**\r
- * This displays a message such as "Click here to start entering\r
+ * Displays a message such as "Click here to start entering\r
* data" when <code>document</code> is empty.\r
* \r
* @author p.ciardelli\r
private Font promptFont = TaxEditorPlugin.getDefault()\r
.getFont(ITaxEditorConstants.DEFAULT_PROMPT_FONT);\r
\r
- /**\r
- * @param document\r
- * @param textControl\r
- */\r
- public EmptyTextViewerPrompt(IDocument document, StyledText textControl, String prompt) {\r
- this.document = document;\r
- this.textControl = textControl;\r
+ public EmptyTextViewerPrompt(TextViewer textViewer, String prompt) {\r
+\r
+ this.document = textViewer.getDocument();\r
+ this.textControl = textViewer.getTextWidget();\r
this.prompt = prompt;\r
- \r
+\r
this.textFont = textControl.getFont();\r
\r
- documentChanged(null);\r
+ documentChanged(null); \r
}\r
- \r
+\r
/**\r
* Override <code>prompt</code>'s default font. \r
* \r
\r
};\r
textControl.addFocusListener(focusListener);\r
+ textControl.addDisposeListener(new DisposeListener() {\r
+\r
+ @Override\r
+ public void widgetDisposed(DisposeEvent e) {\r
+ focusListener = null;\r
+ }\r
+ \r
+ });\r
}\r
\r
/**\r
\r
// Create the group composite\r
Composite groupComposite = new MisappliedGroupComposite(getTopLevelComposite(form), taxon);\r
- new CompositeBorderDecorator(groupComposite, form);\r
+ groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, form));\r
\r
return groupComposite;\r
}\r
\r
// Create the group composite\r
Composite groupComposite = new HomotypicalGroupComposite(getTopLevelComposite(form), taxon, group);\r
- new CompositeBorderDecorator(groupComposite, form); \r
- \r
+ groupComposite.addFocusListener(new CompositeBorderDecorator(groupComposite, form)); \r
+ \r
return groupComposite;\r
}\r
\r
import org.eclipse.swt.dnd.DropTargetEvent;\r
import org.eclipse.swt.dnd.DropTargetListener;\r
import org.eclipse.swt.dnd.Transfer;\r
+import org.eclipse.swt.graphics.Color;\r
import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Control;\r
import org.eclipse.ui.forms.widgets.TableWrapData;\r
import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
import eu.etaxonomy.taxeditor.actions.WidgetTransfer;\r
\r
/**\r
// Graphic layout of composite\r
this.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));\r
this.setLayout(new TableWrapLayout());\r
- this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
+ Color groupBackgroundColor = TaxEditorPlugin.getDefault().\r
+ getColor(ITaxEditorConstants.GROUP_GRAY_BKG_COLOR);\r
+ this.setBackground(groupBackgroundColor);\r
+// this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
\r
// Drop functionality\r
this.setDroppable(true);\r
}\r
\r
public void drop(DropTargetEvent event) {\r
- \r
+ \r
if (event.data instanceof Composite) {\r
Composite composite = (Composite) event.data; \r
if ( ! composite.getParent().equals(GroupComposite.this)) {\r
}\r
}\r
}\r
+ \r
+ public void dispose() {\r
+ \r
+ target.removeDropListener(dropListener);\r
+ \r
+ for (Control control : getChildren()) {\r
+ if (!control.isDisposed()) {\r
+ control.dispose();\r
+ }\r
+ }\r
+ \r
+ super.dispose();\r
+ }\r
}\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
package eu.etaxonomy.taxeditor.editor;\r
\r
+import org.apache.log4j.Logger;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.dnd.DND;\r
import org.eclipse.swt.dnd.DragSource;\r
* \r
*/\r
abstract public class GroupedComposite extends Composite {\r
+ private static final Logger logger = Logger.getLogger(GroupedComposite.class);\r
\r
- IParentDataAdapter parentDataAdapter;\r
private Control draggableControl;\r
\r
+ private DragSource dragSource;\r
+ \r
public GroupedComposite(Composite parent) {\r
super(parent, SWT.NONE);\r
\r
\r
if (draggable) {\r
\r
- if (dragger != null) {\r
+ if (dragSource != null) {\r
// Already initialized\r
return;\r
}\r
"Draggable control must be set to add draggability");\r
}\r
\r
- Transfer[] types = new Transfer[] { WidgetTransfer.getInstance() };\r
+ WidgetTransfer widgetTransfer = WidgetTransfer.getInstance();\r
+ widgetTransfer.setWidget(this);\r
+ Transfer[] types = new Transfer[] { widgetTransfer };\r
int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
\r
- dragger = new DragSource(draggableControl, operations);\r
- dragger.setTransfer(types);\r
- dragger.addDragListener(dragSourceListener);\r
+ dragSource = new DragSource(draggableControl, operations);\r
+ dragSource.setTransfer(types);\r
+ dragSource.addDragListener(dragSourceListener);\r
\r
} else {\r
- dragger = null;\r
+ dragSource = null;\r
}\r
}\r
\r
GroupedComposite.this.setFocus();\r
event.doit = true;\r
}\r
-\r
- public void dragSetData(DragSourceEvent event) {\r
- WidgetTransfer.getInstance().setWidget(GroupedComposite.this);\r
- }\r
- };\r
- private DragSource dragger;\r
-\r
- /**\r
- * Override of setParent: dispose of parent if this is its last child\r
- * composite\r
- * \r
- * @see org.eclipse.swt.widgets.Control#setParent(org.eclipse.swt.widgets.Composite)\r
- */\r
- public boolean setParent(Composite parent) {\r
\r
- Composite oldParent = this.getParent();\r
- Composite oldGrandparent = oldParent.getParent();\r
- \r
- if (super.setParent(parent)) {\r
- if (oldParent instanceof GroupComposite\r
- && oldParent.getChildren().length == 0) {\r
- oldParent.dispose();\r
- }\r
- adaptParentData();\r
-\r
- // Redraw the component holding the group and grouped composites\r
- parent.getParent().layout();\r
- \r
- // In case we are dragging between different views, redraw the\r
- // "old" view\r
- if (!oldGrandparent.equals(parent.getParent())) {\r
- oldGrandparent.layout(); \r
- }\r
-\r
- return true;\r
+ public void dragFinished(DragSourceEvent event){\r
+// ((DragSource) event.widget).dispose();\r
}\r
- return false;\r
- }\r
-\r
+ };\r
+ \r
public void dispose () {\r
- Composite parent = this.getParent();\r
- Composite grandParent = null;\r
- if (parent != null) {\r
- grandParent = parent.getParent();\r
- }\r
+ dragSource.removeDragListener(dragSourceListener);\r
super.dispose();\r
- if (parent instanceof Composite\r
- && parent.getChildren().length == 0) {\r
- parent.dispose();\r
- }\r
- \r
- // Redraw the component holding the group and grouped composites\r
- if (grandParent != null) {\r
- grandParent.layout();\r
- }\r
- }\r
- \r
- /**\r
- * A grouped composite is usually grouped according to data held by its\r
- * parent. When the composite changes parents, this method gets called to\r
- * update data as needed.\r
- */\r
- protected void adaptParentData() {\r
- if (parentDataAdapter != null) {\r
- parentDataAdapter.adaptParentData();\r
- }\r
- }\r
-\r
- public void setParentDataAdapter(IParentDataAdapter parentDataAdapter) {\r
- this.parentDataAdapter = parentDataAdapter;\r
}\r
}
\ No newline at end of file
public IPropertySource getPropertySource() {\r
return new DescriptionElementPropertySource((DescriptionElementBase) getData());\r
}\r
+\r
+ @Override\r
+ protected Font getViewerFont() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
}
\ No newline at end of file
public IPropertySource getPropertySource() {\r
return new TaxonDescriptionPropertySource((TaxonDescription) getData());\r
}\r
+\r
+ @Override\r
+ protected Font getViewerFont() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
}
\ No newline at end of file
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
-\r
package eu.etaxonomy.taxeditor.editor.name;\r
\r
import org.apache.log4j.Logger;\r
import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.graphics.Font;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.views.properties.IPropertySource;\r
\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.taxeditor.actions.ui.ChangeTaxonToSynonymAction;\r
\r
setDraggable(false);\r
setIcon(ACCEPTED_ICON);\r
- setFont(ACCEPTED_FONT);\r
+ setFont(getViewerFont());\r
setIndent(ACCEPTED_INDENT);\r
\r
createMenu();\r
+ \r
+ initNameViewer(taxon);\r
}\r
\r
private void createMenu() {\r
Action moveTaxonAction = new MoveTaxonDialogAction(getTaxon());\r
contextMenu.addAction(moveTaxonAction);\r
}\r
+\r
+ @Override\r
+ public IPropertySource getPropertySource() {\r
+ if (getTaxon() == null) {\r
+ return null;\r
+ }\r
+ return getPropertySourceByName(getTaxon().getName());\r
+ }\r
+\r
+ @Override\r
+ protected Font getViewerFont() {\r
+ return ACCEPTED_FONT;\r
+ }\r
}
\ No newline at end of file
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 org.eclipse.swt.widgets.Composite;\r
import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.views.properties.IPropertySource;\r
\r
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\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.ui.DeleteMisappliedNameCompositeAction;\r
import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
-import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
import eu.etaxonomy.taxeditor.operations.name.ChangeMisappliedNameToSynonymOperation;\r
-import eu.etaxonomy.taxeditor.operations.name.ChangeSynonymToMisappliedNameOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.RemoveMisappliedNameOperation;\r
+import eu.etaxonomy.taxeditor.propertysheet.name.TaxonBasePropertySource;\r
\r
/**\r
* @author p.ciardelli\r
\r
setDraggable(true);\r
setIcon(MISAPPLIEDNAME_ICON);\r
- setFont(MISAPPLIEDNAME_FONT);\r
+ setFont(getViewerFont());\r
setIndent(MISAPPLIEDNAME_INDENT);\r
\r
createMenu();\r
+ \r
+ initNameViewer(misappliedName);\r
}\r
\r
public Taxon getMisappliedName() {\r
\r
ContextMenu contextMenu = createContextMenu();\r
\r
- Action deleteMisappliedNameAction = new DeleteMisappliedNameCompositeAction(\r
- this, getTaxon());\r
- contextMenu.addAction(deleteMisappliedNameAction);\r
+ final IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+ final IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+ \r
+ // Remove misapplied name from taxon\r
+ String text = "Remove misapplied name from taxon"; //$NON-NLS-1$\r
+ ImageDescriptor image = TaxEditorPlugin.getDefault()\r
+ .getImageDescriptor(ITaxEditorConstants.ACTIVE_DELETE_ICON);\r
+ contextMenu.addAction(new Action(text, image){\r
+ \r
+ public void run() {\r
+ IUndoableOperation operation = new 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
+ });\r
}\r
\r
public boolean setParent(Composite parent) {\r
IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
IUndoableOperation operation = new ChangeMisappliedNameToSynonymOperation\r
- ("change type", undoContext, taxon, misappliedName, homotypicalGroup);\r
+ ("change misapplication to synonym", undoContext, taxon, misappliedName, homotypicalGroup);\r
\r
try {\r
IStatus status = operationHistory.execute(operation, null, null);\r
}\r
return false;\r
}\r
-}\r
+ \r
+ public IPropertySource getPropertySource() {\r
+ return new TaxonBasePropertySource(misappliedName);\r
+ }\r
+\r
+ @Override\r
+ protected Font getViewerFont() {\r
+ return MISAPPLIEDNAME_FONT;\r
+ }\r
+}
\ No newline at end of file
import org.eclipse.core.runtime.Assert;\r
import org.eclipse.core.runtime.IStatus;\r
import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.events.DisposeEvent;\r
+import org.eclipse.swt.events.DisposeListener;\r
import org.eclipse.swt.events.FocusAdapter;\r
import org.eclipse.swt.events.FocusEvent;\r
import org.eclipse.swt.graphics.Font;\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.CreateNewHeterotypicCompositeAction;\r
import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
import eu.etaxonomy.taxeditor.editor.LineBreakListener;\r
import eu.etaxonomy.taxeditor.editor.ParseListener;\r
import eu.etaxonomy.taxeditor.model.CdmUtil;\r
-import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
import eu.etaxonomy.taxeditor.operations.name.CreateSynonymInNewGroupOperation;\r
import eu.etaxonomy.taxeditor.propertysheet.name.BotanicalNamePropertySource;\r
import eu.etaxonomy.taxeditor.propertysheet.name.NonViralNamePropertySource;\r
-import eu.etaxonomy.taxeditor.propertysheet.name.TaxonBasePropertySource;\r
import eu.etaxonomy.taxeditor.propertysheet.name.ZoologicalNamePropertySource;\r
\r
/**\r
* Formats an <code>EditorGroupedComposite</code> to display <code>TaxonNameBase</code> elements\r
* in a <code>NameViewer</code>.\r
* \r
- * <code>Composite.getData()</code> returns <code>TaxonBase</code>. Therefore, the method \r
- * <code>setSelection()</code> is overriden to send the property sheet <code>TaxonBase.getName()</code>. \r
- * \r
* @author p.ciardelli\r
* @created 02.06.2008\r
* @version 1.0\r
*/\r
-public class NameComposite extends EditorGroupedComposite {\r
+public abstract class NameComposite extends EditorGroupedComposite {\r
private static final Logger logger = Logger.getLogger(NameComposite.class);\r
\r
/**\r
* @param managedForm\r
*/\r
public NameComposite(Composite parent, IManagedForm managedForm, \r
- String compositeType, TaxonBase data) {\r
+ String compositeType, TaxonBase taxonBase) {\r
super(parent, managedForm);\r
\r
createNameViewer();\r
createBorderSupport();\r
createLineWrapSupport();\r
\r
- setData(data);\r
-// if (compositeType != null) {\r
-// transform(compositeType);\r
-// }\r
+ setData(taxonBase);\r
\r
- createParser(); \r
+ createParser();\r
createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
-\r
setFocus();\r
\r
- // NOTE: placing this after setFocus() solved a strange bug where if the first action\r
+ // NOTE: placing this after setFocus() inexplicably solved a strange bug where if the first action\r
// during a session was to open a new taxon, the empty name prompt didn't work\r
- createNameListener(data);\r
+ createNameListener(taxonBase.getName());\r
}\r
\r
+ protected String getEmptyTextPrompt() {\r
+ return EMPTY_NAME_PROMPT;\r
+ }\r
+ \r
/**\r
* Listens for changes to this name's <code>fullTitleCache</code>.\r
* \r
* @param data\r
*/\r
- private void createNameListener(TaxonBase taxonBase) {\r
- if (taxonBase.getName() == null) {\r
+ private void createNameListener(final TaxonNameBase name) {\r
+ \r
+ if (name == null) {\r
return;\r
}\r
\r
- final TaxonNameBase name = taxonBase.getName();\r
- \r
final PropertyChangeListener listener = new PropertyChangeListener() {\r
public void propertyChange(PropertyChangeEvent evt) {\r
\r
reference.addPropertyChangeListener("titleCache", listener);\r
}\r
}\r
-\r
- /**\r
- * Override of Composite.setData() which passes data along to\r
- * <code>NameComposite</code>'s <code>TextViewer</code> where appropriate.\r
- * \r
- * @see org.eclipse.swt.widgets.Widget#setData(java.lang.Object)\r
- */\r
- public void setData(Object data) {\r
- super.setData(data);\r
- \r
- Assert.isTrue((data instanceof TaxonBase), \r
- "NameComposite's data field must contain a TaxonBase object");\r
- \r
- String text = CdmUtil.getDisplayNameAndRef((TaxonBase) data);\r
- getTextViewer().getTextWidget().setText(text);\r
-\r
- if (getTextViewer() instanceof NameViewer) {\r
- ((NameViewer) getTextViewer()).setCursorToEOL();\r
-\r
- TaxonNameBase name = ((TaxonBase) data).getName();\r
- if (name != null) {\r
+ \r
+ protected void initNameViewer(TaxonBase taxonBase) {\r
+ String text = CdmUtil.getDisplayNameWithRef(taxonBase);\r
+ if (text.length() == 0) {\r
+ initEmptyText();\r
+ } else {\r
+ getTextViewer().getTextWidget().setText(text);\r
+\r
+ if (getTextViewer() instanceof NameViewer) {\r
\r
- boolean hasProblem = name.getHasProblem();\r
- ((NameViewer) getTextViewer()).setShowError(name);\r
+ ((NameViewer) getTextViewer()).setCursorToEOL();\r
+\r
+ TaxonNameBase name = taxonBase.getName();\r
+ if (name != null) {\r
+ \r
+ boolean hasProblem = name.getHasProblem();\r
+ ((NameViewer) getTextViewer()).setShowError(name);\r
+ }\r
}\r
}\r
- \r
}\r
-\r
+ \r
private void createParser() {\r
- ((NameViewer) getTextViewer()).setParseListener(new ParseListener() {\r
+ ((NameViewer) getTextViewer()).addParseListener(new ParseListener() {\r
\r
@Override\r
public void parse(String text) {\r
\r
// The parser is no longer active\r
isParsing = false;\r
-\r
+ \r
// Manually refresh the property sheet to reflect changes\r
- UiUtil.getPropertySheetPage().refresh();\r
+ setSelection();\r
}\r
});\r
activateParser();\r
// nameViewer.setLineBreakListener(new LineBreakListener() {\r
\r
setTextViewer(new NameViewer(this));\r
- getTextViewer().setLineBreakListener(new LineBreakListener() {\r
+ getTextViewer().addLineBreakListener(new LineBreakListener() {\r
\r
@Override\r
public void handleSplitText(String text) {\r
\r
- Composite parent = getParent();\r
- final Composite grandParent = parent.getParent();\r
-\r
-// new CreateNewHeterotypicCompositeAction(text, managedForm)\r
-// .run();\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
IUndoableOperation operation = new CreateSynonymInNewGroupOperation\r
// TODO Auto-generated catch block\r
e.printStackTrace();\r
}\r
-\r
- // setDirty(true);\r
+ \r
+// getTextViewer().removeLineBreakListener(this);\r
}\r
\r
});\r
}\r
});\r
\r
+ getTextViewer().getTextWidget().addDisposeListener(new DisposeListener() {\r
+\r
+ @Override\r
+ public void widgetDisposed(DisposeEvent e) {\r
+ logger.warn("disposing text widget");\r
+ }\r
+ });\r
+ \r
// createLineWrapSupport(nameViewer);\r
\r
getTextViewer().getTextWidget().setBackground(TaxEditorPlugin.getDefault().\r
public void setTextViewer(NameViewer textViewer) {\r
this.nameViewer = textViewer;\r
}\r
-\r
- public IPropertySource getPropertySource() {\r
- \r
- // Property source for misapplied name\r
- if (MISAPPLIED_NAME.equals(compositeType)) {\r
- return new TaxonBasePropertySource((TaxonBase) getData());\r
- }\r
- \r
- // Get name info out of composite data\r
- TaxonBase taxon = (TaxonBase) getData();\r
- if (taxon == null) {\r
- return null;\r
- }\r
- TaxonNameBase name = taxon.getName();\r
+ \r
+ protected IPropertySource getPropertySourceByName(TaxonNameBase name) {\r
if (name == null) {\r
return null;\r
}\r
\r
- // Property sources for names\r
if (name.getClass() == BotanicalName.class) {\r
return new BotanicalNamePropertySource((BotanicalName) name);\r
}\r
}\r
\r
if (hasProblem && text.length() > 0) {\r
- logger.warn("Name: " + name.getTitleCache() + ", start: " + name.getProblemStarts()+ ", end: " + name.getProblemEnds());\r
+// logger.warn("Name: " + name.getTitleCache() + ", start: " + name.getProblemStarts()+ ", end: " + name.getProblemEnds());\r
int start = name.getProblemStarts();\r
int length = name.getProblemEnds() - start;\r
\r
if (start == -1 || name.getProblemEnds() == -1) {\r
- logger.warn("Start: " + start + ", End " + name.getProblemEnds());\r
+// logger.warn("Start: " + start + ", End " + name.getProblemEnds());\r
return;\r
}\r
\r
\r
}\r
}\r
- \r
- \r
- public void setLineBreakListener(LineBreakListener lineBreakListener) {\r
+ \r
+ public void addLineBreakListener(LineBreakListener lineBreakListener) {\r
this.getTextWidget().addVerifyListener(lineBreakListener);\r
}\r
\r
- public void setParseListener(ParseListener parseListener) {\r
+ public void removeLineBreakListener(LineBreakListener lineBreakListener) {\r
+ this.getTextWidget().removeVerifyListener(lineBreakListener);\r
+ }\r
+ \r
+ public void addParseListener(ParseListener parseListener) {\r
this.getTextWidget().addModifyListener(parseListener);\r
}\r
\r
+ public void removeParseListener(ParseListener parseListener) {\r
+ this.getTextWidget().removeModifyListener(parseListener);\r
+ }\r
+ \r
public void setText(String text) {\r
if (text == null) {\r
text = "";\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 org.eclipse.swt.widgets.Composite;\r
import org.eclipse.ui.forms.IManagedForm;\r
+import org.eclipse.ui.views.properties.IPropertySource;\r
\r
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
this.synonym = synonym;\r
\r
setDraggable(true);\r
- setFont(SYNONYM_FONT);\r
+ setFont(getViewerFont());\r
setIndent(SYNONYM_INDENT);\r
\r
if (isHomotypic()) {\r
}\r
\r
createMenu();\r
+ \r
+ initNameViewer(synonym);\r
}\r
\r
private boolean isHomotypic() {\r
}\r
});\r
}\r
+\r
+ @Override\r
+ public IPropertySource getPropertySource() {\r
+ if (getSynonym() == null) {\r
+ return null;\r
+ }\r
+ return getPropertySourceByName(getSynonym().getName());\r
+ }\r
+\r
+ @Override\r
+ protected Font getViewerFont() {\r
+ return SYNONYM_FONT;\r
+ }\r
}
\ No newline at end of file
import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
import eu.etaxonomy.taxeditor.UiUtil;\r
import eu.etaxonomy.taxeditor.actions.WidgetTransfer;\r
-import eu.etaxonomy.taxeditor.actions.ui.AdaptCompositeToGroupAction;\r
import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
import eu.etaxonomy.taxeditor.editor.FreeTextElementFactory;\r
import eu.etaxonomy.taxeditor.editor.INameEditorCompositeRepository;\r
import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeMisappliedNameToSynonymOperation;\r
\r
/**\r
* @author p.ciardelli\r
public void drop(DropTargetEvent event) {\r
\r
IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+ IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(getTaxon());\r
+ IUndoableOperation operation = null;\r
\r
- Synonym synonym = null;\r
+ // Synonym being dropped\r
if(event.data instanceof SynonymComposite){\r
- synonym = ((SynonymComposite)event.data).getSynonym();\r
+ Synonym synonym = ((SynonymComposite)event.data).getSynonym();\r
+ operation = new ChangeHomotypicGroupOperation\r
+ ("change type", undoContext, \r
+ getTaxon(), synonym, HomotypicalGroup.NewInstance());\r
}\r
\r
- IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(getTaxon());\r
- IUndoableOperation operation = new ChangeHomotypicGroupOperation\r
- ("change type", undoContext, \r
- getTaxon(), synonym, HomotypicalGroup.NewInstance());\r
- \r
- try {\r
- IStatus status = operationHistory.execute(operation, null, null);\r
- } catch (ExecutionException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
+ // Misapplied name being dropped\r
+ if(event.data instanceof MisappliedNameComposite){\r
+ Taxon misapplication = ((MisappliedNameComposite)event.data).getMisappliedName();\r
+ operation = new ChangeMisappliedNameToSynonymOperation\r
+ ("change misapplied name to synonym", undoContext, \r
+ getTaxon(), misapplication, HomotypicalGroup.NewInstance()); \r
}\r
\r
+ // Execute operation if it's been init'ed\r
+ if (operation == null) {\r
+ logger.warn("User unsuccessfully tried to drop " + event.data.getClass());\r
+ } else {\r
+ try {\r
+ IStatus status = operationHistory.execute(operation, null, null);\r
+ } catch (ExecutionException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
} \r
});\r
\r
acceptedNameComposite.drawBorder();\r
}\r
\r
- \r
+ private void recursiveDisposeChildren(Composite composite) {\r
+ for (Control child : composite.getChildren()) {\r
+ if (child instanceof Composite) {\r
+ recursiveDisposeChildren((Composite) child);\r
+ }\r
+ try {\r
+ child.dispose();\r
+ } catch (RuntimeException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
\r
public boolean redraw(){\r
\r
Taxon taxon = getTaxon();\r
\r
+// Composite bla = managedForm.getForm().getParent();\r
+// managedForm.getForm().dispose();\r
+// managedForm = null;\r
+// \r
+// createManagedForm(bla);\r
for (Control child : parent.getChildren()){\r
child.dispose();\r
}\r
+// recursiveDisposeChildren(parent);\r
\r
this.selectedObject = null;\r
\r
- NameComposite acceptedNameComposite = \r
- (NameComposite) FreeTextElementFactory.getDefault().\r
- createAcceptedTaxon(managedForm, taxon);\r
+ // Create accepted name\r
+ FreeTextElementFactory.getDefault().\r
+ createAcceptedTaxon(managedForm, taxon);\r
\r
for (TaxonBase taxonBase : new IterableSynonymyList(taxon)) {\r
if (taxonBase instanceof Synonym) {\r
}\r
\r
scrolledForm.reflow(true);\r
+// scrolledForm.layout(true);\r
\r
return true;\r
}\r
\r
@Override\r
public ReferenceBase getDefaultSec() {\r
+ // TODO why is this returning null? and of course, replace w the real deal\r
return getApplicationController().getReferenceService().getReferenceByUuid(\r
UUID.fromString("f3593c18-a8d2-4e51-bdad-0befbf8fb2d1"));\r
}\r
\r
package eu.etaxonomy.taxeditor.model;\r
\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
import java.util.HashSet;\r
import java.util.List;\r
import java.util.Set;\r
import eu.etaxonomy.cdm.api.service.INameService;\r
import eu.etaxonomy.cdm.api.service.IReferenceService;\r
import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
import eu.etaxonomy.cdm.model.common.TimePeriod;\r
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
import eu.etaxonomy.cdm.model.name.NameRelationship;\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.navigation.SearchResult;\r
\r
/**\r
* @author p.ciardelli\r
return "";\r
}\r
\r
- public static String getDisplayNameAndRef(TaxonBase taxonBase) {\r
+ public static String getDisplayNameWithRef(TaxonBase taxonBase) {\r
TaxonNameBase name = taxonBase.getName();\r
if (name != null) {\r
- return name.getFullTitleCache();\r
+ if (name.getFullTitleCache() == null || name.getFullTitleCache().length() == 0) {\r
+ return CdmUtils.Nz(name.getTitleCache());\r
+ } else {\r
+ return name.getFullTitleCache();\r
+ }\r
}\r
return "";\r
}\r
* @param searchText\r
* @return\r
*/\r
- public static Set<TaxonNameBase> getNameByName(String searchText) {\r
- Set<TaxonNameBase> resultsSet = new HashSet<TaxonNameBase>();\r
+ public static List<TaxonNameBase> searchNameString(String searchText) {\r
+ List<TaxonNameBase> resultsSet = new ArrayList<TaxonNameBase>();\r
resultsSet.addAll(getNameService()\r
.getNamesByName(searchText.replace("*", "%")));\r
return resultsSet;\r
}\r
\r
+ public static SearchResult searchTaxaByName(String name) {\r
+ SearchResult searchResult = new SearchResult();\r
+ searchResult.addAll(getTaxonService().\r
+ searchTaxaByName(name.replace("*", "%"), \r
+ CdmSessionDataRepository.getDefault().getDefaultSec()));\r
+ return searchResult;\r
+ }\r
+ \r
private static CdmApplicationController getApplicationController() {\r
return TaxEditorPlugin.getDefault().getApplicationController();\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.navigation;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 19.01.2009\r
+ * @version 1.0\r
+ */\r
+public class SearchResult implements Collection<TaxonBase> {\r
+ private static final Logger logger = Logger.getLogger(SearchResult.class);\r
+\r
+ List<TaxonBase> searchResult = new ArrayList<TaxonBase>();\r
+ \r
+ @Override\r
+ public boolean add(TaxonBase e) {\r
+ return searchResult.add(e);\r
+ }\r
+\r
+ @Override\r
+ public boolean addAll(Collection<? extends TaxonBase> c) {\r
+ return searchResult.addAll(c);\r
+ }\r
+\r
+ @Override\r
+ public void clear() {\r
+ searchResult.clear();\r
+ }\r
+\r
+ @Override\r
+ public boolean contains(Object o) {\r
+ return searchResult.contains(o);\r
+ }\r
+\r
+ @Override\r
+ public boolean containsAll(Collection<?> c) {\r
+ return searchResult.containsAll(c);\r
+ }\r
+\r
+ @Override\r
+ public boolean isEmpty() {\r
+ return searchResult.isEmpty();\r
+ }\r
+\r
+ @Override\r
+ public Iterator<TaxonBase> iterator() {\r
+ return searchResult.iterator();\r
+ }\r
+\r
+ @Override\r
+ public boolean remove(Object o) {\r
+ return searchResult.remove(o);\r
+ }\r
+\r
+ @Override\r
+ public boolean removeAll(Collection<?> c) {\r
+ return searchResult.removeAll(c);\r
+ }\r
+\r
+ @Override\r
+ public boolean retainAll(Collection<?> c) {\r
+ return searchResult.retainAll(c);\r
+ }\r
+\r
+ @Override\r
+ public int size() {\r
+ return searchResult.size();\r
+ }\r
+\r
+ @Override\r
+ public Object[] toArray() {\r
+ return searchResult.toArray();\r
+ }\r
+\r
+ @Override\r
+ public <T> T[] toArray(T[] a) {\r
+ return searchResult.toArray(a);\r
+ }\r
+\r
+ String searchString; \r
+ \r
+ public String getSearchString() {\r
+ return searchString;\r
+ }\r
+ \r
+ public void setSearchString(String searchString) {\r
+ this.searchString = searchString;\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.navigation;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.IToolBarManager;\r
+import org.eclipse.jface.viewers.ArrayContentProvider;\r
+import org.eclipse.jface.viewers.DoubleClickEvent;\r
+import org.eclipse.jface.viewers.IDoubleClickListener;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.part.ViewPart;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 19.01.2009\r
+ * @version 1.0\r
+ */\r
+public class SearchResultView extends ViewPart {\r
+ private static final Logger logger = Logger\r
+ .getLogger(SearchResultView.class);\r
+\r
+ public static final String ID = "eu.etaxonomy.taxeditor.navigation.searchresultview"; //$NON-NLS-1$\r
+\r
+ private TableViewer resultViewer;\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)\r
+ */\r
+ @Override\r
+ public void createPartControl(Composite parent) {\r
+ resultViewer = new TableViewer(parent, SWT.BORDER);\r
+ resultViewer.setContentProvider(new ArrayContentProvider());\r
+ resultViewer.setLabelProvider(new LabelProvider() {\r
+ public String getText(Object element) {\r
+ if (element instanceof TaxonBase) {\r
+ return ((TaxonBase) element).getTitleCache();\r
+ }\r
+ return super.getText(element);\r
+ }\r
+ });\r
+ resultViewer.addDoubleClickListener(new IDoubleClickListener() {\r
+ public void doubleClick(DoubleClickEvent event) {\r
+ TaxonBase taxonBase = null;\r
+ try {\r
+ taxonBase = (TaxonBase) ((StructuredSelection) event.getSelection())\r
+ .getFirstElement();\r
+ \r
+ openTaxonEditor(taxonBase);\r
+ \r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ protected void openTaxonEditor(TaxonBase taxonBase) {\r
+\r
+ Taxon taxon = null;\r
+ if (taxonBase instanceof Synonym) {\r
+ taxon = (Taxon) ((Synonym) taxonBase).getAcceptedTaxa().toArray()[0];\r
+ } else {\r
+ taxon = (Taxon) taxonBase;\r
+ }\r
+ \r
+ try {\r
+ UiUtil.openTaxonEditor(taxon);\r
+ } catch (PartInitException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()\r
+ */\r
+ @Override\r
+ public void setFocus() {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+ private void initializeToolBar() {\r
+ IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();\r
+ }\r
+\r
+ public void setResult(SearchResult searchResult) {\r
+ resultViewer.setInput(searchResult); \r
+ setPartName("Search: '" + searchResult.getSearchString() + "'");\r
+ }\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
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.events.FocusEvent;\r
import org.eclipse.swt.events.FocusListener;\r
+import org.eclipse.swt.events.KeyAdapter;\r
+import org.eclipse.swt.events.KeyEvent;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
import org.eclipse.swt.layout.FillLayout;\r
import org.eclipse.swt.layout.GridData;\r
import org.eclipse.swt.layout.GridLayout;\r
import org.eclipse.swt.widgets.Button;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Label;\r
import org.eclipse.swt.widgets.Text;\r
import org.eclipse.ui.part.ViewPart;\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.model.CdmUtil;\r
+\r
/**\r
* The left navigation pane.\r
* \r
private Text searchText;\r
private Composite searchComposite = null;\r
public static final String ID = "eu.etaxonomy.taxeditor.navigation.searchview"; //$NON-NLS-1$\r
+\r
+ private Label noResultsLabel;\r
+\r
+ private Button searchButton;\r
\r
/**\r
* Create contents of the view part\r
if (searchText.getText() == "") {\r
searchText.setForeground(SWTResourceManager.getColor(192, 192, 192));\r
searchText.setText("Use \"*\" for wildcard searching"); \r
+ } \r
+ }\r
+ });\r
+ searchText.addKeyListener(new KeyAdapter() {\r
+ public void keyReleased(KeyEvent e) {\r
+ int key = e.keyCode;\r
+ if (key == SWT.CR) {\r
+ populateSearchResults();\r
+ } else {\r
+ setSearchButtonEnabled();\r
}\r
- \r
}\r
+ });\r
+ \r
+ searchButton = new Button(searchComposite, SWT.NONE);\r
+ searchButton.setText("Search");\r
+ searchButton.setEnabled(false);\r
+ searchButton.addMouseListener(new MouseAdapter() {\r
\r
+ // Populate search results resultsTable after clicking button\r
+ public void mouseUp(MouseEvent e) {\r
+ populateSearchResults();\r
+ }\r
});\r
\r
- final Button searchButton = new Button(searchComposite, SWT.NONE);\r
- searchButton.setText("Search");\r
+ noResultsLabel = new Label(searchComposite, SWT.NONE);\r
+ noResultsLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));\r
+ noResultsLabel.setText("0 results found.");\r
+ noResultsLabel.setVisible(false);\r
+ noResultsLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));\r
\r
// TEMPORARY PENDING IMPLEMENTATION - Disable visible fields\r
- searchComposite.setEnabled(false);\r
- searchButton.setEnabled(false);\r
+// searchButton.setEnabled(false);\r
\r
createActions();\r
initializeToolBar();\r
initializeMenu();\r
}\r
\r
+ protected void setSearchButtonEnabled() {\r
+ if (searchText.getText().length() == 0) {\r
+ searchButton.setEnabled(false);\r
+ } else {\r
+ searchButton.setEnabled(true); \r
+ }\r
+ }\r
+\r
+ protected void populateSearchResults() {\r
+// UiUtil.openSearchResultsView(null);\r
+\r
+ noResultsLabel.setVisible(false);\r
+ if (searchText.getText().length() > 0) {\r
+ \r
+ // Query CDM with search text\r
+ SearchResult searchResult = CdmUtil.searchTaxaByName(searchText.getText());\r
+ searchResult.setSearchString(searchText.getText());\r
+// List<TaxonNameBase> results = CdmUtil.searchNameString(searchText.getText());\r
+ \r
+ // If there are results, open a view in the center pane\r
+ if (searchResult.size() > 0) {\r
+ UiUtil.openSearchResultsView(searchResult);\r
+ } else {\r
+ \r
+ // Display "no results found" message\r
+ logger.warn("no results found");\r
+// noResultsLabel.setText("No results found for '" + searchText.getText() + "'");\r
+ noResultsLabel.setVisible(true);\r
+ } \r
+ }\r
+ }\r
+\r
private void createActions() {\r
// Create the actions\r
}\r
@Override\r
public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
throws ExecutionException {\r
- // TODO Auto-generated method stub\r
+ // TODO redo for change misapplied name ...\r
return null;\r
}\r
\r
@Override\r
public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
throws ExecutionException {\r
- // TODO Auto-generated method stub\r
+ // TODO undo for change misapplied name ...\r
return null;\r
}\r
}\r
import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
\r
/**\r
+ * <ol>\r
+ * <li>Create synonym name using newSynonymText</li>\r
+ * <li>Add name to new homotypic group</li>\r
+ * <li>Create a new synonym for the taxon</li>\r
+ * </ol>\r
* @author p.ciardelli\r
* @created 16.01.2009\r
* @version 1.0\r
private SynonymRelationship newSynonymRelationship;\r
\r
public CreateSynonymInNewGroupOperation(String label,\r
- IUndoContext undoContext, Taxon taxon, String synonymText) {\r
+ IUndoContext undoContext, Taxon taxon, String newSynonymText) {\r
super(label, undoContext, taxon);\r
\r
- this.newSynonymText = synonymText;\r
+ this.newSynonymText = newSynonymText;\r
}\r
\r
/* (non-Javadoc)\r
throws ExecutionException {\r
\r
// Create synonym name using newSynonymText\r
- TaxonNameBase synonymName = CdmParserController.parseFullReference(newSynonymText, null, null);\r
+ TaxonNameBase synonymName = \r
+ CdmParserController.parseFullReference(newSynonymText, null, null);\r
\r
// Add name to new homotypic group\r
HomotypicalGroup.NewInstance().addTypifiedName(synonymName);\r
@Override\r
public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
throws ExecutionException {\r
- // TODO Auto-generated method stub\r
- return null;\r
+ return execute(monitor, info);\r
}\r
\r
/* (non-Javadoc)\r
// Remove the synonym \r
taxon.removeSynonymRelation(newSynonymRelationship);\r
newSynonymRelationship = null;\r
- return null;\r
+ \r
+ return redrawOpenEditor();\r
}\r
}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.operations.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 16.01.2009\r
+ * @version 1.0\r
+ */\r
+public class RemoveMisappliedNameOperation extends AbstractEditorOperation {\r
+ private static final Logger logger = Logger\r
+ .getLogger(RemoveMisappliedNameOperation.class);\r
+ \r
+ private Taxon misappliedName;\r
+\r
+ private ReferenceBase citation;\r
+\r
+ private String microcitation;\r
+\r
+ public RemoveMisappliedNameOperation(String label, IUndoContext undoContext,\r
+ Taxon taxon, Taxon misappliedName) {\r
+ super(label, undoContext, taxon);\r
+ \r
+ this.misappliedName = misappliedName;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+ */\r
+ @Override\r
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+\r
+ // Find misapplication relation, save citation information\r
+ for (TaxonRelationship relationship : taxon.getTaxonRelations()) {\r
+ if (relationship.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())\r
+ && relationship.getFromTaxon().equals(misappliedName)) {\r
+ citation = relationship.getCitation();\r
+ microcitation = relationship.getCitationMicroReference();\r
+ }\r
+ }\r
+ \r
+ // Remove misapplied name relation from taxon\r
+ taxon.removeTaxon(misappliedName, TaxonRelationshipType.MISAPPLIED_NAME_FOR());\r
+ \r
+ return redrawOpenEditor();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+ */\r
+ @Override\r
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ return execute(monitor, info);\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+ */\r
+ @Override\r
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ \r
+ taxon.addMisappliedName(misappliedName, citation, microcitation);\r
+ \r
+ return redrawOpenEditor();\r
+ }\r
+}\r
import java.util.Vector;\r
\r
import org.apache.log4j.Logger;\r
-import org.eclipse.jface.dialogs.MessageDialog;\r
import org.eclipse.ui.views.properties.IPropertyDescriptor;\r
import org.eclipse.ui.views.properties.IPropertySource;\r
import org.eclipse.ui.views.properties.PropertyDescriptor;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
-import eu.etaxonomy.cdm.model.reference.Generic;\r
-import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.taxeditor.UiUtil;\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
// Edit taxon's name\r
if (id.equals(P_ID_TAXONNAME)) {\r
\r
+ if (taxon == null) {\r
+ logger.warn("no taxon");\r
+ return null;\r
+ }\r
TaxonNameBase name = taxon.getName();\r
\r
// Create taxon name as necessary\r
\r
// Edit taxon's sec. reference\r
if (id.equals(P_ID_TAXONSEC)) {\r
- \r
+\r
+ if (taxon == null) {\r
+ return null;\r
+ }\r
ReferenceBase sec = taxon.getSec();\r
\r
// Create property source for submenu\r
\r
package eu.etaxonomy.taxeditor.propertysheet.namerelationswizard;\r
\r
-import java.util.Set;\r
+import java.util.List;\r
\r
import org.apache.log4j.Logger;\r
import org.eclipse.core.databinding.beans.BeansObservables;\r
protected void populateSearchResults() {\r
String searchText = txtName.getText();\r
btnSearch.setEnabled(false);\r
- Set<TaxonNameBase> results = CdmUtil.getNameByName(searchText);\r
+ List<TaxonNameBase> results = CdmUtil.searchNameString(searchText);\r
\r
observableSearchResultsList.clear();\r
if (results.size() == 0) {\r