Project

General

Profile

Download (5.73 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.ui.forms;
12

    
13
import org.apache.commons.lang.StringUtils;
14
import org.eclipse.jface.util.IPropertyChangeListener;
15
import org.eclipse.jface.util.PropertyChangeEvent;
16
import org.eclipse.jface.wizard.WizardPage;
17
import org.eclipse.swt.graphics.Color;
18
import org.eclipse.swt.widgets.Composite;
19
import org.eclipse.ui.forms.widgets.ScrolledForm;
20

    
21
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
22
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
23
import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;
24
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
25
import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
26

    
27
/**
28
 * <p>
29
 * Abstract AbstractCdmEntityWizardPage class.
30
 * </p>
31
 * 
32
 * @author n.hoffmann
33
 * @created Jun 1, 2010
34
 * @version 1.0
35
 */
36
public abstract class AbstractCdmEntityWizardPage<T> extends WizardPage
37
		implements IConversationEnabled, IPropertyChangeListener {
38

    
39
	protected CdmFormFactory formFactory;
40
	protected T entity;
41

    
42
	AbstractCdmDetailElement<T> detailElement;
43
	private final ConversationHolder conversation;
44

    
45
	/**
46
	 * <p>
47
	 * Constructor for AbstractCdmEntityWizardPage.
48
	 * </p>
49
	 * 
50
	 * @param formFactory
51
	 *            a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
52
	 *            object.
53
	 * @param conversation
54
	 *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
55
	 *            object.
56
	 * @param entity
57
	 *            a T object.
58
	 * @param <T>
59
	 *            a T object.
60
	 */
61
	protected AbstractCdmEntityWizardPage(CdmFormFactory formFactory,
62
			ConversationHolder conversation, T entity) {
63
		super("page");
64
		this.formFactory = formFactory;
65
		this.entity = entity;
66
		this.conversation = conversation;
67
		setDescription(getEntityTitle());
68

    
69
		formFactory.addPropertyChangeListener(this);
70
		setPageComplete(false);
71
	}
72

    
73
	/**
74
	 * @return
75
	 */
76
	private String getEntityTitle() {
77
		if (entity instanceof IIdentifiableEntity) {
78
			((IIdentifiableEntity) entity).getTitleCache();
79
		}
80
		return "";
81
	}
82

    
83
	/*
84
	 * (non-Javadoc)
85
	 * 
86
	 * @see
87
	 * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
88
	 * .Composite)
89
	 */
90
	/** {@inheritDoc} */
91
	@Override
92
	public void createControl(Composite parent) {
93
		ScrolledForm scrolledForm = formFactory.createScrolledForm(parent);
94
		scrolledForm.getBody().setLayout(CdmFormFactory.LAYOUT());
95

    
96
		Composite control = formFactory.createComposite(scrolledForm.getBody());
97
		control.setLayoutData(CdmFormFactory.FILL());
98

    
99
		control.setLayout(CdmFormFactory.LAYOUT(2, false));
100
		WizardPageRootElement rootElement = new WizardPageRootElement(
101
				formFactory, control, getConversationHolder());
102

    
103
		Color bgColor = getShell().getBackground();
104

    
105
		detailElement = createElement(rootElement);
106

    
107
		rootElement.setBackground(bgColor);
108
		control.setBackground(bgColor);
109
		scrolledForm.setBackground(bgColor);
110

    
111
		setControl(scrolledForm);
112
	}
113

    
114
	/**
115
	 * <p>
116
	 * Getter for the field <code>entity</code>.
117
	 * </p>
118
	 * 
119
	 * @return a T object.
120
	 */
121
	public T getEntity() {
122
		return entity;
123
	}
124

    
125
	/**
126
	 * Creates the detail element for this wizard page
127
	 * 
128
	 * @param rootElement
129
	 *            a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
130
	 *            object.
131
	 * @return a
132
	 *         {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement}
133
	 *         object.
134
	 */
135
	public abstract AbstractCdmDetailElement<T> createElement(
136
			ICdmFormElement rootElement);
137

    
138
	protected class WizardPageRootElement extends RootElement implements
139
			IConversationEnabled {
140

    
141
		private final ConversationHolder conversation;
142

    
143
		public WizardPageRootElement(CdmFormFactory formFactory,
144
				Composite layoutComposite, ConversationHolder conversation) {
145
			super(formFactory, layoutComposite);
146
			this.conversation = conversation;
147
		}
148

    
149
		@Override
150
		public void refresh() {
151
			super.refresh();
152
			this.removeElements();
153
			detailElement = createElement(this);
154
			((Composite) getControl()).layout();
155
		}
156

    
157
		@Override
158
		public ConversationHolder getConversationHolder() {
159
			return conversation;
160
		}
161

    
162
		@Override
163
		public void update(CdmDataChangeMap changeEvents) {
164
		}
165
	}
166

    
167
	@Override
168
	public void propertyChange(PropertyChangeEvent event) {
169
		if (event.getSource() == getDetailElement()) {
170
			checkComplete();
171
		}
172
	}
173

    
174
	/**
175
	 * Should check whether the wizard is complete in a sense that it contains
176
	 * sane data. Should setPageComplete to true if that is the case.
177
	 */
178
	protected void checkComplete() {
179
		setPageComplete(titleCacheIsNotEmpty());
180
	}
181

    
182
	private boolean titleCacheIsNotEmpty() {
183
		if (getEntity() instanceof IIdentifiableEntity) {
184
			IIdentifiableEntity entity = (IIdentifiableEntity) getEntity();
185
			return !StringUtils.isEmpty(entity.getTitleCache());
186
		}
187
		return true;
188
	}
189

    
190
	/**
191
	 * <p>
192
	 * getConversationHolder
193
	 * </p>
194
	 * 
195
	 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
196
	 *         object.
197
	 */
198
	@Override
199
	public ConversationHolder getConversationHolder() {
200
		return conversation;
201
	}
202

    
203
	/** {@inheritDoc} */
204
	@Override
205
	public void dispose() {
206
		if (detailElement != null) {
207
			detailElement.removeElements();
208
		}
209
		formFactory.removePropertyChangeListener(this);
210
		super.dispose();
211
	}
212

    
213
	/**
214
	 * <p>
215
	 * Getter for the field <code>detailElement</code>.
216
	 * </p>
217
	 * 
218
	 * @return a
219
	 *         {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement}
220
	 *         object.
221
	 */
222
	public AbstractCdmDetailElement<T> getDetailElement() {
223
		return detailElement;
224
	}
225

    
226
	/** {@inheritDoc} */
227
	@Override
228
	public void update(CdmDataChangeMap changeEvents) {
229
	}
230
}
(1-1/35)