Project

General

Profile

Download (8.03 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
import java.util.EnumSet;
15

    
16
import org.eclipse.jface.action.ToolBarManager;
17
import org.eclipse.jface.viewers.ISelectionProvider;
18
import org.eclipse.swt.SWT;
19
import org.eclipse.swt.graphics.Color;
20
import org.eclipse.swt.widgets.Control;
21
import org.eclipse.ui.forms.events.ExpansionEvent;
22
import org.eclipse.ui.forms.events.IExpansionListener;
23
import org.eclipse.ui.forms.widgets.ExpandableComposite;
24
import org.eclipse.ui.forms.widgets.TableWrapData;
25
import org.eclipse.ui.forms.widgets.TableWrapLayout;
26

    
27
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
28
import eu.etaxonomy.cdm.common.CdmUtils;
29
import eu.etaxonomy.cdm.model.common.CdmBase;
30
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
31
import eu.etaxonomy.cdm.model.common.Language;
32
import eu.etaxonomy.cdm.model.description.TextData;
33
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
34
import eu.etaxonomy.cdm.model.permission.CRUD;
35
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
36
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
37
import eu.etaxonomy.taxeditor.store.CdmStore;
38
import eu.etaxonomy.taxeditor.store.StoreUtil;
39
import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
40
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
41
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
42
import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
43
import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
44

    
45
/**
46
 * This class visualizes an CDM entity of type ENTITY.
47
 *
48
 * @param <ENTITY> A CDM entity which should be visualized by this section.
49
 *
50
 * @author n.hoffmann
51
 * @created Feb 26, 2010
52
 */
53
public abstract class AbstractCdmDetailSection<ENTITY>
54
			extends AbstractFormSection<ENTITY>
55
			implements IEnableableFormElement, IExpansionListener {
56

    
57
	protected AbstractCdmDetailElement<ENTITY> detailElement;
58

    
59
	public AbstractCdmDetailSection(CdmFormFactory formFactory,
60
			ConversationHolder conversation, ICdmFormElement parentElement,
61
			ISelectionProvider selectionProvider, int style) {
62
	    this(formFactory, null, conversation, parentElement, selectionProvider, style);
63
	}
64

    
65
	public AbstractCdmDetailSection(CdmFormFactory formFactory, Class<ENTITY> clazz,
66
			ConversationHolder conversation, ICdmFormElement parentElement,
67
			ISelectionProvider selectionProvider, int style) {
68
		super(formFactory, parentElement, selectionProvider,
69
				ExpandableComposite.CLIENT_INDENT | style);
70

    
71
        setText(getHeading());
72

    
73
        addExpansionListener(this);
74

    
75
        if(clazz==null){
76
            createControls(this, style);
77
        }
78
        else{
79
            createControlsByType(this, clazz, SWT.NULL);
80
        }
81
	}
82

    
83
	@Override
84
	public void setText(String title) {
85
	    super.setText(StoreUtil.cleanTitleString(title));
86
	}
87

    
88
	public AbstractCdmDetailElement<ENTITY> getDetailElement() {
89
        return detailElement;
90
    }
91

    
92
    public void setDetailElement(AbstractCdmDetailElement<ENTITY> detailElement) {
93
        this.detailElement = detailElement;
94
    }
95

    
96
    protected void createControlsByType(AbstractCdmDetailSection<ENTITY> formElement, Class<ENTITY> entityClass, int style) {
97
	    TableWrapLayout layout = (TableWrapLayout) getLayoutComposite().getLayout();
98
	    layout.topMargin = 10;
99
	    layout.numColumns = DEFAULT_NUM_COLUMNS;
100

    
101
	    getLayoutComposite().setLayout(layout);
102
	    if(entityClass==null){
103
	        detailElement = createCdmDetailElement(formElement, style);
104
	    }
105
	    else{
106
	        detailElement = createCdmDetailElementByType(formElement, entityClass, style);
107
	    }
108
	}
109

    
110
	protected void createControls(AbstractCdmDetailSection<ENTITY> formElement, int style) {
111
	    createControlsByType(formElement, null, style);
112
	}
113

    
114
	protected abstract AbstractCdmDetailElement<ENTITY> createCdmDetailElement(AbstractCdmDetailSection<ENTITY> parentElement, int style);
115

    
116
	protected AbstractCdmDetailElement<ENTITY> createCdmDetailElementByType(AbstractCdmDetailSection<ENTITY> parentElement, Class<ENTITY> entityClass, int style){
117
	    return createCdmDetailElement(parentElement, style);
118
	}
119

    
120
	public abstract String getHeading();
121

    
122
	/** {@inheritDoc} */
123
	@Override
124
	public void dispose() {
125
		if (detailElement instanceof ISelectableElement) {
126
			ISelectableElement selectableElement = (ISelectableElement) detailElement;
127
			if (selectableElement.getSelectionArbitrator() != null) {
128
				formFactory.destroySelectionArbitrator(selectableElement
129
						.getSelectionArbitrator());
130
			}
131
		}
132
		super.dispose();
133
	}
134

    
135
	/** {@inheritDoc} */
136
	@Override
137
	public void setBackground(Color color) {
138
		if (detailElement != null) {
139
		    detailElement.setBackground(color);
140
		}
141
		super.setBackground(color);
142
	}
143

    
144
	@Override
145
	public void setEntity(ENTITY entity) {
146
	    EnumSet<CRUD> requiredCrud;
147
	    if(entity == null || (entity instanceof CdmBase &&StoreUtil.getCdmEntity(entity).getId() == 0 )) {
148
            // new entity, not yet saved
149
            requiredCrud = EnumSet.of(CRUD.CREATE);
150
        } else {
151
            requiredCrud = EnumSet.of(CRUD.UPDATE);
152
        }
153
		if (detailElement != null) {
154
			detailElement.setEntity(entity);
155
			formFactory.adapt(detailElement);
156
	        Collection<Object> except = new ArrayList<>();
157
	        for(ICdmFormElement formElement:detailElement.getElements()){
158
	            if(formElement instanceof IEnableableFormElement && !((IEnableableFormElement) formElement).isEnabled()){
159
	                except.add(formElement);
160
	            }
161
	        }
162
	        if (entity != null && entity instanceof CdmBase){
163
	            boolean hasPermission = CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(entity), requiredCrud);
164
	            detailElement.setEnabled(isEnabled() && hasPermission, except);
165
	        }else{
166
	            detailElement.setEnabled(isEnabled() && true, except);
167
	        }
168

    
169
		}
170
		super.setEntity(entity);
171
		setSectionTitle();
172
		layout();
173

    
174
	}
175

    
176
	protected void setSectionTitle() {
177
		String title = "";
178
		String label = "";
179
		if (getEntity() != null && (getEntity() instanceof IdentifiableEntity) && !(getEntity() instanceof SpecimenOrObservationBase)) {
180
			if (getEntity() instanceof DefinedTermBase<?> ){
181
				label = ((DefinedTermBase<?>)getEntity()).getLabel(PreferencesUtil.getGlobalLanguage());
182
				if (label == null){
183
					label = ((DefinedTermBase<?>)getEntity()).getLabel();
184
				}
185
			} else if (getEntity() instanceof TextData){
186
				label = ((TextData)getEntity()).getLanguageText(PreferencesUtil.getGlobalLanguage()).getText();
187
				if (label == null){
188
					label = ((TextData)getEntity()).getLanguageText(Language.DEFAULT()).getText();
189
				}
190
			}
191
			if(CdmUtils.isBlank(label)){
192
			    label = ((IdentifiableEntity) getEntity()).getTitleCache();
193
			}
194
			if(CdmUtils.isBlank(label)){
195
			    label = ((IdentifiableEntity) getEntity()).generateTitle();
196
			}
197
			title = ": " + label;
198
		}
199
		this.setText(String.format("%s%s", getHeading(), title));
200
		setTextClient(createToolbar());
201
	}
202

    
203
	protected Control createToolbar() {
204
		ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
205
		return toolBarManager.createControl(this);
206
	}
207

    
208
	public void updateTitle() {
209
		if (!isDisposed()) {
210
			setSectionTitle();
211
			layout();
212
		}
213
	}
214

    
215
	/** {@inheritDoc} */
216
	@Override
217
    public void setIrrelevant(boolean irrelevant) {
218
		if (detailElement != null) {
219

    
220
			detailElement.setIrrelevant(irrelevant);
221
		}
222
	}
223

    
224
	/** {@inheritDoc} */
225
	@Override
226
    public void expansionStateChanging(ExpansionEvent e) {
227
		// logger.warn("Expansion State Changing");
228
	}
229

    
230
	/** {@inheritDoc} */
231
	@Override
232
    public void expansionStateChanged(ExpansionEvent e) {
233
		// logger.warn("Expansion State Changed");
234
	}
235

    
236
	public void setIndent(int indent){
237
	    TableWrapData tableWrapData = (TableWrapData)this.getLayoutData();
238
	    if (tableWrapData == null){
239
	        tableWrapData = new TableWrapData();
240
	    }
241
	    tableWrapData.indent = indent;
242
	    setLayoutData(tableWrapData);
243
	}
244
}
(2-2/9)