Project

General

Profile

Download (39 KB) Statistics
| Branch: | Tag: | Revision:
1

    
2
// $Id$
3
/**
4
 * Copyright (C) 2011 EDIT
5
 * European Distributed Institute of Taxonomy
6
 * http://www.e-taxonomy.eu
7
 *
8
 * The contents of this file are subject to the Mozilla Public License Version 1.1
9
 * See LICENSE.TXT at the top of this package for the full license terms.
10
 */
11

    
12
package eu.etaxonomy.taxeditor.view.detail;
13

    
14
import java.util.Set;
15

    
16
import org.eclipse.jface.viewers.ISelection;
17
import org.eclipse.jface.viewers.SelectionChangedEvent;
18
import org.eclipse.jface.viewers.TreeNode;
19
import org.eclipse.swt.SWT;
20
import org.eclipse.swt.widgets.Composite;
21
import org.eclipse.ui.forms.widgets.ExpandableComposite;
22

    
23
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
24
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
25
import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
26
import eu.etaxonomy.cdm.model.agent.Person;
27
import eu.etaxonomy.cdm.model.agent.Team;
28
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
29
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
30
import eu.etaxonomy.cdm.model.common.Group;
31
import eu.etaxonomy.cdm.model.common.Marker;
32
import eu.etaxonomy.cdm.model.common.TermVocabulary;
33
import eu.etaxonomy.cdm.model.common.User;
34
import eu.etaxonomy.cdm.model.description.CategoricalData;
35
import eu.etaxonomy.cdm.model.description.DescriptionBase;
36
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
37
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
38
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
39
import eu.etaxonomy.cdm.model.media.Media;
40
import eu.etaxonomy.cdm.model.molecular.DnaSample;
41
import eu.etaxonomy.cdm.model.molecular.Sequence;
42
import eu.etaxonomy.cdm.model.molecular.SingleRead;
43
import eu.etaxonomy.cdm.model.name.NonViralName;
44
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
45
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
46
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
47
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
48
import eu.etaxonomy.cdm.model.reference.Reference;
49
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
50
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
51
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
52
import eu.etaxonomy.taxeditor.model.AbstractUtility;
53
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
54
import eu.etaxonomy.taxeditor.model.IDerivedUnitFacadePart;
55
import eu.etaxonomy.taxeditor.model.MessagingUtils;
56
import eu.etaxonomy.taxeditor.model.PolytomousKeyRelationship;
57
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
58
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
59
import eu.etaxonomy.taxeditor.store.UsageTermCollection;
60
import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
61
import eu.etaxonomy.taxeditor.ui.element.RootElement;
62
import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailSection;
63
import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailSection;
64
import eu.etaxonomy.taxeditor.ui.section.agent.TeamOrPersonBaseDetailSection;
65
import eu.etaxonomy.taxeditor.ui.section.common.ReferencedEntityDetailSection;
66
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailSection;
67
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailSection;
68
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementMediaSection;
69
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementSourceSection;
70
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionSourceSection;
71
import eu.etaxonomy.taxeditor.ui.section.description.MediaDetailsSection;
72
import eu.etaxonomy.taxeditor.ui.section.description.NaturalLanguageSection;
73
import eu.etaxonomy.taxeditor.ui.section.description.ScopeSection;
74
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailSection;
75
import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailSection;
76
import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailSection;
77
import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailSection;
78
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailSection;
79
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailSection;
80
import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailSection;
81
import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
82
import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;
83
import eu.etaxonomy.taxeditor.ui.section.name.ProtologueSection;
84
import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
85
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
86
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
87
import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
88
import eu.etaxonomy.taxeditor.ui.section.occurrence.EmptySection;
89
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitDetailSection;
90
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailSection;
91
import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
92
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationSection;
93
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailSection;
94
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaQualityDetailSection;
95
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSampleGeneralDetailSection;
96
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSamplePreparationPreservationSection;
97
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailSection;
98
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceContigFileCollectionDetailSection;
99
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceGeneralDetailSection;
100
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceReferenceCollectionDetailSection;
101
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadGeneralDetailSection;
102
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadPherogramCollectionDetailSection;
103
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailSection;
104
import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
105
import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
106
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
107
import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsSection;
108
import eu.etaxonomy.taxeditor.ui.section.supplemental.identifier.DerivedUnitFacadeIdentifierSection;
109
import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;
110
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailSection;
111
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonRelationshipDetailSection;
112
import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailSection;
113
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailSection;
114
import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailSection;
115
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
116
import eu.etaxonomy.taxeditor.view.AbstractCdmDataViewer;
117
import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart;
118

    
119
/**
120
 *
121
 * The DetailsViewer handles the content of the details view (
122
 * {@link DetailsViewPart}).<br>
123
 * Depending on the type of the selected element the section of the details view
124
 * are created.
125
 *
126
 * @author n.hoffmann
127
 * @created Feb 12, 2010
128
 * @version 1.0
129
 */
130
public class DetailsViewer extends AbstractCdmDataViewer {
131

    
132
    private ISelection selection;
133
    
134
    public DetailsViewer(Composite parent, AbstractCdmViewPart viewPart) {
135
        super(parent, viewPart);
136
    }
137

    
138
    // START HACK TO MAKE THE DERIVED UNIT FACADE WORK
139
    // since we are getting implementations of DerivedUnitBase from the bulk
140
    // editor
141
    // and not derived unit facade objects,
142

    
143
    @Override
144
    public void setInput(Object input) {
145
        if(input instanceof TreeNode){
146
            input = ((TreeNode) input).getValue();
147
        }
148
        if(input instanceof GbifResponse){
149
            input = ((GbifResponse) input).getDerivedUnitFacade();
150
        }
151
        if (input.getClass().equals(DerivedUnit.class)) {
152
            DerivedUnit derivedUnit = (DerivedUnit)input;
153
            try {
154
                input = DerivedUnitFacade.NewInstance(derivedUnit,
155
                        PreferencesUtil.getDerivedUnitConfigurator());
156
            } catch (DerivedUnitFacadeNotSupportedException e) {
157
//                MessagingUtils.error(getClass(), e); //nothing should happen, later on the Details View will show an according information that it is not possible to open this data
158
            }
159
        }
160
        else if(input instanceof FieldUnit){
161
            input = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) input);
162
        }
163
        super.setInput(input);
164
    }
165

    
166
    @Override
167
    protected void markViewPartDirty() {
168
        if (getInput() instanceof DerivedUnitFacade) {
169
            DerivedUnitFacade facade = (DerivedUnitFacade) getInput();
170
            if(facade.innerDerivedUnit()!=null){
171
                getViewPart().changed(facade.innerDerivedUnit());
172
            }
173
            else if(facade.innerFieldUnit()!=null){
174
                getViewPart().changed(facade.innerFieldUnit());
175
            }
176
        }
177
        else{
178
            super.markViewPartDirty();
179
        }
180
    }
181

    
182
    // END HACK TO MAKE THE DERIVED UNIT FACADE WORK
183

    
184

    
185
    /** {@inheritDoc} */
186
    @Override
187
    protected void showParts() {
188
        // FIXME (CM) : Need to clean out this code.
189
        // Too much type checking to decide which detail view to display.
190
        // Need to build in a mechanism where navigators / editors are 'aware'
191
        // of the corresponding detail viewer.
192
        Object input = getInput();
193

    
194
        destroySections();
195
        if (input instanceof TaxonBase) {
196
            if(((TaxonBase) input).getName()==null){
197
                createEmptySection(rootElement);
198
            }
199
            else{
200
                createTaxonSections(rootElement);
201
            }
202

    
203
        } else if (input instanceof NonViralName) {
204
            createNameSections(rootElement);
205

    
206
        } else if (input instanceof Reference) {
207
            createReferenceSections(rootElement);
208

    
209
        } else if (input instanceof Team) {
210
            createTeamDetailSection(rootElement);
211

    
212
        } else if (input instanceof Person) {
213
            createPersonDetailSection(rootElement);
214

    
215
        } else if (input instanceof TeamOrPersonBase) {
216
            createTeamOrPersonBaseDetailSection(rootElement);
217

    
218
        } else if (input instanceof DescriptionBase) {
219
            if(input instanceof SpecimenDescription){
220
                //TODO: add more sections to DetailsView for SpecimenDescription
221
                createSpecimenDescriptionSection(rootElement);
222
            }
223
            else{
224
                Set<Marker> descriptionMarkers = ((DescriptionBase<?>) input).getMarkers();
225

    
226
                Boolean isUseDescription = false;
227
                for (Marker marker : descriptionMarkers) {
228
                    if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
229
                        isUseDescription = true;
230
                    }
231
                }
232
                if (((DescriptionBase<?>) input).isImageGallery()) {
233
                    createImageGallerySection(rootElement);
234

    
235
                } else if (isUseDescription) {
236
                    createUseDescriptionSection(rootElement);
237
                } else {
238
                    createDescriptionSection(rootElement);
239

    
240
                }
241
            }
242
        } else if (input instanceof DescriptionElementBase) {
243
            Set<Marker> descriptionMarkers = ((DescriptionElementBase) input).getInDescription().getMarkers();
244

    
245
            Boolean isUseDescription = false;
246
            for (Marker marker : descriptionMarkers) {
247
                if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
248
                    isUseDescription = true;
249
                }
250
            }
251

    
252
            if (isUseDescription == true && input instanceof CategoricalData) {
253
                createUseRecordSection(rootElement);
254
            } else {
255
                createDescriptionElementSection(rootElement);
256
            }
257

    
258
        } else if (input instanceof Media) {
259
            createMediaElementSection(rootElement);
260

    
261
        } else if (input instanceof DerivedUnitFacade) {
262
            if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.FieldUnit){
263
                if(((DerivedUnitFacade) input).innerFieldUnit()==null){
264
                    MessagingUtils.error(DetailsViewer.class, "FieldUnit of facade is null", null);
265
                }
266
                else{
267
                    createFieldUnitSection(rootElement);
268
                }
269
            }
270
            else if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.PreservedSpecimen){
271
                if(((DerivedUnitFacade) input).innerDerivedUnit()==null){
272
                    MessagingUtils.error(DetailsViewer.class, "DerivedUnit of facade is null", null);
273
                }
274
                else{
275
                    createDerivedUnitBaseElementSection(rootElement);
276
                }
277
            }
278
            else if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.TissueSample){
279
                //TissueSample should only be created by using it's own class
280
                //in future using only one class with different SpecimenOrObservationTypes is desired
281
//                createTissueSampleSection(rootElement);
282
            }
283
            else{
284
                createDerivedUnitBaseElementSection(rootElement);
285
            }
286
        } else if (input instanceof DnaSample){
287
            DnaSample dnaSample = (DnaSample)input;
288
            if(dnaSample.getRecordBasis()==SpecimenOrObservationType.TissueSample){
289
                createTissueSampleSection(rootElement);
290
            }
291
            else if(dnaSample.getRecordBasis()==SpecimenOrObservationType.DnaSample){
292
                createDnaSampleSection(rootElement);
293
            }
294
        } else if (input instanceof MediaSpecimen){
295
            createMediaSpecimenSection(rootElement);
296
        }
297
        else if(input instanceof Sequence){
298
            createSequenceSection(rootElement);
299
        }
300
        else if(input instanceof SingleRead){
301
            createSingleReadSection(rootElement);
302
        }
303
        else if (input instanceof FeatureNodeContainer) {
304
            createFeatureDistributionSection(rootElement);
305

    
306
        }else if ((input instanceof PolytomousKeyNode) || (input instanceof PolytomousKeyRelationship)) {
307
            createPolytomousKeyNodeSection(rootElement);
308
        } else if (input instanceof User) {
309
            createUserSection(rootElement);
310
        } else if (input instanceof Group) {
311
            createGroupSection(rootElement);
312
        } else if (input instanceof TaxonRelationship) {
313
            createTaxonRelationshipSection(rootElement);
314
        } else if (input instanceof TermVocabulary) {
315
            createTermVocabularySection(rootElement);
316
        } else if (input instanceof DefinedTermBase) {
317
            createDefinedTermSection(rootElement);
318
        }
319
        else {
320
            createEmptySection(rootElement);
321
        }
322
        layout();
323
    }
324

    
325

    
326
    private void createEmptySection(RootElement parent) {
327
        destroySections();
328

    
329
        EmptySection emptySection = formFactory.createEmptySection(formFactory, parent, SWT.NONE);
330

    
331
        addPart(emptySection);
332
    }
333

    
334
    private void createGroupSection(RootElement parent) {
335
        destroySections();
336

    
337
        GroupDetailSection groupDetailSection = formFactory.createGroupDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE| ExpandableComposite.EXPANDED);
338
        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
339
        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(getConversationHolder(), parent,ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
340

    
341
        addPart(groupDetailSection);
342
        addPart(memberDetailSection);
343
        addPart(grantedAuthorityDetailSection);
344
    }
345

    
346
    /** {@inheritDoc} */
347
    @Override
348
    public ISelection getSelection() {
349
        return selection;
350
    }
351

    
352
    /** {@inheritDoc} */
353
    @Override
354
    public void setSelection(ISelection selection, boolean reveal) {
355
        this.selection = selection;
356
        if(this.selection!=null){
357
            SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
358
            fireSelectionChanged(selectionChangedEvent);
359
        }
360
    }
361

    
362
    private void createTaxonSections(RootElement parent) {
363
        destroySections();
364

    
365
        ParsingMessagesSection parsingMessagesSection = formFactory.createParsingMessagesSection(getConversationHolder(), parent, this,
366
                ExpandableComposite.EXPANDED | ExpandableComposite.EXPANDED);
367
        if (!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_SECTION)){
368
            TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this,
369
            		ExpandableComposite.TWISTIE	| ExpandableComposite.EXPANDED);
370
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
371

    
372
            addPart(taxonBaseDetailSection);
373
        }
374
        NonViralNameDetailSection nonViralNameSection = formFactory
375
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
376
                        ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
377
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
378
        if (!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_SECTION)){
379
            NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
380
            		ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
381
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
382

    
383
            NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
384
            		ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
385
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
386

    
387
            addPart(nomenclaturalStatusSection);
388
            addPart(referenceDetailSection);
389
        }
390
        //TODO RL
391
        if(!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.IS_RL)  && !PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_SIMPLE_NAME_DETAILS_SECTION)){
392
	        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
393
	        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
394

    
395
	        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
396
	        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
397

    
398
	        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
399
	        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
400

    
401
			addPart(protologSection);
402
			addPart(typeDesignationSection);
403
			addPart(nameRelationshipSection);
404
        }
405

    
406
        addPart(parsingMessagesSection);
407

    
408
        addPart(nonViralNameSection);
409

    
410
    }
411

    
412
    private void createNameSections(RootElement parent) {
413
        destroySections();
414
        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(
415
                getConversationHolder(), parent, this, false, ExpandableComposite.TWISTIE
416
                        | ExpandableComposite.EXPANDED);
417
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
418

    
419
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
420
        		ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
421
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
422

    
423
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
424
        		ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
425
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
426

    
427
        addPart(nonViralNameSection);
428
        addPart(nomenclaturalStatusSection);
429
        addPart(referenceDetailSection);
430
//TODO RL
431
        if(!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.IS_RL)){
432
			ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
433
	        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
434

    
435
	        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
436
	        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
437

    
438
	        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
439
	        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
440
	        addPart(protologSection);
441
	        addPart(typeDesignationSection);
442
	        addPart(nameRelationshipSection);
443
        }
444
    }
445

    
446
    private void createReferenceSections(RootElement parent) {
447
        destroySections();
448

    
449
        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this,
450
        		ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
451

    
452
        addPart(referenceDetailSection);
453
    }
454

    
455
    private void createTeamOrPersonBaseDetailSection(RootElement parent) {
456
        destroySections();
457
        TeamOrPersonBaseDetailSection teamOrPersonBaseDetailSection = formFactory.createTeamOrPersonBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
458

    
459
        addPart(teamOrPersonBaseDetailSection);
460
    }
461

    
462
    private void createTeamDetailSection(RootElement parent) {
463
        destroySections();
464
        TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
465

    
466
        addPart(teamDetailSection);
467
    }
468

    
469
    private void createPersonDetailSection(RootElement parent) {
470
        destroySections();
471
        PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
472
        addPart(personDetailSection);
473
    }
474

    
475
    private void createDescriptionElementSection(RootElement parent) {
476
        destroySections();
477

    
478
        DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
479

    
480
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
481

    
482
        DescriptionElementSourceSection descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
483

    
484
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
485

    
486
        DescriptionElementMediaSection descriptionElementMediaSection = formFactory.createDescriptionElementMediaSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
487

    
488
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
489

    
490
        addPart(descriptionElementDetailSection);
491
        addPart(descriptionElementSourceSection);
492
        addPart(descriptionElementMediaSection);
493
    }
494

    
495
    private void createDescriptionSection(RootElement parent) {
496
        destroySections();
497
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
498

    
499
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
500

    
501
        NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
502

    
503
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
504

    
505
//        DescribedSpecimenSection describedSpecimenSection = formFactory.createDescribedSpecimenSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
506
//
507
//        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
508

    
509
        //		DescriptionSourceSection descriptionSourceSection = (DescriptionSourceSection) formFactory
510
        //				.createEntityDetailSection(EntityDetailType.DESCRIPTIONSOURCE,
511
        //						getConversationHolder(), parent, Section.TWISTIE);
512
        //
513
        //		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
514

    
515
        ScopeSection scopeSection = formFactory.createScopeSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
516

    
517
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
518

    
519
        addPart(descriptionDetailSection);
520
        addPart(naturalLanguageSection);
521
//        addPart(describedSpecimenSection);
522
        //		addPart(descriptionSourceSection);
523
        addPart(scopeSection);
524
    }
525

    
526
    private void createSpecimenDescriptionSection(RootElement parent) {
527
        destroySections();
528
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
529
        addPart(descriptionDetailSection);
530
    }
531

    
532
    private void createUseDescriptionSection(RootElement parent) {
533
        destroySections();
534
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
535

    
536
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
537

    
538
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
539

    
540
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
541

    
542
        addPart(descriptionDetailSection);
543
        addPart(descriptionSourceSection);
544

    
545
    }
546

    
547
    private void createImageGallerySection(RootElement parent) {
548
        destroySections();
549
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
550

    
551
        addPart(descriptionDetailSection);
552
    }
553

    
554
    private void createMediaElementSection(RootElement parent) {
555
        destroySections();
556

    
557
        MediaDetailsSection mediaDetailSection = formFactory.createMediaDetailsSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
558

    
559
        addPart(mediaDetailSection);
560
    }
561

    
562
    private void createDerivedUnitBaseElementSection(RootElement parent) {
563
        destroySections();
564

    
565
        DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
566
        //TODO for DerivateEditor do not use facade anymore to avoid this special case handling #4539
567
        if(!(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart)){
568
            derivedUnitGeneralDetailSection.setShowOnlyDerivedUnitData(true);
569
        }
570
        addPart(derivedUnitGeneralDetailSection);
571

    
572
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
573

    
574
        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
575
        addPart(derivedUnitBaseDetailSection);
576

    
577
        //for editors working with facades
578
        if(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart){
579
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
580
            GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
581
            addPart(gatheringEventDetailSection);
582

    
583
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
584
            FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
585
            addPart(fieldUnitDetailSection);
586
        }
587
        else{
588

    
589
            if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_TAXON_ASSOCIATIONS)){
590
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
591
                TaxonAssociationDetailSection taxonAssociationDetailSection = formFactory.createTaxonAssociationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
592
                addPart(taxonAssociationDetailSection);
593
            }
594
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
595
            DerivedUnitFacadeIdentifierSection identifierDetailSection = formFactory.createDerivedUnitFacadeIdentifierSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
596
            addPart(identifierDetailSection);
597
        }
598
        if(!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.DETERMINATION_ONLY_FOR_FIELD_UNITS)){
599
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
600
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
601
            addPart(determinationDetailSection);
602
        }
603

    
604
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
605
        DerivedUnitTypeDesignationSection derivedUnitTypeDesignationSection = formFactory.createDerivedUnitTypeDesignationSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
606
        addPart(derivedUnitTypeDesignationSection);
607

    
608
    }
609

    
610
    private void createFieldUnitSection(RootElement parent) {
611
        destroySections();
612

    
613
        FieldUnitGeneralDetailSection fielUnitGeneralDetailSection = formFactory.createFieldUnitGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
614

    
615
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
616

    
617
        GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
618

    
619
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
620

    
621
        FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
622

    
623
        addPart(fielUnitGeneralDetailSection);
624
        addPart(gatheringEventDetailSection);
625
        addPart(fieldUnitDetailSection);
626

    
627
        if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.DETERMINATION_ONLY_FOR_FIELD_UNITS)){
628
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
629
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
630
            addPart(determinationDetailSection);
631
        }
632
    }
633

    
634
    private void createTissueSampleSection(RootElement parent) {
635
        destroySections();
636

    
637
        TissueSampleGeneralDetailSection section = formFactory.createTissueSampleGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
638

    
639
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
640

    
641
        SampleDesignationDetailSection sampleDesignationDetailSection = formFactory.createSampleDesignationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
642

    
643
        addPart(section);
644
        addPart(sampleDesignationDetailSection);
645
    }
646

    
647
    private void createDnaSampleSection(RootElement parent) {
648
        destroySections();
649

    
650
        DnaSampleGeneralDetailSection section = formFactory.createDnaSampleGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
651

    
652
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
653

    
654
        DnaSamplePreparationPreservationSection preparationPreservationSection = formFactory.createDnaSamplePreparationPreservationSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
655

    
656
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
657

    
658
        DnaQualityDetailSection qualitySection = formFactory.createDnaQualityDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
659

    
660
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
661

    
662
        SampleDesignationDetailSection sampleDesignationDetailSection = formFactory.createSampleDesignationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
663

    
664
        addPart(section);
665
        addPart(preparationPreservationSection);
666
        addPart(qualitySection);
667
        addPart(sampleDesignationDetailSection);
668
    }
669

    
670
    private void createSequenceSection(RootElement parent) {
671
        destroySections();
672

    
673
        SequenceGeneralDetailSection section = formFactory.createSequenceGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
674

    
675
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
676

    
677
        SequenceReferenceCollectionDetailSection referenceSection = formFactory.createSequenceReferenceCollectionDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
678

    
679
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
680

    
681
        SequenceContigFileCollectionDetailSection contigFileSection = formFactory.createSequenceContigFileCollectionDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
682

    
683

    
684
        addPart(section);
685
        addPart(referenceSection);
686
        addPart(contigFileSection);
687
    }
688

    
689
    private void createSingleReadSection(RootElement parent) {
690
        destroySections();
691

    
692
        SingleReadGeneralDetailSection section = formFactory.createSingleReadGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
693
        addPart(section);
694

    
695
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
696

    
697
        SingleReadPherogramCollectionDetailSection pherogramSection = formFactory.createSingleReadPherogramCollectionDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
698
        addPart(pherogramSection);
699

    
700
    }
701

    
702
    private void createMediaSpecimenSection(RootElement parent) {
703
        destroySections();
704

    
705
        MediaSpecimenGeneralDetailSection generalSection = formFactory.createMediaSpecimenGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
706
        addPart(generalSection);
707

    
708
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
709

    
710
        RightsSection rightsSection = formFactory.createRightsSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
711
        addPart(rightsSection);
712

    
713
    }
714

    
715
    private void createFeatureDistributionSection(RootElement parent) {
716
        destroySections();
717

    
718
        FeatureDistributionDetailSection featureDistributionSection = formFactory.createFeatureDistributionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
719

    
720
        addPart(featureDistributionSection);
721
    }
722

    
723
    private void createPolytomousKeyNodeSection(RootElement parent) {
724
        destroySections();
725

    
726
        PolytomousKeyDetailSection polytomousKeyDetailSection = formFactory.createPolytomousKeyDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
727

    
728
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
729

    
730
        PolytomousKeyNodeDetailSection polytomousKeyNodeDetailSection = formFactory.createPolytomousKeyNodeDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
731

    
732
        addPart(polytomousKeyDetailSection);
733
        addPart(polytomousKeyNodeDetailSection);
734

    
735
    }
736

    
737
    private void createUseRecordSection(RootElement parent) {
738
        destroySections();
739

    
740
        UseRecordDetailSection descriptionUseRecordSection = formFactory.createUseRecordDetailSection(getConversationHolder(), parent, this,ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
741

    
742
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
743

    
744
        addPart(descriptionUseRecordSection);
745

    
746

    
747
    }
748

    
749
    private void createUserSection(RootElement parent) {
750
        destroySections();
751

    
752
        UserDetailSection userDetailSection = formFactory.createUserDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
753

    
754
        GroupsByUserDetailSection groupByUserDetailSection = formFactory.createGroupsByUserDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
755

    
756
        addPart(userDetailSection);
757
        addPart(groupByUserDetailSection);
758
    }
759

    
760
    private void createTaxonRelationshipSection(RootElement parent) {
761
        destroySections();
762

    
763
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
764

    
765
        ReferencedEntityDetailSection referencedEntityBaseDetailSection = formFactory.createReferencedEntityDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
766
        addPart(taxonRelationshipDetailSection);
767
        addPart(referencedEntityBaseDetailSection);
768
    }
769

    
770
    private void createTermVocabularySection(RootElement parent) {
771
        destroySections();
772

    
773
        TermVocabularyDetailSection termVocabularyDetailSection = formFactory.createTermVocabularyDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
774
        addPart(termVocabularyDetailSection);
775
    }
776

    
777
    private void createDefinedTermSection(RootElement parent) {
778
        destroySections();
779

    
780
        AbstractFormSection<?> definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
781
        addPart(definedTermDetailSection);
782
    }
783

    
784
	@Override
785
	public void update(CdmDataChangeMap arg0) {
786
		
787
	}
788

    
789
}
(3-3/3)