3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.ui
.section
;
13 import java
.util
.Collection
;
15 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
16 import org
.eclipse
.swt
.SWT
;
17 import org
.eclipse
.swt
.widgets
.Composite
;
19 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
20 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
21 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
22 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
23 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
24 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
25 import eu
.etaxonomy
.taxeditor
.ui
.forms
.AbstractCdmFormElement
;
26 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmFormFactory
;
27 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmPropertyChangeEvent
;
28 import eu
.etaxonomy
.taxeditor
.ui
.forms
.ICdmFormElement
;
29 import eu
.etaxonomy
.taxeditor
.ui
.forms
.IEnableableFormElement
;
30 import eu
.etaxonomy
.taxeditor
.ui
.forms
.IEntityElement
;
31 import eu
.etaxonomy
.taxeditor
.ui
.forms
.ISelectable
;
34 * <p>Abstract AbstractCdmDetailElement class.</p>
37 * @created Feb 26, 2010
40 public abstract class AbstractCdmDetailElement
<T
> extends
41 AbstractCdmFormElement
implements IEntityElement
<T
>, ISelectable
, IEnableableFormElement
, IConversationEnabled
{
45 private boolean enabled
;
47 private boolean irrelevant
;
50 * <p>Constructor for AbstractCdmDetailElement.</p>
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.
56 public AbstractCdmDetailElement(CdmFormFactory formFactory
,
57 ICdmFormElement formElement
) {
58 super(formFactory
, (ICdmFormElement
) formElement
);
59 // register as property change listener
60 formFactory
.addPropertyChangeListener(this);
64 * Sets the entity and updates controls
66 * @param entity a T object.
68 public void setEntity(T entity
){
75 * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
78 * <p>Getter for the field <code>entity</code>.</p>
82 public T
getEntity() {
87 * Updates all widgets to display the latest data
89 protected void updateContent(){
91 createControls(this, entity
, SWT
.WRAP
);
92 getLayoutComposite().layout();
97 * @see eu.etaxonomy.taxeditor.forms.ISelectableComposite#setSelected(boolean)
100 public void setSelected(boolean selected
) {
101 Composite section
= getLayoutComposite().getParent();
102 section
.setBackground(getColor(selected
));
106 * Sets all field to the given enablement state except the objects in collection except
108 * @see eu.etaxonomy.taxeditor.ui.forms.IEnableableFormElement#setEnabled(boolean)
109 * @param enabled a boolean.
110 * @param except a {@link java.util.Collection} object.
112 public void setEnabled(boolean enabled
, Collection
<Object
> except
) {
113 for(ICdmFormElement element
: getElements()){
114 if(element
instanceof IEnableableFormElement
){
115 IEnableableFormElement enableableElement
= (IEnableableFormElement
) element
;
116 if(except
!= null && except
.contains(enableableElement
)){
117 // enableableElement.setEnabled(enabled);
119 enableableElement
.setEnabled(enabled
);
126 * <p>Setter for the field <code>irrelevant</code>.</p>
128 * @param irrelevant a boolean.
129 * @param except a {@link java.util.Collection} object.
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
){
135 IEnableableFormElement relevantElement
= (IEnableableFormElement
) element
;
136 if(except
!= null && except
.contains(relevantElement
)){
138 //logger.warn("not setting elements irrelevance: " + relevantElement.getClass().getSimpleName() + " in :" + this.getClass().getSimpleName());
140 relevantElement
.setIrrelevant(irrelevant
);
147 public void setEnabled(boolean enabled
) {
148 this.enabled
= enabled
;
149 setEnabled(enabled
, null);
153 public void setIrrelevant(boolean irrelevant
) {
154 this.irrelevant
= irrelevant
;
155 setIrrelevant(irrelevant
, null);
159 * Create all content elements
161 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
162 * @param entity a T object.
163 * @param style a int.
165 protected abstract void createControls(ICdmFormElement formElement
, T entity
, int style
);
169 public void propertyChange(PropertyChangeEvent event
) {
174 handleTitleCacheRelevantChange(event
);
176 Object eventSource
= event
.getSource();
178 if(eventSource
instanceof ICdmFormElement
){
179 ICdmFormElement eventElement
= (ICdmFormElement
) eventSource
;
180 ICdmFormElement eventElementContainer
= eventElement
.getParentElement();
182 if (eventElementContainer
== this){
183 if(event
instanceof CdmPropertyChangeEvent
){
184 if(((CdmPropertyChangeEvent
) event
).hasException()){
185 handleException((CdmPropertyChangeEvent
) event
);
189 // call specific handler implementation
190 handleEvent(eventSource
);
192 firePropertyChangeEvent(this, event
);
193 // update possible parents
194 updateParentSection();
199 protected void handleTitleCacheRelevantChange(PropertyChangeEvent event
) {
200 boolean isRelevant
= getEntity() instanceof TaxonNameBase
|| getEntity() instanceof TaxonBase
;
201 isRelevant
&= this instanceof AbstractIdentifiableEntityDetailElement
;
204 ((AbstractIdentifiableEntityDetailElement
) this).updateToggleableCacheField();
205 updateParentSection();
209 private void updateParentSection(){
210 if(getParentElement() instanceof AbstractCdmDetailSection
){
211 ((AbstractCdmDetailSection
) getParentElement()).updateTitle();
216 * Gets called when the source of the event is a child widget of this widget.
218 * @param eventSource a {@link java.lang.Object} object.
220 public abstract void handleEvent(Object eventSource
);
223 * <p>handleException</p>
225 * @param event a {@link eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent} object.
227 public void handleException(CdmPropertyChangeEvent event
){
228 //override this in subclasses if you want to deal with the error
229 StoreUtil
.error(event
.getSource().getClass(), event
.getException());
233 * <p>isIrrelevant</p>
237 public boolean isIrrelevant() {
242 * <p>getConversationHolder</p>
244 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
246 public ConversationHolder
getConversationHolder() {
247 if(getParentElement() instanceof IConversationEnabled
){
248 return ((IConversationEnabled
) getParentElement()).getConversationHolder();
250 throw new IllegalArgumentException("Parent element should be IConversationEnabled");
254 public void update(CdmDataChangeMap changeEvents
) {}