Project

General

Profile

Download (6.53 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.model.common.DefinedTermBase;
27
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
28
import eu.etaxonomy.cdm.model.common.Language;
29
import eu.etaxonomy.cdm.model.description.TextData;
30
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
31
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
32
import eu.etaxonomy.taxeditor.store.StoreUtil;
33
import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
34
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
35
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
36
import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
37
import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
38

    
39
/**
40
 * This class visualizes an CDM entity of type ENTITY.
41
 *
42
 * @param <ENTITY> A CDM entity which should be visualized by this section.
43
 *
44
 * @author n.hoffmann
45
 * @created Feb 26, 2010
46
 */
47
public abstract class AbstractCdmDetailSection<ENTITY>
48
			extends AbstractFormSection<ENTITY>
49
			implements IEnableableFormElement, IExpansionListener {
50

    
51
	protected AbstractCdmDetailElement<ENTITY> detailElement;
52

    
53
	public AbstractCdmDetailSection(CdmFormFactory formFactory,
54
			ConversationHolder conversation, ICdmFormElement parentElement,
55
			ISelectionProvider selectionProvider, int style) {
56
	    this(formFactory, null, conversation, parentElement, selectionProvider, style);
57
	}
58

    
59

    
60
	public AbstractCdmDetailSection(CdmFormFactory formFactory, Class<ENTITY> clazz,
61
			ConversationHolder conversation, ICdmFormElement parentElement,
62
			ISelectionProvider selectionProvider, int style) {
63
		super(formFactory, parentElement, selectionProvider,
64
				ExpandableComposite.CLIENT_INDENT | style);
65

    
66
        setText(getHeading());
67

    
68
        addExpansionListener(this);
69

    
70
        if(clazz==null){
71
            createControls(this, style);
72
        }
73
        else{
74
            createControlsByType(this, clazz, SWT.NULL);
75
        }
76
	}
77

    
78
	@Override
79
	public void setText(String title) {
80
	    super.setText(StoreUtil.cleanTitleString(title));
81
	}
82

    
83
	protected void createControlsByType(AbstractCdmDetailSection<ENTITY> formElement, Class<ENTITY> entityClass, int style) {
84
	    TableWrapLayout layout = (TableWrapLayout) getLayoutComposite().getLayout();
85
	    layout.topMargin = 10;
86
	    layout.numColumns = DEFAULT_NUM_COLUMNS;
87

    
88
	    getLayoutComposite().setLayout(layout);
89
	    if(entityClass==null){
90
	        detailElement = createCdmDetailElement(formElement, style);
91
	    }
92
	    else{
93
	        detailElement = createCdmDetailElementByType(formElement, entityClass, style);
94
	    }
95
	}
96

    
97
	protected void createControls(AbstractCdmDetailSection<ENTITY> formElement, int style) {
98
	    createControlsByType(formElement, null, style);
99
	}
100

    
101
	protected abstract AbstractCdmDetailElement<ENTITY> createCdmDetailElement(AbstractCdmDetailSection<ENTITY> parentElement, int style);
102

    
103
	protected AbstractCdmDetailElement<ENTITY> createCdmDetailElementByType(AbstractCdmDetailSection<ENTITY> parentElement, Class<ENTITY> entityClass, int style){
104
	    return createCdmDetailElement(parentElement, style);
105
	}
106

    
107
	public abstract String getHeading();
108

    
109
	/** {@inheritDoc} */
110
	@Override
111
	public void dispose() {
112
		if (detailElement instanceof ISelectableElement) {
113
			ISelectableElement selectableElement = (ISelectableElement) detailElement;
114
			if (selectableElement.getSelectionArbitrator() != null) {
115
				formFactory.destroySelectionArbitrator(selectableElement
116
						.getSelectionArbitrator());
117
			}
118
		}
119
		super.dispose();
120
	}
121

    
122
	/** {@inheritDoc} */
123
	@Override
124
	public void setBackground(Color color) {
125
		if (detailElement != null) {
126
			// detailComposite.setBackground(color);
127
		}
128
		super.setBackground(color);
129
	}
130

    
131
	@Override
132
	public void setEntity(ENTITY entity) {
133
		if (detailElement != null) {
134
			detailElement.setEntity(entity);
135
	        Collection<Object> except = new ArrayList<Object>();
136
	        for(ICdmFormElement formElement:detailElement.getElements()){
137
	            if(formElement instanceof IEnableableFormElement && !((IEnableableFormElement) formElement).isEnabled()){
138
	                except.add(formElement);
139
	            }
140
	        }
141
			detailElement.setEnabled(isEnabled(), except);
142
		}
143
		super.setEntity(entity);
144
		setSectionTitle();
145
		layout();
146

    
147
	}
148

    
149
	protected void setSectionTitle() {
150
		String title = "";
151
		String label = "";
152
		if (getEntity() != null && (getEntity() instanceof IdentifiableEntity) && !(getEntity() instanceof SpecimenOrObservationBase)) {
153
			if (getEntity() instanceof DefinedTermBase<?> ){
154
				label = ((DefinedTermBase<?>)getEntity()).getLabel(PreferencesUtil.getGlobalLanguage());
155
				if (label == null){
156
					label = ((DefinedTermBase<?>)getEntity()).getLabel();
157
				}
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
			} else{
165
				label =((IdentifiableEntity) getEntity()).getTitleCache();
166
			}
167
			title = ": " + label;
168
		}
169
		this.setText(String.format("%s%s", getHeading(), title));
170
		setTextClient(createToolbar());
171
	}
172

    
173
	protected Control createToolbar() {
174
		ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
175
		return toolBarManager.createControl(this);
176
	}
177

    
178
	public void updateTitle() {
179
		if (!isDisposed()) {
180
			setSectionTitle();
181
			layout();
182
		}
183
	}
184

    
185
	/** {@inheritDoc} */
186
	@Override
187
    public void setIrrelevant(boolean irrelevant) {
188
		if (detailElement != null) {
189

    
190
			detailElement.setIrrelevant(irrelevant);
191
		}
192
	}
193

    
194
	/** {@inheritDoc} */
195
	@Override
196
    public void expansionStateChanging(ExpansionEvent e) {
197
		// logger.warn("Expansion State Changing");
198
	}
199

    
200
	/** {@inheritDoc} */
201
	@Override
202
    public void expansionStateChanged(ExpansionEvent e) {
203
		// logger.warn("Expansion State Changed");
204
	}
205
}
(2-2/9)