dc0815a357853e05eb457d2a959d25cfa6a87804
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / AbstractCdmViewPart.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.view;
12
13 import org.eclipse.jface.viewers.ISelection;
14 import org.eclipse.jface.viewers.IStructuredSelection;
15 import org.eclipse.jface.viewers.Viewer;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.custom.SashForm;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Label;
20 import org.eclipse.ui.ISelectionListener;
21 import org.eclipse.ui.ISelectionService;
22 import org.eclipse.ui.IWorkbenchPart;
23 import org.eclipse.ui.part.PageBook;
24 import org.eclipse.ui.part.ViewPart;
25
26 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
27 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
28 import eu.etaxonomy.cdm.model.common.CdmBase;
29 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
30 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
31 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
32 import eu.etaxonomy.taxeditor.store.StoreUtil;
33
34 /**
35 * <p>Abstract AbstractCdmViewPart class.</p>
36 *
37 * @author n.hoffmann
38 * @created Jun 15, 2010
39 * @version 1.0
40 */
41 public abstract class AbstractCdmViewPart extends ViewPart implements ISelectionListener, IPostOperationEnabled, IConversationEnabled, IDirtyMarkableSelectionProvider{
42
43 protected ISelectionService selectionService;
44
45 protected IWorkbenchPart part;
46
47 private PageBook pageBook;
48
49 private Label emptySelectionLabel;
50
51 private Composite viewerComposite;
52
53 /** {@inheritDoc} */
54 @Override
55 public void createPartControl(Composite parent) {
56 selectionService = getSite().getWorkbenchWindow().getSelectionService();
57 selectionService.addSelectionListener(this);
58
59 pageBook = new PageBook(parent, SWT.NULL);
60 createViewerComposite(pageBook);
61 createViewer(viewerComposite);
62
63 // Page 2: Nothing selected
64 emptySelectionLabel = new Label(pageBook, SWT.TOP + SWT.LEFT + SWT.WRAP);
65
66 setInitialSelection();
67 }
68
69 /**
70 *
71 */
72 private void setInitialSelection() {
73 selectionChanged(StoreUtil.getActivePart(), getInitialSelection());
74 }
75
76 /**
77 * <p>getInitialSelection</p>
78 *
79 * @return a {@link org.eclipse.jface.viewers.ISelection} object.
80 */
81 protected ISelection getInitialSelection() {
82 return selectionService.getSelection();
83 }
84
85 private void createViewerComposite(Composite parent) {
86 viewerComposite = new SashForm(parent, SWT.HORIZONTAL);
87 }
88
89 /**
90 * <p>showEmptyPage</p>
91 */
92 public void showEmptyPage(){
93 pageBook.showPage(emptySelectionLabel);
94 }
95
96 /**
97 * <p>showViewer</p>
98 *
99 * @param part a {@link org.eclipse.ui.IWorkbenchPart} object.
100 * @param selection a {@link org.eclipse.jface.viewers.ISelection} object.
101 */
102 public void showViewer(IWorkbenchPart part, IStructuredSelection selection){
103 this.part = part;
104
105 Object element = selection.getFirstElement();
106
107 getViewer().setInput(element);
108
109 showViewer();
110 }
111
112 /**
113 * <p>getViewer</p>
114 *
115 * @return a {@link org.eclipse.jface.viewers.Viewer} object.
116 */
117 public abstract Viewer getViewer();
118
119 /**
120 * <p>showViewer</p>
121 */
122 public void showViewer(){
123 pageBook.showPage(viewerComposite);
124 }
125
126
127 /** {@inheritDoc} */
128 @Override
129 public void setFocus() {
130 if(getConversationHolder() != null){
131 getConversationHolder().bind();
132 }
133 getViewer().getControl().setFocus();
134 }
135
136 /**
137 * <p>createViewer</p>
138 *
139 * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
140 */
141 public abstract void createViewer(Composite parent);
142
143 /** {@inheritDoc} */
144 public boolean postOperation(CdmBase objectAffectedByOperation) {
145 changed(objectAffectedByOperation);
146 return true;
147 }
148
149 /** {@inheritDoc} */
150 public abstract void changed(Object object);
151
152 /**
153 * <p>getConversationHolder</p>
154 *
155 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
156 */
157 public ConversationHolder getConversationHolder() {
158 if(part != null)
159 return ((IConversationEnabled) part).getConversationHolder();
160
161 return null;
162 }
163
164 /** {@inheritDoc} */
165 public void update(CdmDataChangeMap changeEvents) {
166
167 }
168
169 /** {@inheritDoc} */
170 @Override
171 public void dispose() {
172 selectionService.removeSelectionListener(this);
173 super.dispose();
174 }
175 }