Project

General

Profile

Download (52.4 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2011 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.view.e4.details;
11

    
12
import java.util.EnumSet;
13
import java.util.HashSet;
14
import java.util.Set;
15

    
16
import javax.inject.Inject;
17

    
18
import org.eclipse.e4.core.di.annotations.Optional;
19
import org.eclipse.e4.ui.di.UIEventTopic;
20
import org.eclipse.jface.viewers.ISelection;
21
import org.eclipse.jface.viewers.IStructuredSelection;
22
import org.eclipse.jface.viewers.SelectionChangedEvent;
23
import org.eclipse.jface.viewers.TreeNode;
24
import org.eclipse.swt.SWT;
25

    
26
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
27
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
28
import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
29
import eu.etaxonomy.cdm.model.agent.Person;
30
import eu.etaxonomy.cdm.model.agent.Team;
31
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
32
import eu.etaxonomy.cdm.model.common.Marker;
33
import eu.etaxonomy.cdm.model.description.CategoricalData;
34
import eu.etaxonomy.cdm.model.description.Character;
35
import eu.etaxonomy.cdm.model.description.DescriptionBase;
36
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
37
import eu.etaxonomy.cdm.model.description.Distribution;
38
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
39
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
40
import eu.etaxonomy.cdm.model.description.TaxonDescription;
41
import eu.etaxonomy.cdm.model.media.Media;
42
import eu.etaxonomy.cdm.model.molecular.DnaSample;
43
import eu.etaxonomy.cdm.model.molecular.Sequence;
44
import eu.etaxonomy.cdm.model.molecular.SingleRead;
45
import eu.etaxonomy.cdm.model.name.TaxonName;
46
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
47
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
48
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
49
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
50
import eu.etaxonomy.cdm.model.permission.CRUD;
51
import eu.etaxonomy.cdm.model.permission.Group;
52
import eu.etaxonomy.cdm.model.permission.User;
53
import eu.etaxonomy.cdm.model.reference.Reference;
54
import eu.etaxonomy.cdm.model.taxon.Synonym;
55
import eu.etaxonomy.cdm.model.taxon.Taxon;
56
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
57
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
58
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
59
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
60
import eu.etaxonomy.cdm.model.term.TermNode;
61
import eu.etaxonomy.cdm.model.term.TermTree;
62
import eu.etaxonomy.cdm.model.term.TermType;
63
import eu.etaxonomy.cdm.model.term.TermVocabulary;
64
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
65
import eu.etaxonomy.taxeditor.editor.IDistributionEditorPart;
66
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
67
import eu.etaxonomy.taxeditor.l10n.Messages;
68
import eu.etaxonomy.taxeditor.model.AbstractUtility;
69
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
70
import eu.etaxonomy.taxeditor.model.IDerivedUnitFacadePart;
71
import eu.etaxonomy.taxeditor.model.MessagingUtils;
72
import eu.etaxonomy.taxeditor.model.PolytomousKeyRelationship;
73
import eu.etaxonomy.taxeditor.preference.NameDetailsConfigurator;
74
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
75
import eu.etaxonomy.taxeditor.store.CdmStore;
76
import eu.etaxonomy.taxeditor.store.StoreUtil;
77
import eu.etaxonomy.taxeditor.store.UsageTermCollection;
78
import eu.etaxonomy.taxeditor.ui.element.RootElement;
79
import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailSection;
80
import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailSection;
81
import eu.etaxonomy.taxeditor.ui.section.agent.TeamOrPersonBaseDetailSection;
82
import eu.etaxonomy.taxeditor.ui.section.common.ReferencedEntityDetailSection;
83
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailSection;
84
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailSection;
85
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementMediaSection;
86
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementSourceSection;
87
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionSourceSection;
88
import eu.etaxonomy.taxeditor.ui.section.description.MediaDetailsSection;
89
import eu.etaxonomy.taxeditor.ui.section.description.NaturalLanguageSection;
90
import eu.etaxonomy.taxeditor.ui.section.description.ScopeSection;
91
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterDetailSection;
92
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDetailSection;
93
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailSection;
94
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureNodeDetailSection;
95
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureTreeDetailSection;
96
import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailSection;
97
import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailSection;
98
import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailSection;
99
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailSection;
100
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailSection;
101
import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailSection;
102
import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
103
import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;
104
import eu.etaxonomy.taxeditor.ui.section.name.ProtologueSection;
105
import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
106
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
107
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
108
import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
109
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitDetailSection;
110
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailSection;
111
import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
112
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationSection;
113
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailSection;
114
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaQualityDetailSection;
115
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSampleGeneralDetailSection;
116
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSamplePreparationPreservationSection;
117
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailSection;
118
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceContigFileCollectionDetailSection;
119
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceGeneralDetailSection;
120
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceReferenceCollectionDetailSection;
121
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadGeneralDetailSection;
122
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadPherogramCollectionDetailSection;
123
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailSection;
124
import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
125
import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
126
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
127
import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsSection;
128
import eu.etaxonomy.taxeditor.ui.section.supplemental.identifier.DerivedUnitFacadeIdentifierSection;
129
import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;
130
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailSection;
131
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonRelationshipDetailSection;
132
import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailSection;
133
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailSection;
134
import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailSection;
135
import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailSection;
136
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermMediaSection;
137
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
138
import eu.etaxonomy.taxeditor.view.e4.AbstractCdmDataViewerE4;
139

    
140
/**
141
 *
142
 * The DetailsViewer handles the content of the details view (
143
 * {@link DetailsPartE4}).<br>
144
 * Depending on the type of the selected element the section of the details view
145
 * are created.
146
 *
147
 * @author pplitzner
148
 * @date 18.07.2017
149
 *
150
 */
151
public class DetailsViewerE4 extends AbstractCdmDataViewerE4 {
152

    
153
    private ISelection selection;
154
    private boolean detailsEnabled = true;
155
    private Object activePart;
156

    
157
    public boolean isDetailsEnabled() {
158
		return detailsEnabled;
159
	}
160

    
161
	public void setDetailsEnabled(boolean detailsEnabled) {
162
		this.detailsEnabled = detailsEnabled;
163
	}
164

    
165
	public void setInput(Object input, Object activePart) {
166
	    this.activePart = activePart;
167
        setInput(input);
168

    
169
    }
170
    // START HACK TO MAKE THE DERIVED UNIT FACADE WORK
171
    // since we are getting implementations of DerivedUnitBase from the bulk
172
    // editor
173
    // and not derived unit facade objects,
174

    
175
    @Override
176
    public void setInput(Object input) {
177

    
178
        if(input instanceof TreeNode){
179
            input = ((TreeNode) input).getValue();
180
        }
181
        if(input instanceof GbifResponse){
182
            input = ((GbifResponse) input).getDerivedUnitFacade();
183
        }
184
        if (input !=null && input.getClass().equals(DerivedUnit.class)) {
185
            DerivedUnit derivedUnit = (DerivedUnit)input;
186
            try {
187
                input = DerivedUnitFacade.NewInstance(derivedUnit,
188
                        PreferencesUtil.getDerivedUnitConfigurator());
189
            } catch (DerivedUnitFacadeNotSupportedException e) {
190
                //                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
191
            }
192
        }
193
        else if(input instanceof FieldUnit){
194
            input = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) input);
195
        }
196
        super.setInput(input);
197
    }
198

    
199
    @Override
200
    protected void markViewPartDirty() {
201
        if (getInput() instanceof DerivedUnitFacade) {
202
            if(part instanceof IDerivedUnitFacadePart){
203
                part.changed(getInput());
204
            }
205
            else{
206
                DerivedUnitFacade facade = (DerivedUnitFacade) getInput();
207
                if(facade.innerDerivedUnit()!=null){
208
                    part.changed(facade.innerDerivedUnit());
209
                }
210
                else if(facade.innerFieldUnit()!=null){
211
                    part.changed(facade.innerFieldUnit());
212
                }
213
            }
214
        }
215
        else{
216
            super.markViewPartDirty();
217
        }
218
    }
219

    
220
    /** {@inheritDoc} */
221
    @Override
222
    protected void showParts() {
223
        // FIXME (CM) : Need to clean out this code.
224
        // Too much type checking to decide which detail view to display.
225
        // Need to build in a mechanism where navigators / editors are 'aware'
226
        // of the corresponding detail viewer.
227

    
228
        Object input = getInput();
229
        if (input == null){
230
            return;
231
        }
232
        destroySections();
233
        if (input instanceof TaxonBase) {
234
            if(((TaxonBase) input).getName()==null){
235
                createEmptySection(Messages.DetailsViewerE4_TAXON_HAS_NO_NAME, rootElement);
236
            }
237
            else{
238
                createTaxonSections(rootElement);
239
            }
240

    
241
        } else if (input instanceof TaxonName) {
242
            createNameSections(rootElement);
243

    
244
        } else if (input instanceof Reference) {
245
            createReferenceSections(rootElement);
246

    
247
        } else if (input instanceof Team) {
248
            createTeamDetailSection(rootElement);
249

    
250
        } else if (input instanceof Person) {
251
            createPersonDetailSection(rootElement);
252

    
253
        } else if (input instanceof TeamOrPersonBase) {
254
            createTeamOrPersonBaseDetailSection(rootElement);
255

    
256
        } else if (input instanceof DescriptionBase) {
257
            if(input instanceof SpecimenDescription){
258
                //TODO: add more sections to DetailsView for SpecimenDescription
259
                createSpecimenDescriptionSection(rootElement);
260
            }
261
            else{
262
                Set<Marker> descriptionMarkers = ((DescriptionBase<?>) input).getMarkers();
263

    
264
                Boolean isUseDescription = false;
265
                for (Marker marker : descriptionMarkers) {
266
                    if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
267
                        isUseDescription = true;
268
                    }
269
                }
270
                if (((DescriptionBase<?>) input).isImageGallery()) {
271
                    createImageGallerySection(rootElement);
272

    
273
                } else if (isUseDescription) {
274
                    createUseDescriptionSection(rootElement);
275
                } else if (input instanceof TaxonDescription){
276
                    createTaxonDescriptionSection(rootElement);
277

    
278
                } else{
279
                    createDescriptionSection(rootElement, false);
280
                }
281
            }
282
        } else if (input instanceof DescriptionElementBase){
283
            Set<Marker> descriptionMarkers = new HashSet<>();
284
            if(((DescriptionElementBase) input).getInDescription()!=null) {
285
                descriptionMarkers = ((DescriptionElementBase) input).getInDescription().getMarkers();
286
            }
287

    
288
            Boolean isUseDescription = false;
289
            for (Marker marker : descriptionMarkers) {
290
                if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
291
                    isUseDescription = true;
292
                }
293
            }
294

    
295
            if (isUseDescription == true && input instanceof CategoricalData) {
296
                createUseRecordSection(rootElement);
297
            } else {
298
                createDescriptionElementSection(rootElement, activePart);
299
            }
300

    
301
        } else if (input instanceof Media) {
302
            createMediaElementSection(rootElement);
303

    
304
        }
305
        //FIXME hack to show more informative message to the user when
306
        //DerivedUnit has more than one FieldUnit #4363
307
        else if (input.getClass().equals(DerivedUnit.class)) {
308
            DerivedUnit derivedUnit = (DerivedUnit)input;
309
            try {
310
                input = DerivedUnitFacade.NewInstance(derivedUnit,
311
                        PreferencesUtil.getDerivedUnitConfigurator());
312
            } catch (DerivedUnitFacadeNotSupportedException e) {
313
                createEmptySection(e.getMessage(), rootElement);
314
            }
315
        }
316
        else if (input instanceof DerivedUnitFacade) {
317
            if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.FieldUnit){
318
                if(((DerivedUnitFacade) input).innerFieldUnit()==null){
319
                    MessagingUtils.error(DetailsViewerE4.class, "FieldUnit of facade is null", null); //$NON-NLS-1$
320
                }
321
                else{
322
                    createFieldUnitSection(rootElement);
323
                }
324
            }
325
            else if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.PreservedSpecimen){
326
                if(((DerivedUnitFacade) input).innerDerivedUnit()==null){
327
                    MessagingUtils.error(DetailsViewerE4.class, "DerivedUnit of facade is null", null); //$NON-NLS-1$
328
                }
329
                else{
330
                    createDerivedUnitBaseElementSection(rootElement);
331
                }
332
            }
333
            else if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.TissueSample){
334
                //TissueSample should only be created by using it's own class
335
                //in future using only one class with different SpecimenOrObservationTypes is desired
336
                createTissueSampleSection(rootElement);
337
            }
338
            else{
339
                createDerivedUnitBaseElementSection(rootElement);
340
            }
341
        } else if (input instanceof DnaSample){
342
            DnaSample dnaSample = (DnaSample)input;
343
            if(dnaSample.getRecordBasis()==SpecimenOrObservationType.TissueSample){
344
                createTissueSampleSection(rootElement);
345
            }
346
            else if(dnaSample.getRecordBasis()==SpecimenOrObservationType.DnaSample){
347
                createDnaSampleSection(rootElement);
348
            }
349
        } else if (input instanceof MediaSpecimen){
350
            createMediaSpecimenSection(rootElement);
351
        }
352
        else if(input instanceof Sequence){
353
            createSequenceSection(rootElement);
354
        }
355
        else if(input instanceof SingleRead){
356
            createSingleReadSection(rootElement);
357
        }
358
        else if (input instanceof FeatureNodeContainer) {
359
            createFeatureDistributionSection(rootElement);
360

    
361
        } else if (input instanceof TermNode) {
362
            TermType type= ((TermNode) input).getTermType();
363
            if(type.equals(TermType.Character)){
364
                createCharacterNodeSection(rootElement);
365
            }
366
            else if(type.equals(TermType.Feature)){
367
                createFeatureNodeSection(rootElement);
368
            }
369

    
370
        } else if (input instanceof TermTree) {
371
            createFeatureTreeSection(rootElement);
372

    
373
        } else if (input instanceof Character) {
374
            createCharacterSection(rootElement);
375

    
376
        }else if ((input instanceof PolytomousKeyNode) || (input instanceof PolytomousKeyRelationship)) {
377
            createPolytomousKeyNodeSection(rootElement);
378
        } else if (input instanceof User) {
379
            createUserSection(rootElement);
380
        } else if (input instanceof Group) {
381
            createGroupSection(rootElement);
382
        } else if (input instanceof TaxonRelationship && ((TaxonRelationship)input).getType()!=null
383
                && (((TaxonRelationship)input).getType().isAnyMisappliedName() || ((TaxonRelationship)input).getType().isAnySynonym() || ((TaxonRelationship)input).getType().isMisappliedNameOrInvalidDesignation())){
384
            createMisappliedNameSection(rootElement);
385
        }else if (input instanceof TaxonRelationship ) {
386
            createTaxonRelationshipSection(rootElement);
387
        } else if (input instanceof TermVocabulary) {
388
            createTermVocabularySection(rootElement);
389
        } else if (input instanceof DefinedTermBase) {
390
            createDefinedTermSection(rootElement);
391

    
392
        } else if (input instanceof SelectionChangedEvent ) {
393
            IStructuredSelection sel =(IStructuredSelection) ((SelectionChangedEvent)input).getSelection();
394
            if (sel.getFirstElement()instanceof Distribution){
395
                createDescriptionElementSection(rootElement);
396
            }
397

    
398
//            createDescriptionElementSection(rootElement);
399

    
400
        }else {
401
            createEmptySection(null, rootElement);
402
        }
403
        layout();
404

    
405
    }
406

    
407
    private void createGroupSection(RootElement parent) {
408
        GroupDetailSection groupDetailSection = formFactory.createGroupDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GroupDetailSection.class, getInput().getClass().getCanonicalName()));
409
        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(MemberDetailSection.class, getInput().getClass().getCanonicalName()));
410
        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(getConversationHolder(), parent,StoreUtil.getSectionStyle(GrantedAuthorityDetailSection.class, getInput().getClass().getCanonicalName()));
411

    
412
        addPart(groupDetailSection);
413
        addPart(memberDetailSection);
414
        addPart(grantedAuthorityDetailSection);
415
    }
416

    
417
    /** {@inheritDoc} */
418
    @Override
419
    public ISelection getSelection() {
420
        return selection;
421
    }
422

    
423
    /** {@inheritDoc} */
424
    @Override
425
    public void setSelection(ISelection selection, boolean reveal) {
426

    
427
        this.selection = selection;
428

    
429
        if(this.selection!=null){
430
            SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
431
            fireSelectionChanged(selectionChangedEvent);
432
        }
433

    
434
    }
435

    
436
    private void createTaxonSections(RootElement parent) {
437
        NameDetailsConfigurator config = PreferencesUtil.getPreferredNameDetailsConfiguration();
438
        EnumSet<CRUD> requiredCrud;
439
        if(getInput() == null || StoreUtil.getCdmEntity(getInput()).getId() == 0) {
440
            // new entity, not yet saved
441
            requiredCrud = EnumSet.of(CRUD.CREATE);
442
        } else {
443
            requiredCrud = EnumSet.of(CRUD.UPDATE);
444
        }
445
        boolean hasPermission = CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getInput()), requiredCrud);
446
        TaxonBase taxonBase = (TaxonBase)getInput();
447
        Taxon acceptedTaxon = null;
448
        if (taxonBase instanceof Taxon){
449
            acceptedTaxon = (Taxon)taxonBase;
450
        }else{
451
           acceptedTaxon = ((Synonym)taxonBase).getAcceptedTaxon();
452
        }
453
        Set<TaxonNode> nodes = acceptedTaxon.getTaxonNodes();
454
        // check for subtree permissions as well.
455
        if (hasPermission){
456
            for (TaxonNode node: nodes){
457
                hasPermission &= CdmStore.currentAuthentiationHasPermission(node, requiredCrud);
458
            }
459
        }
460
        detailsEnabled = hasPermission;
461
        ParsingMessagesSection parsingMessagesSection = formFactory.createParsingMessagesSection(getConversationHolder(), parent, this,
462
                StoreUtil.getSectionStyle(ParsingMessagesSection.class, getInput().getClass().getCanonicalName(), true));
463
        if (config == null){
464
            TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this,
465
                    StoreUtil.getSectionStyle(TaxonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
466
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
467
          //  boolean hasPermission = CdmStore.currentAuthentiationHasPermission(getInput(), Operation.UPDATE);
468
            taxonBaseDetailSection.setEnabled(detailsEnabled);
469
            addPart(taxonBaseDetailSection);
470
        }else{
471
            if (config.isTaxonSectionActivated()){
472
                TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this,
473
                        StoreUtil.getSectionStyle(TaxonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
474
                taxonBaseDetailSection.setEnabled(detailsEnabled);
475
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
476
                addPart(taxonBaseDetailSection);
477
            }
478
        }
479
        NonViralNameDetailSection nonViralNameSection = formFactory
480
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
481
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
482
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
483
        nonViralNameSection.setEnabled(detailsEnabled);
484
        if (config == null || config.isNomenclaturalReferenceSectionActivated()){
485
            NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
486
                    StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
487
            referenceDetailSection.setEnabled(detailsEnabled);
488
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
489
            addPart(referenceDetailSection);
490

    
491
        }
492
        if ( config == null || config.isNomenclaturalStatusSectionActivated()){
493
            NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
494
                    StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
495
            nomenclaturalStatusSection.setEnabled(detailsEnabled);
496
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
497
            addPart(nomenclaturalStatusSection);
498
        }
499

    
500
        if ( config == null || config.isProtologueActivated()){
501
            ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
502
            protologSection.setEnabled(detailsEnabled);
503
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
504
            addPart(protologSection);
505
        }
506

    
507
        if (config == null || config.isTypeDesignationSectionActivated()){
508
            TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
509
            typeDesignationSection.setEnabled(detailsEnabled);
510
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
511
            addPart(typeDesignationSection);
512
        }
513

    
514
        if (config == null || config.isNameRelationsSectionActivated()){
515
            NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
516
            nameRelationshipSection.setEnabled(detailsEnabled);
517
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
518
            addPart(nameRelationshipSection);
519
        }
520

    
521

    
522
        addPart(parsingMessagesSection);
523

    
524
        addPart(nonViralNameSection);
525

    
526
    }
527

    
528
    private void createNameSections(RootElement parent) {
529
        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(
530
                getConversationHolder(), parent, this, false, StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
531

    
532
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
533

    
534
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
535
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
536
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
537

    
538
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
539
                StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
540
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
541

    
542
        addPart(nonViralNameSection);
543
        addPart(nomenclaturalStatusSection);
544
        addPart(referenceDetailSection);
545

    
546
        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
547
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
548

    
549
        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
550
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
551

    
552
        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
553
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
554
        addPart(protologSection);
555
        addPart(typeDesignationSection);
556
        addPart(nameRelationshipSection);
557

    
558
    }
559

    
560
    private void createReferenceSections(RootElement parent) {
561
        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this,
562
                StoreUtil.getSectionStyle(ReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
563

    
564
        addPart(referenceDetailSection);
565
    }
566

    
567
    private void createTeamOrPersonBaseDetailSection(RootElement parent) {
568
        TeamOrPersonBaseDetailSection teamOrPersonBaseDetailSection = formFactory.createTeamOrPersonBaseDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TeamOrPersonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
569

    
570
        addPart(teamOrPersonBaseDetailSection);
571
    }
572

    
573
    private void createTeamDetailSection(RootElement parent) {
574
        TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TeamDetailSection.class, getInput().getClass().getCanonicalName(), true));
575

    
576
        addPart(teamDetailSection);
577
    }
578

    
579
    private void createPersonDetailSection(RootElement parent) {
580
        PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(PersonDetailSection.class, getInput().getClass().getCanonicalName(), true));
581
        addPart(personDetailSection);
582
    }
583

    
584
    private void createDescriptionElementSection(RootElement parent) {
585
        createDescriptionElementSection(parent, null);
586
    }
587

    
588
    private void createDescriptionElementSection(RootElement parent, Object activePart) {
589
        DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionElementDetailSection.class, getInput().getClass().getCanonicalName(), true));
590
        descriptionElementDetailSection.setEnabled(this.detailsEnabled);
591

    
592
        //  IntextReferenceSection intextReferenceSection = formFactory.createIntextReferenceSection(getConversationHolder(), parent,  getSectionStyle(.class, getInput().getClass().getCanonicalName()));
593

    
594
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
595
        DescriptionElementSourceSection descriptionElementSourceSection;
596
        if (activePart != null && activePart instanceof IDistributionEditorPart){
597
            Reference defaultSource =((IDistributionEditorPart)activePart).getEditor().getDefaultSource();
598
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, defaultSource, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()));
599
        }else{
600
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()) );
601
        }
602

    
603

    
604
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
605

    
606
        DescriptionElementMediaSection descriptionElementMediaSection = formFactory.createDescriptionElementMediaSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionElementMediaSection.class, getInput().getClass().getCanonicalName()));
607

    
608
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
609

    
610
        addPart(descriptionElementDetailSection);
611
        addPart(descriptionElementSourceSection);
612
        addPart(descriptionElementMediaSection);
613
    }
614

    
615
    private void createDescriptionSection(RootElement parent, boolean isTaxonDescription) {
616
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName(), true));
617
        addPart(descriptionDetailSection);
618

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

    
621
        if(isTaxonDescription) {
622
            NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(
623
                    getConversationHolder(), parent, this, StoreUtil.getSectionStyle(NaturalLanguageSection.class, getInput().getClass().getCanonicalName(), true));
624
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
625
            addPart(naturalLanguageSection);
626
        }
627
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(
628
                getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName(), true));
629
        addPart(descriptionSourceSection);
630

    
631
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
632

    
633
        if(isTaxonDescription) {
634
            ScopeSection scopeSection = formFactory.createScopeSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ScopeSection.class, getInput().getClass().getCanonicalName()));
635
            addPart(scopeSection);
636
        }
637
    }
638

    
639
    private void createTaxonDescriptionSection(RootElement parent) {
640
        createDescriptionSection(parent, true);
641
    }
642

    
643
    private void createSpecimenDescriptionSection(RootElement parent) {
644
        createDescriptionSection(parent, false);
645
    }
646

    
647
    private void createUseDescriptionSection(RootElement parent) {
648
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName()));
649

    
650
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
651

    
652
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName()));
653

    
654
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
655

    
656
        addPart(descriptionDetailSection);
657
        addPart(descriptionSourceSection);
658

    
659
    }
660

    
661
    private void createImageGallerySection(RootElement parent) {
662
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName()));
663

    
664
        addPart(descriptionDetailSection);
665
    }
666

    
667
    private void createMediaElementSection(RootElement parent) {
668
        MediaDetailsSection mediaDetailSection = formFactory.createMediaDetailsSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(MediaDetailsSection.class, getInput().getClass().getCanonicalName(), true));
669

    
670
        addPart(mediaDetailSection);
671
    }
672

    
673
    private void createDerivedUnitBaseElementSection(RootElement parent) {
674
        DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
675
        //TODO for DerivateEditor do not use facade anymore to avoid this special case handling #4539
676
        if(!(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart)){
677
            derivedUnitGeneralDetailSection.setShowOnlyDerivedUnitData(true);
678
        }
679
        addPart(derivedUnitGeneralDetailSection);
680

    
681
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
682

    
683
        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
684
        addPart(derivedUnitBaseDetailSection);
685

    
686
        //for editors working with facades
687
        if(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart){
688
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
689
            GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GatheringEventDetailSection.class, getInput().getClass().getCanonicalName()));
690
            addPart(gatheringEventDetailSection);
691

    
692
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
693
            FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitDetailSection.class, getInput().getClass().getCanonicalName()));
694
            addPart(fieldUnitDetailSection);
695
        }
696
        else{
697

    
698
            if(PreferencesUtil.isShowTaxonAssociations()){
699
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
700
                TaxonAssociationDetailSection taxonAssociationDetailSection = formFactory.createTaxonAssociationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TaxonAssociationDetailSection.class, getInput().getClass().getCanonicalName(), true));
701
                addPart(taxonAssociationDetailSection);
702
            }
703
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
704
            DerivedUnitFacadeIdentifierSection identifierDetailSection = formFactory.createDerivedUnitFacadeIdentifierSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DerivedUnitFacadeIdentifierSection.class, getInput().getClass().getCanonicalName()));
705
            addPart(identifierDetailSection);
706
        }
707
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
708
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
709
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
710
            addPart(determinationDetailSection);
711
        }
712

    
713
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
714
        DerivedUnitTypeDesignationSection derivedUnitTypeDesignationSection = formFactory.createDerivedUnitTypeDesignationSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitTypeDesignationSection.class, getInput().getClass().getCanonicalName()));
715
        addPart(derivedUnitTypeDesignationSection);
716

    
717
    }
718

    
719
    private void createFieldUnitSection(RootElement parent) {
720
        FieldUnitGeneralDetailSection fielUnitGeneralDetailSection = formFactory.createFieldUnitGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
721

    
722
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
723

    
724
        GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GatheringEventDetailSection.class, getInput().getClass().getCanonicalName()));
725

    
726
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
727

    
728
        FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitDetailSection.class, getInput().getClass().getCanonicalName()));
729

    
730
        addPart(fielUnitGeneralDetailSection);
731
        addPart(gatheringEventDetailSection);
732
        addPart(fieldUnitDetailSection);
733

    
734
        if(PreferencesUtil.isDeterminationOnlyForFieldUnits()){
735
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
736
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
737
            addPart(determinationDetailSection);
738
        }
739
    }
740

    
741
    private void createTissueSampleSection(RootElement parent) {
742
        TissueSampleGeneralDetailSection section = formFactory.createTissueSampleGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TissueSampleGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
743

    
744
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
745

    
746
        SampleDesignationDetailSection sampleDesignationDetailSection = formFactory.createSampleDesignationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(SampleDesignationDetailSection.class, getInput().getClass().getCanonicalName(), true));
747

    
748
        addPart(section);
749
        addPart(sampleDesignationDetailSection);
750
    }
751

    
752
    private void createDnaSampleSection(RootElement parent) {
753
        DnaSampleGeneralDetailSection section = formFactory.createDnaSampleGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DnaSampleGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
754

    
755
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
756

    
757
        DnaSamplePreparationPreservationSection preparationPreservationSection = formFactory.createDnaSamplePreparationPreservationSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DnaSamplePreparationPreservationSection.class, getInput().getClass().getCanonicalName(), true));
758

    
759
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
760

    
761
        DnaQualityDetailSection qualitySection = formFactory.createDnaQualityDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DnaQualityDetailSection.class, getInput().getClass().getCanonicalName(), true));
762

    
763
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
764

    
765
        SampleDesignationDetailSection sampleDesignationDetailSection = formFactory.createSampleDesignationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(SampleDesignationDetailSection.class, getInput().getClass().getCanonicalName(), true));
766

    
767
        addPart(section);
768
        addPart(preparationPreservationSection);
769
        addPart(qualitySection);
770
        addPart(sampleDesignationDetailSection);
771
    }
772

    
773
    private void createSequenceSection(RootElement parent) {
774
        SequenceGeneralDetailSection section = formFactory.createSequenceGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(SequenceGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
775

    
776
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
777

    
778
        SequenceReferenceCollectionDetailSection referenceSection = formFactory.createSequenceReferenceCollectionDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(SequenceReferenceCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
779

    
780
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
781

    
782
        SequenceContigFileCollectionDetailSection contigFileSection = formFactory.createSequenceContigFileCollectionDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(SequenceContigFileCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
783

    
784

    
785
        addPart(section);
786
        addPart(referenceSection);
787
        addPart(contigFileSection);
788
    }
789

    
790
    private void createSingleReadSection(RootElement parent) {
791
        SingleReadGeneralDetailSection section = formFactory.createSingleReadGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(SingleReadGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
792
        addPart(section);
793

    
794
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
795

    
796
        SingleReadPherogramCollectionDetailSection pherogramSection = formFactory.createSingleReadPherogramCollectionDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(SingleReadPherogramCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
797
        addPart(pherogramSection);
798

    
799
    }
800

    
801
    private void createMediaSpecimenSection(RootElement parent) {
802
        MediaSpecimenGeneralDetailSection generalSection = formFactory.createMediaSpecimenGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(MediaSpecimenGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
803
        addPart(generalSection);
804

    
805
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
806

    
807
        RightsSection rightsSection = formFactory.createRightsSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(RightsSection.class, getInput().getClass().getCanonicalName()));
808
        addPart(rightsSection);
809

    
810
    }
811

    
812
    private void createFeatureTreeSection(RootElement parent) {
813
        FeatureTreeDetailSection section = formFactory.createFeatureTreeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FeatureTreeDetailSection.class, getInput().getClass().getCanonicalName(), true));
814

    
815
        addPart(section);
816
    }
817

    
818
    private void createFeatureNodeSection(RootElement parent) {
819
        FeatureNodeDetailSection featureDistributionSection = formFactory.createFeatureNodeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FeatureNodeDetailSection.class, getInput().getClass().getCanonicalName(), true));
820

    
821
        addPart(featureDistributionSection);
822
    }
823

    
824
    private void createFeatureDistributionSection(RootElement parent) {
825
        FeatureDistributionDetailSection featureDistributionSection = formFactory.createFeatureDistributionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FeatureDistributionDetailSection.class, getInput().getClass().getCanonicalName(), true));
826

    
827
        addPart(featureDistributionSection);
828
    }
829

    
830
    private void createCharacterNodeSection(RootElement parent) {
831
        CharacterNodeDetailSection featureDistributionSection = formFactory.createCharacterNodeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
832
        addPart(featureDistributionSection);
833
    }
834

    
835
    private void createCharacterSection(RootElement parent) {
836
        CharacterDetailSection featureDistributionSection = formFactory.createCharacterDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
837
        addPart(featureDistributionSection);
838
    }
839

    
840
    private void createPolytomousKeyNodeSection(RootElement parent) {
841
        PolytomousKeyDetailSection polytomousKeyDetailSection = formFactory.createPolytomousKeyDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(PolytomousKeyDetailSection.class, getInput().getClass().getCanonicalName()));
842

    
843
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
844

    
845
        PolytomousKeyNodeDetailSection polytomousKeyNodeDetailSection = formFactory.createPolytomousKeyNodeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(PolytomousKeyNodeDetailSection.class, getInput().getClass().getCanonicalName(), true));
846

    
847
        addPart(polytomousKeyDetailSection);
848
        addPart(polytomousKeyNodeDetailSection);
849

    
850
    }
851

    
852
    private void createUseRecordSection(RootElement parent) {
853
        UseRecordDetailSection descriptionUseRecordSection = formFactory.createUseRecordDetailSection(getConversationHolder(), parent, this,StoreUtil.getSectionStyle(UseRecordDetailSection.class, getInput().getClass().getCanonicalName(), true));
854

    
855
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
856

    
857
        addPart(descriptionUseRecordSection);
858

    
859

    
860
    }
861

    
862
    private void createUserSection(RootElement parent) {
863
        UserDetailSection userDetailSection = formFactory.createUserDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(UserDetailSection.class, getInput().getClass().getCanonicalName(), true));
864

    
865
        GroupsByUserDetailSection groupByUserDetailSection = formFactory.createGroupsByUserDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(GroupsByUserDetailSection.class, getInput().getClass().getCanonicalName(), true));
866

    
867
        addPart(userDetailSection);
868
        addPart(groupByUserDetailSection);
869
    }
870

    
871
    private void createMisappliedNameSection(RootElement parent) {
872
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(getConversationHolder(), parent, this,
873
                StoreUtil.getSectionStyle(TaxonRelationshipDetailSection.class, getInput().getClass().getCanonicalName(), true));
874
        addPart(taxonRelationshipDetailSection);
875

    
876
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
877

    
878

    
879
        NonViralNameDetailSection nonViralNameSection = formFactory
880
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
881
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
882
        addPart(nonViralNameSection);
883

    
884
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
885

    
886
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
887
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
888
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
889
        addPart(referenceDetailSection);
890

    
891

    
892
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
893
            		StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
894
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
895
        addPart(nomenclaturalStatusSection);
896

    
897
		ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
898
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
899
		addPart(protologSection);
900

    
901
		TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
902
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
903
		addPart(typeDesignationSection);
904

    
905
		NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
906
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
907
		addPart(nameRelationshipSection);
908

    
909
    }
910

    
911
    private void createTaxonRelationshipSection(RootElement parent) {
912
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TaxonRelationshipDetailSection.class, getInput().getClass().getCanonicalName(), true));
913

    
914
        ReferencedEntityDetailSection referencedEntityBaseDetailSection = formFactory.createReferencedEntityDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(ReferencedEntityDetailSection.class, getInput().getClass().getCanonicalName(), true));
915
        addPart(taxonRelationshipDetailSection);
916
        addPart(referencedEntityBaseDetailSection);
917
    }
918
    private void createTermVocabularySection(RootElement parent) {
919
        TermVocabularyDetailSection termVocabularyDetailSection = formFactory.createTermVocabularyDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermVocabularyDetailSection.class, getInput().getClass().getCanonicalName(), true));
920
        addPart(termVocabularyDetailSection);
921
    }
922

    
923
    private void createDefinedTermSection(RootElement parent) {
924
        DefinedTermDetailSection definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
925
        addPart(definedTermDetailSection);
926
        TermMediaSection termMediaSection = formFactory.createTermMediaSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
927
        addPart(termMediaSection);
928
    }
929

    
930
    @Override
931
    public void update(CdmDataChangeMap arg0) {
932

    
933
    }
934
    @Inject
935
    @Optional
936
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS)boolean refresh){
937
        if(refresh){
938
            refresh();
939

    
940
        }
941
    }
942

    
943
}
(2-2/2)