8fa2c650fcabf673b9cea369e06ea1202c11fe06
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / concept / ConceptViewPart.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.taxeditor.editor.view.concept;
12
13 import java.util.Map.Entry;
14
15 import org.eclipse.jface.action.GroupMarker;
16 import org.eclipse.jface.action.MenuManager;
17 import org.eclipse.jface.viewers.ISelection;
18 import org.eclipse.jface.viewers.IStructuredSelection;
19 import org.eclipse.jface.viewers.ListViewer;
20 import org.eclipse.jface.viewers.StructuredSelection;
21 import org.eclipse.jface.viewers.Viewer;
22 import org.eclipse.jface.viewers.ViewerSorter;
23 import org.eclipse.swt.widgets.Composite;
24 import org.eclipse.swt.widgets.Control;
25 import org.eclipse.swt.widgets.Menu;
26 import org.eclipse.ui.IEditorInput;
27 import org.eclipse.ui.IEditorPart;
28 import org.eclipse.ui.IWorkbenchActionConstants;
29 import org.eclipse.ui.IWorkbenchPart;
30
31 import eu.etaxonomy.cdm.model.taxon.Taxon;
32 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
33 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
34 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
35 import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;
36 import eu.etaxonomy.taxeditor.editor.view.media.MediaViewPart;
37 import eu.etaxonomy.taxeditor.model.AbstractUtility;
38 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
39 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
40 import eu.etaxonomy.taxeditor.model.LineSelection;
41 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
42 import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
43 import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
44
45 /**
46 * @author n.hoffmann
47 * @created Jan 24, 2011
48 * @version 1.0
49 */
50 public class ConceptViewPart extends AbstractCdmEditorViewPart
51 implements IPartContentHasDetails, IPartContentHasSupplementalData{
52
53 public static final String ID = "eu.etaxonomy.taxeditor.editor.view.concept";
54
55 private ConceptRelationViewer viewer;
56
57 @Override
58 protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection) {
59 if(part == this){
60 return;
61 }
62 if(AbstractUtility.getActiveEditor() == null){
63 showEmptyPage();
64 return;
65 }
66
67 if (part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart) {
68 // do not show empty page as these views are also used to edit the
69 // description selected in this view
70 return;
71 }
72 else if(part instanceof BulkEditor && selection instanceof LineSelection){
73 if(((LineSelection) selection).getFirstElement() instanceof Taxon){
74 showViewer(part, (LineSelection) selection);
75 }
76 else{
77 showEmptyPage();
78 }
79 return;
80 }
81 else if(part instanceof AbstractGraphKeyEditor){
82 showEmptyPage();
83 return;
84 }
85 else if(part instanceof MultiPageTaxonEditor){
86 if(! part.equals(this.part)){
87 IEditorInput input = ((IEditorPart) part).getEditorInput();
88 showViewer(part, new StructuredSelection(input));
89 }
90 else{
91 showViewer();
92 }
93 }
94 else {
95 showEmptyPage();
96 }
97
98 }
99
100 @Override
101 public boolean onComplete() {
102 return true;
103 }
104
105 @Override
106 public Viewer getViewer() {
107 return viewer;
108 }
109
110 @Override
111 public void createViewer(Composite parent) {
112 viewer = new ConceptRelationViewer(parent);
113
114 viewer.setContentProvider(new ConceptContentProvider());
115 viewer.setLabelProvider(new ConceptLabelProvider());
116
117
118 viewer.setSorter(new ViewerSorter());
119
120 getSite().setSelectionProvider(viewer);
121
122 createMenu();
123 }
124
125 private void createMenu(){
126 MenuManager menuManager = new MenuManager();
127 menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
128
129 getSite().registerContextMenu(menuManager, viewer);
130
131 Control control = viewer.getControl();
132 Menu menu = menuManager.createContextMenu(control);
133
134 control.setMenu(menu);
135 }
136
137 @Override
138 public void changed(Object object) {
139 getViewer().refresh();
140 super.changed(object);
141 }
142
143 private class ConceptRelationViewer extends ListViewer {
144
145 public ConceptRelationViewer(Composite parent) {
146 super(parent);
147 }
148
149 @Override
150 public ISelection getSelection() {
151 ISelection selection = super.getSelection();
152 if(selection instanceof IStructuredSelection && !selection.isEmpty()){
153 Object firstElement = ((IStructuredSelection) selection).getFirstElement();
154 TaxonRelationship taxonRelationship = ((Entry<TaxonRelationship, Taxon>)firstElement).getKey();
155 return new StructuredSelection(taxonRelationship);
156
157 }
158 return selection;
159 }
160
161 @Override
162 public void setSelection(ISelection selection) {
163 super.setSelection(selection);
164 }
165
166 }
167
168 }