Merge branch 'release/4.6.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / concept / handler / OpenRelatedConceptHandler.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.taxeditor.editor.view.concept.handler;
11
12 import org.eclipse.core.commands.AbstractHandler;
13 import org.eclipse.core.commands.ExecutionEvent;
14 import org.eclipse.core.commands.ExecutionException;
15 import org.eclipse.jface.viewers.ISelection;
16 import org.eclipse.jface.viewers.IStructuredSelection;
17 import org.eclipse.ui.IEditorPart;
18 import org.eclipse.ui.PartInitException;
19 import org.eclipse.ui.handlers.HandlerUtil;
20
21 import eu.etaxonomy.cdm.model.taxon.Taxon;
22 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
23 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
24 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
25 import eu.etaxonomy.taxeditor.editor.EditorUtil;
26 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
27 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
28 import eu.etaxonomy.taxeditor.model.AbstractUtility;
29 import eu.etaxonomy.taxeditor.model.LineSelection;
30 import eu.etaxonomy.taxeditor.model.MessagingUtils;
31
32 /**
33 * @author n.hoffmann
34 * @created Jan 25, 2011
35 * @version 1.0
36 */
37 public class OpenRelatedConceptHandler extends AbstractHandler {
38
39 @Override
40 public Object execute(ExecutionEvent event) throws ExecutionException {
41 ISelection selection = HandlerUtil.getCurrentSelection(event);
42 TaxonBase<?> relatedTaxon = null;
43
44 if(selection instanceof IStructuredSelection){
45 IStructuredSelection structuredSelection = (IStructuredSelection) selection;
46 Object selectedElement = structuredSelection.getFirstElement();
47
48 if(selectedElement instanceof TaxonRelationship){
49 IEditorPart activeEditor = AbstractUtility.getActiveEditor();
50 if(activeEditor instanceof MultiPageTaxonEditor){
51 relatedTaxon = getRelatedTaxon((TaxonRelationship) selectedElement, ((MultiPageTaxonEditor) activeEditor).getTaxon());
52 }
53 else if(activeEditor instanceof BulkEditor){
54 ISelection bulkSelection = ((BulkEditor)activeEditor).getSelectionProvider().getSelection();
55 if(bulkSelection instanceof LineSelection){
56 Object firstElement = ((LineSelection)bulkSelection).getFirstElement();
57 if(firstElement instanceof Taxon){
58 relatedTaxon = getRelatedTaxon((TaxonRelationship) selectedElement, (Taxon) firstElement);
59 }
60 }
61 }
62 }
63 }
64
65 if(relatedTaxon==null){
66 MessagingUtils.messageDialog(Messages.OpenRelatedConceptHandler_COULD_NOT_OPEN, getClass(),
67 String.format(Messages.OpenRelatedConceptHandler_COULD_NOT_OPEN_MESSAGE ,relatedTaxon), null);
68 }
69 else{
70 openConcept(relatedTaxon);
71 }
72
73 return null;
74 }
75
76 /**
77 * @param relatedTaxon
78 */
79 protected void openConcept(TaxonBase<?> relatedTaxon) {
80 try {
81 EditorUtil.openTaxonBase(relatedTaxon.getUuid());
82 } catch (PartInitException e) {
83 MessagingUtils.messageDialog(Messages.OpenRelatedConceptHandler_COULD_NOT_OPEN, getClass(),
84 String.format(Messages.OpenRelatedConceptHandler_COULD_NOT_OPEN_MESSAGE ,relatedTaxon), e);
85 }
86 }
87
88 private Taxon getRelatedTaxon(TaxonRelationship relationship, Taxon taxon){
89 if (relationship.getFromTaxon().equals(taxon)){
90 return relationship.getToTaxon();
91 }
92 else if(relationship.getToTaxon().equals(taxon)){
93 return relationship.getFromTaxon();
94 }
95 else{
96 return null;
97 }
98 }
99 }