a42c6dfb066a615ef639bff23fb4bb3c24b4de75
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / handler / RemotingChangeAcceptedTaxonToSynonymHandler.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.navigation.navigator.handler;
5
6 import java.util.ArrayList;
7 import java.util.List;
8 import java.util.UUID;
9
10 import org.apache.log4j.Logger;
11 import org.eclipse.core.commands.ExecutionEvent;
12 import org.eclipse.core.commands.operations.AbstractOperation;
13 import org.eclipse.core.runtime.IStatus;
14 import org.eclipse.core.runtime.Status;
15 import org.eclipse.jface.viewers.TreeSelection;
16 import org.eclipse.ui.handlers.HandlerUtil;
17
18 import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock;
19 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
20 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
21 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels;
22 import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingChangeAcceptedTaxonToSynonymOperation;
23 import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler;
24 import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
25
26 /**
27 * <p>ChangeAcceptedTaxonToSynonymHandler class.</p>
28 *
29 * @author n.hoffmann
30 * @created Jan 4, 2010
31 * @version 1.0
32 */
33 public class RemotingChangeAcceptedTaxonToSynonymHandler extends RemotingCdmHandler {
34
35 private static final Logger logger = Logger
36 .getLogger(RemotingChangeAcceptedTaxonToSynonymHandler.class);
37
38
39 private ITaxonTreeNode oldTaxonNode;
40
41 /**
42 * @param label
43 */
44 public RemotingChangeAcceptedTaxonToSynonymHandler() {
45 super(TaxonNavigatorLabels.CHANGE_ACCEPTED_TAXON_TO_SYNONYM_LABEL);
46 }
47 /* (non-Javadoc)
48 * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent)
49 */
50 @Override
51 public IStatus allowOperations(ExecutionEvent event) {
52 TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
53 // check that only a single taxon tree node has been selected
54 if(selection.size() > 1) {
55 return new Status(IStatus.ERROR,
56 "unknown",
57 TaxonNavigatorLabels.SINGLE_TAXON_SELECTION_MESSAGE);
58 }
59
60 // check for no taxon tree node selected
61 if(selection.size() == 0) {
62 return new Status(IStatus.ERROR,
63 "unknown",
64 TaxonNavigatorLabels.NO_TAXON_SELECTION_MESSAGE);
65 }
66
67 // check that selected object is a taxon node
68 Object obj = selection.iterator().next();
69 if(obj instanceof ITaxonTreeNode) {
70 oldTaxonNode = (ITaxonTreeNode)obj;
71 } else {
72 return new Status(IStatus.ERROR,
73 "unknown",
74 TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE);
75 }
76 // check that the source taxon node does not have children
77 if(((TaxonNode)oldTaxonNode).getCountChildren() > 0) {
78 return new Status(IStatus.ERROR,
79 "unknown",
80 TaxonNavigatorLabels.SOURCE_TAXON_HAS_CHILDREN_MESSAGE);
81
82 }
83
84 // check if corresponding name editor is closed
85 boolean editorClosed = NavigatorHandlerUtils.closeObsoleteEditor(event, (TaxonNode) oldTaxonNode);
86 if(editorClosed != true) {
87 return new Status(IStatus.ERROR,
88 "unknown",
89 TaxonNavigatorLabels.RELATED_EDITOR_NOT_CLOSED_MESSAGE);
90 }
91
92 return Status.OK_STATUS;
93 }
94 /* (non-Javadoc)
95 * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#doOperations(org.eclipse.core.commands.ExecutionEvent)
96 */
97 @Override
98 public AbstractOperation prepareOperation(ExecutionEvent event) {
99 List<UUID> excludeTaxa = new ArrayList<UUID>();
100 excludeTaxa.add(oldTaxonNode.getUuid());
101 TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event),
102 new ConversationHolderMock(),
103 "Choose the accepted taxon",
104 excludeTaxa,
105 null,
106 ((TaxonNode)oldTaxonNode).getClassification());
107
108 if (newAcceptedTaxonNode == null) {
109 return null;
110 }
111
112 RemotingChangeAcceptedTaxonToSynonymOperation rcattso =
113 new RemotingChangeAcceptedTaxonToSynonymOperation(event.getTrigger(),
114 false,
115 oldTaxonNode.getUuid(),
116 newAcceptedTaxonNode.getUuid());
117
118 return rcattso;
119 }
120
121 /* (non-Javadoc)
122 * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete(org.eclipse.core.commands.ExecutionEvent)
123 */
124 @Override
125 public void onComplete() {
126 // TODO Auto-generated method stub
127
128 }
129
130
131
132
133 }