Project

General

Profile

Download (53.2 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.Collection;
13
import java.util.EnumSet;
14
import java.util.HashSet;
15
import java.util.Set;
16

    
17
import javax.inject.Inject;
18

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

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

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

    
155
    private ISelection selection;
156
    private boolean detailsEnabled = true;
157
    private Object activePart;
158

    
159
    public boolean isDetailsEnabled() {
160
		return detailsEnabled;
161
	}
162

    
163
	public void setDetailsEnabled(boolean detailsEnabled) {
164
		this.detailsEnabled = detailsEnabled;
165
	}
166

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

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

    
177
    @Override
178
    public void setInput(Object input) {
179

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

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

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

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

    
243
        } else if (input instanceof TaxonName) {
244
            createNameSections(rootElement);
245

    
246
        } else if (input instanceof Reference) {
247
            createReferenceSections(rootElement);
248

    
249
        } else if (input instanceof Team) {
250
            createTeamDetailSection(rootElement);
251

    
252
        } else if (input instanceof Person) {
253
            createPersonDetailSection(rootElement);
254

    
255
        } else if (input instanceof TeamOrPersonBase) {
256
            createTeamOrPersonBaseDetailSection(rootElement);
257

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

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

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

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

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

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

    
303
        } else if (input instanceof Media) {
304
            createMediaElementSection(rootElement);
305

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

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

    
372
        } else if (input instanceof TermTree) {
373
            createFeatureTreeSection(rootElement);
374

    
375
        } else if (input instanceof Character) {
376
            createCharacterSection(rootElement);
377

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

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

    
400
//            createDescriptionElementSection(rootElement);
401

    
402
        }else {
403
            createEmptySection(null, rootElement);
404
        }
405
        layout();
406

    
407
    }
408

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

    
414
        addPart(groupDetailSection);
415
        addPart(memberDetailSection);
416
        addPart(grantedAuthorityDetailSection);
417
    }
418

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

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

    
429
        this.selection = selection;
430

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

    
436
    }
437

    
438
    private void createTaxonSections(RootElement parent) {
439
        NameDetailsConfigurator config = PreferencesUtil.getPreferredNameDetailsConfiguration();
440
        EnumSet<CRUD> requiredCrud;
441
        if(getInput() == null || StoreUtil.getCdmEntity(getInput()).getId() == 0) {
442
            // new entity, not yet saved
443
            requiredCrud = EnumSet.of(CRUD.CREATE);
444
        } else {
445
            requiredCrud = EnumSet.of(CRUD.UPDATE);
446
        }
447
        boolean hasPermission = CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getInput()), requiredCrud);
448
        TaxonBase taxonBase = (TaxonBase)getInput();
449
        Taxon acceptedTaxon = null;
450
        if (taxonBase instanceof Taxon){
451
            acceptedTaxon = (Taxon)taxonBase;
452
        }else{
453
           acceptedTaxon = ((Synonym)taxonBase).getAcceptedTaxon();
454
        }
455
        Set<TaxonNode> nodes = acceptedTaxon.getTaxonNodes();
456
        // check for subtree permissions as well.
457
        if (hasPermission){
458
            for (TaxonNode node: nodes){
459
                hasPermission &= CdmStore.currentAuthentiationHasPermission(node, requiredCrud);
460
                if (!hasPermission){
461
                    //check whether there are explicit TaxonNode rights
462
                    boolean taxonnodePermissionExists = false;
463
                    Collection<? extends GrantedAuthority> authorities = CdmStore.getCurrentAuthentiation().getAuthorities();
464
                    for (GrantedAuthority grantedAuthority: authorities){
465
                        if (grantedAuthority.getAuthority().startsWith("TAXONNODE")){
466
                            taxonnodePermissionExists = true;
467
                        }
468
                    }
469
                    if (!taxonnodePermissionExists){
470
                        hasPermission = true;
471
                    }
472
                }
473
            }
474
        }
475
        detailsEnabled = hasPermission;
476
        ParsingMessagesSection parsingMessagesSection = formFactory.createParsingMessagesSection(getConversationHolder(), parent, this,
477
                StoreUtil.getSectionStyle(ParsingMessagesSection.class, getInput().getClass().getCanonicalName(), true));
478
        if (config == null){
479
            TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this,
480
                    StoreUtil.getSectionStyle(TaxonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
481
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
482
          //  boolean hasPermission = CdmStore.currentAuthentiationHasPermission(getInput(), Operation.UPDATE);
483
            taxonBaseDetailSection.setEnabled(detailsEnabled);
484
            addPart(taxonBaseDetailSection);
485
        }else{
486
            if (config.isTaxonSectionActivated()){
487
                TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this,
488
                        StoreUtil.getSectionStyle(TaxonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
489
                taxonBaseDetailSection.setEnabled(detailsEnabled);
490
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
491
                addPart(taxonBaseDetailSection);
492
            }
493
        }
494
        NonViralNameDetailSection nonViralNameSection = formFactory
495
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
496
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
497
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
498
        nonViralNameSection.setEnabled(detailsEnabled);
499
        if (config == null || config.isNomenclaturalReferenceSectionActivated()){
500
            NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
501
                    StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
502
            referenceDetailSection.setEnabled(detailsEnabled);
503
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
504
            addPart(referenceDetailSection);
505

    
506
        }
507
        if ( config == null || config.isNomenclaturalStatusSectionActivated()){
508
            NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
509
                    StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
510
            nomenclaturalStatusSection.setEnabled(detailsEnabled);
511
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
512
            addPart(nomenclaturalStatusSection);
513
        }
514

    
515
        if ( config == null || config.isProtologueActivated()){
516
            ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
517
            protologSection.setEnabled(detailsEnabled);
518
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
519
            addPart(protologSection);
520
        }
521

    
522
        if (config == null || config.isTypeDesignationSectionActivated()){
523
            TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
524
            typeDesignationSection.setEnabled(detailsEnabled);
525
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
526
            addPart(typeDesignationSection);
527
        }
528

    
529
        if (config == null || config.isNameRelationsSectionActivated()){
530
            NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
531
            nameRelationshipSection.setEnabled(detailsEnabled);
532
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
533
            addPart(nameRelationshipSection);
534
        }
535

    
536

    
537
        addPart(parsingMessagesSection);
538

    
539
        addPart(nonViralNameSection);
540

    
541
    }
542

    
543
    private void createNameSections(RootElement parent) {
544
        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(
545
                getConversationHolder(), parent, this, false, StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
546

    
547
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
548

    
549
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
550
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
551
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
552

    
553
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
554
                StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
555
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
556

    
557
        addPart(nonViralNameSection);
558
        addPart(nomenclaturalStatusSection);
559
        addPart(referenceDetailSection);
560

    
561
        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
562
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
563

    
564
        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
565
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
566

    
567
        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
568
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
569
        addPart(protologSection);
570
        addPart(typeDesignationSection);
571
        addPart(nameRelationshipSection);
572

    
573
    }
574

    
575
    private void createReferenceSections(RootElement parent) {
576
        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this,
577
                StoreUtil.getSectionStyle(ReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
578

    
579
        addPart(referenceDetailSection);
580
    }
581

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

    
585
        addPart(teamOrPersonBaseDetailSection);
586
    }
587

    
588
    private void createTeamDetailSection(RootElement parent) {
589
        TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TeamDetailSection.class, getInput().getClass().getCanonicalName(), true));
590

    
591
        addPart(teamDetailSection);
592
    }
593

    
594
    private void createPersonDetailSection(RootElement parent) {
595
        PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(PersonDetailSection.class, getInput().getClass().getCanonicalName(), true));
596
        addPart(personDetailSection);
597
    }
598

    
599
    private void createDescriptionElementSection(RootElement parent) {
600
        createDescriptionElementSection(parent, null);
601
    }
602

    
603
    private void createDescriptionElementSection(RootElement parent, Object activePart) {
604
        DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionElementDetailSection.class, getInput().getClass().getCanonicalName(), true));
605
        descriptionElementDetailSection.setEnabled(this.detailsEnabled);
606

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

    
609
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
610
        DescriptionElementSourceSection descriptionElementSourceSection;
611
        if (activePart != null && activePart instanceof IDistributionEditorPart){
612
            Reference defaultSource =((IDistributionEditorPart)activePart).getEditor().getDefaultSource();
613
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, defaultSource, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()));
614
        }else{
615
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()) );
616
        }
617

    
618

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

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

    
623
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
624

    
625
        addPart(descriptionElementDetailSection);
626
        addPart(descriptionElementSourceSection);
627
        addPart(descriptionElementMediaSection);
628
    }
629

    
630
    private void createDescriptionSection(RootElement parent, boolean isTaxonDescription) {
631
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName(), true));
632
        addPart(descriptionDetailSection);
633

    
634
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
635

    
636
        if(isTaxonDescription) {
637
            NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(
638
                    getConversationHolder(), parent, this, StoreUtil.getSectionStyle(NaturalLanguageSection.class, getInput().getClass().getCanonicalName(), true));
639
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
640
            addPart(naturalLanguageSection);
641
        }
642
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(
643
                getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName(), true));
644
        addPart(descriptionSourceSection);
645

    
646
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
647

    
648
        if(isTaxonDescription) {
649
            ScopeSection scopeSection = formFactory.createScopeSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ScopeSection.class, getInput().getClass().getCanonicalName()));
650
            addPart(scopeSection);
651
        }
652
    }
653

    
654
    private void createTaxonDescriptionSection(RootElement parent) {
655
        createDescriptionSection(parent, true);
656
    }
657

    
658
    private void createSpecimenDescriptionSection(RootElement parent) {
659
        createDescriptionSection(parent, false);
660
    }
661

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

    
665
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
666

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

    
669
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
670

    
671
        addPart(descriptionDetailSection);
672
        addPart(descriptionSourceSection);
673

    
674
    }
675

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

    
679
        addPart(descriptionDetailSection);
680
    }
681

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

    
685
        addPart(mediaDetailSection);
686
    }
687

    
688
    private void createDerivedUnitBaseElementSection(RootElement parent) {
689
        DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
690
        //TODO for DerivateEditor do not use facade anymore to avoid this special case handling #4539
691
        if(!(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart)){
692
            derivedUnitGeneralDetailSection.setShowOnlyDerivedUnitData(true);
693
        }
694
        addPart(derivedUnitGeneralDetailSection);
695

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

    
698
        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
699
        addPart(derivedUnitBaseDetailSection);
700

    
701
        //for editors working with facades
702
        if(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart){
703
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
704
            GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GatheringEventDetailSection.class, getInput().getClass().getCanonicalName()));
705
            addPart(gatheringEventDetailSection);
706

    
707
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
708
            FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitDetailSection.class, getInput().getClass().getCanonicalName()));
709
            addPart(fieldUnitDetailSection);
710
        }
711
        else{
712

    
713
            if(PreferencesUtil.isShowTaxonAssociations()){
714
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
715
                TaxonAssociationDetailSection taxonAssociationDetailSection = formFactory.createTaxonAssociationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TaxonAssociationDetailSection.class, getInput().getClass().getCanonicalName(), true));
716
                addPart(taxonAssociationDetailSection);
717
            }
718
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
719
            DerivedUnitFacadeIdentifierSection identifierDetailSection = formFactory.createDerivedUnitFacadeIdentifierSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DerivedUnitFacadeIdentifierSection.class, getInput().getClass().getCanonicalName()));
720
            addPart(identifierDetailSection);
721
        }
722
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
723
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
724
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
725
            addPart(determinationDetailSection);
726
        }
727

    
728
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
729
        DerivedUnitTypeDesignationSection derivedUnitTypeDesignationSection = formFactory.createDerivedUnitTypeDesignationSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitTypeDesignationSection.class, getInput().getClass().getCanonicalName()));
730
        addPart(derivedUnitTypeDesignationSection);
731

    
732
    }
733

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

    
737
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
738

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

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

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

    
745
        addPart(fielUnitGeneralDetailSection);
746
        addPart(gatheringEventDetailSection);
747
        addPart(fieldUnitDetailSection);
748

    
749
        if(PreferencesUtil.isDeterminationOnlyForFieldUnits()){
750
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
751
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
752
            addPart(determinationDetailSection);
753
        }
754
    }
755

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

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

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

    
763
        addPart(section);
764
        addPart(sampleDesignationDetailSection);
765
    }
766

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

    
770
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
771

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

    
774
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
775

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

    
778
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
779

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

    
782
        addPart(section);
783
        addPart(preparationPreservationSection);
784
        addPart(qualitySection);
785
        addPart(sampleDesignationDetailSection);
786
    }
787

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

    
791
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
792

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

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

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

    
799

    
800
        addPart(section);
801
        addPart(referenceSection);
802
        addPart(contigFileSection);
803
    }
804

    
805
    private void createSingleReadSection(RootElement parent) {
806
        SingleReadGeneralDetailSection section = formFactory.createSingleReadGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(SingleReadGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
807
        addPart(section);
808

    
809
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
810

    
811
        SingleReadPherogramCollectionDetailSection pherogramSection = formFactory.createSingleReadPherogramCollectionDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(SingleReadPherogramCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
812
        addPart(pherogramSection);
813

    
814
    }
815

    
816
    private void createMediaSpecimenSection(RootElement parent) {
817
        MediaSpecimenGeneralDetailSection generalSection = formFactory.createMediaSpecimenGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(MediaSpecimenGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
818
        addPart(generalSection);
819

    
820
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
821

    
822
        RightsSection rightsSection = formFactory.createRightsSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(RightsSection.class, getInput().getClass().getCanonicalName()));
823
        addPart(rightsSection);
824

    
825
    }
826

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

    
830
        addPart(section);
831
    }
832

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

    
836
        addPart(featureDistributionSection);
837
    }
838

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

    
842
        addPart(featureDistributionSection);
843
    }
844

    
845
    private void createCharacterNodeSection(RootElement parent) {
846
        CharacterNodeDetailSection featureDistributionSection = formFactory.createCharacterNodeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
847
        addPart(featureDistributionSection);
848
    }
849

    
850
    private void createCharacterSection(RootElement parent) {
851
        CharacterDetailSection featureDistributionSection = formFactory.createCharacterDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
852
        addPart(featureDistributionSection);
853
    }
854

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

    
858
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
859

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

    
862
        addPart(polytomousKeyDetailSection);
863
        addPart(polytomousKeyNodeDetailSection);
864

    
865
    }
866

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

    
870
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
871

    
872
        addPart(descriptionUseRecordSection);
873

    
874

    
875
    }
876

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

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

    
882
        addPart(userDetailSection);
883
        addPart(groupByUserDetailSection);
884
    }
885

    
886
    private void createMisappliedNameSection(RootElement parent) {
887
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(getConversationHolder(), parent, this,
888
                StoreUtil.getSectionStyle(TaxonRelationshipDetailSection.class, getInput().getClass().getCanonicalName(), true));
889
        addPart(taxonRelationshipDetailSection);
890

    
891
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
892

    
893

    
894
        NonViralNameDetailSection nonViralNameSection = formFactory
895
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
896
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
897
        addPart(nonViralNameSection);
898

    
899
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
900

    
901
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
902
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
903
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
904
        addPart(referenceDetailSection);
905

    
906

    
907
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
908
            		StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
909
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
910
        addPart(nomenclaturalStatusSection);
911

    
912
		ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
913
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
914
		addPart(protologSection);
915

    
916
		TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
917
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
918
		addPart(typeDesignationSection);
919

    
920
		NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
921
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
922
		addPart(nameRelationshipSection);
923

    
924
    }
925

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

    
929
        ReferencedEntityDetailSection referencedEntityBaseDetailSection = formFactory.createReferencedEntityDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(ReferencedEntityDetailSection.class, getInput().getClass().getCanonicalName(), true));
930
        addPart(taxonRelationshipDetailSection);
931
        addPart(referencedEntityBaseDetailSection);
932
    }
933
    private void createTermVocabularySection(RootElement parent) {
934
        TermVocabularyDetailSection termVocabularyDetailSection = formFactory.createTermVocabularyDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermVocabularyDetailSection.class, getInput().getClass().getCanonicalName(), true));
935
        addPart(termVocabularyDetailSection);
936
    }
937

    
938
    private void createDefinedTermSection(RootElement parent) {
939
        DefinedTermDetailSection definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
940
        addPart(definedTermDetailSection);
941
        TermMediaSection termMediaSection = formFactory.createTermMediaSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
942
        addPart(termMediaSection);
943
    }
944

    
945
    @Override
946
    public void update(CdmDataChangeMap arg0) {
947

    
948
    }
949
    @Inject
950
    @Optional
951
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS)boolean refresh){
952
        if(refresh){
953
            refresh();
954

    
955
        }
956
    }
957

    
958
}
(2-2/2)