Project

General

Profile

Download (4.59 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(12-12/15)