Revision 0c52f39c
Added by Niels Hoffmann over 12 years ago
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/AbstractCdmDetailElement.java | ||
---|---|---|
1 | 1 |
// $Id$ |
2 | 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 |
*/ |
|
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 | 10 |
|
11 | 11 |
package eu.etaxonomy.taxeditor.ui.section; |
12 | 12 |
|
... | ... | |
31 | 31 |
import eu.etaxonomy.taxeditor.ui.forms.ISelectable; |
32 | 32 |
|
33 | 33 |
/** |
34 |
* <p>Abstract AbstractCdmDetailElement class.</p> |
|
35 |
* |
|
34 |
* <p> |
|
35 |
* Abstract AbstractCdmDetailElement class. |
|
36 |
* </p> |
|
37 |
* |
|
36 | 38 |
* @author n.hoffmann |
37 | 39 |
* @created Feb 26, 2010 |
38 | 40 |
* @version 1.0 |
39 | 41 |
*/ |
40 | 42 |
public abstract class AbstractCdmDetailElement<T> extends |
41 |
AbstractCdmFormElement implements IEntityElement<T>, ISelectable, IEnableableFormElement, IConversationEnabled{ |
|
42 |
|
|
43 |
AbstractCdmFormElement implements IEntityElement<T>, |
|
44 |
IEnableableFormElement, IConversationEnabled, ISelectable { |
|
45 |
|
|
43 | 46 |
private T entity; |
44 |
|
|
47 |
|
|
45 | 48 |
private boolean enabled; |
46 | 49 |
|
47 | 50 |
private boolean irrelevant; |
48 |
|
|
51 |
|
|
49 | 52 |
/** |
50 |
* <p>Constructor for AbstractCdmDetailElement.</p> |
|
51 |
* |
|
52 |
* @param formFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object. |
|
53 |
* @param formElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object. |
|
54 |
* @param <T> a T object. |
|
53 |
* <p> |
|
54 |
* Constructor for AbstractCdmDetailElement. |
|
55 |
* </p> |
|
56 |
* |
|
57 |
* @param formFactory |
|
58 |
* a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} |
|
59 |
* object. |
|
60 |
* @param formElement |
|
61 |
* a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} |
|
62 |
* object. |
|
63 |
* @param <T> |
|
64 |
* a T object. |
|
55 | 65 |
*/ |
56 | 66 |
public AbstractCdmDetailElement(CdmFormFactory formFactory, |
57 | 67 |
ICdmFormElement formElement) { |
... | ... | |
59 | 69 |
// register as property change listener |
60 | 70 |
formFactory.addPropertyChangeListener(this); |
61 | 71 |
} |
62 |
|
|
72 |
|
|
63 | 73 |
/** |
64 | 74 |
* Sets the entity and updates controls |
65 |
* |
|
66 |
* @param entity a T object. |
|
75 |
* |
|
76 |
* @param entity |
|
77 |
* a T object. |
|
67 | 78 |
*/ |
68 |
public void setEntity(T entity){ |
|
79 |
public void setEntity(T entity) {
|
|
69 | 80 |
this.entity = entity; |
70 | 81 |
updateContent(); |
71 | 82 |
} |
72 |
|
|
83 |
|
|
73 | 84 |
/* |
74 | 85 |
* (non-Javadoc) |
86 |
* |
|
75 | 87 |
* @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity() |
76 | 88 |
*/ |
77 | 89 |
/** |
78 |
* <p>Getter for the field <code>entity</code>.</p> |
|
79 |
* |
|
90 |
* <p> |
|
91 |
* Getter for the field <code>entity</code>. |
|
92 |
* </p> |
|
93 |
* |
|
80 | 94 |
* @return a T object. |
81 | 95 |
*/ |
82 | 96 |
public T getEntity() { |
83 | 97 |
return entity; |
84 | 98 |
} |
85 |
|
|
99 |
|
|
86 | 100 |
/** |
87 | 101 |
* Updates all widgets to display the latest data |
88 | 102 |
*/ |
89 |
protected void updateContent(){ |
|
90 |
removeElements();
|
|
103 |
protected void updateContent() {
|
|
104 |
removeElements(); |
|
91 | 105 |
createControls(this, entity, SWT.WRAP); |
92 | 106 |
getLayoutComposite().layout(); |
93 | 107 |
} |
94 |
|
|
108 |
|
|
95 | 109 |
/* |
96 | 110 |
* (non-Javadoc) |
97 |
* @see eu.etaxonomy.taxeditor.forms.ISelectableComposite#setSelected(boolean) |
|
111 |
* |
|
112 |
* @see |
|
113 |
* eu.etaxonomy.taxeditor.forms.ISelectableComposite#setSelected(boolean) |
|
98 | 114 |
*/ |
99 | 115 |
/** {@inheritDoc} */ |
100 | 116 |
public void setSelected(boolean selected) { |
101 | 117 |
Composite section = getLayoutComposite().getParent(); |
102 |
section.setBackground(getColor(selected));
|
|
118 |
section.setBackground(selected ? SELECTED : getPersistentBackground());
|
|
103 | 119 |
} |
104 |
|
|
120 |
|
|
105 | 121 |
/** |
106 |
* Sets all field to the given enablement state except the objects in collection except |
|
107 |
* |
|
122 |
* Sets all field to the given enablement state except the objects in |
|
123 |
* collection except |
|
124 |
* |
|
108 | 125 |
* @see eu.etaxonomy.taxeditor.ui.forms.IEnableableFormElement#setEnabled(boolean) |
109 |
* @param enabled a boolean. |
|
110 |
* @param except a {@link java.util.Collection} object. |
|
126 |
* @param enabled |
|
127 |
* a boolean. |
|
128 |
* @param except |
|
129 |
* a {@link java.util.Collection} object. |
|
111 | 130 |
*/ |
112 | 131 |
public void setEnabled(boolean enabled, Collection<Object> except) { |
113 |
for(ICdmFormElement element : getElements()){
|
|
114 |
if(element instanceof IEnableableFormElement){
|
|
132 |
for (ICdmFormElement element : getElements()) {
|
|
133 |
if (element instanceof IEnableableFormElement) {
|
|
115 | 134 |
IEnableableFormElement enableableElement = (IEnableableFormElement) element; |
116 |
if(except != null && except.contains(enableableElement)){
|
|
117 |
// enableableElement.setEnabled(enabled);
|
|
118 |
}else{
|
|
135 |
if (except != null && except.contains(enableableElement)) {
|
|
136 |
// enableableElement.setEnabled(enabled);
|
|
137 |
} else {
|
|
119 | 138 |
enableableElement.setEnabled(enabled); |
120 | 139 |
} |
121 | 140 |
} |
122 | 141 |
} |
123 | 142 |
} |
124 |
|
|
143 |
|
|
125 | 144 |
/** |
126 |
* <p>Setter for the field <code>irrelevant</code>.</p> |
|
127 |
* |
|
128 |
* @param irrelevant a boolean. |
|
129 |
* @param except a {@link java.util.Collection} object. |
|
145 |
* <p> |
|
146 |
* Setter for the field <code>irrelevant</code>. |
|
147 |
* </p> |
|
148 |
* |
|
149 |
* @param irrelevant |
|
150 |
* a boolean. |
|
151 |
* @param except |
|
152 |
* a {@link java.util.Collection} object. |
|
130 | 153 |
*/ |
131 |
public void setIrrelevant(boolean irrelevant, Collection<Object> except){ |
|
132 |
//logger.warn("Setting " + this.getClass().getSimpleName() + " to irrelevant state: " + irrelevant); |
|
133 |
for(ICdmFormElement element : getElements()){ |
|
134 |
if(element instanceof IEnableableFormElement){ |
|
154 |
public void setIrrelevant(boolean irrelevant, Collection<Object> except) { |
|
155 |
// logger.warn("Setting " + this.getClass().getSimpleName() + |
|
156 |
// " to irrelevant state: " + irrelevant); |
|
157 |
for (ICdmFormElement element : getElements()) { |
|
158 |
if (element instanceof IEnableableFormElement) { |
|
135 | 159 |
IEnableableFormElement relevantElement = (IEnableableFormElement) element; |
136 |
if(except != null && except.contains(relevantElement)){
|
|
160 |
if (except != null && except.contains(relevantElement)) {
|
|
137 | 161 |
// do nothing |
138 |
//logger.warn("not setting elements irrelevance: " + relevantElement.getClass().getSimpleName() + " in :" + this.getClass().getSimpleName()); |
|
139 |
}else{ |
|
162 |
// logger.warn("not setting elements irrelevance: " + |
|
163 |
// relevantElement.getClass().getSimpleName() + " in :" + |
|
164 |
// this.getClass().getSimpleName()); |
|
165 |
} else { |
|
140 | 166 |
relevantElement.setIrrelevant(irrelevant); |
141 | 167 |
} |
142 | 168 |
} |
143 | 169 |
} |
144 | 170 |
} |
145 |
|
|
171 |
|
|
146 | 172 |
/** {@inheritDoc} */ |
147 | 173 |
public void setEnabled(boolean enabled) { |
148 | 174 |
this.enabled = enabled; |
... | ... | |
154 | 180 |
this.irrelevant = irrelevant; |
155 | 181 |
setIrrelevant(irrelevant, null); |
156 | 182 |
} |
157 |
|
|
183 |
|
|
158 | 184 |
/** |
159 | 185 |
* Create all content elements |
160 |
* |
|
161 |
* @param formElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object. |
|
162 |
* @param entity a T object. |
|
163 |
* @param style a int. |
|
186 |
* |
|
187 |
* @param formElement |
|
188 |
* a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} |
|
189 |
* object. |
|
190 |
* @param entity |
|
191 |
* a T object. |
|
192 |
* @param style |
|
193 |
* a int. |
|
164 | 194 |
*/ |
165 |
protected abstract void createControls(ICdmFormElement formElement, T entity, int style); |
|
166 |
|
|
195 |
protected abstract void createControls(ICdmFormElement formElement, |
|
196 |
T entity, int style); |
|
197 |
|
|
167 | 198 |
/** {@inheritDoc} */ |
168 | 199 |
@Override |
169 | 200 |
public void propertyChange(PropertyChangeEvent event) { |
170 |
if(event == null){
|
|
201 |
if (event == null) {
|
|
171 | 202 |
return; |
172 | 203 |
} |
173 |
|
|
204 |
|
|
174 | 205 |
handleTitleCacheRelevantChange(event); |
175 |
|
|
206 |
|
|
176 | 207 |
Object eventSource = event.getSource(); |
177 |
|
|
178 |
if(eventSource instanceof ICdmFormElement){
|
|
208 |
|
|
209 |
if (eventSource instanceof ICdmFormElement) {
|
|
179 | 210 |
ICdmFormElement eventElement = (ICdmFormElement) eventSource; |
180 |
ICdmFormElement eventElementContainer = eventElement.getParentElement(); |
|
181 |
|
|
182 |
if (eventElementContainer == this){ |
|
183 |
if(event instanceof CdmPropertyChangeEvent){ |
|
184 |
if(((CdmPropertyChangeEvent) event).hasException()){ |
|
211 |
ICdmFormElement eventElementContainer = eventElement |
|
212 |
.getParentElement(); |
|
213 |
|
|
214 |
if (eventElementContainer == this) { |
|
215 |
if (event instanceof CdmPropertyChangeEvent) { |
|
216 |
if (((CdmPropertyChangeEvent) event).hasException()) { |
|
185 | 217 |
handleException((CdmPropertyChangeEvent) event); |
186 | 218 |
return; |
187 | 219 |
} |
... | ... | |
197 | 229 |
} |
198 | 230 |
|
199 | 231 |
protected void handleTitleCacheRelevantChange(PropertyChangeEvent event) { |
200 |
boolean isRelevant = getEntity() instanceof TaxonNameBase || getEntity() instanceof TaxonBase; |
|
201 |
isRelevant &= this instanceof AbstractIdentifiableEntityDetailElement; |
|
202 |
|
|
203 |
if(isRelevant){ |
|
204 |
((AbstractIdentifiableEntityDetailElement) this).updateToggleableCacheField(); |
|
232 |
boolean isRelevant = getEntity() instanceof TaxonNameBase |
|
233 |
|| getEntity() instanceof TaxonBase; |
|
234 |
isRelevant &= this instanceof AbstractIdentifiableEntityDetailElement; |
|
235 |
|
|
236 |
if (isRelevant) { |
|
237 |
((AbstractIdentifiableEntityDetailElement) this) |
|
238 |
.updateToggleableCacheField(); |
|
205 | 239 |
updateParentSection(); |
206 | 240 |
} |
207 | 241 |
} |
208 |
|
|
209 |
private void updateParentSection(){ |
|
210 |
if(getParentElement() instanceof AbstractCdmDetailSection){
|
|
242 |
|
|
243 |
private void updateParentSection() {
|
|
244 |
if (getParentElement() instanceof AbstractCdmDetailSection) {
|
|
211 | 245 |
((AbstractCdmDetailSection) getParentElement()).updateTitle(); |
212 | 246 |
} |
213 | 247 |
} |
214 | 248 |
|
215 | 249 |
/** |
216 |
* Gets called when the source of the event is a child widget of this widget. |
|
217 |
* |
|
218 |
* @param eventSource a {@link java.lang.Object} object. |
|
250 |
* Gets called when the source of the event is a child widget of this |
|
251 |
* widget. |
|
252 |
* |
|
253 |
* @param eventSource |
|
254 |
* a {@link java.lang.Object} object. |
|
219 | 255 |
*/ |
220 | 256 |
public abstract void handleEvent(Object eventSource); |
221 |
|
|
257 |
|
|
222 | 258 |
/** |
223 |
* <p>handleException</p> |
|
224 |
* |
|
225 |
* @param event a {@link eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent} object. |
|
259 |
* <p> |
|
260 |
* handleException |
|
261 |
* </p> |
|
262 |
* |
|
263 |
* @param event |
|
264 |
* a |
|
265 |
* {@link eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent} |
|
266 |
* object. |
|
226 | 267 |
*/ |
227 |
public void handleException(CdmPropertyChangeEvent event){ |
|
228 |
//override this in subclasses if you want to deal with the error |
|
268 |
public void handleException(CdmPropertyChangeEvent event) {
|
|
269 |
// override this in subclasses if you want to deal with the error
|
|
229 | 270 |
StoreUtil.error(event.getSource().getClass(), event.getException()); |
230 | 271 |
} |
231 | 272 |
|
232 | 273 |
/** |
233 |
* <p>isIrrelevant</p> |
|
234 |
* |
|
274 |
* <p> |
|
275 |
* isIrrelevant |
|
276 |
* </p> |
|
277 |
* |
|
235 | 278 |
* @return a boolean. |
236 | 279 |
*/ |
237 | 280 |
public boolean isIrrelevant() { |
238 | 281 |
return irrelevant; |
239 | 282 |
} |
240 |
|
|
283 |
|
|
241 | 284 |
/** |
242 |
* <p>getConversationHolder</p> |
|
243 |
* |
|
244 |
* @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object. |
|
285 |
* <p> |
|
286 |
* getConversationHolder |
|
287 |
* </p> |
|
288 |
* |
|
289 |
* @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} |
|
290 |
* object. |
|
245 | 291 |
*/ |
246 | 292 |
public ConversationHolder getConversationHolder() { |
247 |
if(getParentElement() instanceof IConversationEnabled){ |
|
248 |
return ((IConversationEnabled) getParentElement()).getConversationHolder(); |
|
293 |
if (getParentElement() instanceof IConversationEnabled) { |
|
294 |
return ((IConversationEnabled) getParentElement()) |
|
295 |
.getConversationHolder(); |
|
249 | 296 |
} |
250 |
throw new IllegalArgumentException("Parent element should be IConversationEnabled"); |
|
297 |
throw new IllegalArgumentException( |
|
298 |
"Parent element should be IConversationEnabled"); |
|
251 | 299 |
} |
252 |
|
|
300 |
|
|
253 | 301 |
/** {@inheritDoc} */ |
254 |
public void update(CdmDataChangeMap changeEvents) {} |
|
302 |
public void update(CdmDataChangeMap changeEvents) { |
|
303 |
} |
|
255 | 304 |
} |
Also available in: Unified diff
Fixing background color logic as it was kind of broken