Project

General

Profile

Download (6.66 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.section;
12

    
13
import java.util.Collection;
14

    
15
import org.eclipse.jface.util.PropertyChangeEvent;
16
import org.eclipse.swt.SWT;
17
import org.eclipse.swt.widgets.Composite;
18

    
19
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
20
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
21
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
22
import eu.etaxonomy.taxeditor.store.StoreUtil;
23
import eu.etaxonomy.taxeditor.ui.forms.AbstractCdmFormElement;
24
import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
25
import eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent;
26
import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
27
import eu.etaxonomy.taxeditor.ui.forms.IEnableableFormElement;
28
import eu.etaxonomy.taxeditor.ui.forms.IEntityElement;
29
import eu.etaxonomy.taxeditor.ui.forms.ISelectable;
30

    
31
/**
32
 * <p>Abstract AbstractCdmDetailElement class.</p>
33
 *
34
 * @author n.hoffmann
35
 * @created Feb 26, 2010
36
 * @version 1.0
37
 */
38
public abstract class AbstractCdmDetailElement<T> extends
39
		AbstractCdmFormElement implements IEntityElement<T>, ISelectable, IEnableableFormElement, IConversationEnabled{
40
	
41
	private T entity;
42
		
43
	private boolean enabled;
44

    
45
	private boolean irrelevant;
46
		
47
	/**
48
	 * <p>Constructor for AbstractCdmDetailElement.</p>
49
	 *
50
	 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object.
51
	 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
52
	 * @param <T> a T object.
53
	 */
54
	public AbstractCdmDetailElement(CdmFormFactory formFactory,
55
			ICdmFormElement formElement) {
56
		super(formFactory, (ICdmFormElement) formElement);
57
		// register as property change listener
58
		formFactory.addPropertyChangeListener(this);
59
	}
60
	
61
	/**
62
	 * Sets the entity and updates controls
63
	 *
64
	 * @param entity a T object.
65
	 */
66
	public void setEntity(T entity){
67
		this.entity = entity;
68
		updateContent();
69
	}
70
	
71
	/*
72
	 * (non-Javadoc)
73
	 * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
74
	 */
75
	/**
76
	 * <p>Getter for the field <code>entity</code>.</p>
77
	 *
78
	 * @return a T object.
79
	 */
80
	public T getEntity() {
81
		return entity;
82
	}
83
	
84
	/**
85
	 * Updates all widgets to display the latest data
86
	 */
87
	protected void updateContent(){
88
		removeElements();	
89
		createControls(this, entity, SWT.WRAP);
90
		getLayoutComposite().layout();
91
	}
92
	
93
	/*
94
	 * (non-Javadoc)
95
	 * @see eu.etaxonomy.taxeditor.forms.ISelectableComposite#setSelected(boolean)
96
	 */
97
	/** {@inheritDoc} */
98
	public void setSelected(boolean selected) {
99
		Composite section = getLayoutComposite().getParent();
100
		section.setBackground(getColor(selected));
101
	}
102
	
103
	/**
104
	 * Sets all field to the given enablement state except the objects in collection except
105
	 *
106
	 * @see eu.etaxonomy.taxeditor.ui.forms.IEnableableFormElement#setEnabled(boolean)
107
	 * @param enabled a boolean.
108
	 * @param except a {@link java.util.Collection} object.
109
	 */
110
	public void setEnabled(boolean enabled, Collection<Object> except) {
111
		for(ICdmFormElement element : getElements()){
112
			if(element instanceof IEnableableFormElement){
113
				IEnableableFormElement enableableElement = (IEnableableFormElement) element;
114
				if(except != null && except.contains(enableableElement)){
115
//					enableableElement.setEnabled(enabled);
116
				}else{
117
					enableableElement.setEnabled(enabled);
118
				}
119
			}
120
		}
121
	}
122
	
123
	/**
124
	 * <p>Setter for the field <code>irrelevant</code>.</p>
125
	 *
126
	 * @param irrelevant a boolean.
127
	 * @param except a {@link java.util.Collection} object.
128
	 */
129
	public void setIrrelevant(boolean irrelevant, Collection<Object> except){
130
		//logger.warn("Setting " + this.getClass().getSimpleName() + " to irrelevant state: " + irrelevant);
131
		for(ICdmFormElement element : getElements()){
132
			if(element instanceof IEnableableFormElement){
133
				IEnableableFormElement relevantElement = (IEnableableFormElement) element;
134
				if(except != null && except.contains(relevantElement)){
135
					// do nothing
136
					//logger.warn("not setting elements irrelevance: " + relevantElement.getClass().getSimpleName() + " in :" + this.getClass().getSimpleName());
137
				}else{
138
					relevantElement.setIrrelevant(irrelevant);
139
				}
140
			}
141
		}
142
	}
143
	
144
	/** {@inheritDoc} */
145
	public void setEnabled(boolean enabled) {
146
		this.enabled = enabled;
147
		setEnabled(enabled, null);
148
	}
149

    
150
	/** {@inheritDoc} */
151
	public void setIrrelevant(boolean irrelevant) {
152
		this.irrelevant = irrelevant;
153
		setIrrelevant(irrelevant, null);
154
	}
155
	
156
	/**
157
	 * Create all content elements
158
	 *
159
	 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
160
	 * @param entity a T object.
161
	 * @param style a int.
162
	 */
163
	protected abstract void createControls(ICdmFormElement formElement, T entity, int style);
164
	
165
	/** {@inheritDoc} */
166
	@Override
167
	public void propertyChange(PropertyChangeEvent event) {
168
		if(event == null){
169
			return;
170
		}
171
		
172
		Object eventSource = event.getSource();
173
		
174
		if(eventSource instanceof ICdmFormElement){
175
			ICdmFormElement eventElement = (ICdmFormElement) eventSource;
176
			ICdmFormElement eventElementContainer = eventElement.getParentElement();
177
			if (eventElementContainer == this){
178
				if(event instanceof CdmPropertyChangeEvent){
179
					if(((CdmPropertyChangeEvent) event).hasException()){
180
						handleException((CdmPropertyChangeEvent) event);
181
						return;
182
					}
183
				}
184
				
185
				handleEvent(eventSource);
186
				if(getParentElement() instanceof AbstractCdmDetailSection)
187
					((AbstractCdmDetailSection)getParentElement()).updateTitle();
188
			}
189
		}
190
	}
191

    
192
	/**
193
	 * <p>handleEvent</p>
194
	 *
195
	 * @param eventSource a {@link java.lang.Object} object.
196
	 */
197
	public abstract void handleEvent(Object eventSource);
198
	
199
	/**
200
	 * <p>handleException</p>
201
	 *
202
	 * @param event a {@link eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent} object.
203
	 */
204
	public void handleException(CdmPropertyChangeEvent event){
205
		//override this in subclasses if you want to deal with the error
206
		StoreUtil.error(event.getSource().getClass(), event.getException());
207
	}
208

    
209
	/**
210
	 * <p>isIrrelevant</p>
211
	 *
212
	 * @return a boolean.
213
	 */
214
	public boolean isIrrelevant() {
215
		return irrelevant;
216
	}
217
	
218
	/**
219
	 * <p>getConversationHolder</p>
220
	 *
221
	 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
222
	 */
223
	public ConversationHolder getConversationHolder() {
224
		if(getParentElement() instanceof IConversationEnabled){
225
			return ((IConversationEnabled) getParentElement()).getConversationHolder();
226
		}
227
		throw new IllegalArgumentException("Parent element should be IConversationEnabled");
228
	}
229
	
230
	/** {@inheritDoc} */
231
	public void update(CdmDataChangeMap changeEvents) {}
232
}
(1-1/6)