performed javacscript:fix and worked on documentation
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / section / AbstractCdmDetailElement.java
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.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.model.common.IAnnotatableEntity;
22 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
23 import eu.etaxonomy.taxeditor.editor.EditorUtil;
24 import eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement;
25 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
26 import eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent;
27 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
28 import eu.etaxonomy.taxeditor.forms.IEnableableFormElement;
29 import eu.etaxonomy.taxeditor.forms.IEntityElement;
30 import eu.etaxonomy.taxeditor.forms.ISelectable;
31
32 /**
33 * <p>Abstract AbstractCdmDetailElement class.</p>
34 *
35 * @author n.hoffmann
36 * @created Feb 26, 2010
37 * @version 1.0
38 */
39 public abstract class AbstractCdmDetailElement<T extends IAnnotatableEntity> extends
40 AbstractCdmFormElement implements IEntityElement<T>, ISelectable, IEnableableFormElement, IConversationEnabled{
41
42 private T entity;
43
44 private boolean enabled;
45
46 private boolean irrelevant;
47
48 /**
49 * <p>Constructor for AbstractCdmDetailElement.</p>
50 *
51 * @param formFactory a {@link eu.etaxonomy.taxeditor.forms.CdmFormFactory} object.
52 * @param formElement a {@link eu.etaxonomy.taxeditor.forms.ICdmFormElement} object.
53 * @param <T> a T object.
54 */
55 public AbstractCdmDetailElement(CdmFormFactory formFactory,
56 ICdmFormElement formElement) {
57 super(formFactory, (ICdmFormElement) formElement);
58 // register as property change listener
59 formFactory.addPropertyChangeListener(this);
60 }
61
62 /**
63 * Sets the entity and updates controls
64 *
65 * @param entity a T object.
66 */
67 public void setEntity(T entity){
68 this.entity = entity;
69 updateContent();
70 }
71
72 /*
73 * (non-Javadoc)
74 * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
75 */
76 /**
77 * <p>Getter for the field <code>entity</code>.</p>
78 *
79 * @return a T object.
80 */
81 public T getEntity() {
82 return entity;
83 }
84
85 /**
86 * Updates all widgets to display the latest data
87 */
88 protected void updateContent(){
89 removeElements();
90 createControls(this, entity, SWT.WRAP);
91 getLayoutComposite().layout();
92 }
93
94 /*
95 * (non-Javadoc)
96 * @see eu.etaxonomy.taxeditor.forms.ISelectableComposite#setSelected(boolean)
97 */
98 /** {@inheritDoc} */
99 public void setSelected(boolean selected) {
100 Composite section = getLayoutComposite().getParent();
101 section.setBackground(getColor(selected));
102 }
103
104 /**
105 * Sets all field to the given enablement state except the objects in collection except
106 *
107 * @see eu.etaxonomy.taxeditor.forms.IEnableableFormElement#setEnabled(boolean)
108 * @param enabled a boolean.
109 * @param except a {@link java.util.Collection} object.
110 */
111 public void setEnabled(boolean enabled, Collection<Object> except) {
112 for(ICdmFormElement element : getElements()){
113 if(element instanceof IEnableableFormElement){
114 IEnableableFormElement enableableElement = (IEnableableFormElement) element;
115 if(except != null && except.contains(enableableElement)){
116 // enableableElement.setEnabled(enabled);
117 }else{
118 enableableElement.setEnabled(enabled);
119 }
120 }
121 }
122 }
123
124 /**
125 * <p>Setter for the field <code>irrelevant</code>.</p>
126 *
127 * @param irrelevant a boolean.
128 * @param except a {@link java.util.Collection} object.
129 */
130 public void setIrrelevant(boolean irrelevant, Collection<Object> except){
131 //logger.warn("Setting " + this.getClass().getSimpleName() + " to irrelevant state: " + irrelevant);
132 for(ICdmFormElement element : getElements()){
133 if(element instanceof IEnableableFormElement){
134 IEnableableFormElement relevantElement = (IEnableableFormElement) element;
135 if(except != null && except.contains(relevantElement)){
136 // do nothing
137 //logger.warn("not setting elements irrelevance: " + relevantElement.getClass().getSimpleName() + " in :" + this.getClass().getSimpleName());
138 }else{
139 relevantElement.setIrrelevant(irrelevant);
140 }
141 }
142 }
143 }
144
145 /** {@inheritDoc} */
146 public void setEnabled(boolean enabled) {
147 this.enabled = enabled;
148 setEnabled(enabled, null);
149 }
150
151 /** {@inheritDoc} */
152 public void setIrrelevant(boolean irrelevant) {
153 this.irrelevant = irrelevant;
154 setIrrelevant(irrelevant, null);
155 }
156
157 /**
158 * Create all content elements
159 *
160 * @param formElement a {@link eu.etaxonomy.taxeditor.forms.ICdmFormElement} object.
161 * @param entity a T object.
162 * @param style a int.
163 */
164 protected abstract void createControls(ICdmFormElement formElement, T entity, int style);
165
166 /** {@inheritDoc} */
167 @Override
168 public void propertyChange(PropertyChangeEvent event) {
169 if(event == null){
170 return;
171 }
172
173 Object eventSource = event.getSource();
174
175 if(eventSource instanceof ICdmFormElement){
176 ICdmFormElement eventElement = (ICdmFormElement) eventSource;
177 ICdmFormElement eventElementContainer = eventElement.getParentElement();
178 if (eventElementContainer == this){
179 if(event instanceof CdmPropertyChangeEvent){
180 if(((CdmPropertyChangeEvent) event).hasException()){
181 handleException((CdmPropertyChangeEvent) event);
182 return;
183 }
184 }
185
186 handleEvent(eventSource);
187 if(getParentElement() instanceof AbstractCdmDetailSection)
188 ((AbstractCdmDetailSection)getParentElement()).updateTitle();
189 }
190 }
191 }
192
193 /**
194 * <p>handleEvent</p>
195 *
196 * @param eventSource a {@link java.lang.Object} object.
197 */
198 public abstract void handleEvent(Object eventSource);
199
200 /**
201 * <p>handleException</p>
202 *
203 * @param event a {@link eu.etaxonomy.taxeditor.forms.CdmPropertyChangeEvent} object.
204 */
205 public void handleException(CdmPropertyChangeEvent event){
206 //override this in subclasses if you want to deal with the error
207 EditorUtil.error(event.getSource().getClass(), event.getException());
208 }
209
210 /**
211 * <p>isIrrelevant</p>
212 *
213 * @return a boolean.
214 */
215 public boolean isIrrelevant() {
216 return irrelevant;
217 }
218
219 /**
220 * <p>getConversationHolder</p>
221 *
222 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
223 */
224 public ConversationHolder getConversationHolder() {
225 if(getParentElement() instanceof IConversationEnabled){
226 return ((IConversationEnabled) getParentElement()).getConversationHolder();
227 }
228 throw new IllegalArgumentException("Parent element should be IConversationEnabled");
229 }
230
231 /** {@inheritDoc} */
232 public void update(CdmDataChangeMap changeEvents) {}
233 }