Project

General

Profile

Download (58.4 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2011 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9
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.IBulkEditor;
69
import eu.etaxonomy.taxeditor.editor.IDistributionEditorPart;
70
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
71
import eu.etaxonomy.taxeditor.l10n.Messages;
72
import eu.etaxonomy.taxeditor.model.AbstractUtility;
73
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
74
import eu.etaxonomy.taxeditor.model.IDerivedUnitFacadePart;
75
import eu.etaxonomy.taxeditor.model.MessagingUtils;
76
import eu.etaxonomy.taxeditor.model.PolytomousKeyRelationship;
77
import eu.etaxonomy.taxeditor.preference.NameDetailsConfigurator;
78
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
79
import eu.etaxonomy.taxeditor.store.CdmStore;
80
import eu.etaxonomy.taxeditor.store.StoreUtil;
81
import eu.etaxonomy.taxeditor.store.UsageTermCollection;
82
import eu.etaxonomy.taxeditor.termtree.e4.ICharacterEditor;
83
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
84
import eu.etaxonomy.taxeditor.ui.element.RootElement;
85
import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailSection;
86
import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailSection;
87
import eu.etaxonomy.taxeditor.ui.section.agent.TeamOrPersonBaseDetailSection;
88
import eu.etaxonomy.taxeditor.ui.section.common.ReferencedEntityDetailSection;
89
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailSection;
90
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailElement;
91
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailSection;
92
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementMediaSection;
93
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementSourceSection;
94
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionSourceSection;
95
import eu.etaxonomy.taxeditor.ui.section.description.MediaDetailsSection;
96
import eu.etaxonomy.taxeditor.ui.section.description.NaturalLanguageSection;
97
import eu.etaxonomy.taxeditor.ui.section.description.ScopeSection;
98
import eu.etaxonomy.taxeditor.ui.section.description.detail.DistributionDetailElement;
99
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterDetailSection;
100
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDetailSection;
101
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDtoDetailSection;
102
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailSection;
103
import eu.etaxonomy.taxeditor.ui.section.feature.TermNodeDetailSection;
104
import eu.etaxonomy.taxeditor.ui.section.feature.TermTreeDetailSection;
105
import eu.etaxonomy.taxeditor.ui.section.feature.TermTreeDetailSectionForNode;
106
import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailSection;
107
import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailSection;
108
import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailSection;
109
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailSection;
110
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailSection;
111
import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailSection;
112
import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
113
import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;
114
import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
115
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
116
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
117
import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
118
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeDetailSection;
119
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeGeneralDetailSection;
120
import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
121
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationSection;
122
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailSection;
123
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaQualityDetailSection;
124
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSampleGeneralDetailSection;
125
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSamplePreparationPreservationSection;
126
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailSection;
127
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceContigFileCollectionDetailSection;
128
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceGeneralDetailSection;
129
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceReferenceCollectionDetailSection;
130
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadGeneralDetailSection;
131
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadPherogramCollectionDetailSection;
132
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailSection;
133
import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
134
import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
135
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
136
import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsSection;
137
import eu.etaxonomy.taxeditor.ui.section.supplemental.identifier.DerivedUnitFacadeIdentifierSection;
138
import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;
139
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailSection;
140
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonRelationshipDetailSection;
141
import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailSection;
142
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailSection;
143
import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailSection;
144
import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailSection;
145
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermMediaSection;
146
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
147
import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
148
import eu.etaxonomy.taxeditor.view.e4.AbstractCdmDataViewerE4;
149

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

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

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

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

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

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

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

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

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

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

    
241
        Object input = getInput();
242
        if (input == null){
243
            return;
244
        }
245
        destroySections();
246
        if (input instanceof TaxonBase) {
247
            if(((TaxonBase<?>) input).getName()==null){
248
                createEmptySection(Messages.DetailsViewerE4_TAXON_HAS_NO_NAME, rootElement);
249
            }
250
            else{
251
                createTaxonSections(rootElement);
252
            }
253

    
254
        } else if (input instanceof TaxonName) {
255
            createNameSections(rootElement);
256

    
257
        } else if (input instanceof Reference) {
258
            createReferenceSections(rootElement);
259

    
260
        } else if (input instanceof Team) {
261
            createTeamDetailSection(rootElement);
262

    
263
        } else if (input instanceof Person) {
264
            createPersonDetailSection(rootElement);
265

    
266
        } else if (input instanceof TeamOrPersonBase) {
267
            createTeamOrPersonBaseDetailSection(rootElement);
268

    
269
        } else if (input instanceof DescriptionBase) {
270
            if(input instanceof SpecimenDescription){
271
                //TODO: add more sections to DetailsView for SpecimenDescription
272
                createSpecimenDescriptionSection(rootElement);
273
            }
274
            else{
275
                Set<Marker> descriptionMarkers = ((DescriptionBase<?>) input).getMarkers();
276

    
277
                Boolean isUseDescription = false;
278
                for (Marker marker : descriptionMarkers) {
279
                    if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
280
                        isUseDescription = true;
281
                    }
282
                }
283
                if (((DescriptionBase<?>) input).isImageGallery()) {
284
                    createImageGallerySection(rootElement);
285

    
286
                } else if (isUseDescription) {
287
                    createUseDescriptionSection(rootElement);
288
                } else if (input instanceof TaxonDescription){
289
                    createTaxonDescriptionSection(rootElement, !((DescriptionBase) input).isComputed());
290

    
291
                } else{
292
                    createDescriptionSection(rootElement, false, !((DescriptionBase) input).isComputed());
293
                }
294
            }
295
        } else if (input instanceof DescriptionElementBase){
296
            Set<Marker> descriptionMarkers = new HashSet<>();
297
            if(((DescriptionElementBase) input).getInDescription()!=null) {
298
                descriptionMarkers = ((DescriptionElementBase) input).getInDescription().getMarkers();
299
            }
300

    
301
            Boolean isUseDescription = false;
302
            for (Marker marker : descriptionMarkers) {
303
                if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
304
                    isUseDescription = true;
305
                }
306
            }
307

    
308
            if (isUseDescription == true && input instanceof CategoricalData) {
309
                createUseRecordSection(rootElement);
310
            } else {
311
                createDescriptionElementSection(rootElement, activePart);
312
            }
313

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

    
355
                if(facade.innerDerivedUnit().getRecordBasis()==SpecimenOrObservationType.TissueSample){
356
                    //this case seems to be very unlikely as innerDerivedUnit in real cases should more or less always have the same type
357
                    createTissueSampleSection(rootElement);
358
                }
359
                else if(facade.innerDerivedUnit().getRecordBasis()==SpecimenOrObservationType.DnaSample){
360
                    createDnaSampleSection(rootElement);
361
                }
362
            }else{
363
                createDerivedUnitBaseElementSection(rootElement);
364
            }
365
        } else if (input instanceof DnaSample){
366
            DnaSample dnaSample = (DnaSample)input;
367
            if(dnaSample.getRecordBasis()==SpecimenOrObservationType.TissueSample){
368
                createTissueSampleSection(rootElement);
369
            }
370
            else if(dnaSample.getRecordBasis()==SpecimenOrObservationType.DnaSample){
371
                createDnaSampleSection(rootElement);
372
            }
373
        } else if (input instanceof MediaSpecimen){
374
            createMediaSpecimenSection(rootElement);
375
        }
376
        else if(input instanceof Sequence){
377
            createSequenceSection(rootElement);
378
        }
379
        else if(input instanceof SingleRead){
380
            createSingleReadSection(rootElement);
381
        }
382
        else if (input instanceof FeatureNodeContainer) {
383
            createFeatureDistributionSection(rootElement);
384

    
385
        } else if (input instanceof TermNode) {
386
            TermType type= ((TermNode<?>) input).getTermType();
387
            if(type.equals(TermType.Character) ){
388
                createCharacterNodeSection(rootElement);
389
            }
390
            else if(type.equals(TermType.Feature)){
391
                createFeatureNodeSection(rootElement);
392
            }
393

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

    
405
        } else if (input instanceof TermTreeDto) {
406
            createFeatureTreeSectionForDto(rootElement);
407

    
408
        } else if (input instanceof Character) {
409
            createCharacterSection(rootElement);
410

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

    
427
        } else if (input instanceof SelectionChangedEvent ) {
428
            IStructuredSelection sel =(IStructuredSelection) ((SelectionChangedEvent)input).getSelection();
429
            if (sel.getFirstElement()instanceof Distribution){
430
                createDescriptionElementSection(rootElement);
431
            }
432

    
433
//            createDescriptionElementSection(rootElement);
434

    
435
        }else {
436
            createEmptySection(null, rootElement);
437
        }
438
        layout();
439
    }
440

    
441
    private void createGroupSection(RootElement parent) {
442
        GroupDetailSection groupDetailSection = formFactory.createGroupDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GroupDetailSection.class, getInput().getClass().getCanonicalName()));
443
        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(MemberDetailSection.class, getInput().getClass().getCanonicalName()));
444
        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(getConversationHolder(), parent,StoreUtil.getSectionStyle(GrantedAuthorityDetailSection.class, getInput().getClass().getCanonicalName()));
445

    
446
        addPart(groupDetailSection);
447
        addPart(memberDetailSection);
448
        addPart(grantedAuthorityDetailSection);
449
    }
450

    
451
    @Override
452
    public ISelection getSelection() {
453
        return selection;
454
    }
455

    
456
    @Override
457
    public void setSelection(ISelection selection, boolean reveal) {
458

    
459
        this.selection = selection;
460
        if(this.selection!=null){
461
            SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
462
            fireSelectionChanged(selectionChangedEvent);
463
        }
464
    }
465

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

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

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

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

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

    
566
        addPart(parsingMessagesSection);
567
        addPart(nonViralNameSection);
568
    }
569

    
570
    private void createNameSections(RootElement parent) {
571
        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(
572
                getConversationHolder(), parent, this, false, StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
573

    
574
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
575

    
576
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
577
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
578
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
579

    
580
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
581
                StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
582
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
583

    
584
        addPart(nonViralNameSection);
585
        addPart(nomenclaturalStatusSection);
586
        addPart(referenceDetailSection);
587

    
588
//        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
589
//        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
590

    
591
        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
592
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
593

    
594
        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
595
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
596
//        addPart(protologSection);
597
        addPart(typeDesignationSection);
598
        addPart(nameRelationshipSection);
599
    }
600

    
601
    private void createReferenceSections(RootElement parent) {
602
        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this,
603
                StoreUtil.getSectionStyle(ReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
604

    
605
        addPart(referenceDetailSection);
606
    }
607

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

    
611
        addPart(teamOrPersonBaseDetailSection);
612
    }
613

    
614
    private void createTeamDetailSection(RootElement parent) {
615
        TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TeamDetailSection.class, getInput().getClass().getCanonicalName(), true));
616

    
617
        addPart(teamDetailSection);
618
    }
619

    
620
    private void createPersonDetailSection(RootElement parent) {
621
        PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(PersonDetailSection.class, getInput().getClass().getCanonicalName(), true));
622
        addPart(personDetailSection);
623
    }
624

    
625
    private void createDescriptionElementSection(RootElement parent) {
626
        createDescriptionElementSection(parent, null);
627
    }
628

    
629
    private void createDescriptionElementSection(RootElement parent, Object activePart) {
630
        DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionElementDetailSection.class, getInput().getClass().getCanonicalName(), true));
631
        descriptionElementDetailSection.setEnabled(this.detailsEnabled);
632

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

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

    
641
        }else{
642
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()) );
643
        }
644

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

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

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

    
651
        addPart(descriptionElementDetailSection);
652
        addPart(descriptionElementSourceSection);
653
        addPart(descriptionElementMediaSection);
654
    }
655

    
656
    private void createDescriptionSection(RootElement parent, boolean isTaxonDescription, boolean isEnabled) {
657
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName(), true));
658
        descriptionDetailSection.setEnabled(isEnabled);
659
        addPart(descriptionDetailSection);
660

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

    
663
        if(isTaxonDescription) {
664
            NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(
665
                    getConversationHolder(), parent, this, StoreUtil.getSectionStyle(NaturalLanguageSection.class, getInput().getClass().getCanonicalName(), true));
666
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
667
            naturalLanguageSection.setEnabled(isEnabled);
668
            addPart(naturalLanguageSection);
669
        }
670
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(
671
                getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName(), true));
672
        descriptionSourceSection.setEnabled(isEnabled);
673
        addPart(descriptionSourceSection);
674

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

    
677
        if(isTaxonDescription) {
678
            ScopeSection scopeSection = formFactory.createScopeSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ScopeSection.class, getInput().getClass().getCanonicalName()));
679
            scopeSection.setEnabled(isEnabled);
680
            addPart(scopeSection);
681
        }
682
    }
683

    
684
    private void createTaxonDescriptionSection(RootElement parent, boolean isEnabled) {
685
        createDescriptionSection(parent, true, isEnabled);
686
    }
687

    
688
    private void createSpecimenDescriptionSection(RootElement parent) {
689
        createDescriptionSection(parent, false, true);
690
    }
691

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

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

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

    
699
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
700

    
701
        addPart(descriptionDetailSection);
702
        addPart(descriptionSourceSection);
703
    }
704

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

    
708
        addPart(descriptionDetailSection);
709
    }
710

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

    
714
        addPart(mediaDetailSection);
715
    }
716

    
717
    private void createDerivedUnitBaseElementSection(RootElement parent) {
718
        DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
719
        //TODO for DerivateEditor do not use facade anymore to avoid this special case handling #4539
720
        if(!(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart)){
721
            derivedUnitGeneralDetailSection.setShowOnlyDerivedUnitData(true);
722
        }
723
        addPart(derivedUnitGeneralDetailSection);
724

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

    
727
        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
728
        addPart(derivedUnitBaseDetailSection);
729

    
730
        //for editors working with facades
731
        if(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart){
732
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
733
            GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GatheringEventDetailSection.class, getInput().getClass().getCanonicalName()));
734
            addPart(gatheringEventDetailSection);
735

    
736
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
737
            FieldUnitFacadeDetailSection fieldUnitDetailSection = formFactory.createFieldUnitFacadeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitFacadeDetailSection.class, getInput().getClass().getCanonicalName()));
738
            addPart(fieldUnitDetailSection);
739
        }
740
        else{
741

    
742
            if(PreferencesUtil.isShowTaxonAssociations()){
743
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
744
                TaxonAssociationDetailSection taxonAssociationDetailSection = formFactory.createTaxonAssociationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TaxonAssociationDetailSection.class, getInput().getClass().getCanonicalName(), true));
745
                addPart(taxonAssociationDetailSection);
746
            }
747
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
748
            DerivedUnitFacadeIdentifierSection identifierDetailSection = formFactory.createDerivedUnitFacadeIdentifierSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DerivedUnitFacadeIdentifierSection.class, getInput().getClass().getCanonicalName()));
749
            addPart(identifierDetailSection);
750
        }
751
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
752
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
753
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
754
            addPart(determinationDetailSection);
755
        }
756

    
757
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
758
        DerivedUnitTypeDesignationSection derivedUnitTypeDesignationSection = formFactory.createDerivedUnitTypeDesignationSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitTypeDesignationSection.class, getInput().getClass().getCanonicalName()));
759
        addPart(derivedUnitTypeDesignationSection);
760
    }
761

    
762
    private void createFieldUnitFacadeSection(RootElement parent) {
763
        FieldUnitFacadeGeneralDetailSection fielUnitGeneralDetailSection = formFactory.createFieldUnitFacadeGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitFacadeGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
764

    
765
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
766

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

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

    
771
        FieldUnitFacadeDetailSection fieldUnitDetailSection = formFactory.createFieldUnitFacadeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitFacadeDetailSection.class, getInput().getClass().getCanonicalName()));
772

    
773
        addPart(fielUnitGeneralDetailSection);
774
        addPart(gatheringEventDetailSection);
775
        addPart(fieldUnitDetailSection);
776

    
777
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
778
        DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
779
        addPart(determinationDetailSection);
780
    }
781

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

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

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

    
789
        addPart(section);
790
        addPart(sampleDesignationDetailSection);
791
    }
792

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

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

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

    
800
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
801

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

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

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

    
808
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
809
        DeterminationDetailSection determinationDetailSection = null;
810
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
811
            determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
812
        }
813
        addPart(section);
814
        addPart(preparationPreservationSection);
815
        addPart(qualitySection);
816
        addPart(sampleDesignationDetailSection);
817
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
818
            addPart(determinationDetailSection);
819
        }
820
    }
821

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

    
825
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
826

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

    
829
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
830

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

    
833
        addPart(section);
834
        addPart(referenceSection);
835
        addPart(contigFileSection);
836
    }
837

    
838
    private void createSingleReadSection(RootElement parent) {
839
        SingleReadGeneralDetailSection section = formFactory.createSingleReadGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(SingleReadGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
840
        addPart(section);
841

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

    
844
        SingleReadPherogramCollectionDetailSection pherogramSection = formFactory.createSingleReadPherogramCollectionDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(SingleReadPherogramCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
845
        addPart(pherogramSection);
846
    }
847

    
848
    private void createMediaSpecimenSection(RootElement parent) {
849
        MediaSpecimenGeneralDetailSection generalSection = formFactory.createMediaSpecimenGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(MediaSpecimenGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
850
        addPart(generalSection);
851

    
852
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
853

    
854
        RightsSection rightsSection = formFactory.createRightsSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(RightsSection.class, getInput().getClass().getCanonicalName()));
855
//        rightsSection.setEntity(generalSection.getEntity().innerDerivedUnit());
856
        addPart(rightsSection);
857
    }
858

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

    
862
        addPart(section);
863
    }
864
    private void createFeatureTreeSection(RootElement parent) {
865
        TermTreeDetailSectionForNode section = formFactory.createFeatureTreeDetailSectionForTree(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermTreeDetailSection.class, getInput().getClass().getCanonicalName(), true));
866
        addPart(section);
867
    }
868

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

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

    
879
    private void createCharacterNodeSection(RootElement parent) {
880
        CharacterNodeDetailSection featureDistributionSection = formFactory.createCharacterNodeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
881
        addPart(featureDistributionSection);
882
    }
883

    
884
    private void createCharacterNodeDtoSection(RootElement parent) {
885
        CharacterNodeDtoDetailSection featureDistributionSection = formFactory.createCharacterNodeDtoDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
886
        addPart(featureDistributionSection);
887
    }
888

    
889
    private void createCharacterSection(RootElement parent) {
890
        CharacterDetailSection featureDistributionSection = formFactory.createCharacterDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
891
        addPart(featureDistributionSection);
892
    }
893

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

    
897
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
898

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

    
901
        addPart(polytomousKeyDetailSection);
902
        addPart(polytomousKeyNodeDetailSection);
903

    
904
    }
905

    
906
    private void createUseRecordSection(RootElement parent) {
907
        UseRecordDetailSection descriptionUseRecordSection = formFactory.createUseRecordDetailSection(getConversationHolder(), parent, this,StoreUtil.getSectionStyle(UseRecordDetailSection.class, getInput().getClass().getCanonicalName(), true));
908
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
909
        addPart(descriptionUseRecordSection);
910
    }
911

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

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

    
917
        addPart(userDetailSection);
918
        addPart(groupByUserDetailSection);
919
    }
920

    
921
    private void createMisappliedNameSection(RootElement parent) {
922
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(getConversationHolder(), parent, this,
923
                StoreUtil.getSectionStyle(TaxonRelationshipDetailSection.class, getInput().getClass().getCanonicalName(), true));
924
        addPart(taxonRelationshipDetailSection);
925

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

    
928
        NonViralNameDetailSection nonViralNameSection = formFactory
929
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
930
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
931
        addPart(nonViralNameSection);
932

    
933
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
934

    
935
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
936
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
937
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
938
        addPart(referenceDetailSection);
939

    
940
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
941
            		StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
942
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
943
        addPart(nomenclaturalStatusSection);
944

    
945
//		ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
946
//		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
947
//		addPart(protologSection);
948

    
949
		TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
950
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
951
		addPart(typeDesignationSection);
952

    
953
		NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
954
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
955
		addPart(nameRelationshipSection);
956
    }
957

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

    
961
        ReferencedEntityDetailSection referencedEntityBaseDetailSection = formFactory.createReferencedEntityDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(ReferencedEntityDetailSection.class, getInput().getClass().getCanonicalName(), true));
962
        addPart(taxonRelationshipDetailSection);
963
        addPart(referencedEntityBaseDetailSection);
964
    }
965
    private void createTermVocabularySection(RootElement parent) {
966
        TermVocabularyDetailSection termVocabularyDetailSection = formFactory.createTermVocabularyDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermVocabularyDetailSection.class, getInput().getClass().getCanonicalName(), true));
967
        addPart(termVocabularyDetailSection);
968
    }
969

    
970
    private void createDefinedTermSection(RootElement parent) {
971
        DefinedTermDetailSection<?> definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
972
        addPart(definedTermDetailSection);
973
        TermMediaSection termMediaSection = formFactory.createTermMediaSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
974
        addPart(termMediaSection);
975
    }
976

    
977
    @Override
978
    public void update(CdmDataChangeMap arg0) {
979

    
980
    }
981
    @Inject
982
    @Optional
983
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS)boolean refresh){
984
        if(refresh){
985
            refresh();
986
        }
987
    }
988

    
989
    @Inject
990
    @Optional
991
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS_DISTRIBUTION)String nameCache){
992
        if(nameCache != null && getInput() instanceof Distribution && this.activePart instanceof IDistributionEditorPart){
993
           if (part instanceof CdmSectionPart && ((CdmSectionPart)part).getSection() instanceof DescriptionElementDetailSection){
994
               for (ICdmFormElement element: ((DescriptionElementDetailSection)((CdmSectionPart)part).getSection()).getElements()){
995
                   if (element instanceof DescriptionElementDetailElement){
996
                       for(ICdmFormElement descriptionElement:((DescriptionElementDetailElement)element).getElements()){
997
                           if (descriptionElement instanceof DistributionDetailElement){
998
                               ((DistributionDetailElement) descriptionElement).setName(nameCache);
999
                           }
1000
                       }
1001
                   }
1002
               }
1003
           }
1004
        }
1005
    }
1006
}
(2-2/2)