import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.IUndoableOperation;
import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Shell;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.taxeditor.editor.name.TaxonSearchDialog;
+import eu.etaxonomy.taxeditor.dialogs.FilteredTaxonNodeSelectionDialog;
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.operations.MoveTaxonOperation;
public Object execute(ExecutionEvent event) throws ExecutionException {
Shell shell = NavigationUtil.getShell();
TaxonNode taxonNode = (TaxonNode) NavigationUtil.getCurrentSelection(event);
+
+ parentTaxonNode = FilteredTaxonNodeSelectionDialog.selectTaxonNode(shell, null);
- Dialog dialog = new TaxonSearchDialog(shell);
- Object value = ((TaxonSearchDialog) dialog).open();
-
- logger.warn("child " +taxonNode.getTaxon().toString());
- logger.warn("parent " + ((TaxonNode) value).getTaxon().toString());
-
- if (value instanceof TaxonNode) {
- parentTaxonNode = (TaxonNode) value;
+ if(parentTaxonNode != null){
+ logger.warn("child " +taxonNode.getTaxon().toString());
+ logger.warn("parent " + parentTaxonNode.toString());
+
if(NavigationUtil.isDirty(parentTaxonNode)){
MessageDialog.openWarning(shell, "Unsaved Parent Taxon", "There are unsaved " +
"changes in the parent taxon. Please save first.");
("Move taxon to new parent", NavigationUtil.getUndoContext(),
taxonNode, parentTaxonNode, this); //$NON-NLS-1$
NavigationUtil.executeOperation(operation);
- } else {
- logger.warn("TaxonSearchDialog did not return a TaxonNode object.");
+
}
return null;
--- /dev/null
+/**\r
+ * \r
+ */\r
+package eu.etaxonomy.taxeditor.dialogs;\r
+\r
+import java.text.Collator;\r
+import java.util.Comparator;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.UUID;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.CoreException;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.IDialogSettings;\r
+import org.eclipse.jface.viewers.ILabelProvider;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.window.Window;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Combo;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
+import eu.etaxonomy.taxeditor.model.UuidAndTitleCache;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ *\r
+ */\r
+public class FilteredTaxonNodeSelectionDialog extends FilteredItemsSelectionDialog { \r
+ \r
+ private static final Logger logger = Logger\r
+ .getLogger(FilteredTaxonNodeSelectionDialog.class);\r
+\r
+ public static final String SETTINGS = FilteredTaxonNodeSelectionDialog.class.getCanonicalName();\r
+ \r
+ /**\r
+ * @param taxon\r
+ * @return\r
+ */\r
+ public static TaxonNode selectTaxonNode(Shell shell, Taxon excludeTaxon) {\r
+ FilteredTaxonNodeSelectionDialog dialog = new FilteredTaxonNodeSelectionDialog(shell, \r
+ "Choose a taxon", false);\r
+ if (dialog.open() == Window.CANCEL) {\r
+ return null;\r
+ }\r
+ \r
+ UUID taxonNodeUuid = dialog.getTaxonNodeUuidAndTitleCache().getUuid();\r
+ \r
+ if(taxonNodeUuid != null){\r
+ return CdmStore.getTaxonService().getTaxonNodeByUuid(taxonNodeUuid);\r
+ }\r
+ return null; \r
+ }\r
+\r
+ private Map<UUID, String> allTaxonBases;\r
+\r
+ private Combo taxonomicTreeSelectionCombo;\r
+\r
+ private List<TaxonomicTree> taxonomicTrees;\r
+ \r
+ private TaxonomicTree selectedTaxonomicTree;\r
+\r
+ /**\r
+ * @param shell\r
+ * @param title\r
+ */\r
+ public FilteredTaxonNodeSelectionDialog(Shell shell, String title, boolean multi) {\r
+ super(shell, multi);\r
+ setTitle(title);\r
+ setMessage("Choose");\r
+ \r
+ taxonomicTrees = CdmStore.getTaxonService().listTaxonomicTrees(null, null, null, null);\r
+ // default to first tree \r
+ // TODO this will be problematic and can only be seen as workaround \r
+ selectedTaxonomicTree = taxonomicTrees.iterator().next();\r
+ \r
+ ILabelProvider labelProvider = new LabelProvider() {\r
+ public String getText(Object element) {\r
+ if (element == null) {\r
+ return null;\r
+ }\r
+ return ((UuidAndTitleCache) element).getTitleCache();\r
+ } \r
+ };\r
+ setListLabelProvider(labelProvider);\r
+ setDetailsLabelProvider(labelProvider);\r
+ \r
+ allTaxonBases = CdmStore.getTaxonService().getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByTaxonomicTree(selectedTaxonomicTree);\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#fillContentProvider(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.AbstractContentProvider, org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter, org.eclipse.core.runtime.IProgressMonitor)\r
+ */\r
+ @Override\r
+ protected void fillContentProvider(AbstractContentProvider contentProvider,\r
+ ItemsFilter itemsFilter, IProgressMonitor progressMonitor)\r
+ throws CoreException {\r
+ progressMonitor.beginTask("Looking for taxa", 1000); // Why no progres monitor?\r
+ for (UUID uuid : allTaxonBases.keySet()) {\r
+ UuidAndTitleCache taxon = new UuidAndTitleCache(uuid, allTaxonBases.get(uuid)); \r
+ contentProvider.add(taxon, itemsFilter);\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * @return\r
+ */\r
+ private UuidAndTitleCache getTaxonNodeUuidAndTitleCache() {\r
+ Object[] result = getResult();\r
+ return result[0] == null ? null : (UuidAndTitleCache) result[0];\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createExtendedContentArea(org.eclipse.swt.widgets.Composite)\r
+ */\r
+ @Override\r
+ protected Control createExtendedContentArea(Composite parent) {\r
+ \r
+ // TODO tree selection is disabled at the moment and the first tree will always be used. \r
+ // change this once we are working with multiple trees\r
+// return createTreeSelectionCombo(parent);\r
+ \r
+ return null;\r
+ }\r
+ \r
+ /*\r
+ * currently disabled tree selection composite\r
+ */\r
+ private Control createTreeSelectionCombo(Composite parent){\r
+ Composite taxonomicTreeSelection = new Composite(parent, SWT.NULL);\r
+ taxonomicTreeSelection.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));\r
+ \r
+ GridLayout layout = new GridLayout();\r
+ taxonomicTreeSelection.setLayout(layout);\r
+ \r
+ Label label = new Label(taxonomicTreeSelection, SWT.NULL);\r
+ // TODO not working is not really true but leave it there to remind everyone that this is under construction\r
+ label.setText("Select Taxonomic Tree (not completely working at the moment)");\r
+ taxonomicTreeSelectionCombo = new Combo(taxonomicTreeSelection, SWT.NULL);\r
+ taxonomicTreeSelectionCombo.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));\r
+ \r
+ for(TaxonomicTree tree : taxonomicTrees){\r
+ taxonomicTreeSelectionCombo.add(tree.getName().getText(), taxonomicTrees.indexOf(tree));\r
+ }\r
+ \r
+ // TODO remember last selection\r
+ \r
+ taxonomicTreeSelectionCombo.addSelectionListener(new SelectionAdapter(){\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)\r
+ */\r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ selectedTaxonomicTree = taxonomicTrees.get(taxonomicTreeSelectionCombo.getSelectionIndex());\r
+ }\r
+ \r
+ });\r
+ \r
+ return taxonomicTreeSelection;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()\r
+ */\r
+ @Override\r
+ protected ItemsFilter createFilter() {\r
+ return new ItemsFilter() {\r
+\r
+ @Override\r
+ public boolean isConsistentItem(Object item) {\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public boolean matchItem(Object item) {\r
+ return matches(((UuidAndTitleCache) item).getTitleCache());\r
+ }\r
+ \r
+ };\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getDialogSettings()\r
+ */\r
+ @Override\r
+ protected IDialogSettings getDialogSettings() {\r
+ IDialogSettings settings = TaxeditorStorePlugin.getDefault().getDialogSettings().getSection(getSettings());\r
+\r
+ if (settings == null) {\r
+ settings = TaxeditorStorePlugin.getDefault().getDialogSettings().addNewSection(getSettings());\r
+ }\r
+ return settings;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getElementName(java.lang.Object)\r
+ */\r
+ @Override\r
+ public String getElementName(Object item) {\r
+ return ((UuidAndTitleCache) item).getTitleCache();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getItemsComparator()\r
+ */\r
+ @Override\r
+ protected Comparator getItemsComparator() {\r
+ return new Comparator<UuidAndTitleCache>() {\r
+ public int compare(UuidAndTitleCache entity1,\r
+ UuidAndTitleCache entity2) {\r
+ Collator collator = Collator.getInstance();\r
+ return collator.compare(entity1.getTitleCache(), entity2.getTitleCache());\r
+ }\r
+ };\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#validateItem(java.lang.Object)\r
+ */\r
+ @Override\r
+ protected IStatus validateItem(Object item) {\r
+ return Status.OK_STATUS;\r
+ }\r
+ \r
+ protected void restoreDialog(IDialogSettings settings) {\r
+ \r
+ }\r
+ \r
+ public String getSettings() {\r
+ if(SETTINGS == null){\r
+ throw new IllegalStateException("No SETTINGS set.");\r
+ }\r
+ return SETTINGS;\r
+ }\r
+}
\ No newline at end of file