Project

General

Profile

Download (57.6 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
package eu.etaxonomy.taxeditor.view.e4.details;
10

    
11
import java.util.Collection;
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
import org.springframework.security.core.GrantedAuthority;
26

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

    
149
/**
150
 * The DetailsViewer handles the content of the details view (
151
 * {@link DetailsPartE4}).<br>
152
 * Depending on the type of the selected element the section of the details view
153
 * are created.
154
 *
155
 * @author pplitzner
156
 * @date 18.07.2017
157
 */
158
public class DetailsViewerE4 extends AbstractCdmDataViewerE4 {
159

    
160
    private ISelection selection;
161
    private boolean detailsEnabled = true;
162
    private Object activePart;
163

    
164
    public boolean isDetailsEnabled() {
165
		return detailsEnabled;
166
	}
167

    
168
	public void setDetailsEnabled(boolean detailsEnabled) {
169
		this.detailsEnabled = detailsEnabled;
170
	}
171

    
172
	public void setInput(Object input, Object activePart) {
173
	    this.activePart = activePart;
174
        setInput(input);
175

    
176
    }
177
    // START HACK TO MAKE THE DERIVED UNIT FACADE WORK
178
    // since we are getting implementations of DerivedUnitBase from the bulk
179
    // editor
180
    // and not derived unit facade objects,
181

    
182
    @Override
183
    public void setInput(Object input) {
184

    
185
        if(input instanceof TreeNode){
186
            input = ((TreeNode) input).getValue();
187
        }
188
        if(input instanceof GbifResponse){
189
            input = ((GbifResponse) input).getDerivedUnitFacade();
190
        }
191
        if (input instanceof MediaSpecimen && !(this.activePart.getClass().getSimpleName().equals("BulkEditorE4"))){
192
            //do nothing
193
        }else if (input instanceof DerivedUnit) {
194
            DerivedUnit derivedUnit = (DerivedUnit)input;
195
            try {
196
                input = DerivedUnitFacade.NewInstance(derivedUnit,
197
                        PreferencesUtil.getDerivedUnitConfigurator());
198
            } catch (DerivedUnitFacadeNotSupportedException e) {
199
                                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
200
            }
201
        }
202
        else if(input instanceof FieldUnit){
203
            input = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) input);
204
        }
205
        super.setInput(input);
206
    }
207

    
208
    @Override
209
    protected void markViewPartDirty() {
210
        if (getInput() instanceof DerivedUnitFacade) {
211
            if(part instanceof IDerivedUnitFacadePart){
212
                part.changed(getInput());
213
            }
214
            else{
215
                DerivedUnitFacade facade = (DerivedUnitFacade) getInput();
216
                if(facade.innerDerivedUnit()!=null){
217
                    part.changed(facade.innerDerivedUnit());
218
                }
219
                else if(facade.innerFieldUnit()!=null){
220
                    part.changed(facade.innerFieldUnit());
221
                }
222
            }
223
        }
224
        else{
225
            super.markViewPartDirty();
226
        }
227
    }
228

    
229
    @Override
230
    protected void showParts() {
231
        // FIXME (CM) : Need to clean out this code.
232
        // Too much type checking to decide which detail view to display.
233
        // Need to build in a mechanism where navigators / editors are 'aware'
234
        // of the corresponding detail viewer.
235

    
236
        Object input = getInput();
237
        if (input == null){
238
            return;
239
        }
240
        destroySections();
241
        if (input instanceof TaxonBase) {
242
            if(((TaxonBase<?>) input).getName()==null){
243
                createEmptySection(Messages.DetailsViewerE4_TAXON_HAS_NO_NAME, rootElement);
244
            }
245
            else{
246
                createTaxonSections(rootElement);
247
            }
248

    
249
        } else if (input instanceof TaxonName) {
250
            createNameSections(rootElement);
251

    
252
        } else if (input instanceof Reference) {
253
            createReferenceSections(rootElement);
254

    
255
        } else if (input instanceof Team) {
256
            createTeamDetailSection(rootElement);
257

    
258
        } else if (input instanceof Person) {
259
            createPersonDetailSection(rootElement);
260

    
261
        } else if (input instanceof TeamOrPersonBase) {
262
            createTeamOrPersonBaseDetailSection(rootElement);
263

    
264
        } else if (input instanceof DescriptionBase) {
265
            if(input instanceof SpecimenDescription){
266
                //TODO: add more sections to DetailsView for SpecimenDescription
267
                createSpecimenDescriptionSection(rootElement);
268
            }
269
            else{
270
                Set<Marker> descriptionMarkers = ((DescriptionBase<?>) input).getMarkers();
271

    
272
                Boolean isUseDescription = false;
273
                for (Marker marker : descriptionMarkers) {
274
                    if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
275
                        isUseDescription = true;
276
                    }
277
                }
278
                if (((DescriptionBase<?>) input).isImageGallery()) {
279
                    createImageGallerySection(rootElement);
280

    
281
                } else if (isUseDescription) {
282
                    createUseDescriptionSection(rootElement);
283
                } else if (input instanceof TaxonDescription){
284
                    createTaxonDescriptionSection(rootElement);
285

    
286
                } else{
287
                    createDescriptionSection(rootElement, false);
288
                }
289
            }
290
        } else if (input instanceof DescriptionElementBase){
291
            Set<Marker> descriptionMarkers = new HashSet<>();
292
            if(((DescriptionElementBase) input).getInDescription()!=null) {
293
                descriptionMarkers = ((DescriptionElementBase) input).getInDescription().getMarkers();
294
            }
295

    
296
            Boolean isUseDescription = false;
297
            for (Marker marker : descriptionMarkers) {
298
                if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
299
                    isUseDescription = true;
300
                }
301
            }
302

    
303
            if (isUseDescription == true && input instanceof CategoricalData) {
304
                createUseRecordSection(rootElement);
305
            } else {
306
                createDescriptionElementSection(rootElement, activePart);
307
            }
308

    
309
        } else if (input instanceof Media) {
310
            createMediaElementSection(rootElement);
311
        }
312
        //FIXME hack to show more informative message to the user when
313
        //DerivedUnit has more than one FieldUnit #4363
314
        else if (input instanceof DerivedUnit && !(input instanceof MediaSpecimen)) {
315
            DerivedUnit derivedUnit = (DerivedUnit)input;
316
            try {
317
                input = DerivedUnitFacade.NewInstance(derivedUnit,
318
                        PreferencesUtil.getDerivedUnitConfigurator());
319
            } catch (DerivedUnitFacadeNotSupportedException e) {
320
                createEmptySection(e.getMessage(), rootElement);
321
            }
322
        }
323
        else if (input instanceof DerivedUnitFacade) {
324
            DerivedUnitFacade facade = (DerivedUnitFacade) input;
325
            if(facade.getType() == SpecimenOrObservationType.FieldUnit){
326
                if(facade.innerFieldUnit() == null){
327
                    MessagingUtils.error(DetailsViewerE4.class, "FieldUnit of facade is null", null); //$NON-NLS-1$
328
                }
329
                else{
330
                    createFieldUnitSection(rootElement);
331
                }
332
            }
333
            else if(facade.getType() == SpecimenOrObservationType.PreservedSpecimen){
334
                if(facade.innerDerivedUnit() == null){
335
                    MessagingUtils.error(DetailsViewerE4.class, "DerivedUnit of facade is null", null); //$NON-NLS-1$
336
                }
337
                else{
338
                    createDerivedUnitBaseElementSection(rootElement);
339
                }
340
            }
341
            else if(facade.getType() == SpecimenOrObservationType.TissueSample){
342
                //TissueSample should only be created by using it's own class
343
                //in future using only one class with different SpecimenOrObservationTypes is desired
344
                createTissueSampleSection(rootElement);
345
            }
346
            else if(facade.getType()==SpecimenOrObservationType.DnaSample){
347

    
348
                if(facade.innerDerivedUnit().getRecordBasis()==SpecimenOrObservationType.TissueSample){
349
                    //this case seems to be very unlikely as innerDerivedUnit has almost always the same type
350
                    createTissueSampleSection(rootElement);
351
                }
352
                else if(facade.innerDerivedUnit().getRecordBasis()==SpecimenOrObservationType.DnaSample){
353
                    createDnaSampleSection(rootElement);
354
                }
355
            }else if (facade.innerDerivedUnit() instanceof MediaSpecimen){
356
                createEmptySection("Image specimen not supported by specimen list editor", rootElement);
357
            }else{
358
                createDerivedUnitBaseElementSection(rootElement);
359
            }
360
        } else if (input instanceof DnaSample){
361
            DnaSample dnaSample = (DnaSample)input;
362
            if(dnaSample.getRecordBasis()==SpecimenOrObservationType.TissueSample){
363
                createTissueSampleSection(rootElement);
364
            }
365
            else if(dnaSample.getRecordBasis()==SpecimenOrObservationType.DnaSample){
366
                createDnaSampleSection(rootElement);
367
            }
368
        } else if (input instanceof MediaSpecimen){
369
            createMediaSpecimenSection(rootElement);
370
        }
371
        else if(input instanceof Sequence){
372
            createSequenceSection(rootElement);
373
        }
374
        else if(input instanceof SingleRead){
375
            createSingleReadSection(rootElement);
376
        }
377
        else if (input instanceof FeatureNodeContainer) {
378
            createFeatureDistributionSection(rootElement);
379

    
380
        } else if (input instanceof TermNode) {
381
            TermType type= ((TermNode<?>) input).getTermType();
382
            if(type.equals(TermType.Character) ){
383
                createCharacterNodeSection(rootElement);
384
            }
385
            else if(type.equals(TermType.Feature)){
386
                createFeatureNodeSection(rootElement);
387
            }
388

    
389
        } else if (input instanceof TermTree) {
390
            createFeatureTreeSection(rootElement);
391

    
392
        }  else if (input instanceof TermNodeDto) {
393
            TermType type= ((TermNodeDto) input).getTerm().getTermType();
394
            if(type.equals(TermType.Character) && activePart instanceof ICharacterEditor){
395
                createCharacterNodeDtoSection(rootElement);
396
            }
397
            else if(type.equals(TermType.Feature) || type.equals(TermType.Character)){
398
                createFeatureNodeSection(rootElement);
399
            }
400

    
401
        } else if (input instanceof TermTreeDto) {
402
            createFeatureTreeSectionForDto(rootElement);
403

    
404
        } else if (input instanceof Character) {
405
            createCharacterSection(rootElement);
406

    
407
        }else if ((input instanceof PolytomousKeyNode) || (input instanceof PolytomousKeyRelationship)) {
408
            createPolytomousKeyNodeSection(rootElement);
409
        } else if (input instanceof User) {
410
            createUserSection(rootElement);
411
        } else if (input instanceof Group) {
412
            createGroupSection(rootElement);
413
        } else if (input instanceof TaxonRelationship && ((TaxonRelationship)input).getType()!=null
414
                && (((TaxonRelationship)input).getType().isAnyMisappliedName() || ((TaxonRelationship)input).getType().isAnySynonym() || ((TaxonRelationship)input).getType().isMisappliedName())){
415
            createMisappliedNameSection(rootElement);
416
        }else if (input instanceof TaxonRelationship ) {
417
            createTaxonRelationshipSection(rootElement);
418
        } else if (input instanceof TermVocabulary) {
419
            createTermVocabularySection(rootElement);
420
        } else if (input instanceof DefinedTermBase) {
421
            createDefinedTermSection(rootElement);
422

    
423
        } else if (input instanceof SelectionChangedEvent ) {
424
            IStructuredSelection sel =(IStructuredSelection) ((SelectionChangedEvent)input).getSelection();
425
            if (sel.getFirstElement()instanceof Distribution){
426
                createDescriptionElementSection(rootElement);
427
            }
428

    
429
//            createDescriptionElementSection(rootElement);
430

    
431
        }else {
432
            createEmptySection(null, rootElement);
433
        }
434
        layout();
435
    }
436

    
437
    private void createGroupSection(RootElement parent) {
438
        GroupDetailSection groupDetailSection = formFactory.createGroupDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GroupDetailSection.class, getInput().getClass().getCanonicalName()));
439
        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(MemberDetailSection.class, getInput().getClass().getCanonicalName()));
440
        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(getConversationHolder(), parent,StoreUtil.getSectionStyle(GrantedAuthorityDetailSection.class, getInput().getClass().getCanonicalName()));
441

    
442
        addPart(groupDetailSection);
443
        addPart(memberDetailSection);
444
        addPart(grantedAuthorityDetailSection);
445
    }
446

    
447
    @Override
448
    public ISelection getSelection() {
449
        return selection;
450
    }
451

    
452
    @Override
453
    public void setSelection(ISelection selection, boolean reveal) {
454

    
455
        this.selection = selection;
456
        if(this.selection!=null){
457
            SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
458
            fireSelectionChanged(selectionChangedEvent);
459
        }
460
    }
461

    
462
    private void createTaxonSections(RootElement parent) {
463
        NameDetailsConfigurator config = PreferencesUtil.getPreferredNameDetailsConfiguration();
464
        EnumSet<CRUD> requiredCrud;
465
        if(getInput() == null || StoreUtil.getCdmEntity(getInput()).getId() == 0) {
466
            // new entity, not yet saved
467
            requiredCrud = EnumSet.of(CRUD.CREATE);
468
        } else {
469
            requiredCrud = EnumSet.of(CRUD.UPDATE);
470
        }
471
        boolean hasPermission = CdmStore.currentAuthentiationHasPermission(StoreUtil.getCdmEntity(getInput()), requiredCrud);
472
        if (hasPermission){
473
            // check for subtree permissions as well.
474
            TaxonBase<?> taxonBase = (TaxonBase<?>)getInput();
475
            Taxon acceptedTaxon = null;
476
            if (taxonBase instanceof Taxon){
477
                acceptedTaxon = (Taxon)taxonBase;
478
            }else{
479
                acceptedTaxon = ((Synonym)taxonBase).getAcceptedTaxon();
480
            }
481
            if (acceptedTaxon != null){ //needs discussion if synonyms without accepted taxon should never be filtered by subtree permission(current implementation). See also #8849
482
                Set<TaxonNode> nodes = acceptedTaxon.getTaxonNodes();
483
                for (TaxonNode node: nodes){
484
                    hasPermission &= CdmStore.currentAuthentiationHasPermission(node, requiredCrud);
485
                    if (!hasPermission){
486
                        //check whether there are explicit TaxonNode rights
487
                        boolean taxonnodePermissionExists = false;
488
                        Collection<? extends GrantedAuthority> authorities = CdmStore.getCurrentAuthentiation().getAuthorities();
489
                        for (GrantedAuthority grantedAuthority: authorities){
490
                            if (grantedAuthority.getAuthority().startsWith("TAXONNODE")){
491
                                taxonnodePermissionExists = true;
492
                            }
493
                        }
494
                        if (!taxonnodePermissionExists){
495
                            hasPermission = true;
496
                        }
497
                    }
498
                }
499
            }
500
        }
501
        detailsEnabled = hasPermission;
502
        ParsingMessagesSection parsingMessagesSection = formFactory.createParsingMessagesSection(getConversationHolder(), parent, this,
503
                StoreUtil.getSectionStyle(ParsingMessagesSection.class, getInput().getClass().getCanonicalName(), true));
504
        if (config == null){
505
            TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this,
506
                    StoreUtil.getSectionStyle(TaxonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
507
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
508
          //  boolean hasPermission = CdmStore.currentAuthentiationHasPermission(getInput(), Operation.UPDATE);
509
            taxonBaseDetailSection.setEnabled(detailsEnabled);
510
            addPart(taxonBaseDetailSection);
511
        }else{
512
            if (config.isTaxonSectionActivated()){
513
                TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this,
514
                        StoreUtil.getSectionStyle(TaxonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
515
                taxonBaseDetailSection.setEnabled(detailsEnabled);
516
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
517
                addPart(taxonBaseDetailSection);
518
            }
519
        }
520
        NonViralNameDetailSection nonViralNameSection = formFactory
521
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
522
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
523
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
524
        nonViralNameSection.setEnabled(detailsEnabled);
525
        if (config == null || config.isNomenclaturalReferenceSectionActivated()){
526
            NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
527
                    StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
528
            referenceDetailSection.setEnabled(detailsEnabled);
529
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
530
            addPart(referenceDetailSection);
531

    
532
        }
533
        if ( config == null || config.isNomenclaturalStatusSectionActivated()){
534
            NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
535
                    StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
536
            nomenclaturalStatusSection.setEnabled(detailsEnabled);
537
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
538
            addPart(nomenclaturalStatusSection);
539
        }
540

    
541
//        if ( config == null || config.isProtologueActivated()){
542
//            ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
543
//            protologSection.setEnabled(detailsEnabled);
544
//            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
545
//            addPart(protologSection);
546
//        }
547

    
548
        if (config == null || config.isTypeDesignationSectionActivated()){
549
            TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
550
            typeDesignationSection.setEnabled(detailsEnabled);
551
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
552
            addPart(typeDesignationSection);
553
        }
554

    
555
        if (config == null || config.isNameRelationsSectionActivated()){
556
            NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
557
            nameRelationshipSection.setEnabled(detailsEnabled);
558
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
559
            addPart(nameRelationshipSection);
560
        }
561

    
562
        addPart(parsingMessagesSection);
563
        addPart(nonViralNameSection);
564
    }
565

    
566
    private void createNameSections(RootElement parent) {
567
        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(
568
                getConversationHolder(), parent, this, false, StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
569

    
570
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
571

    
572
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
573
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
574
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
575

    
576
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
577
                StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
578
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
579

    
580
        addPart(nonViralNameSection);
581
        addPart(nomenclaturalStatusSection);
582
        addPart(referenceDetailSection);
583

    
584
//        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
585
//        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
586

    
587
        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
588
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
589

    
590
        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
591
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
592
//        addPart(protologSection);
593
        addPart(typeDesignationSection);
594
        addPart(nameRelationshipSection);
595
    }
596

    
597
    private void createReferenceSections(RootElement parent) {
598
        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this,
599
                StoreUtil.getSectionStyle(ReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
600

    
601
        addPart(referenceDetailSection);
602
    }
603

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

    
607
        addPart(teamOrPersonBaseDetailSection);
608
    }
609

    
610
    private void createTeamDetailSection(RootElement parent) {
611
        TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TeamDetailSection.class, getInput().getClass().getCanonicalName(), true));
612

    
613
        addPart(teamDetailSection);
614
    }
615

    
616
    private void createPersonDetailSection(RootElement parent) {
617
        PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(PersonDetailSection.class, getInput().getClass().getCanonicalName(), true));
618
        addPart(personDetailSection);
619
    }
620

    
621
    private void createDescriptionElementSection(RootElement parent) {
622
        createDescriptionElementSection(parent, null);
623
    }
624

    
625
    private void createDescriptionElementSection(RootElement parent, Object activePart) {
626
        DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionElementDetailSection.class, getInput().getClass().getCanonicalName(), true));
627
        descriptionElementDetailSection.setEnabled(this.detailsEnabled);
628

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

    
631
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
632
        DescriptionElementSourceSection descriptionElementSourceSection;
633
        if (activePart != null && activePart instanceof IDistributionEditorPart){
634
            Reference defaultSource =((IDistributionEditorPart)activePart).getEditor().getDefaultSource();
635
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, defaultSource, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()));
636

    
637
        }else{
638
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()) );
639
        }
640

    
641
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
642

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

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

    
647
        addPart(descriptionElementDetailSection);
648
        addPart(descriptionElementSourceSection);
649
        addPart(descriptionElementMediaSection);
650
    }
651

    
652
    private void createDescriptionSection(RootElement parent, boolean isTaxonDescription) {
653
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName(), true));
654
        addPart(descriptionDetailSection);
655

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

    
658
        if(isTaxonDescription) {
659
            NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(
660
                    getConversationHolder(), parent, this, StoreUtil.getSectionStyle(NaturalLanguageSection.class, getInput().getClass().getCanonicalName(), true));
661
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
662
            addPart(naturalLanguageSection);
663
        }
664
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(
665
                getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName(), true));
666
        addPart(descriptionSourceSection);
667

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

    
670
        if(isTaxonDescription) {
671
            ScopeSection scopeSection = formFactory.createScopeSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ScopeSection.class, getInput().getClass().getCanonicalName()));
672
            addPart(scopeSection);
673
        }
674
    }
675

    
676
    private void createTaxonDescriptionSection(RootElement parent) {
677
        createDescriptionSection(parent, true);
678
    }
679

    
680
    private void createSpecimenDescriptionSection(RootElement parent) {
681
        createDescriptionSection(parent, false);
682
    }
683

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

    
687
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
688

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

    
691
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
692

    
693
        addPart(descriptionDetailSection);
694
        addPart(descriptionSourceSection);
695
    }
696

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

    
700
        addPart(descriptionDetailSection);
701
    }
702

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

    
706
        addPart(mediaDetailSection);
707
    }
708

    
709
    private void createDerivedUnitBaseElementSection(RootElement parent) {
710
        DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
711
        //TODO for DerivateEditor do not use facade anymore to avoid this special case handling #4539
712
        if(!(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart)){
713
            derivedUnitGeneralDetailSection.setShowOnlyDerivedUnitData(true);
714
        }
715
        addPart(derivedUnitGeneralDetailSection);
716

    
717
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
718

    
719
        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
720
        addPart(derivedUnitBaseDetailSection);
721

    
722
        //for editors working with facades
723
        if(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart){
724
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
725
            GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GatheringEventDetailSection.class, getInput().getClass().getCanonicalName()));
726
            addPart(gatheringEventDetailSection);
727

    
728
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
729
            FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitDetailSection.class, getInput().getClass().getCanonicalName()));
730
            addPart(fieldUnitDetailSection);
731
        }
732
        else{
733

    
734
            if(PreferencesUtil.isShowTaxonAssociations()){
735
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
736
                TaxonAssociationDetailSection taxonAssociationDetailSection = formFactory.createTaxonAssociationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TaxonAssociationDetailSection.class, getInput().getClass().getCanonicalName(), true));
737
                addPart(taxonAssociationDetailSection);
738
            }
739
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
740
            DerivedUnitFacadeIdentifierSection identifierDetailSection = formFactory.createDerivedUnitFacadeIdentifierSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DerivedUnitFacadeIdentifierSection.class, getInput().getClass().getCanonicalName()));
741
            addPart(identifierDetailSection);
742
        }
743
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
744
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
745
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
746
            addPart(determinationDetailSection);
747
        }
748

    
749
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
750
        DerivedUnitTypeDesignationSection derivedUnitTypeDesignationSection = formFactory.createDerivedUnitTypeDesignationSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitTypeDesignationSection.class, getInput().getClass().getCanonicalName()));
751
        addPart(derivedUnitTypeDesignationSection);
752
    }
753

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

    
757
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
758

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

    
761
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
762

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

    
765
        addPart(fielUnitGeneralDetailSection);
766
        addPart(gatheringEventDetailSection);
767
        addPart(fieldUnitDetailSection);
768

    
769
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
770
        DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
771
        addPart(determinationDetailSection);
772
    }
773

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

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

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

    
781
        addPart(section);
782
        addPart(sampleDesignationDetailSection);
783
    }
784

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

    
788
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
789

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

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

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

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

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

    
800
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
801
        DeterminationDetailSection determinationDetailSection = null;
802
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
803
            determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
804
        }
805
        addPart(section);
806
        addPart(preparationPreservationSection);
807
        addPart(qualitySection);
808
        addPart(sampleDesignationDetailSection);
809
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
810
            addPart(determinationDetailSection);
811
        }
812
    }
813

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

    
817
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
818

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

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

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

    
825
        addPart(section);
826
        addPart(referenceSection);
827
        addPart(contigFileSection);
828
    }
829

    
830
    private void createSingleReadSection(RootElement parent) {
831
        SingleReadGeneralDetailSection section = formFactory.createSingleReadGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(SingleReadGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
832
        addPart(section);
833

    
834
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
835

    
836
        SingleReadPherogramCollectionDetailSection pherogramSection = formFactory.createSingleReadPherogramCollectionDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(SingleReadPherogramCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
837
        addPart(pherogramSection);
838
    }
839

    
840
    private void createMediaSpecimenSection(RootElement parent) {
841
        MediaSpecimenGeneralDetailSection generalSection = formFactory.createMediaSpecimenGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(MediaSpecimenGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
842
        addPart(generalSection);
843

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

    
846
        RightsSection rightsSection = formFactory.createRightsSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(RightsSection.class, getInput().getClass().getCanonicalName()));
847
//        rightsSection.setEntity(generalSection.getEntity().innerDerivedUnit());
848
        addPart(rightsSection);
849
    }
850

    
851
    private void createFeatureTreeSectionForDto(RootElement parent) {
852
        TermTreeDetailSection section = formFactory.createFeatureTreeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermTreeDetailSection.class, getInput().getClass().getCanonicalName(), true));
853

    
854
        addPart(section);
855
    }
856
    private void createFeatureTreeSection(RootElement parent) {
857
        TermTreeDetailSectionForNode section = formFactory.createFeatureTreeDetailSectionForTree(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermTreeDetailSection.class, getInput().getClass().getCanonicalName(), true));
858

    
859
        addPart(section);
860
    }
861

    
862
    private void createFeatureNodeSection(RootElement parent) {
863
        TermNodeDetailSection featureDistributionSection = formFactory.createFeatureNodeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermNodeDetailSection.class, getInput().getClass().getCanonicalName(), true));
864
        addPart(featureDistributionSection);
865
    }
866

    
867
    private void createFeatureDistributionSection(RootElement parent) {
868
        FeatureDistributionDetailSection featureDistributionSection = formFactory.createFeatureDistributionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FeatureDistributionDetailSection.class, getInput().getClass().getCanonicalName(), true));
869
        addPart(featureDistributionSection);
870
    }
871

    
872
    private void createCharacterNodeSection(RootElement parent) {
873
        CharacterNodeDetailSection featureDistributionSection = formFactory.createCharacterNodeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
874
        addPart(featureDistributionSection);
875
    }
876

    
877
    private void createCharacterNodeDtoSection(RootElement parent) {
878
        CharacterNodeDtoDetailSection featureDistributionSection = formFactory.createCharacterNodeDtoDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
879
        addPart(featureDistributionSection);
880
    }
881

    
882
    private void createCharacterSection(RootElement parent) {
883
        CharacterDetailSection featureDistributionSection = formFactory.createCharacterDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
884
        addPart(featureDistributionSection);
885
    }
886

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

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

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

    
894
        addPart(polytomousKeyDetailSection);
895
        addPart(polytomousKeyNodeDetailSection);
896

    
897
    }
898

    
899
    private void createUseRecordSection(RootElement parent) {
900
        UseRecordDetailSection descriptionUseRecordSection = formFactory.createUseRecordDetailSection(getConversationHolder(), parent, this,StoreUtil.getSectionStyle(UseRecordDetailSection.class, getInput().getClass().getCanonicalName(), true));
901
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
902
        addPart(descriptionUseRecordSection);
903
    }
904

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

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

    
910
        addPart(userDetailSection);
911
        addPart(groupByUserDetailSection);
912
    }
913

    
914
    private void createMisappliedNameSection(RootElement parent) {
915
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(getConversationHolder(), parent, this,
916
                StoreUtil.getSectionStyle(TaxonRelationshipDetailSection.class, getInput().getClass().getCanonicalName(), true));
917
        addPart(taxonRelationshipDetailSection);
918

    
919
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
920

    
921
        NonViralNameDetailSection nonViralNameSection = formFactory
922
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
923
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
924
        addPart(nonViralNameSection);
925

    
926
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
927

    
928
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
929
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
930
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
931
        addPart(referenceDetailSection);
932

    
933
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
934
            		StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
935
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
936
        addPart(nomenclaturalStatusSection);
937

    
938
//		ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
939
//		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
940
//		addPart(protologSection);
941

    
942
		TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
943
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
944
		addPart(typeDesignationSection);
945

    
946
		NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
947
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
948
		addPart(nameRelationshipSection);
949
    }
950

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

    
954
        ReferencedEntityDetailSection referencedEntityBaseDetailSection = formFactory.createReferencedEntityDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(ReferencedEntityDetailSection.class, getInput().getClass().getCanonicalName(), true));
955
        addPart(taxonRelationshipDetailSection);
956
        addPart(referencedEntityBaseDetailSection);
957
    }
958
    private void createTermVocabularySection(RootElement parent) {
959
        TermVocabularyDetailSection termVocabularyDetailSection = formFactory.createTermVocabularyDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermVocabularyDetailSection.class, getInput().getClass().getCanonicalName(), true));
960
        addPart(termVocabularyDetailSection);
961
    }
962

    
963
    private void createDefinedTermSection(RootElement parent) {
964
        DefinedTermDetailSection<?> definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
965
        addPart(definedTermDetailSection);
966
        TermMediaSection termMediaSection = formFactory.createTermMediaSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
967
        addPart(termMediaSection);
968
    }
969

    
970
    @Override
971
    public void update(CdmDataChangeMap arg0) {
972

    
973
    }
974
    @Inject
975
    @Optional
976
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS)boolean refresh){
977
        if(refresh){
978
            refresh();
979
        }
980
    }
981

    
982
    @Inject
983
    @Optional
984
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS_DISTRIBUTION)String nameCache){
985
        if(nameCache != null && getInput() instanceof Distribution && this.activePart instanceof IDistributionEditorPart){
986
           if (part instanceof CdmSectionPart && ((CdmSectionPart)part).getSection() instanceof DescriptionElementDetailSection){
987
               for (ICdmFormElement element: ((DescriptionElementDetailSection)((CdmSectionPart)part).getSection()).getElements()){
988
                   if (element instanceof DescriptionElementDetailElement){
989
                       for(ICdmFormElement descriptionElement:((DescriptionElementDetailElement)element).getElements()){
990
                           if (descriptionElement instanceof DistributionDetailElement){
991
                               ((DistributionDetailElement) descriptionElement).setName(nameCache);
992
                           }
993
                       }
994
                   }
995
               }
996
           }
997
        }
998
    }
999
}
(2-2/2)