fixes #928
authorn.hoffmann <n.hoffmann@localhost>
Wed, 26 Aug 2009 12:49:13 +0000 (12:49 +0000)
committern.hoffmann <n.hoffmann@localhost>
Wed, 26 Aug 2009 12:49:13 +0000 (12:49 +0000)
.gitattributes
taxeditor-navigation/META-INF/MANIFEST.MF
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/QuickCreateChildTaxonHandler.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/FilteredTaxonNodeSelectionDialog.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/UuidAndTitleCache.java [new file with mode: 0644]

index 1860785008cb1d617628f143faa8bbd9713d8442..994e37a3fc9dbbbd24468bc2ebc6682416f3f705 100644 (file)
@@ -1063,6 +1063,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/wizard/CdmDataSo
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/FilteredCdmResourceSelectionDialog.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/FilteredNameSelectionDialog.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/FilteredReferenceSelectionDialog.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/FilteredTaxonNodeSelectionDialog.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/LoginDialog.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/SelectionDialogDetailsLabelProvider.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/SelectionDialogSelectionLabelProvider.java -text
@@ -1098,6 +1099,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/SynonymHelper.java -t
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonHelper.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TaxonTransfer.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/TimeHelper.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/UuidAndTitleCache.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/AbstractPersistentPostOperation.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/AbstractPostOperation.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeConceptRelationshipTypeOperation.java -text
index 2c561318883e766af9f5188e8c3fdb0fa4eb3a3b..50ab4fded38fa62684e2d9e16630f212f9872768 100644 (file)
@@ -18,7 +18,7 @@ Require-Bundle: org.eclipse.core.resources;bundle-version="3.4.1",
  org.eclipse.ui.navigator.resources;bundle-version="3.3.101",
  org.eclipse.ui.ide;bundle-version="3.4.1",
  org.eclipse.ui.forms;bundle-version="3.3.101",
- eu.etaxonomy.cdmLibrary;bundle-version="2.1.0",
+ eu.etaxonomy.cdmlib;bundle-version="2.1.0",
  eu.etaxonomy.taxeditor.store;bundle-version="1.0.0",
  eu.etaxonomy.taxeditor.editor;bundle-version="1.0.0",
  org.eclipse.core.databinding.beans;bundle-version="1.1.1",
index dfddc0a6ca57d009030ed45dfc265f58c2d8a5de..f3081b85291e80d14287f3b566ad3af829ca0371 100644 (file)
@@ -15,12 +15,11 @@ import org.eclipse.core.commands.ExecutionEvent;
 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;
@@ -41,16 +40,14 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
        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.");
@@ -61,8 +58,7 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
                                        ("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;
index abb9defaff519db884414a66fe32c3c965f42dbf..fcd8d288d138e0c80c6315db5d09d3570fad41c5 100644 (file)
@@ -70,7 +70,7 @@ public class QuickCreateChildTaxonHandler extends AbstractHandler implements
                        
                        //TaxonUtil.addChildTaxonBaseIsolated(parentTaxon.getUuid(), dialog.getValue());
 
-                       TaxonNameBase name = CdmParserUtil.parseFullReference(dialog.getValue(), null, null);
+                       TaxonNameBase name = CdmParserUtil.parseFullReference(dialog.getValue());
                        
                        CreateChildTaxonOperation operation;
                        try {
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/FilteredTaxonNodeSelectionDialog.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/dialogs/FilteredTaxonNodeSelectionDialog.java
new file mode 100644 (file)
index 0000000..3810d88
--- /dev/null
@@ -0,0 +1,251 @@
+/**\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
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/UuidAndTitleCache.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/UuidAndTitleCache.java
new file mode 100644 (file)
index 0000000..7b0e025
--- /dev/null
@@ -0,0 +1,48 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.model;
+
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+
+/**
+ * @author n.hoffmann
+ * @created Aug 14, 2009
+ * @version 1.0
+ */
+public class UuidAndTitleCache {
+       private static final Logger logger = Logger
+                       .getLogger(UuidAndTitleCache.class);
+       
+       UUID uuid;
+       String titleCache;
+       
+       public UuidAndTitleCache(UUID uuid, String titleCache) {
+               this.uuid = uuid;
+               this.titleCache = titleCache;
+       }
+       
+       /**
+        * @return the titleCache
+        */
+       public String getTitleCache() {
+               return titleCache;
+       }
+       
+       /**
+        * @return the uuid
+        */
+       public UUID getUuid() {
+               return uuid;
+       }
+       
+}