Merge branch 'release/4.6.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / concept / ConceptViewPart.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;
11
12 import java.util.Map.Entry;
13
14 import org.eclipse.jface.action.GroupMarker;
15 import org.eclipse.jface.action.MenuManager;
16 import org.eclipse.jface.viewers.ISelection;
17 import org.eclipse.jface.viewers.IStructuredSelection;
18 import org.eclipse.jface.viewers.ListViewer;
19 import org.eclipse.jface.viewers.StructuredSelection;
20 import org.eclipse.jface.viewers.Viewer;
21 import org.eclipse.jface.viewers.ViewerSorter;
22 import org.eclipse.swt.widgets.Composite;
23 import org.eclipse.swt.widgets.Control;
24 import org.eclipse.swt.widgets.Menu;
25 import org.eclipse.ui.IEditorInput;
26 import org.eclipse.ui.IEditorPart;
27 import org.eclipse.ui.IWorkbenchActionConstants;
28 import org.eclipse.ui.IWorkbenchPart;
29
30 import eu.etaxonomy.cdm.model.taxon.Taxon;
31 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
32 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
33 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
34 import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
35 import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;
36 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
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"; //$NON-NLS-1$
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 }
91 else {
92 showEmptyPage();
93 }
94
95 }
96
97 @Override
98 protected String createPartTitle(Object selectedObject) {
99 if(selectedObject instanceof TaxonEditorInput){
100 return super.createPartTitle(((TaxonEditorInput) selectedObject).getTaxon());
101 }
102 return super.createPartTitle(selectedObject);
103 }
104
105 @Override
106 public boolean onComplete() {
107 return true;
108 }
109
110 @Override
111 public Viewer getViewer() {
112 return viewer;
113 }
114
115 @Override
116 public void createViewer(Composite parent) {
117 viewer = new ConceptRelationViewer(parent);
118
119 viewer.setContentProvider(new ConceptContentProvider());
120 viewer.setLabelProvider(new ConceptLabelProvider());
121
122
123 viewer.setSorter(new ViewerSorter());
124
125 getSite().setSelectionProvider(viewer);
126
127 createMenu();
128 }
129
130 private void createMenu(){
131 MenuManager menuManager = new MenuManager();
132 menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
133
134 getSite().registerContextMenu(menuManager, viewer);
135
136 Control control = viewer.getControl();
137 Menu menu = menuManager.createContextMenu(control);
138
139 control.setMenu(menu);
140 }
141
142 @Override
143 public void changed(Object object) {
144 getViewer().refresh();
145 super.changed(object);
146 }
147
148 private class ConceptRelationViewer extends ListViewer {
149
150 public ConceptRelationViewer(Composite parent) {
151 super(parent);
152 }
153
154 @Override
155 public ISelection getSelection() {
156 ISelection selection = super.getSelection();
157 if(selection instanceof IStructuredSelection && !selection.isEmpty()){
158 Object firstElement = ((IStructuredSelection) selection).getFirstElement();
159 TaxonRelationship taxonRelationship = ((Entry<TaxonRelationship, Taxon>)firstElement).getKey();
160 return new StructuredSelection(taxonRelationship);
161
162 }
163 return selection;
164 }
165
166 @Override
167 public void setSelection(ISelection selection) {
168 super.setSelection(selection);
169 }
170
171 }
172
173 @Override
174 protected String getViewName() {
175 return Messages.ConceptViewPart_VIEWER_NAME;
176 }
177
178 }