-/**
- *
- */
-package eu.etaxonomy.taxeditor.editor.name.handler;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import org.apache.log4j.Logger;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.IHandler;
-import org.eclipse.core.commands.common.NotDefinedException;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
-import eu.etaxonomy.taxeditor.editor.Page;
-import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
-import eu.etaxonomy.taxeditor.editor.name.operation.ChangeAcceptedTaxonToSynonymOperation;
-import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
-import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
-
-/**
- * <p>ChangeAcceptedTaxonToSynonymHandler class.</p>
- *
- * @author n.hoffmann
- * @created Jan 4, 2010
- * @version 1.0
- */
-public class ChangeAcceptedTaxonToSynonymHandler extends AbstractHandler
- implements IHandler, IPostOperationEnabled {
- private static final Logger logger = Logger
- .getLogger(ChangeAcceptedTaxonToSynonymHandler.class);
- private ChangeAcceptedTaxonToSynonymOperation operation;
-
- private UUID newAcceptedTaxonNodeUuid;
- private TaxonNameEditor editor;
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- */
- /** {@inheritDoc} */
- public Object execute(ExecutionEvent event) throws ExecutionException {
-
- editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(
- Page.NAME);
- TaxonNode oldAcceptedTaxonNode = ((TaxonEditorInput) editor.getEditorInput()).getTaxonNode();
-
- // check if taxon has no children
- if(oldAcceptedTaxonNode.getCountChildren() > 0) {
- EditorUtil.warningDialog("Prerequisite not met", this,
- "The accepted taxon must not have any childen. You need to move all childen to " +
- "another taxon node in the TaxonNavigator before attempting to turn the accepted " +
- "taxon into a synonym.");
- return null;
- }
-
- // Choose new accepted taxon
- List<UUID> excludeTaxa = new ArrayList<UUID>();
- excludeTaxa.add(oldAcceptedTaxonNode.getUuid());
- TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event),
- editor.getConversationHolder(),
- "Choose the accepted taxon",
- excludeTaxa,
- null,
- oldAcceptedTaxonNode.getClassification());
-
- if (newAcceptedTaxonNode == null) {
- return null;
- }
-
- newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
-
- try {
- operation = new ChangeAcceptedTaxonToSynonymOperation(event.getCommand().getName(),
- editor.getUndoContext(), oldAcceptedTaxonNode, newAcceptedTaxonNode, this, editor);
- EditorUtil.executeOperation(operation);
-
- } catch (NotDefinedException e) {
- logger.warn("Command name not set");
- }
-
- return null;
-
- }
-
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
- */
- /** {@inheritDoc} */
- public boolean postOperation(CdmBase objectAffectedByOperation) {
- Display.getDefault().asyncExec(new Runnable(){
-
- public void run() {
- EditorUtil.close(editor.getMultiPageTaxonEditor());
-
- try {
- MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
- if(possibleOpenEditor != null){
- EditorUtil.close(possibleOpenEditor);
- }
- EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
- } catch (PartInitException e) {
- EditorUtil.error(this.getClass(), e);
- throw new RuntimeException(e);
- } catch (Exception e) {
- EditorUtil.warningDialog("Could not create Taxon", this, e.getMessage());
- }
- }
-
- });
-
-
- return true;
- }
-
- /**
- * <p>onComplete</p>
- *
- * @return a boolean.
- */
- public boolean onComplete() {
- // TODO Auto-generated method stub
- return false;
- }
-}