performed javacscript:fix and worked on documentation
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / AbstractCdmDataViewer.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;
12
13 import org.eclipse.jface.viewers.ISelectionProvider;
14 import org.eclipse.jface.viewers.StructuredSelection;
15 import org.eclipse.jface.viewers.Viewer;
16 import org.eclipse.swt.widgets.Composite;
17 import org.eclipse.swt.widgets.Control;
18 import org.eclipse.swt.widgets.Display;
19 import org.eclipse.ui.forms.IFormPart;
20 import org.eclipse.ui.forms.ManagedForm;
21 import org.eclipse.ui.forms.widgets.ScrolledForm;
22
23 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
24 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
25 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
26 import eu.etaxonomy.taxeditor.editor.view.detail.CdmSectionPart;
27 import eu.etaxonomy.taxeditor.forms.AbstractFormSection;
28 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
29 import eu.etaxonomy.taxeditor.forms.RootElement;
30 import eu.etaxonomy.taxeditor.model.AbstractCdmViewPart;
31
32 /**
33 * <p>Abstract AbstractCdmDataViewer class.</p>
34 *
35 * @author n.hoffmann
36 * @created Feb 9, 2010
37 * @version 1.0
38 */
39 public abstract class AbstractCdmDataViewer extends Viewer implements ISelectionProvider, IConversationEnabled{
40
41 protected ManagedForm managedForm;
42
43 protected CdmFormFactory formFactory;
44
45 protected ScrolledForm scrolledForm;
46
47 private Composite body;
48
49 protected RootElement rootElement;
50
51 private Object input;
52
53 private AbstractCdmViewPart viewPart;
54
55
56 /**
57 * <p>Constructor for AbstractCdmDataViewer.</p>
58 *
59 * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
60 * @param viewPart a {@link eu.etaxonomy.taxeditor.model.AbstractCdmViewPart} object.
61 */
62 public AbstractCdmDataViewer(Composite parent, AbstractCdmViewPart viewPart) {
63 this.viewPart = viewPart;
64
65 managedForm = new ManagedForm(parent){
66
67 /* (non-Javadoc)
68 * @see org.eclipse.ui.forms.ManagedForm#dirtyStateChanged()
69 */
70 @Override
71 public void dirtyStateChanged() {
72 markViewPartDirty();
73 }
74 };
75
76 createFormFactory();
77
78 scrolledForm = managedForm.getForm();
79
80 body = scrolledForm.getBody();
81
82 body.setLayout(CdmFormFactory.LAYOUT());
83
84 rootElement = new RootElement(formFactory, body);
85 }
86
87 /**
88 * <p>createFormFactory</p>
89 */
90 protected void createFormFactory() {
91 if(formFactory != null){
92 formFactory.dispose();
93 formFactory = null;
94 }
95 formFactory = new CdmFormFactory(Display.getCurrent(), this);
96 }
97
98 private void markViewPartDirty(){
99 viewPart.changed(input);
100 }
101
102
103 /* (non-Javadoc)
104 * @see org.eclipse.jface.viewers.Viewer#getControl()
105 */
106 /** {@inheritDoc} */
107 @Override
108 public Control getControl() {
109 for(Control child : body.getChildren()){
110 return child;
111 }
112
113 return body;
114 }
115
116 /* (non-Javadoc)
117 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
118 */
119 /** {@inheritDoc} */
120 @Override
121 public void setInput(Object input) {
122 this.input = input;
123 // reset selection
124 setSelection(new StructuredSelection(input));
125 refresh();
126 }
127
128 /* (non-Javadoc)
129 * @see org.eclipse.jface.viewers.Viewer#getInput()
130 */
131 /** {@inheritDoc} */
132 @Override
133 public Object getInput() {
134 return input;
135 }
136
137 /* (non-Javadoc)
138 * @see org.eclipse.jface.viewers.Viewer#refresh()
139 */
140 /** {@inheritDoc} */
141 @Override
142 public void refresh() {
143 showParts();
144
145 managedForm.setInput(input);
146
147 managedForm.refresh();
148
149 managedForm.reflow(true);
150 }
151
152
153 /**
154 * <p>layout</p>
155 */
156 public void layout(){
157 body.layout();
158 }
159
160 /**
161 * <p>showParts</p>
162 */
163 protected abstract void showParts();
164
165
166 /**
167 * <p>destroySections</p>
168 */
169 protected void destroySections() {
170 for (IFormPart formPart : managedForm.getParts()){
171 removePart((CdmSectionPart) formPart);
172 }
173
174 managedForm.setInput(null);
175
176 formFactory.destroyElement(rootElement);
177
178 createFormFactory();
179
180 rootElement = new RootElement(formFactory, body);
181
182 for(Control control : body.getChildren()){
183 control.dispose();
184 control = null;
185 }
186 }
187
188
189 /**
190 * <p>setFocus</p>
191 */
192 public void setFocus(){
193 // we have to set focus to a control of this viewer
194 // otherwise, after opening a dialog from the details, the focus will not be
195 // given back to the details view but to the editor
196 for(Control child : body.getChildren()){
197 child.setFocus();
198 break;
199 }
200 }
201
202 /**
203 * <p>reflow</p>
204 */
205 public void reflow(){
206 managedForm.reflow(true);
207 }
208
209 /**
210 * <p>removePart</p>
211 *
212 * @param sectionPart a {@link eu.etaxonomy.taxeditor.editor.view.detail.CdmSectionPart} object.
213 */
214 protected void removePart(CdmSectionPart sectionPart){
215 managedForm.removePart(sectionPart);
216 formFactory.removePropertyChangeListener(sectionPart);
217 }
218
219 /**
220 * <p>addPart</p>
221 *
222 * @param section a {@link eu.etaxonomy.taxeditor.forms.AbstractFormSection} object.
223 */
224 protected void addPart(AbstractFormSection section){
225 CdmSectionPart sectionPart = new CdmSectionPart(section);
226 managedForm.addPart(sectionPart);
227 formFactory.addPropertyChangeListener(sectionPart);
228 }
229
230 /**
231 * <p>getConversationHolder</p>
232 *
233 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
234 */
235 public ConversationHolder getConversationHolder() {
236 return viewPart.getConversationHolder();
237 }
238
239 /** {@inheritDoc} */
240 public void update(CdmDataChangeMap changeEvents) {}
241
242 }