Taxonomic tree: disallowed dragging a taxon into one of its child / grandchild /...
authorp.ciardelli <p.ciardelli@localhost>
Thu, 20 Nov 2008 16:57:41 +0000 (16:57 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Thu, 20 Nov 2008 16:57:41 +0000 (16:57 +0000)
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/CdmUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeViewer.java

index 55033094f7af4a90fbb9e10cce3ca144a6733140..6c12a3fffe4801e2898d324d7475f8b57bf2d68a 100644 (file)
@@ -9,7 +9,6 @@
 \r
 package eu.etaxonomy.taxeditor.model;\r
 \r
-import java.util.ArrayList;\r
 import java.util.HashSet;\r
 import java.util.List;\r
 import java.util.Set;\r
@@ -34,14 +33,11 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.reference.CdDvd;\r
-import eu.etaxonomy.cdm.model.reference.Generic;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
 import eu.etaxonomy.cdm.strategy.parser.INonViralNameParser;\r
 import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
@@ -506,4 +502,30 @@ public class CdmUtil {
                }\r
                return resultsList;\r
        }\r
+       \r
+       /**\r
+        * Returns true if <code>taxon</code> belongs to the children, grandchildren,\r
+        * etc. of <code>checkTaxon</code>.\r
+        * \r
+        * @param taxon\r
+        * @param checkTaxon\r
+        * @return\r
+        */\r
+       public static boolean isTaxonChildOfTaxon(Taxon taxon, Taxon checkTaxon) {\r
+               \r
+               // Iterate through all checkTaxon's children\r
+               for (Taxon childTaxon : checkTaxon.getTaxonomicChildren()) {\r
+                       \r
+                       if (childTaxon.equals(taxon)) {\r
+                               return true;\r
+                       } else {\r
+                               \r
+                               // Compare taxon with childTaxon's children\r
+                               if (isTaxonChildOfTaxon(taxon, childTaxon)) {\r
+                                       return true;\r
+                               }\r
+                       }\r
+               }\r
+               return false;\r
+       }\r
 }\r
index 26ad4a3089e9974694c177085900761575fa3446..2dd486fdc273a2502bcb205d19fe214d48ca9ef7 100644 (file)
@@ -16,6 +16,7 @@ import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;\r
 import org.eclipse.jface.action.MenuManager;\r
 import org.eclipse.jface.action.Separator;\r
+import org.eclipse.jface.dialogs.MessageDialog;\r
 import org.eclipse.jface.util.IPropertyChangeListener;\r
 import org.eclipse.jface.util.PropertyChangeEvent;\r
 import org.eclipse.jface.viewers.CellEditor;\r
@@ -53,12 +54,14 @@ import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeItem;\r
 import org.springframework.transaction.TransactionStatus;\r
 \r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
 import eu.etaxonomy.taxeditor.actions.TaxonTransfer;\r
 import eu.etaxonomy.taxeditor.actions.cdm.DeleteTaxonAction;\r
 import eu.etaxonomy.taxeditor.actions.cdm.MoveTaxonAction;\r
@@ -174,13 +177,24 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                        parentTaxon = null;\r
                                } else {\r
                                        parentTaxon = (Taxon) event.item.getData();\r
+                                       \r
+                                       // Make sure parentTaxon is not a child\r
+                                       if (CdmUtil.isTaxonChildOfTaxon(parentTaxon, taxon)) {\r
+                                               \r
+                                               MessageDialog.openError(UiUtil.getShell(), "Can't move taxon.",\r
+                                                               "'" + CdmUtil.getDisplayName(taxon) + "' sits above " +\r
+                                                               "'" + CdmUtil.getDisplayName(parentTaxon) + "' " +\r
+                                                               "in the taxonomic hierarchy.");\r
+                                               \r
+                                               return;\r
+                                       }\r
                                }\r
 \r
                                new MoveTaxonAction(taxon, parentTaxon).run();\r
                        }\r
                });\r
        }\r
-\r
+       \r
        Taxon quickAddTaxon;\r
 \r
        private void removeQuicklyAddedTaxon() {\r
@@ -365,6 +379,9 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                break;\r
                        }\r
                        case SWT.MouseHover: {\r
+                               \r
+                               // TODO make disappear on ESC\r
+                               \r
                                // Item item = TaxonomicTreeViewer.this.getItemAt(new\r
                                // Point(event.x, event.y));\r
                                Item item = getItemAt(new Point(event.x, event.y));\r