Project

General

Profile

Download (6.69 KB) Statistics
| Branch: | Tag: | Revision:
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.term.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
}
(2-2/9)