/**
- *
+ *
*/
package eu.etaxonomy.taxeditor.editor.name.dnd;
import org.eclipse.core.runtime.Assert;
+import org.eclipse.swt.SWTException;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import eu.etaxonomy.cdm.model.common.ICdmBase;
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
import eu.etaxonomy.taxeditor.editor.IDropTargetable;
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
import eu.etaxonomy.taxeditor.editor.name.container.AbstractHomotypicalGroupContainer;
+import eu.etaxonomy.taxeditor.editor.name.container.HomotypicalSynonymGroup;
import eu.etaxonomy.taxeditor.editor.name.container.MisappliedGroup;
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptRelationshipTypeOperation;
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptToSynonymOperation;
* @version $Id: $
*/
public class NameEditorDropTargetListener extends DropTargetAdapter {
-
- private final IDropTargetable target;
-
- /**
- * <p>Constructor for NameEditorDropTargetListener.</p>
- *
- * @param target a {@link eu.etaxonomy.taxeditor.editor.IDropTargetable} object.
- */
- public NameEditorDropTargetListener(IDropTargetable target){
- this.target = target;
- }
-
- /** {@inheritDoc} */
- @Override
- public void dragEnter(DropTargetEvent dropTargetEvent) {
- target.dragEntered();
-
-// if(! EditorUtil.getActiveMultiPageTaxonEditor().equals(editor.getMultiPageTaxonEditor())){
-// editor.getMultiPageTaxonEditor().setFocus();
-// }
- }
-
- /** {@inheritDoc} */
- @Override
- public void dragLeave(DropTargetEvent dropTargetEvent) {
- target.dragLeft();
- }
-
- /** {@inheritDoc} */
- @Override
- public void drop(DropTargetEvent dropTargetEvent) {
-
- TaxonBase taxonBase = getDroppedTaxonBase(dropTargetEvent);
-
- Assert.isNotNull(taxonBase);
-
- if(taxonBase.getHomotypicGroup().equals(getHomotypicalGroup())){
- // do nothing when dragged to the same group
- dropTargetEvent.detail = DND.DROP_NONE;
- return;
- }
-
- // Execute operations at end of drag event
- AbstractPostOperation operation = createOperation(taxonBase);
-
- // Execute operation if it has been initiated
- if (operation == null) {
- MessagingUtils.warn(getClass(), "User unsuccessfully tried to drop: " + taxonBase.getClass() +
- ". Target: " + target);
- dropTargetEvent.detail = DND.DROP_NONE;
- } else {
- EditorUtil.executeOperation(operation);
- }
- target.getEditor().getConversationHolder().commit();
+
+ private IDropTargetable target;
+
+
+ /**
+ * <p>Constructor for NameEditorDropTargetListener.</p>
+ *
+ * @param target a {@link eu.etaxonomy.taxeditor.editor.IDropTargetable} object.
+ */
+ public NameEditorDropTargetListener(IDropTargetable target){
+ this.target = target;
+ }
+
+ /** {@inheritDoc} */
+ public void dragEnter(DropTargetEvent dropTargetEvent) {
+ target.dragEntered();
+
+// if(! EditorUtil.getActiveMultiPageTaxonEditor().equals(editor.getMultiPageTaxonEditor())){
+// editor.getMultiPageTaxonEditor().setFocus();
+// }
+ }
+
+ /** {@inheritDoc} */
+ public void dragLeave(DropTargetEvent dropTargetEvent) {
+ target.dragLeft();
+ }
+
+ /** {@inheritDoc} */
+ public void drop(DropTargetEvent dropTargetEvent) {
+
+ TaxonBase taxonBase = getDroppedTaxonBase(dropTargetEvent);
+
+ Assert.isNotNull(taxonBase);
+
+ if(taxonBase.getHomotypicGroup().equals(getHomotypicalGroup())){
+ // do nothing when dragged to the same group
+ dropTargetEvent.detail = DND.DROP_NONE;
+ return;
+ }
+
+ // Execute operations at end of drag event
+ AbstractPostOperation operation = createOperation(taxonBase);
+
+ // Execute operation if it has been initiated
+ if (operation == null) {
+ MessagingUtils.warn(getClass(), "User unsuccessfully tried to drop: " + taxonBase.getClass() +
+ ". Target: " + target);
+ dropTargetEvent.detail = DND.DROP_NONE;
+ } else {
+ EditorUtil.executeOperation(operation);
+ }
+ target.getEditor().getConversationHolder().commit();
if (!target.equals(EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor())){
((TaxonNameEditor)EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor()).redraw();
((TaxonNameEditor)EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor()).getConversationHolder().commit();
}
target.getEditor().redraw();
- }
-
- private AbstractPostOperation createOperation(TaxonBase taxonBase) {
-
- if(taxonBase instanceof Synonym){
- Synonym synonym = (Synonym) taxonBase;
-
- if(target instanceof AbstractHomotypicalGroupContainer){
- HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
-
- return new ChangeHomotypicGroupOperation("Change Homotypical Group", getEditor().getUndoContext(),
- getEditor().getTaxon(), synonym, homotypicalGroup, target);
- }
- else if(target instanceof MisappliedGroup){
- return new ChangeSynonymToMisapplicationOperation("Change Synonym to Misapplication", getEditor().getUndoContext(),
- getEditor().getTaxon(), synonym, target);
- }
- else if(target instanceof TaxonNameEditor){
- if (target.equals(getEditor())){
+
+ }
+
+ private AbstractPostOperation createOperation(TaxonBase taxonBase) {
+
+ if(taxonBase instanceof Synonym){
+ Synonym synonym = (Synonym) taxonBase;
+
+ if(target instanceof AbstractHomotypicalGroupContainer){
+ HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
+
+ return new ChangeHomotypicGroupOperation("Change Homotypical Group", getEditor().getUndoContext(),
+ getEditor().getTaxon(), synonym, homotypicalGroup, target);
+ }
+ else if(target instanceof MisappliedGroup){
+ return new ChangeSynonymToMisapplicationOperation("Change Synonym to Misapplication", getEditor().getUndoContext(),
+ getEditor().getTaxon(), synonym, target);
+ }
+ else if(target instanceof TaxonNameEditor){
+ if (target.equals(getEditor())){
return new ChangeHomotypicGroupOperation("Change Homotypical Group", getEditor().getUndoContext(),
getEditor().getTaxon(), synonym, null, target);
} else{
}
}
-
-
- }else if(taxonBase instanceof Taxon){
- Taxon concept = (Taxon) taxonBase;
-
- if(target instanceof AbstractHomotypicalGroupContainer){
- HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
-
- return new ChangeConceptToSynonymOperation("Change to Synonym", getEditor().getUndoContext(),
- getEditor().getTaxon(), concept, homotypicalGroup, target);
- }
- else if(target instanceof MisappliedGroup ){
- return new ChangeConceptRelationshipTypeOperation("Change", getEditor().getUndoContext(),
- getEditor().getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
- }
- }
-
-
- return null;
- }
-
- /** {@inheritDoc} */
- @Override
- public void dropAccept(DropTargetEvent event) {
- // pass
- }
-
-
- private HomotypicalGroup getHomotypicalGroup() {
- if(target instanceof AbstractHomotypicalGroupContainer){
- return ((AbstractHomotypicalGroupContainer) target).getGroup();
- }
- return null;
- }
-
- private TaxonBase getDroppedTaxonBase(DropTargetEvent dropTargetEvent){
- if(dropTargetEvent.data instanceof ICdmBase[]){
+
+ }else if(taxonBase instanceof Taxon){
+ Taxon concept = (Taxon) taxonBase;
+
+ if(target instanceof AbstractHomotypicalGroupContainer){
+ HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
+
+ return new ChangeConceptToSynonymOperation("Change to Synonym", getEditor().getUndoContext(),
+ getEditor().getTaxon(), concept, homotypicalGroup, target);
+ }
+ else if(target instanceof MisappliedGroup ){
+ return new ChangeConceptRelationshipTypeOperation("Change", getEditor().getUndoContext(),
+ getEditor().getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
+ }
+ }
- ICdmBase[] cdmBaseObjects = (ICdmBase[]) dropTargetEvent.data;
+
+ return null;
+ }
- if(cdmBaseObjects[0] instanceof TaxonBase){
- return (TaxonBase) cdmBaseObjects[0];
- }
- }
- return null;
- }
+ /** {@inheritDoc} */
+ @Override
+ public void dropAccept(DropTargetEvent event) {
+ // pass
+ }
- /**
- * @return
- *
- */
- private TaxonNameEditor getEditor() {
- return target.getEditor();
- }
+
+ private HomotypicalGroup getHomotypicalGroup() {
+ if(target instanceof AbstractHomotypicalGroupContainer){
+ return ((AbstractHomotypicalGroupContainer) target).getGroup();
+ }
+ return null;
+ }
+
+ private TaxonBase getDroppedTaxonBase(DropTargetEvent dropTargetEvent){
+ if(dropTargetEvent.data instanceof ICdmBase[]){
+
+ ICdmBase[] cdmBaseObjects = (ICdmBase[]) dropTargetEvent.data;
+
+ if(cdmBaseObjects[0] instanceof TaxonBase){
+ return (TaxonBase) cdmBaseObjects[0];
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @return
+ *
+ */
+ private TaxonNameEditor getEditor() {
+ return (TaxonNameEditor) EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor();
+ }
}