Project

General

Profile

Download (6.18 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

    
10
package eu.etaxonomy.taxeditor.ui.element;
11

    
12
import org.apache.commons.lang.StringUtils;
13
import org.eclipse.jface.util.IPropertyChangeListener;
14
import org.eclipse.jface.util.PropertyChangeEvent;
15
import org.eclipse.jface.wizard.WizardPage;
16
import org.eclipse.swt.graphics.Color;
17
import org.eclipse.swt.widgets.Composite;
18
import org.eclipse.ui.forms.widgets.ScrolledForm;
19
import org.eclipse.ui.forms.widgets.TableWrapLayout;
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
 */
35
public abstract class AbstractCdmEntityWizardPage<T> extends WizardPage
36
		implements IConversationEnabled, IPropertyChangeListener {
37

    
38
	protected CdmFormFactory formFactory;
39
	protected T entity;
40

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

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

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

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

    
82
	/** {@inheritDoc} */
83
	@Override
84
	public void createControl(Composite parent) {
85
		ScrolledForm scrolledForm = formFactory.createScrolledForm(parent);
86
		scrolledForm.getBody().setLayout(LayoutConstants.LAYOUT());
87

    
88
		Composite control = formFactory.createComposite(scrolledForm.getBody());
89
		control.setLayoutData(LayoutConstants.FILL());
90

    
91
		TableWrapLayout layout = LayoutConstants.LAYOUT(2, false);
92
		layout.horizontalSpacing = 5;
93
        control.setLayout(layout);
94
		WizardPageRootElement rootElement = new WizardPageRootElement(
95
				formFactory, control, getConversationHolder());
96

    
97
		Color bgColor = getShell().getBackground();
98

    
99
		detailElement = createElement(rootElement);
100

    
101
		rootElement.setBackground(bgColor);
102
		control.setBackground(bgColor);
103
		scrolledForm.setBackground(bgColor);
104

    
105
		setControl(scrolledForm);
106
	}
107

    
108
	/**
109
	 * <p>
110
	 * Getter for the field <code>entity</code>.
111
	 * </p>
112
	 *
113
	 * @return a T object.
114
	 */
115
	public T getEntity() {
116
		return entity;
117
	}
118

    
119
	/**
120
	 * Creates the detail element for this wizard page
121
	 *
122
	 * @param rootElement
123
	 *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
124
	 *            object.
125
	 * @return a
126
	 *         {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement}
127
	 *         object.
128
	 */
129
	public abstract AbstractCdmDetailElement<T> createElement(
130
			ICdmFormElement rootElement);
131

    
132
	protected class WizardPageRootElement extends RootElement implements
133
			IConversationEnabled {
134

    
135
		private final ConversationHolder conversation;
136

    
137
		public WizardPageRootElement(CdmFormFactory formFactory,
138
				Composite layoutComposite, ConversationHolder conversation) {
139
			super(formFactory, layoutComposite);
140
			this.conversation = conversation;
141
		}
142

    
143
		@Override
144
		public void refresh() {
145
			super.refresh();
146
			this.removeElements();
147
			detailElement = createElement(this);
148
			((Composite) getControl()).layout();
149
		}
150

    
151
		@Override
152
		public ConversationHolder getConversationHolder() {
153
			return conversation;
154
		}
155

    
156
		@Override
157
		public void update(CdmDataChangeMap changeEvents) {
158
		}
159
	}
160

    
161
	@Override
162
	public void propertyChange(PropertyChangeEvent event) {
163
		if (event.getSource() == getDetailElement()) {
164
			checkComplete();
165
		}
166
		else if(event.getSource() instanceof AbstractCdmDetailElement){
167
		    //check if parent element is set as detail element
168
		    ICdmFormElement formElement = (ICdmFormElement) event.getSource();
169
            while(formElement.getParentElement()!=null){
170
                if(formElement.getParentElement() == getDetailElement()){
171
                    checkComplete();
172
                    return;
173
                }
174
                formElement = formElement.getParentElement();
175
            }
176
		}
177
	}
178

    
179
	/**
180
	 * Should check whether the wizard is complete in a sense that it contains
181
	 * sane data. Should setPageComplete to true if that is the case.
182
	 */
183
	protected void checkComplete() {
184
		setPageComplete(titleCacheIsNotEmpty());
185
	}
186

    
187
	protected boolean titleCacheIsNotEmpty() {
188
		if (getEntity() instanceof IIdentifiableEntity) {
189
			IIdentifiableEntity entity = (IIdentifiableEntity) getEntity();
190
			return !StringUtils.isEmpty(entity.getTitleCache());
191
		}
192
		return true;
193
	}
194

    
195
	/**
196
	 * <p>
197
	 * getConversationHolder
198
	 * </p>
199
	 *
200
	 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
201
	 *         object.
202
	 */
203
	@Override
204
	public ConversationHolder getConversationHolder() {
205
		return conversation;
206
	}
207

    
208
	/** {@inheritDoc} */
209
	@Override
210
	public void dispose() {
211
		if (detailElement != null) {
212
			detailElement.removeElements();
213
		}
214
		formFactory.removePropertyChangeListener(this);
215
		super.dispose();
216
	}
217

    
218
	/**
219
	 * <p>
220
	 * Getter for the field <code>detailElement</code>.
221
	 * </p>
222
	 *
223
	 * @return a
224
	 *         {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement}
225
	 *         object.
226
	 */
227
	public AbstractCdmDetailElement<T> getDetailElement() {
228
		return detailElement;
229
	}
230

    
231
	/** {@inheritDoc} */
232
	@Override
233
	public void update(CdmDataChangeMap changeEvents) {
234
	}
235
}
(1-1/48)