Project

General

Profile

Download (5.54 KB) Statistics
| Branch: | Tag: | Revision:
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.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.ui.forms.IFormPart;
19
import org.eclipse.ui.forms.ManagedForm;
20
import org.eclipse.ui.forms.widgets.ScrolledForm;
21

    
22
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
23
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
24
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
25
import eu.etaxonomy.taxeditor.singlesource.org.eclipse.swt.widgets.DisplayProxy;
26
import eu.etaxonomy.taxeditor.singlesource.ui.forms.CdmFormFactoryFacade;
27
import eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection;
28
import eu.etaxonomy.taxeditor.ui.forms.RootElement;
29
import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
30

    
31
/**
32
 * <p>Abstract AbstractCdmDataViewer class.</p>
33
 *
34
 * @author n.hoffmann
35
 * @created Feb 9, 2010
36
 * @version 1.0
37
 */
38
public abstract class AbstractCdmDataViewer extends Viewer implements ISelectionProvider, IConversationEnabled{
39
	
40
	protected ManagedForm managedForm;
41

    
42
	protected CdmFormFactoryFacade formFactory;
43

    
44
	protected ScrolledForm scrolledForm;
45
	
46
	private Composite body;
47
	
48
	protected RootElement rootElement;
49

    
50
	private Object input;
51

    
52
	private AbstractCdmViewPart viewPart;
53

    
54
	
55
	/**
56
	 * <p>Constructor for AbstractCdmDataViewer.</p>
57
	 *
58
	 * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
59
	 * @param viewPart a {@link eu.etaxonomy.taxeditor.view.AbstractCdmViewPart} object.
60
	 */
61
	public AbstractCdmDataViewer(Composite parent, AbstractCdmViewPart viewPart) {
62
		this.viewPart = viewPart;
63
		
64
		managedForm = new ManagedForm(parent){
65
			
66
			/* (non-Javadoc)
67
			 * @see org.eclipse.ui.forms.ManagedForm#dirtyStateChanged()
68
			 */
69
			@Override
70
			public void dirtyStateChanged() {
71
				markViewPartDirty();
72
			}
73
		};
74
		
75
		createFormFactory();
76
		
77
		scrolledForm = managedForm.getForm();
78
		
79
		body = scrolledForm.getBody();
80
		
81
		body.setLayout(CdmFormFactoryFacade.LAYOUT());
82
		
83
		rootElement = new RootElement(formFactory, body);
84
	}
85
	
86
	/**
87
	 * <p>createFormFactory</p>
88
	 */
89
	protected void createFormFactory() {
90
		if(formFactory != null){
91
			formFactory.dispose();
92
			formFactory = null;
93
		}
94
		formFactory = CdmFormFactoryFacade.getInstance(DisplayProxy.getDefault(), this);
95
	}
96

    
97
	protected void markViewPartDirty(){
98
		viewPart.changed(input);
99
	}
100
	
101
	
102
	/**
103
	 * @return
104
	 */
105
	protected AbstractCdmViewPart getViewPart() {
106
		return viewPart;
107
	}
108

    
109
	/* (non-Javadoc)
110
	 * @see org.eclipse.jface.viewers.Viewer#getControl()
111
	 */
112
	/** {@inheritDoc} */
113
	@Override
114
	public Control getControl() {
115
		for(Control child : body.getChildren()){
116
			return child;
117
		}
118
		
119
		return body;
120
	}
121
	
122
	/* (non-Javadoc)
123
	 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
124
	 */
125
	/** {@inheritDoc} */
126
	@Override
127
	public void setInput(Object input) {
128
		this.input = input;	
129
		// reset selection
130
		setSelection(new StructuredSelection(input));
131
		refresh();
132
	}
133
	
134
	/* (non-Javadoc)
135
	 * @see org.eclipse.jface.viewers.Viewer#getInput()
136
	 */
137
	/** {@inheritDoc} */
138
	@Override
139
	public Object getInput() {
140
		return input;
141
	}
142
	
143
	/* (non-Javadoc)
144
	 * @see org.eclipse.jface.viewers.Viewer#refresh()
145
	 */
146
	/** {@inheritDoc} */
147
	@Override
148
	public void refresh() {
149
		showParts();
150
		
151
		managedForm.setInput(input);
152
		
153
		managedForm.refresh();
154
		
155
		managedForm.reflow(true);
156
	}
157

    
158
	
159
	/**
160
	 * <p>layout</p>
161
	 */
162
	public void layout(){
163
		body.layout();
164
	}
165
	
166
	/**
167
	 * <p>showParts</p>
168
	 */
169
	protected abstract void showParts();
170
	
171
	
172
	/**
173
	 * <p>destroySections</p>
174
	 */
175
	protected void destroySections() {	
176
		for (IFormPart formPart : managedForm.getParts()){
177
			removePart((CdmSectionPart) formPart);
178
		}	
179
		
180
		managedForm.setInput(null);
181
				
182
		formFactory.destroyElement(rootElement);
183
		
184
		createFormFactory();
185
		
186
		rootElement = new RootElement(formFactory, body);
187
		
188
		for(Control control : body.getChildren()){
189
			control.dispose();
190
			control = null;
191
		}
192
	}
193
	
194
	
195
	/**
196
	 * <p>setFocus</p>
197
	 */
198
	public void setFocus(){
199
		// we have to set focus to a control of this viewer
200
		// otherwise, after opening a dialog from the details, the focus will not be
201
		// given back to the details view but to the editor
202
		for(Control child : body.getChildren()){
203
			child.setFocus();
204
			break;
205
		}
206
	}
207
	
208
	/**
209
	 * <p>reflow</p>
210
	 */
211
	public void reflow(){
212
		managedForm.reflow(true);
213
	}
214
	
215
	/**
216
	 * <p>removePart</p>
217
	 *
218
	 * @param sectionPart a {@link eu.etaxonomy.taxeditor.view.detail.CdmSectionPart} object.
219
	 */
220
	protected void removePart(CdmSectionPart sectionPart){
221
		managedForm.removePart(sectionPart);
222
		formFactory.removePropertyChangeListener(sectionPart);
223
	}
224
	
225
	/**
226
	 * <p>addPart</p>
227
	 *
228
	 * @param section a {@link eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection} object.
229
	 */
230
	protected void addPart(AbstractFormSection section){
231
		CdmSectionPart sectionPart = new CdmSectionPart(section);
232
		managedForm.addPart(sectionPart);
233
		formFactory.addPropertyChangeListener(sectionPart);
234
	}
235
	
236
	/**
237
	 * <p>getConversationHolder</p>
238
	 *
239
	 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
240
	 */
241
	public ConversationHolder getConversationHolder() {
242
		return viewPart.getConversationHolder();
243
	}
244
	
245
	/** {@inheritDoc} */
246
	public void update(CdmDataChangeMap changeEvents) {}
247

    
248
}
(2-2/5)