Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / detail / DetailsViewPart.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.view.detail;
11
12 import org.eclipse.core.runtime.IProgressMonitor;
13 import org.eclipse.jface.viewers.ISelection;
14 import org.eclipse.jface.viewers.IStructuredSelection;
15 import org.eclipse.jface.viewers.TreeNode;
16 import org.eclipse.jface.viewers.Viewer;
17 import org.eclipse.swt.widgets.Composite;
18 import org.eclipse.ui.IEditorPart;
19 import org.eclipse.ui.IMemento;
20 import org.eclipse.ui.IWorkbenchPart;
21
22 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
23 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
24 import eu.etaxonomy.cdm.model.common.CdmBase;
25 import eu.etaxonomy.cdm.model.description.Feature;
26 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
27 import eu.etaxonomy.taxeditor.Messages;
28 import eu.etaxonomy.taxeditor.model.AbstractUtility;
29 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
30 import eu.etaxonomy.taxeditor.model.IContextListener;
31 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
32 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
33 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
34
35 /**
36 * <p>DetailsViewPart class.</p>
37 *
38 * @author n.hoffmann
39 * @created Jun 10, 2010
40 * @version 1.0
41 */
42 public class DetailsViewPart extends AbstractCdmEditorViewPart implements IPartContentHasSupplementalData, IContextListener{
43
44 /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.forms.det"{trunked}</code> */
45 public static String ID = "eu.etaxonomy.taxeditor.view.detail"; //$NON-NLS-1$
46
47 private DetailsViewer viewer;
48
49 /** {@inheritDoc} */
50 @Override
51 public void createViewer(Composite parent) {
52
53 viewer = new DetailsViewer(parent, this);
54 getSite().setSelectionProvider(viewer);
55 }
56
57 @Override
58 protected void selectionChanged_internal(IWorkbenchPart part, ISelection selection){
59 if(AbstractUtility.getActiveEditor() == null && !(AbstractUtility.getActivePart() instanceof IConversationEnabled)){
60 showEmptyPage();
61 return;
62 }
63
64 if(AbstractUtility.getActiveEditor() == null &&
65 selection instanceof IStructuredSelection && ((IStructuredSelection) selection).getFirstElement() !=null){
66 //special case where the details view still open with details about the closed object #5495
67 showEmptyPage();
68 return;
69 }
70 if(part == this){
71 return;
72 }
73
74 if(!(selection instanceof IStructuredSelection)){
75 return;
76 }
77
78 IStructuredSelection structuredSelection = (IStructuredSelection) selection;
79
80 if((part instanceof IEditorPart) || (part instanceof IPartContentHasDetails)) {
81 if(structuredSelection.size() != 1){
82 showEmptyPage();
83 return;
84 }
85
86 // do not show details for feature nodes TODO really?
87 if(structuredSelection.getFirstElement() instanceof FeatureNodeContainer){
88 // do show the map for distributions
89 Feature feature = ((FeatureNodeContainer) ((IStructuredSelection) selection).getFirstElement()).getFeature();
90 if(!feature.equals(Feature.DISTRIBUTION())){
91 showEmptyPage();
92 return;
93 }
94 }
95 showViewer(part, structuredSelection);
96 }else{
97 showEmptyPage();
98 }
99 }
100
101 @Override
102 protected String getViewName(){
103 return Messages.DetailsViewPart_VIEWER_NAME;
104 }
105
106 @Override
107 protected String createPartTitle(Object selectedObject){
108 if(selectedObject!=null){
109 if(selectedObject instanceof TreeNode){
110 selectedObject = ((TreeNode) selectedObject).getValue();
111 }
112 if(selectedObject instanceof SpecimenOrObservationBase){
113 return getViewName()+": "+HibernateProxyHelper.deproxy(selectedObject, SpecimenOrObservationBase.class).getRecordBasis(); //$NON-NLS-1$
114 }
115 if(selectedObject instanceof CdmBase){
116 return getViewName()+": "+HibernateProxyHelper.deproxy(selectedObject, CdmBase.class).getClass().getSimpleName(); //$NON-NLS-1$
117 }
118 return getViewName()+": "+selectedObject.getClass().getSimpleName(); //$NON-NLS-1$
119 }
120 return getViewName();
121 }
122
123 @Override
124 public void showEmptyPage() {
125 viewer.setSelection(null);
126 super.showEmptyPage();
127 }
128
129 /** {@inheritDoc} */
130 @Override
131 public boolean postOperation(CdmBase objectAffectedByOperation) {
132
133 viewer.setInput(objectAffectedByOperation);
134
135 return super.postOperation(objectAffectedByOperation);
136 }
137
138
139 /** {@inheritDoc} */
140 @Override
141 public Viewer getViewer() {
142 return viewer;
143 }
144
145
146 /** {@inheritDoc} */
147 @Override
148 public void dispose() {
149 selectionService.removePostSelectionListener(this);
150 super.dispose();
151
152 }
153
154 @Override
155 public boolean onComplete() {
156 return true;
157 }
158
159 /**
160 * {@inheritDoc}
161 */
162 @Override
163 public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
164 }
165
166 /**
167 * {@inheritDoc}
168 */
169 @Override
170 public void contextStop(IMemento memento, IProgressMonitor monitor) {
171 showEmptyPage();
172 }
173
174 /**
175 * {@inheritDoc}
176 */
177 @Override
178 public void contextStart(IMemento memento, IProgressMonitor monitor) {
179 }
180
181 /**
182 * {@inheritDoc}
183 */
184 @Override
185 public void contextRefresh(IProgressMonitor monitor) {
186 }
187
188 /**
189 * {@inheritDoc}
190 */
191 @Override
192 public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
193 }
194
195
196
197 }