Project

General

Profile

Download (56.5 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.taxeditor.editor.IBulkEditor;
68
import eu.etaxonomy.taxeditor.editor.IDistributionEditorPart;
69
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
70
import eu.etaxonomy.taxeditor.l10n.Messages;
71
import eu.etaxonomy.taxeditor.model.AbstractUtility;
72
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
73
import eu.etaxonomy.taxeditor.model.IDerivedUnitFacadePart;
74
import eu.etaxonomy.taxeditor.model.MessagingUtils;
75
import eu.etaxonomy.taxeditor.model.PolytomousKeyRelationship;
76
import eu.etaxonomy.taxeditor.preference.NameDetailsConfigurator;
77
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
78
import eu.etaxonomy.taxeditor.store.CdmStore;
79
import eu.etaxonomy.taxeditor.store.StoreUtil;
80
import eu.etaxonomy.taxeditor.store.UsageTermCollection;
81
import eu.etaxonomy.taxeditor.termtree.e4.ICharacterEditor;
82
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
83
import eu.etaxonomy.taxeditor.ui.element.RootElement;
84
import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailSection;
85
import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailSection;
86
import eu.etaxonomy.taxeditor.ui.section.agent.TeamOrPersonBaseDetailSection;
87
import eu.etaxonomy.taxeditor.ui.section.common.ReferencedEntityDetailSection;
88
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailSection;
89
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailElement;
90
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailSection;
91
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementMediaSection;
92
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementSourceSection;
93
import eu.etaxonomy.taxeditor.ui.section.description.DescriptionSourceSection;
94
import eu.etaxonomy.taxeditor.ui.section.description.MediaDetailsSection;
95
import eu.etaxonomy.taxeditor.ui.section.description.NaturalLanguageSection;
96
import eu.etaxonomy.taxeditor.ui.section.description.ScopeSection;
97
import eu.etaxonomy.taxeditor.ui.section.description.detail.DistributionDetailElement;
98
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterDetailSection;
99
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDetailSection;
100
import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDtoDetailSection;
101
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailSection;
102
import eu.etaxonomy.taxeditor.ui.section.feature.TermNodeDetailSection;
103
import eu.etaxonomy.taxeditor.ui.section.feature.TermTreeDetailSection;
104
import eu.etaxonomy.taxeditor.ui.section.feature.TermTreeDetailSectionForNode;
105
import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailSection;
106
import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailSection;
107
import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailSection;
108
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailSection;
109
import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailSection;
110
import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailSection;
111
import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
112
import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;
113
import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
114
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
115
import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
116
import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
117
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeDetailSection;
118
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeGeneralDetailSection;
119
import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
120
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationSection;
121
import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailSection;
122
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaQualityDetailSection;
123
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSampleGeneralDetailSection;
124
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSamplePreparationPreservationSection;
125
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailSection;
126
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceContigFileCollectionDetailSection;
127
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceGeneralDetailSection;
128
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceReferenceCollectionDetailSection;
129
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadGeneralDetailSection;
130
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadPherogramCollectionDetailSection;
131
import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailSection;
132
import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
133
import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalSourceDetailSection;
134
import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
135
import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsSection;
136
import eu.etaxonomy.taxeditor.ui.section.supplemental.identifier.DerivedUnitFacadeIdentifierSection;
137
import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;
138
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailSection;
139
import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonRelationshipDetailSection;
140
import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailSection;
141
import eu.etaxonomy.taxeditor.ui.section.user.UserDetailSection;
142
import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailSection;
143
import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailSection;
144
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermMediaSection;
145
import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
146
import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
147
import eu.etaxonomy.taxeditor.view.e4.AbstractCdmDataViewer;
148

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

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

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

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

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

    
176
    }
177
    // START HACK TO MAKE THE DERIVED UNIT FACADE WORK
178
    // since we are getting implementations of DerivedUnitBase from the bulk
179
    // editor and not derived unit facade objects,
180
    @Override
181
    public void setInput(Object input) {
182

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

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

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

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

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

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

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

    
264
        } else if (input instanceof DescriptionBase) {
265
            if ((((DescriptionBase<?>)input).isComputed() || ((DescriptionBase<?>)input).isCloneForSource())&& PreferencesUtil.isComputedDesciptionHandlingDisabled()){
266
                this.setDetailsEnabled(false);
267
            }
268
            if(input instanceof SpecimenDescription){
269
                //TODO: add more sections to DetailsView for SpecimenDescription
270
                createSpecimenDescriptionSection(rootElement);
271
            }
272
            else{
273
                Set<Marker> descriptionMarkers = ((DescriptionBase<?>) input).getMarkers();
274

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

    
284
                } else if (isUseDescription) {
285
                    createUseDescriptionSection(rootElement);
286
                } else if (input instanceof TaxonDescription){
287
                    createTaxonDescriptionSection(rootElement, !(((DescriptionBase<?>) input).isComputed() && PreferencesUtil.isComputedDesciptionHandlingDisabled()));
288

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

    
299
            Boolean isUseDescription = false;
300
            for (Marker marker : descriptionMarkers) {
301
                if (marker.getMarkerType()!= null && marker.getMarkerType().getUuid().equals(UsageTermCollection.uuidUseMarkerType)) {
302
                    isUseDescription = true;
303
                }
304
            }
305
            if (((DescriptionElementBase)input).getInDescription() != null && ((DescriptionElementBase)input).getInDescription().isComputed() && PreferencesUtil.isComputedDesciptionHandlingDisabled()){
306
                this.setDetailsEnabled(false);
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(parent, this, StoreUtil.getSectionStyle(GroupDetailSection.class, getInput().getClass().getCanonicalName()));
443
        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(parent, StoreUtil.getSectionStyle(MemberDetailSection.class, getInput().getClass().getCanonicalName()));
444
        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(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
        TaxonBase<?> taxonBase = (TaxonBase<?>)getInput();
477
        if (hasPermission){
478
            // check for subtree permissions as well.
479

    
480
            Taxon acceptedTaxon = null;
481
            if (taxonBase instanceof Taxon){
482
                acceptedTaxon = (Taxon)taxonBase;
483
            }else{
484
                acceptedTaxon = ((Synonym)taxonBase).getAcceptedTaxon();
485
            }
486
            if (acceptedTaxon != null){ //needs discussion if synonyms without accepted taxon should never be filtered by subtree permission(current implementation). See also #8849
487
                Set<TaxonNode> nodes = acceptedTaxon.getTaxonNodes();
488
                for (TaxonNode node: nodes){
489
                    hasPermission &= CdmStore.currentAuthentiationHasPermission(node, requiredCrud);
490
                    if (!hasPermission){
491
                        //check whether there are explicit TaxonNode rights
492
                        boolean taxonnodePermissionExists = false;
493
                        Collection<? extends GrantedAuthority> authorities = CdmStore.getCurrentAuthentiation().getAuthorities();
494
                        for (GrantedAuthority grantedAuthority: authorities){
495
                            if (grantedAuthority.getAuthority().startsWith("TAXONNODE")){
496
                                taxonnodePermissionExists = true;
497
                            }
498
                        }
499
                        if (!taxonnodePermissionExists){
500
                            hasPermission = true;
501
                        }
502
                    }
503
                }
504
            }
505
        }
506
        detailsEnabled = hasPermission;
507
        ParsingMessagesSection parsingMessagesSection = formFactory.createParsingMessagesSection(parent, this,
508
                StoreUtil.getSectionStyle(ParsingMessagesSection.class, getInput().getClass().getCanonicalName(), true));
509
        if (config == null){
510
            TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(parent, this,
511
                    StoreUtil.getSectionStyle(TaxonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
512
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
513
          //  boolean hasPermission = CdmStore.currentAuthentiationHasPermission(getInput(), Operation.UPDATE);
514
            taxonBaseDetailSection.setEnabled(detailsEnabled);
515
            addPart(taxonBaseDetailSection);
516
        }else{
517
            if (config.isTaxonSectionActivated()){
518
                TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(parent, this,
519
                        StoreUtil.getSectionStyle(TaxonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
520
                taxonBaseDetailSection.setEnabled(detailsEnabled);
521
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
522
                addPart(taxonBaseDetailSection);
523
            }
524
        }
525
        //TODO: test code for secundum source section
526
//        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
527
//        addPart(sourceSection);
528
//        if (taxonBase.getSecSource() == null){
529
//            SecundumSource source = SecundumSource.NewSecundumInstance(taxonBase);
530
//            taxonBase.setSecSource(source);
531
//            sourceSection.setEntity(taxonBase);
532
//        }else{
533
//        	sourceSection.setEntity(taxonBase);
534
//        }
535
//
536
//        if (config != null && !config.isSecEnabled()){
537
//        	sourceSection.setEnabled(false);
538
//        }
539
        NonViralNameDetailSection nonViralNameSection = formFactory
540
                .createNonViralNameDetailSection(parent, this, true,
541
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
542
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
543
        nonViralNameSection.setEnabled(detailsEnabled);
544
        if (config == null || config.isNomenclaturalReferenceSectionActivated()){
545
            NomenclaturalSourceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(parent, this,
546
                    StoreUtil.getSectionStyle(NomenclaturalSourceDetailSection.class, getInput().getClass().getCanonicalName(), true));
547
            referenceDetailSection.setEnabled(detailsEnabled);
548
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
549
            addPart(referenceDetailSection);
550

    
551
        }
552
        if ( config == null || config.isNomenclaturalStatusSectionActivated()){
553
            NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(parent,
554
                    StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
555
            nomenclaturalStatusSection.setEnabled(detailsEnabled);
556
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
557
            addPart(nomenclaturalStatusSection);
558
        }
559

    
560
        if (config == null || config.isTypeDesignationSectionActivated()){
561
            TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
562
            typeDesignationSection.setEnabled(detailsEnabled);
563
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
564
            addPart(typeDesignationSection);
565
        }
566

    
567
        if (config == null || config.isNameRelationsSectionActivated()){
568
            NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
569
            nameRelationshipSection.setEnabled(detailsEnabled);
570
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
571
            addPart(nameRelationshipSection);
572
        }
573

    
574
        addPart(parsingMessagesSection);
575
        addPart(nonViralNameSection);
576
    }
577

    
578
    private void createNameSections(RootElement parent) {
579
        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(
580
                parent, this, false, StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
581

    
582
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
583

    
584
        NomenclaturalSourceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(parent, this,
585
                StoreUtil.getSectionStyle(NomenclaturalSourceDetailSection.class, getInput().getClass().getCanonicalName(), true));
586
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
587

    
588
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(parent,
589
                StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
590
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
591

    
592
        addPart(nonViralNameSection);
593
        addPart(nomenclaturalStatusSection);
594
        addPart(referenceDetailSection);
595

    
596
        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
597
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
598

    
599
        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
600
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
601
//        addPart(protologSection);
602
        addPart(typeDesignationSection);
603
        addPart(nameRelationshipSection);
604
    }
605

    
606
    private void createReferenceSections(RootElement parent) {
607
        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(parent, this,
608
                StoreUtil.getSectionStyle(ReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
609

    
610
        addPart(referenceDetailSection);
611
    }
612

    
613
    private void createTeamOrPersonBaseDetailSection(RootElement parent) {
614
        TeamOrPersonBaseDetailSection teamOrPersonBaseDetailSection = formFactory.createTeamOrPersonBaseDetailSection(parent, this, StoreUtil.getSectionStyle(TeamOrPersonBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
615

    
616
        addPart(teamOrPersonBaseDetailSection);
617
    }
618

    
619
    private void createTeamDetailSection(RootElement parent) {
620
        TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(parent, StoreUtil.getSectionStyle(TeamDetailSection.class, getInput().getClass().getCanonicalName(), true));
621

    
622
        addPart(teamDetailSection);
623
    }
624

    
625
    private void createPersonDetailSection(RootElement parent) {
626
        PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(parent, StoreUtil.getSectionStyle(PersonDetailSection.class, getInput().getClass().getCanonicalName(), true));
627
        addPart(personDetailSection);
628
    }
629

    
630
    private void createDescriptionElementSection(RootElement parent) {
631
        createDescriptionElementSection(parent, null);
632
    }
633

    
634
    private void createDescriptionElementSection(RootElement parent, Object activePart) {
635
        DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(parent, this, StoreUtil.getSectionStyle(DescriptionElementDetailSection.class, getInput().getClass().getCanonicalName(), true));
636

    
637

    
638
        //  IntextReferenceSection intextReferenceSection = formFactory.createIntextReferenceSection(parent,  getSectionStyle(.class, getInput().getClass().getCanonicalName()));
639

    
640
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
641
        DescriptionElementSourceSection descriptionElementSourceSection;
642
        if (activePart != null && activePart instanceof IDistributionEditorPart){
643
            Reference defaultSource =((IDistributionEditorPart)activePart).getEditor().getDefaultSource();
644
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(parent, defaultSource, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()));
645

    
646
        }else{
647
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(parent, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()) );
648
            descriptionElementSourceSection.setEnabled(this.detailsEnabled);
649

    
650
        }
651

    
652

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

    
655
        DescriptionElementMediaSection descriptionElementMediaSection = formFactory.createDescriptionElementMediaSection(
656
                parent, StoreUtil.getSectionStyle(DescriptionElementMediaSection.class, getInput().getClass().getCanonicalName()));
657

    
658
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
659

    
660
        addPart(descriptionElementDetailSection);
661
        addPart(descriptionElementSourceSection);
662
        addPart(descriptionElementMediaSection);
663
    }
664

    
665
    private void createDescriptionSection(RootElement parent, boolean isTaxonDescription, boolean isEnabled) {
666
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName(), true));
667
        descriptionDetailSection.setEnabled(isEnabled);
668
        addPart(descriptionDetailSection);
669

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

    
672
        if(isTaxonDescription) {
673
            NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(
674
                    parent, this, StoreUtil.getSectionStyle(NaturalLanguageSection.class, getInput().getClass().getCanonicalName(), true));
675
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
676
            naturalLanguageSection.setEnabled(isEnabled);
677
            addPart(naturalLanguageSection);
678
        }
679
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(
680
                parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName(), true));
681
        descriptionSourceSection.setEnabled(isEnabled);
682
        addPart(descriptionSourceSection);
683

    
684
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
685

    
686
        if(isTaxonDescription) {
687
            ScopeSection scopeSection = formFactory.createScopeSection(parent, StoreUtil.getSectionStyle(ScopeSection.class, getInput().getClass().getCanonicalName()));
688
            scopeSection.setEnabled(isEnabled);
689
            addPart(scopeSection);
690
        }
691
    }
692

    
693
    private void createTaxonDescriptionSection(RootElement parent, boolean isEnabled) {
694
        createDescriptionSection(parent, true, isEnabled);
695
    }
696

    
697
    private void createSpecimenDescriptionSection(RootElement parent) {
698
        createDescriptionSection(parent, false, true);
699
    }
700

    
701
    private void createUseDescriptionSection(RootElement parent) {
702
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName()));
703

    
704
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
705

    
706
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName()));
707

    
708
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
709

    
710
        addPart(descriptionDetailSection);
711
        addPart(descriptionSourceSection);
712
    }
713

    
714
    private void createImageGallerySection(RootElement parent) {
715
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName()));
716

    
717
        addPart(descriptionDetailSection);
718
    }
719

    
720
    private void createMediaElementSection(RootElement parent) {
721
        MediaDetailsSection mediaDetailSection = formFactory.createMediaDetailsSection(parent, this, StoreUtil.getSectionStyle(MediaDetailsSection.class, getInput().getClass().getCanonicalName(), true));
722

    
723
        addPart(mediaDetailSection);
724
    }
725

    
726
    private void createDerivedUnitBaseElementSection(RootElement parent) {
727
        DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(parent, this, StoreUtil.getSectionStyle(DerivedUnitGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
728
        //TODO for DerivateEditor do not use facade anymore to avoid this special case handling #4539
729
        if(!(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart)){
730
            derivedUnitGeneralDetailSection.setShowOnlyDerivedUnitData(true);
731
        }
732
        addPart(derivedUnitGeneralDetailSection);
733

    
734
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
735

    
736
        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(parent, this, StoreUtil.getSectionStyle(DerivedUnitBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
737
        addPart(derivedUnitBaseDetailSection);
738

    
739
        //for editors working with facades
740
        if(AbstractUtility.getActivePart() instanceof IDerivedUnitFacadePart){
741
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
742
            GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(parent, this, StoreUtil.getSectionStyle(GatheringEventDetailSection.class, getInput().getClass().getCanonicalName()));
743
            addPart(gatheringEventDetailSection);
744

    
745
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
746
            FieldUnitFacadeDetailSection fieldUnitDetailSection = formFactory.createFieldUnitFacadeDetailSection(parent, this, StoreUtil.getSectionStyle(FieldUnitFacadeDetailSection.class, getInput().getClass().getCanonicalName()));
747
            addPart(fieldUnitDetailSection);
748
        }
749
        else{
750

    
751
            if(PreferencesUtil.isShowTaxonAssociations()){
752
                formFactory.createHorizontalSeparator(parent, SWT.BORDER);
753
                TaxonAssociationDetailSection taxonAssociationDetailSection = formFactory.createTaxonAssociationDetailSection(parent, this, StoreUtil.getSectionStyle(TaxonAssociationDetailSection.class, getInput().getClass().getCanonicalName(), true));
754
                addPart(taxonAssociationDetailSection);
755
            }
756
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
757
            DerivedUnitFacadeIdentifierSection identifierDetailSection = formFactory.createDerivedUnitFacadeIdentifierSection(parent, StoreUtil.getSectionStyle(DerivedUnitFacadeIdentifierSection.class, getInput().getClass().getCanonicalName()));
758
            addPart(identifierDetailSection);
759
        }
760
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
761
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
762
            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
763
            addPart(determinationDetailSection);
764
        }
765

    
766
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
767
        DerivedUnitTypeDesignationSection derivedUnitTypeDesignationSection = formFactory.createDerivedUnitTypeDesignationSection(parent, this, StoreUtil.getSectionStyle(DerivedUnitTypeDesignationSection.class, getInput().getClass().getCanonicalName()));
768
        addPart(derivedUnitTypeDesignationSection);
769
    }
770

    
771
    private void createFieldUnitFacadeSection(RootElement parent) {
772
        FieldUnitFacadeGeneralDetailSection fielUnitGeneralDetailSection = formFactory.createFieldUnitFacadeGeneralDetailSection(parent, this, StoreUtil.getSectionStyle(FieldUnitFacadeGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
773

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

    
776
        GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(parent, this, StoreUtil.getSectionStyle(GatheringEventDetailSection.class, getInput().getClass().getCanonicalName()));
777

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

    
780
        FieldUnitFacadeDetailSection fieldUnitDetailSection = formFactory.createFieldUnitFacadeDetailSection(parent, this, StoreUtil.getSectionStyle(FieldUnitFacadeDetailSection.class, getInput().getClass().getCanonicalName()));
781

    
782
        addPart(fielUnitGeneralDetailSection);
783
        addPart(gatheringEventDetailSection);
784
        addPart(fieldUnitDetailSection);
785

    
786
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
787
        DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
788
        addPart(determinationDetailSection);
789
    }
790

    
791
    private void createTissueSampleSection(RootElement parent) {
792
        TissueSampleGeneralDetailSection section = formFactory.createTissueSampleGeneralDetailSection(parent, this, StoreUtil.getSectionStyle(TissueSampleGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
793

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

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

    
798
        addPart(section);
799
        addPart(sampleDesignationDetailSection);
800
    }
801

    
802
    private void createDnaSampleSection(RootElement parent) {
803
        DnaSampleGeneralDetailSection section = formFactory.createDnaSampleGeneralDetailSection(parent, this, StoreUtil.getSectionStyle(DnaSampleGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
804

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

    
807
        DnaSamplePreparationPreservationSection preparationPreservationSection = formFactory.createDnaSamplePreparationPreservationSection(parent, this, StoreUtil.getSectionStyle(DnaSamplePreparationPreservationSection.class, getInput().getClass().getCanonicalName(), true));
808

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

    
811
        DnaQualityDetailSection qualitySection = formFactory.createDnaQualityDetailSection(parent, this, StoreUtil.getSectionStyle(DnaQualityDetailSection.class, getInput().getClass().getCanonicalName(), true));
812

    
813
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
814

    
815
        SampleDesignationDetailSection sampleDesignationDetailSection = formFactory.createSampleDesignationDetailSection(parent, this, StoreUtil.getSectionStyle(SampleDesignationDetailSection.class, getInput().getClass().getCanonicalName(), true));
816

    
817
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
818
        DeterminationDetailSection determinationDetailSection = null;
819
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
820
            determinationDetailSection = formFactory.createDeterminationDetailSection(parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
821
        }
822
        addPart(section);
823
        addPart(preparationPreservationSection);
824
        addPart(qualitySection);
825
        addPart(sampleDesignationDetailSection);
826
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
827
            addPart(determinationDetailSection);
828
        }
829
    }
830

    
831
    private void createSequenceSection(RootElement parent) {
832
        SequenceGeneralDetailSection section = formFactory.createSequenceGeneralDetailSection(parent, this, StoreUtil.getSectionStyle(SequenceGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
833

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

    
836
        SequenceReferenceCollectionDetailSection referenceSection = formFactory.createSequenceReferenceCollectionDetailSection(parent, StoreUtil.getSectionStyle(SequenceReferenceCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
837

    
838
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
839

    
840
        SequenceContigFileCollectionDetailSection contigFileSection = formFactory.createSequenceContigFileCollectionDetailSection(parent, StoreUtil.getSectionStyle(SequenceContigFileCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
841

    
842
        addPart(section);
843
        addPart(referenceSection);
844
        addPart(contigFileSection);
845
    }
846

    
847
    private void createSingleReadSection(RootElement parent) {
848
        SingleReadGeneralDetailSection section = formFactory.createSingleReadGeneralDetailSection(parent, this, StoreUtil.getSectionStyle(SingleReadGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
849
        addPart(section);
850

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

    
853
        SingleReadPherogramCollectionDetailSection pherogramSection = formFactory.createSingleReadPherogramCollectionDetailSection(parent, StoreUtil.getSectionStyle(SingleReadPherogramCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
854
        addPart(pherogramSection);
855
    }
856

    
857
    private void createMediaSpecimenSection(RootElement parent) {
858
        MediaSpecimenGeneralDetailSection generalSection = formFactory.createMediaSpecimenGeneralDetailSection(parent, this, StoreUtil.getSectionStyle(MediaSpecimenGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
859
        addPart(generalSection);
860

    
861
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
862

    
863
        RightsSection rightsSection = formFactory.createRightsSection(parent, StoreUtil.getSectionStyle(RightsSection.class, getInput().getClass().getCanonicalName()));
864
//        rightsSection.setEntity(generalSection.getEntity().innerDerivedUnit());
865
        addPart(rightsSection);
866
    }
867

    
868
    private void createFeatureTreeSectionForDto(RootElement parent) {
869
        TermTreeDetailSection section = formFactory.createFeatureTreeDetailSection(parent, this, StoreUtil.getSectionStyle(TermTreeDetailSection.class, getInput().getClass().getCanonicalName(), true));
870

    
871
        addPart(section);
872
    }
873
    private void createFeatureTreeSection(RootElement parent) {
874
        TermTreeDetailSectionForNode section = formFactory.createFeatureTreeDetailSectionForTree(parent, this, StoreUtil.getSectionStyle(TermTreeDetailSection.class, getInput().getClass().getCanonicalName(), true));
875
        addPart(section);
876
    }
877

    
878
    private void createFeatureNodeSection(RootElement parent) {
879
        TermNodeDetailSection featureDistributionSection = formFactory.createFeatureNodeDetailSection(parent, this, StoreUtil.getSectionStyle(TermNodeDetailSection.class, getInput().getClass().getCanonicalName(), true));
880
        addPart(featureDistributionSection);
881
    }
882

    
883
    private void createFeatureDistributionSection(RootElement parent) {
884
        FeatureDistributionDetailSection featureDistributionSection = formFactory.createFeatureDistributionDetailSection(parent, this, StoreUtil.getSectionStyle(FeatureDistributionDetailSection.class, getInput().getClass().getCanonicalName(), true));
885
        addPart(featureDistributionSection);
886
    }
887

    
888
    private void createCharacterNodeSection(RootElement parent) {
889
        CharacterNodeDetailSection featureDistributionSection = formFactory.createCharacterNodeDetailSection(parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
890
        addPart(featureDistributionSection);
891
    }
892

    
893
    private void createCharacterNodeDtoSection(RootElement parent) {
894
        CharacterNodeDtoDetailSection featureDistributionSection = formFactory.createCharacterNodeDtoDetailSection(parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
895
        addPart(featureDistributionSection);
896
    }
897

    
898
    private void createCharacterSection(RootElement parent) {
899
        CharacterDetailSection featureDistributionSection = formFactory.createCharacterDetailSection(parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
900
        addPart(featureDistributionSection);
901
    }
902

    
903
    private void createPolytomousKeyNodeSection(RootElement parent) {
904
        PolytomousKeyDetailSection polytomousKeyDetailSection = formFactory.createPolytomousKeyDetailSection(parent, this, StoreUtil.getSectionStyle(PolytomousKeyDetailSection.class, getInput().getClass().getCanonicalName()));
905

    
906
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
907

    
908
        PolytomousKeyNodeDetailSection polytomousKeyNodeDetailSection = formFactory.createPolytomousKeyNodeDetailSection(parent, this, StoreUtil.getSectionStyle(PolytomousKeyNodeDetailSection.class, getInput().getClass().getCanonicalName(), true));
909

    
910
        addPart(polytomousKeyDetailSection);
911
        addPart(polytomousKeyNodeDetailSection);
912

    
913
    }
914

    
915
    private void createUseRecordSection(RootElement parent) {
916
        UseRecordDetailSection descriptionUseRecordSection = formFactory.createUseRecordDetailSection(parent, this,StoreUtil.getSectionStyle(UseRecordDetailSection.class, getInput().getClass().getCanonicalName(), true));
917
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
918
        addPart(descriptionUseRecordSection);
919
    }
920

    
921
    private void createUserSection(RootElement parent) {
922
        UserDetailSection userDetailSection = formFactory.createUserDetailSection(parent, this, StoreUtil.getSectionStyle(UserDetailSection.class, getInput().getClass().getCanonicalName(), true));
923

    
924
        GroupsByUserDetailSection groupByUserDetailSection = formFactory.createGroupsByUserDetailSection(parent, StoreUtil.getSectionStyle(GroupsByUserDetailSection.class, getInput().getClass().getCanonicalName(), true));
925

    
926
        addPart(userDetailSection);
927
        addPart(groupByUserDetailSection);
928
    }
929

    
930
    private void createMisappliedNameSection(RootElement parent) {
931
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(parent, this,
932
                StoreUtil.getSectionStyle(TaxonRelationshipDetailSection.class, getInput().getClass().getCanonicalName(), true));
933
        addPart(taxonRelationshipDetailSection);
934

    
935
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
936

    
937
        NonViralNameDetailSection nonViralNameSection = formFactory
938
                .createNonViralNameDetailSection(parent, this, true,
939
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
940
        addPart(nonViralNameSection);
941

    
942
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
943

    
944
        NomenclaturalSourceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(parent, this,
945
                StoreUtil.getSectionStyle(NomenclaturalSourceDetailSection.class, getInput().getClass().getCanonicalName(), true));
946
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
947
        addPart(referenceDetailSection);
948

    
949
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(parent,
950
            		StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
951
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
952
        addPart(nomenclaturalStatusSection);
953

    
954
		TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
955
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
956
		addPart(typeDesignationSection);
957

    
958
		NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
959
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
960
		addPart(nameRelationshipSection);
961
    }
962

    
963
    private void createTaxonRelationshipSection(RootElement parent) {
964
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(parent, this, StoreUtil.getSectionStyle(TaxonRelationshipDetailSection.class, getInput().getClass().getCanonicalName(), true));
965

    
966
        ReferencedEntityDetailSection referencedEntityBaseDetailSection = formFactory.createReferencedEntityDetailSection(parent, this, StoreUtil.getSectionStyle(ReferencedEntityDetailSection.class, getInput().getClass().getCanonicalName(), true));
967
        addPart(taxonRelationshipDetailSection);
968
        addPart(referencedEntityBaseDetailSection);
969
    }
970
    private void createTermVocabularySection(RootElement parent) {
971
        TermVocabularyDetailSection termVocabularyDetailSection = formFactory.createTermVocabularyDetailSection(parent, this, StoreUtil.getSectionStyle(TermVocabularyDetailSection.class, getInput().getClass().getCanonicalName(), true));
972
        addPart(termVocabularyDetailSection);
973
    }
974

    
975
    private void createDefinedTermSection(RootElement parent) {
976
        DefinedTermDetailSection<?> definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), parent, this, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
977
        addPart(definedTermDetailSection);
978
        TermMediaSection termMediaSection = formFactory.createTermMediaSection(parent, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
979
        addPart(termMediaSection);
980
    }
981

    
982

    
983
    @Inject
984
    @Optional
985
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS)boolean refresh){
986
        if(refresh){
987
            //refresh_withoutnew_build(); this would use the update without creation of all fields
988
        	refresh();
989
        }
990
    }
991

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