Project

General

Profile

Download (55.8 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.ICdmFormElement;
81
import eu.etaxonomy.taxeditor.ui.element.RootElement;
82
import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailSection;
83
import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailSection;
84
import eu.etaxonomy.taxeditor.ui.section.agent.TeamOrPersonBaseDetailSection;
85
import eu.etaxonomy.taxeditor.ui.section.common.ReferencedEntityDetailSection;
86
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailSection;
87
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailElement;
88
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailSection;
89
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementMediaSection;
90
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementSourceSection;
91
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionSourceSection;
92
import eu.etaxonomy.taxeditor.ui.section.description.MediaDetailsSection;
93
import eu.etaxonomy.taxeditor.ui.section.description.NaturalLanguageSection;
94
import eu.etaxonomy.taxeditor.ui.section.description.ScopeSection;
95
import eu.etaxonomy.taxeditor.ui.section.description.detail.DistributionDetailElement;
96
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterDetailSection;
97
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDetailSection;
98
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailSection;
99
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureNodeDetailSection;
100
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureTreeDetailSection;
101
import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailSection;
102
import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailSection;
103
import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailSection;
104
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailSection;
105
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailSection;
106
import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailSection;
107
import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
108
import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;
109
import eu.etaxonomy.taxeditor.ui.section.name.ProtologueSection;
110
import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
111
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
112
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
113
import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
114
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitDetailSection;
115
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailSection;
116
import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
117
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationSection;
118
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailSection;
119
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaQualityDetailSection;
120
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSampleGeneralDetailSection;
121
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSamplePreparationPreservationSection;
122
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailSection;
123
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceContigFileCollectionDetailSection;
124
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceGeneralDetailSection;
125
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceReferenceCollectionDetailSection;
126
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadGeneralDetailSection;
127
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadPherogramCollectionDetailSection;
128
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailSection;
129
import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
130
import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
131
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
132
import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsSection;
133
import eu.etaxonomy.taxeditor.ui.section.supplemental.identifier.DerivedUnitFacadeIdentifierSection;
134
import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;
135
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailSection;
136
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonRelationshipDetailSection;
137
import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailSection;
138
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailSection;
139
import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailSection;
140
import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailSection;
141
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermMediaSection;
142
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
143
import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
144
import eu.etaxonomy.taxeditor.view.e4.AbstractCdmDataViewerE4;
145

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

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

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

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

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

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

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

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

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

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

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

    
247
        } else if (input instanceof TaxonName) {
248
            createNameSections(rootElement);
249

    
250
        } else if (input instanceof Reference) {
251
            createReferenceSections(rootElement);
252

    
253
        } else if (input instanceof Team) {
254
            createTeamDetailSection(rootElement);
255

    
256
        } else if (input instanceof Person) {
257
            createPersonDetailSection(rootElement);
258

    
259
        } else if (input instanceof TeamOrPersonBase) {
260
            createTeamOrPersonBaseDetailSection(rootElement);
261

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

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

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

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

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

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

    
307
        } else if (input instanceof Media) {
308
            createMediaElementSection(rootElement);
309

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

    
346
                if(((DerivedUnitFacade) input).innerDerivedUnit().getRecordBasis()==SpecimenOrObservationType.TissueSample){
347
                    createTissueSampleSection(rootElement);
348
                }
349
                else if(((DerivedUnitFacade) input).innerDerivedUnit().getRecordBasis()==SpecimenOrObservationType.DnaSample){
350
                    createDnaSampleSection(rootElement);
351
                }
352
            }
353

    
354
            else{
355
                createDerivedUnitBaseElementSection(rootElement);
356
            }
357
        } else if (input instanceof DnaSample){
358
            DnaSample dnaSample = (DnaSample)input;
359
            if(dnaSample.getRecordBasis()==SpecimenOrObservationType.TissueSample){
360
                createTissueSampleSection(rootElement);
361
            }
362
            else if(dnaSample.getRecordBasis()==SpecimenOrObservationType.DnaSample){
363
                createDnaSampleSection(rootElement);
364
            }
365
        } else if (input instanceof MediaSpecimen){
366
            createMediaSpecimenSection(rootElement);
367
        }
368
        else if(input instanceof Sequence){
369
            createSequenceSection(rootElement);
370
        }
371
        else if(input instanceof SingleRead){
372
            createSingleReadSection(rootElement);
373
        }
374
        else if (input instanceof FeatureNodeContainer) {
375
            createFeatureDistributionSection(rootElement);
376

    
377
        } else if (input instanceof TermNode) {
378
            TermType type= ((TermNode) input).getTermType();
379
            if(type.equals(TermType.Character)){
380
                createCharacterNodeSection(rootElement);
381
            }
382
            else if(type.equals(TermType.Feature)){
383
                createFeatureNodeSection(rootElement);
384
            }
385

    
386
        } else if (input instanceof TermTree) {
387
            createFeatureTreeSection(rootElement);
388

    
389
        } else if (input instanceof Character) {
390
            createCharacterSection(rootElement);
391

    
392
        }else if ((input instanceof PolytomousKeyNode) || (input instanceof PolytomousKeyRelationship)) {
393
            createPolytomousKeyNodeSection(rootElement);
394
        } else if (input instanceof User) {
395
            createUserSection(rootElement);
396
        } else if (input instanceof Group) {
397
            createGroupSection(rootElement);
398
        } else if (input instanceof TaxonRelationship && ((TaxonRelationship)input).getType()!=null
399
                && (((TaxonRelationship)input).getType().isAnyMisappliedName() || ((TaxonRelationship)input).getType().isAnySynonym() || ((TaxonRelationship)input).getType().isMisappliedNameOrInvalidDesignation())){
400
            createMisappliedNameSection(rootElement);
401
        }else if (input instanceof TaxonRelationship ) {
402
            createTaxonRelationshipSection(rootElement);
403
        } else if (input instanceof TermVocabulary) {
404
            createTermVocabularySection(rootElement);
405
        } else if (input instanceof DefinedTermBase) {
406
            createDefinedTermSection(rootElement);
407

    
408
        } else if (input instanceof SelectionChangedEvent ) {
409
            IStructuredSelection sel =(IStructuredSelection) ((SelectionChangedEvent)input).getSelection();
410
            if (sel.getFirstElement()instanceof Distribution){
411
                createDescriptionElementSection(rootElement);
412
            }
413

    
414
//            createDescriptionElementSection(rootElement);
415

    
416
        }else {
417
            createEmptySection(null, rootElement);
418
        }
419
        layout();
420

    
421
    }
422

    
423
    private void createGroupSection(RootElement parent) {
424
        GroupDetailSection groupDetailSection = formFactory.createGroupDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GroupDetailSection.class, getInput().getClass().getCanonicalName()));
425
        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(MemberDetailSection.class, getInput().getClass().getCanonicalName()));
426
        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(getConversationHolder(), parent,StoreUtil.getSectionStyle(GrantedAuthorityDetailSection.class, getInput().getClass().getCanonicalName()));
427

    
428
        addPart(groupDetailSection);
429
        addPart(memberDetailSection);
430
        addPart(grantedAuthorityDetailSection);
431
    }
432

    
433
    /** {@inheritDoc} */
434
    @Override
435
    public ISelection getSelection() {
436
        return selection;
437
    }
438

    
439
    /** {@inheritDoc} */
440
    @Override
441
    public void setSelection(ISelection selection, boolean reveal) {
442

    
443
        this.selection = selection;
444

    
445
        if(this.selection!=null){
446
            SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
447
            fireSelectionChanged(selectionChangedEvent);
448
        }
449

    
450
    }
451

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

    
522
        }
523
        if ( config == null || config.isNomenclaturalStatusSectionActivated()){
524
            NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
525
                    StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
526
            nomenclaturalStatusSection.setEnabled(detailsEnabled);
527
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
528
            addPart(nomenclaturalStatusSection);
529
        }
530

    
531
        if ( config == null || config.isProtologueActivated()){
532
            ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
533
            protologSection.setEnabled(detailsEnabled);
534
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
535
            addPart(protologSection);
536
        }
537

    
538
        if (config == null || config.isTypeDesignationSectionActivated()){
539
            TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
540
            typeDesignationSection.setEnabled(detailsEnabled);
541
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
542
            addPart(typeDesignationSection);
543
        }
544

    
545
        if (config == null || config.isNameRelationsSectionActivated()){
546
            NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
547
            nameRelationshipSection.setEnabled(detailsEnabled);
548
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
549
            addPart(nameRelationshipSection);
550
        }
551

    
552

    
553
        addPart(parsingMessagesSection);
554

    
555
        addPart(nonViralNameSection);
556

    
557
    }
558

    
559
    private void createNameSections(RootElement parent) {
560
        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(
561
                getConversationHolder(), parent, this, false, StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
562

    
563
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
564

    
565
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
566
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
567
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
568

    
569
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
570
                StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
571
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
572

    
573
        addPart(nonViralNameSection);
574
        addPart(nomenclaturalStatusSection);
575
        addPart(referenceDetailSection);
576

    
577
        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
578
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
579

    
580
        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
581
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
582

    
583
        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
584
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
585
        addPart(protologSection);
586
        addPart(typeDesignationSection);
587
        addPart(nameRelationshipSection);
588

    
589
    }
590

    
591
    private void createReferenceSections(RootElement parent) {
592
        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this,
593
                StoreUtil.getSectionStyle(ReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
594

    
595
        addPart(referenceDetailSection);
596
    }
597

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

    
601
        addPart(teamOrPersonBaseDetailSection);
602
    }
603

    
604
    private void createTeamDetailSection(RootElement parent) {
605
        TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TeamDetailSection.class, getInput().getClass().getCanonicalName(), true));
606

    
607
        addPart(teamDetailSection);
608
    }
609

    
610
    private void createPersonDetailSection(RootElement parent) {
611
        PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(PersonDetailSection.class, getInput().getClass().getCanonicalName(), true));
612
        addPart(personDetailSection);
613
    }
614

    
615
    private void createDescriptionElementSection(RootElement parent) {
616
        createDescriptionElementSection(parent, null);
617
    }
618

    
619
    private void createDescriptionElementSection(RootElement parent, Object activePart) {
620
        DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionElementDetailSection.class, getInput().getClass().getCanonicalName(), true));
621
        descriptionElementDetailSection.setEnabled(this.detailsEnabled);
622

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

    
625
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
626
        DescriptionElementSourceSection descriptionElementSourceSection;
627
        if (activePart != null && activePart instanceof IDistributionEditorPart){
628
            Reference defaultSource =((IDistributionEditorPart)activePart).getEditor().getDefaultSource();
629
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, defaultSource, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()));
630

    
631
        }else{
632
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()) );
633
        }
634

    
635

    
636
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
637

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

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

    
642
        addPart(descriptionElementDetailSection);
643
        addPart(descriptionElementSourceSection);
644
        addPart(descriptionElementMediaSection);
645
    }
646

    
647
    private void createDescriptionSection(RootElement parent, boolean isTaxonDescription) {
648
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName(), true));
649
        addPart(descriptionDetailSection);
650

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

    
653
        if(isTaxonDescription) {
654
            NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(
655
                    getConversationHolder(), parent, this, StoreUtil.getSectionStyle(NaturalLanguageSection.class, getInput().getClass().getCanonicalName(), true));
656
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
657
            addPart(naturalLanguageSection);
658
        }
659
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(
660
                getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName(), true));
661
        addPart(descriptionSourceSection);
662

    
663
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
664

    
665
        if(isTaxonDescription) {
666
            ScopeSection scopeSection = formFactory.createScopeSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ScopeSection.class, getInput().getClass().getCanonicalName()));
667
            addPart(scopeSection);
668
        }
669
    }
670

    
671
    private void createTaxonDescriptionSection(RootElement parent) {
672
        createDescriptionSection(parent, true);
673
    }
674

    
675
    private void createSpecimenDescriptionSection(RootElement parent) {
676
        createDescriptionSection(parent, false);
677
    }
678

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

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

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

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

    
688
        addPart(descriptionDetailSection);
689
        addPart(descriptionSourceSection);
690

    
691
    }
692

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

    
696
        addPart(descriptionDetailSection);
697
    }
698

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

    
702
        addPart(mediaDetailSection);
703
    }
704

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

    
713
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
714

    
715
        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
716
        addPart(derivedUnitBaseDetailSection);
717

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

    
724
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
725
            FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitDetailSection.class, getInput().getClass().getCanonicalName()));
726
            addPart(fieldUnitDetailSection);
727
        }
728
        else{
729

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

    
745
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
746
        DerivedUnitTypeDesignationSection derivedUnitTypeDesignationSection = formFactory.createDerivedUnitTypeDesignationSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitTypeDesignationSection.class, getInput().getClass().getCanonicalName()));
747
        addPart(derivedUnitTypeDesignationSection);
748

    
749
    }
750

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

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

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

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

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

    
762
        addPart(fielUnitGeneralDetailSection);
763
        addPart(gatheringEventDetailSection);
764
        addPart(fieldUnitDetailSection);
765

    
766
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
767
        DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
768
        addPart(determinationDetailSection);
769

    
770
    }
771

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

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

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

    
779
        addPart(section);
780
        addPart(sampleDesignationDetailSection);
781
    }
782

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

    
786
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
787

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

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

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

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

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

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

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

    
815
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
816

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

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

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

    
823

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

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

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

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

    
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
        addPart(rightsSection);
848

    
849
    }
850

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

    
854
        addPart(section);
855
    }
856

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

    
860
        addPart(featureDistributionSection);
861
    }
862

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

    
866
        addPart(featureDistributionSection);
867
    }
868

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

    
874
    private void createCharacterSection(RootElement parent) {
875
        CharacterDetailSection featureDistributionSection = formFactory.createCharacterDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
876
        addPart(featureDistributionSection);
877
    }
878

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

    
882
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
883

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

    
886
        addPart(polytomousKeyDetailSection);
887
        addPart(polytomousKeyNodeDetailSection);
888

    
889
    }
890

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

    
894
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
895

    
896
        addPart(descriptionUseRecordSection);
897

    
898

    
899
    }
900

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

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

    
906
        addPart(userDetailSection);
907
        addPart(groupByUserDetailSection);
908
    }
909

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

    
915
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
916

    
917

    
918
        NonViralNameDetailSection nonViralNameSection = formFactory
919
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
920
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
921
        addPart(nonViralNameSection);
922

    
923
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
924

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

    
930

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

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

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

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

    
948
    }
949

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

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

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

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

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

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

    
999

    
1000
}
(2-2/2)