\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
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
}\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
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
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
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
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