3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.view
;
13 import java
.util
.Arrays
;
14 import java
.util
.List
;
17 import org
.eclipse
.jface
.viewers
.ISelection
;
18 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
19 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
20 import org
.eclipse
.jface
.viewers
.Viewer
;
21 import org
.eclipse
.swt
.SWT
;
22 import org
.eclipse
.swt
.custom
.SashForm
;
23 import org
.eclipse
.swt
.widgets
.Composite
;
24 import org
.eclipse
.swt
.widgets
.Label
;
25 import org
.eclipse
.ui
.ISelectionListener
;
26 import org
.eclipse
.ui
.ISelectionService
;
27 import org
.eclipse
.ui
.IWorkbenchPart
;
28 import org
.eclipse
.ui
.part
.PageBook
;
29 import org
.eclipse
.ui
.part
.ViewPart
;
31 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
32 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
33 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
34 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
35 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
36 import eu
.etaxonomy
.taxeditor
.model
.IDirtyMarkable
;
37 import eu
.etaxonomy
.taxeditor
.operation
.IPostOperationEnabled
;
38 import eu
.etaxonomy
.taxeditor
.session
.ICdmEntitySession
;
39 import eu
.etaxonomy
.taxeditor
.session
.ICdmEntitySessionEnabled
;
42 * <p>Abstract AbstractCdmViewPart class.</p>
45 * @created Jun 15, 2010
48 public abstract class AbstractCdmViewPart
extends ViewPart
implements ISelectionListener
, IPostOperationEnabled
, IConversationEnabled
, ICdmEntitySessionEnabled
, IDirtyMarkable
{
50 protected ISelectionService selectionService
;
52 public static IStructuredSelection EMPTY_SELECTION
= new StructuredSelection();
54 protected IWorkbenchPart part
;
56 private PageBook pageBook
;
58 private Label emptySelectionLabel
;
60 private Composite viewerComposite
;
64 public void createPartControl(Composite parent
) {
65 selectionService
= getSite().getWorkbenchWindow().getSelectionService();
66 selectionService
.addSelectionListener(this);
68 pageBook
= new PageBook(parent
, SWT
.NULL
);
69 //create viewerComposite
70 viewerComposite
= new SashForm(pageBook
, SWT
.HORIZONTAL
);
71 createViewer(viewerComposite
);
73 // Page 2: Nothing selected
74 emptySelectionLabel
= new Label(pageBook
, SWT
.TOP
+ SWT
.LEFT
+ SWT
.WRAP
);
76 setInitialSelection();
82 private void setInitialSelection() {
83 selectionChanged(AbstractUtility
.getActivePart(), getInitialSelection());
87 * <p>getInitialSelection</p>
89 * @return a {@link org.eclipse.jface.viewers.ISelection} object.
91 protected ISelection
getInitialSelection() {
92 return selectionService
.getSelection();
96 * <p>showEmptyPage</p>
98 public void showEmptyPage(){
99 setPartName(createPartTitle(null));
100 pageBook
.showPage(emptySelectionLabel
);
106 * @param part a {@link org.eclipse.ui.IWorkbenchPart} object.
107 * @param selection a {@link org.eclipse.jface.viewers.ISelection} object.
109 public void showViewer(IWorkbenchPart part
, IStructuredSelection selection
){
112 Object element
= selection
.getFirstElement();
113 //avoid widget is disposed exceptions
114 if (getViewer().getControl()==null || getViewer().getControl().isDisposed()){
118 setPartName(createPartTitle(element
));
119 getViewer().setInput(element
);
126 * @return a {@link org.eclipse.jface.viewers.Viewer} object.
128 public abstract Viewer
getViewer();
133 public void showViewer(){
134 pageBook
.showPage(viewerComposite
);
137 public void setEnabled(boolean enabled
){
138 pageBook
.setEnabled(enabled
);
143 public void setFocus() {
144 if(getConversationHolder() != null){
145 getConversationHolder().bind();
147 if(getCdmEntitySession() != null){
148 getCdmEntitySession().bind();
150 getViewer().getControl().setFocus();
154 * <p>createViewer</p>
156 * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
158 public abstract void createViewer(Composite parent
);
162 public boolean postOperation(CdmBase objectAffectedByOperation
) {
163 changed(objectAffectedByOperation
);
169 public abstract void changed(Object object
);
172 * <p>getConversationHolder</p>
174 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
177 public ConversationHolder
getConversationHolder() {
178 if(part
!= null && part
instanceof IConversationEnabled
) {
179 return ((IConversationEnabled
) part
).getConversationHolder();
186 public ICdmEntitySession
getCdmEntitySession() {
187 if(part
!= null && part
instanceof ICdmEntitySessionEnabled
) {
188 return ((ICdmEntitySessionEnabled
) part
).getCdmEntitySession();
194 public List
<?
extends CdmBase
> getRootEntities() {
195 return Arrays
.asList((CdmBase
)getViewer().getInput());
200 public void update(CdmDataChangeMap changeEvents
) {
206 public void dispose() {
207 selectionService
.removeSelectionListener(this);
212 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
215 public void forceDirty() {
221 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
224 public Map
<Object
, List
<String
>> getPropertyPathsMap() {
225 // TODO Auto-generated method stub
229 protected String
createPartTitle(Object selectedObject
){
230 if(selectedObject
!=null){
231 return getViewName()+": "+selectedObject
; //$NON-NLS-1$
233 return getViewName();
236 protected abstract String
getViewName();