Merge branch 'release/5.5.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / AbstractCdmDetailSection.java
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.section;
11
12 import java.util.ArrayList;
13 import java.util.Collection;
14
15 import org.eclipse.jface.action.ToolBarManager;
16 import org.eclipse.jface.viewers.ISelectionProvider;
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.graphics.Color;
19 import org.eclipse.swt.widgets.Control;
20 import org.eclipse.ui.forms.events.ExpansionEvent;
21 import org.eclipse.ui.forms.events.IExpansionListener;
22 import org.eclipse.ui.forms.widgets.ExpandableComposite;
23 import org.eclipse.ui.forms.widgets.TableWrapLayout;
24
25 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
26 import eu.etaxonomy.cdm.common.CdmUtils;
27 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
28 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
29 import eu.etaxonomy.cdm.model.common.Language;
30 import eu.etaxonomy.cdm.model.description.TextData;
31 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
32 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
33 import eu.etaxonomy.taxeditor.store.StoreUtil;
34 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
35 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
36 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
37 import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
38 import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
39
40 /**
41 * This class visualizes an CDM entity of type ENTITY.
42 *
43 * @param <ENTITY> A CDM entity which should be visualized by this section.
44 *
45 * @author n.hoffmann
46 * @created Feb 26, 2010
47 */
48 public abstract class AbstractCdmDetailSection<ENTITY>
49 extends AbstractFormSection<ENTITY>
50 implements IEnableableFormElement, IExpansionListener {
51
52 protected AbstractCdmDetailElement<ENTITY> detailElement;
53
54 public AbstractCdmDetailSection(CdmFormFactory formFactory,
55 ConversationHolder conversation, ICdmFormElement parentElement,
56 ISelectionProvider selectionProvider, int style) {
57 this(formFactory, null, conversation, parentElement, selectionProvider, style);
58 }
59
60
61 public AbstractCdmDetailSection(CdmFormFactory formFactory, Class<ENTITY> clazz,
62 ConversationHolder conversation, ICdmFormElement parentElement,
63 ISelectionProvider selectionProvider, int style) {
64 super(formFactory, parentElement, selectionProvider,
65 ExpandableComposite.CLIENT_INDENT | style);
66
67 setText(getHeading());
68
69 addExpansionListener(this);
70
71 if(clazz==null){
72 createControls(this, style);
73 }
74 else{
75 createControlsByType(this, clazz, SWT.NULL);
76 }
77 }
78
79 @Override
80 public void setText(String title) {
81 super.setText(StoreUtil.cleanTitleString(title));
82 }
83
84 protected void createControlsByType(AbstractCdmDetailSection<ENTITY> formElement, Class<ENTITY> entityClass, int style) {
85 TableWrapLayout layout = (TableWrapLayout) getLayoutComposite().getLayout();
86 layout.topMargin = 10;
87 layout.numColumns = DEFAULT_NUM_COLUMNS;
88
89 getLayoutComposite().setLayout(layout);
90 if(entityClass==null){
91 detailElement = createCdmDetailElement(formElement, style);
92 }
93 else{
94 detailElement = createCdmDetailElementByType(formElement, entityClass, style);
95 }
96 }
97
98 protected void createControls(AbstractCdmDetailSection<ENTITY> formElement, int style) {
99 createControlsByType(formElement, null, style);
100 }
101
102 protected abstract AbstractCdmDetailElement<ENTITY> createCdmDetailElement(AbstractCdmDetailSection<ENTITY> parentElement, int style);
103
104 protected AbstractCdmDetailElement<ENTITY> createCdmDetailElementByType(AbstractCdmDetailSection<ENTITY> parentElement, Class<ENTITY> entityClass, int style){
105 return createCdmDetailElement(parentElement, style);
106 }
107
108 public abstract String getHeading();
109
110 /** {@inheritDoc} */
111 @Override
112 public void dispose() {
113 if (detailElement instanceof ISelectableElement) {
114 ISelectableElement selectableElement = (ISelectableElement) detailElement;
115 if (selectableElement.getSelectionArbitrator() != null) {
116 formFactory.destroySelectionArbitrator(selectableElement
117 .getSelectionArbitrator());
118 }
119 }
120 super.dispose();
121 }
122
123 /** {@inheritDoc} */
124 @Override
125 public void setBackground(Color color) {
126 if (detailElement != null) {
127 // detailComposite.setBackground(color);
128 }
129 super.setBackground(color);
130 }
131
132 @Override
133 public void setEntity(ENTITY entity) {
134 if (detailElement != null) {
135 detailElement.setEntity(entity);
136 Collection<Object> except = new ArrayList<Object>();
137 for(ICdmFormElement formElement:detailElement.getElements()){
138 if(formElement instanceof IEnableableFormElement && !((IEnableableFormElement) formElement).isEnabled()){
139 except.add(formElement);
140 }
141 }
142 detailElement.setEnabled(isEnabled(), except);
143 }
144 super.setEntity(entity);
145 setSectionTitle();
146 layout();
147
148 }
149
150 protected void setSectionTitle() {
151 String title = "";
152 String label = "";
153 if (getEntity() != null && (getEntity() instanceof IdentifiableEntity) && !(getEntity() instanceof SpecimenOrObservationBase)) {
154 if (getEntity() instanceof DefinedTermBase<?> ){
155 label = ((DefinedTermBase<?>)getEntity()).getLabel(PreferencesUtil.getGlobalLanguage());
156 if (label == null){
157 label = ((DefinedTermBase<?>)getEntity()).getLabel();
158 }
159 } else if (getEntity() instanceof TextData){
160 label = ((TextData)getEntity()).getLanguageText(PreferencesUtil.getGlobalLanguage()).getText();
161 if (label == null){
162 label = ((TextData)getEntity()).getLanguageText(Language.DEFAULT()).getText();
163 }
164 }
165 if(CdmUtils.isBlank(label)){
166 label = ((IdentifiableEntity) getEntity()).getTitleCache();
167 }
168 if(CdmUtils.isBlank(label)){
169 label = ((IdentifiableEntity) getEntity()).generateTitle();
170 }
171 title = ": " + label;
172 }
173 this.setText(String.format("%s%s", getHeading(), title));
174 setTextClient(createToolbar());
175 }
176
177 protected Control createToolbar() {
178 ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
179 return toolBarManager.createControl(this);
180 }
181
182 public void updateTitle() {
183 if (!isDisposed()) {
184 setSectionTitle();
185 layout();
186 }
187 }
188
189 /** {@inheritDoc} */
190 @Override
191 public void setIrrelevant(boolean irrelevant) {
192 if (detailElement != null) {
193
194 detailElement.setIrrelevant(irrelevant);
195 }
196 }
197
198 /** {@inheritDoc} */
199 @Override
200 public void expansionStateChanging(ExpansionEvent e) {
201 // logger.warn("Expansion State Changing");
202 }
203
204 /** {@inheritDoc} */
205 @Override
206 public void expansionStateChanged(ExpansionEvent e) {
207 // logger.warn("Expansion State Changed");
208 }
209 }