Project

General

Profile

Download (57.6 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2011 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

    
10
package eu.etaxonomy.taxeditor.view.e4.details;
11

    
12
import java.util.Collection;
13
import java.util.EnumSet;
14
import java.util.HashSet;
15
import java.util.Set;
16

    
17
import javax.inject.Inject;
18

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

    
28
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
29
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
30
import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
31
import eu.etaxonomy.cdm.model.agent.Person;
32
import eu.etaxonomy.cdm.model.agent.Team;
33
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
34
import eu.etaxonomy.cdm.model.common.Marker;
35
import eu.etaxonomy.cdm.model.description.CategoricalData;
36
import eu.etaxonomy.cdm.model.description.Character;
37
import eu.etaxonomy.cdm.model.description.DescriptionBase;
38
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
39
import eu.etaxonomy.cdm.model.description.Distribution;
40
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
41
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
42
import eu.etaxonomy.cdm.model.description.TaxonDescription;
43
import eu.etaxonomy.cdm.model.media.Media;
44
import eu.etaxonomy.cdm.model.molecular.DnaSample;
45
import eu.etaxonomy.cdm.model.molecular.Sequence;
46
import eu.etaxonomy.cdm.model.molecular.SingleRead;
47
import eu.etaxonomy.cdm.model.name.TaxonName;
48
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
49
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
50
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
51
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
52
import eu.etaxonomy.cdm.model.permission.CRUD;
53
import eu.etaxonomy.cdm.model.permission.Group;
54
import eu.etaxonomy.cdm.model.permission.User;
55
import eu.etaxonomy.cdm.model.reference.Reference;
56
import eu.etaxonomy.cdm.model.taxon.Synonym;
57
import eu.etaxonomy.cdm.model.taxon.Taxon;
58
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
59
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
60
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
61
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
62
import eu.etaxonomy.cdm.model.term.TermNode;
63
import eu.etaxonomy.cdm.model.term.TermTree;
64
import eu.etaxonomy.cdm.model.term.TermType;
65
import eu.etaxonomy.cdm.model.term.TermVocabulary;
66
import eu.etaxonomy.cdm.persistence.dto.TermNodeDto;
67
import eu.etaxonomy.cdm.persistence.dto.TermTreeDto;
68
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
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.FeatureNodeDetailSection;
104
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureTreeDetailSection;
105
import eu.etaxonomy.taxeditor.ui.section.feature.FeatureTreeDetailSectionForNode;
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.FieldUnitDetailSection;
119
import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailSection;
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
 *
152
 * The DetailsViewer handles the content of the details view (
153
 * {@link DetailsPartE4}).<br>
154
 * Depending on the type of the selected element the section of the details view
155
 * are created.
156
 *
157
 * @author pplitzner
158
 * @date 18.07.2017
159
 *
160
 */
161
public class DetailsViewerE4 extends AbstractCdmDataViewerE4 {
162

    
163
    private ISelection selection;
164
    private boolean detailsEnabled = true;
165
    private Object activePart;
166

    
167
    public boolean isDetailsEnabled() {
168
		return detailsEnabled;
169
	}
170

    
171
	public void setDetailsEnabled(boolean detailsEnabled) {
172
		this.detailsEnabled = detailsEnabled;
173
	}
174

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

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

    
185
    @Override
186
    public void setInput(Object input) {
187

    
188
        if(input instanceof TreeNode){
189
            input = ((TreeNode) input).getValue();
190
        }
191
        if(input instanceof GbifResponse){
192
            input = ((GbifResponse) input).getDerivedUnitFacade();
193
        }
194
       if (input !=null && input instanceof DerivedUnit) {
195
            DerivedUnit derivedUnit = (DerivedUnit)input;
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
        else if(input instanceof FieldUnit){
204
            input = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) input);
205
        }
206
        super.setInput(input);
207
    }
208

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

    
230
    /** {@inheritDoc} */
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

    
251
        } else if (input instanceof TaxonName) {
252
            createNameSections(rootElement);
253

    
254
        } else if (input instanceof Reference) {
255
            createReferenceSections(rootElement);
256

    
257
        } else if (input instanceof Team) {
258
            createTeamDetailSection(rootElement);
259

    
260
        } else if (input instanceof Person) {
261
            createPersonDetailSection(rootElement);
262

    
263
        } else if (input instanceof TeamOrPersonBase) {
264
            createTeamOrPersonBaseDetailSection(rootElement);
265

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

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

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

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

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

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

    
311
        } else if (input instanceof Media) {
312
            createMediaElementSection(rootElement);
313

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

    
350
                if(((DerivedUnitFacade) input).innerDerivedUnit().getRecordBasis()==SpecimenOrObservationType.TissueSample){
351
                    createTissueSampleSection(rootElement);
352
                }
353
                else if(((DerivedUnitFacade) input).innerDerivedUnit().getRecordBasis()==SpecimenOrObservationType.DnaSample){
354
                    createDnaSampleSection(rootElement);
355
                }
356
            }else if (((DerivedUnitFacade) input).innerDerivedUnit() instanceof MediaSpecimen){
357
                createMediaSpecimenSection(rootElement);
358
            }
359

    
360
            else{
361
                createDerivedUnitBaseElementSection(rootElement);
362
            }
363
        } else if (input instanceof DnaSample){
364
            DnaSample dnaSample = (DnaSample)input;
365
            if(dnaSample.getRecordBasis()==SpecimenOrObservationType.TissueSample){
366
                createTissueSampleSection(rootElement);
367
            }
368
            else if(dnaSample.getRecordBasis()==SpecimenOrObservationType.DnaSample){
369
                createDnaSampleSection(rootElement);
370
            }
371
        } else if (input instanceof MediaSpecimen){
372
            createMediaSpecimenSection(rootElement);
373
        }
374
        else if(input instanceof Sequence){
375
            createSequenceSection(rootElement);
376
        }
377
        else if(input instanceof SingleRead){
378
            createSingleReadSection(rootElement);
379
        }
380
        else if (input instanceof FeatureNodeContainer) {
381
            createFeatureDistributionSection(rootElement);
382

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

    
392
        } else if (input instanceof TermTree) {
393
            createFeatureTreeSection(rootElement);
394

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

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

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

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

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

    
432
//            createDescriptionElementSection(rootElement);
433

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

    
439
    }
440

    
441

    
442
    private void createFeatureTreeSectionForTree(RootElement rootElement) {
443
        // TODO Auto-generated method stub
444

    
445
    }
446

    
447
    private void createGroupSection(RootElement parent) {
448
        GroupDetailSection groupDetailSection = formFactory.createGroupDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(GroupDetailSection.class, getInput().getClass().getCanonicalName()));
449
        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(MemberDetailSection.class, getInput().getClass().getCanonicalName()));
450
        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(getConversationHolder(), parent,StoreUtil.getSectionStyle(GrantedAuthorityDetailSection.class, getInput().getClass().getCanonicalName()));
451

    
452
        addPart(groupDetailSection);
453
        addPart(memberDetailSection);
454
        addPart(grantedAuthorityDetailSection);
455
    }
456

    
457
    /** {@inheritDoc} */
458
    @Override
459
    public ISelection getSelection() {
460
        return selection;
461
    }
462

    
463
    /** {@inheritDoc} */
464
    @Override
465
    public void setSelection(ISelection selection, boolean reveal) {
466

    
467
        this.selection = selection;
468

    
469
        if(this.selection!=null){
470
            SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
471
            fireSelectionChanged(selectionChangedEvent);
472
        }
473

    
474
    }
475

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

    
546
        }
547
        if ( config == null || config.isNomenclaturalStatusSectionActivated()){
548
            NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
549
                    StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
550
            nomenclaturalStatusSection.setEnabled(detailsEnabled);
551
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
552
            addPart(nomenclaturalStatusSection);
553
        }
554

    
555
//        if ( config == null || config.isProtologueActivated()){
556
//            ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
557
//            protologSection.setEnabled(detailsEnabled);
558
//            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
559
//            addPart(protologSection);
560
//        }
561

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

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

    
576

    
577
        addPart(parsingMessagesSection);
578

    
579
        addPart(nonViralNameSection);
580

    
581
    }
582

    
583
    private void createNameSections(RootElement parent) {
584
        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(
585
                getConversationHolder(), parent, this, false, StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
586

    
587
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
588

    
589
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
590
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
591
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
592

    
593
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
594
                StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
595
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
596

    
597
        addPart(nonViralNameSection);
598
        addPart(nomenclaturalStatusSection);
599
        addPart(referenceDetailSection);
600

    
601
//        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
602
//        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
603

    
604
        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
605
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
606

    
607
        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
608
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
609
//        addPart(protologSection);
610
        addPart(typeDesignationSection);
611
        addPart(nameRelationshipSection);
612

    
613
    }
614

    
615
    private void createReferenceSections(RootElement parent) {
616
        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this,
617
                StoreUtil.getSectionStyle(ReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
618

    
619
        addPart(referenceDetailSection);
620
    }
621

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

    
625
        addPart(teamOrPersonBaseDetailSection);
626
    }
627

    
628
    private void createTeamDetailSection(RootElement parent) {
629
        TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TeamDetailSection.class, getInput().getClass().getCanonicalName(), true));
630

    
631
        addPart(teamDetailSection);
632
    }
633

    
634
    private void createPersonDetailSection(RootElement parent) {
635
        PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(PersonDetailSection.class, getInput().getClass().getCanonicalName(), true));
636
        addPart(personDetailSection);
637
    }
638

    
639
    private void createDescriptionElementSection(RootElement parent) {
640
        createDescriptionElementSection(parent, null);
641
    }
642

    
643
    private void createDescriptionElementSection(RootElement parent, Object activePart) {
644
        DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionElementDetailSection.class, getInput().getClass().getCanonicalName(), true));
645
        descriptionElementDetailSection.setEnabled(this.detailsEnabled);
646

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

    
649
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
650
        DescriptionElementSourceSection descriptionElementSourceSection;
651
        if (activePart != null && activePart instanceof IDistributionEditorPart){
652
            Reference defaultSource =((IDistributionEditorPart)activePart).getEditor().getDefaultSource();
653
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, defaultSource, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()));
654

    
655
        }else{
656
            descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionElementSourceSection.class, getInput().getClass().getCanonicalName()) );
657
        }
658

    
659

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

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

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

    
666
        addPart(descriptionElementDetailSection);
667
        addPart(descriptionElementSourceSection);
668
        addPart(descriptionElementMediaSection);
669
    }
670

    
671
    private void createDescriptionSection(RootElement parent, boolean isTaxonDescription) {
672
        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DescriptionDetailSection.class, getInput().getClass().getCanonicalName(), true));
673
        addPart(descriptionDetailSection);
674

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

    
677
        if(isTaxonDescription) {
678
            NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(
679
                    getConversationHolder(), parent, this, StoreUtil.getSectionStyle(NaturalLanguageSection.class, getInput().getClass().getCanonicalName(), true));
680
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
681
            addPart(naturalLanguageSection);
682
        }
683
        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(
684
                getConversationHolder(), parent, StoreUtil.getSectionStyle(DescriptionSourceSection.class, getInput().getClass().getCanonicalName(), true));
685
        addPart(descriptionSourceSection);
686

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

    
689
        if(isTaxonDescription) {
690
            ScopeSection scopeSection = formFactory.createScopeSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ScopeSection.class, getInput().getClass().getCanonicalName()));
691
            addPart(scopeSection);
692
        }
693
    }
694

    
695
    private void createTaxonDescriptionSection(RootElement parent) {
696
        createDescriptionSection(parent, true);
697
    }
698

    
699
    private void createSpecimenDescriptionSection(RootElement parent) {
700
        createDescriptionSection(parent, false);
701
    }
702

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

    
706
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
707

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

    
710
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
711

    
712
        addPart(descriptionDetailSection);
713
        addPart(descriptionSourceSection);
714

    
715
    }
716

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

    
720
        addPart(descriptionDetailSection);
721
    }
722

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

    
726
        addPart(mediaDetailSection);
727
    }
728

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

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

    
739
        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitBaseDetailSection.class, getInput().getClass().getCanonicalName(), true));
740
        addPart(derivedUnitBaseDetailSection);
741

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

    
748
            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
749
            FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FieldUnitDetailSection.class, getInput().getClass().getCanonicalName()));
750
            addPart(fieldUnitDetailSection);
751
        }
752
        else{
753

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

    
769
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
770
        DerivedUnitTypeDesignationSection derivedUnitTypeDesignationSection = formFactory.createDerivedUnitTypeDesignationSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DerivedUnitTypeDesignationSection.class, getInput().getClass().getCanonicalName()));
771
        addPart(derivedUnitTypeDesignationSection);
772

    
773
    }
774

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

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

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

    
782
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
783

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

    
786
        addPart(fielUnitGeneralDetailSection);
787
        addPart(gatheringEventDetailSection);
788
        addPart(fieldUnitDetailSection);
789

    
790
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
791
        DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
792
        addPart(determinationDetailSection);
793

    
794
    }
795

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

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

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

    
803
        addPart(section);
804
        addPart(sampleDesignationDetailSection);
805
    }
806

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

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

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

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

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

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

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

    
822
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
823
        DeterminationDetailSection determinationDetailSection = null;
824
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
825
            determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DeterminationDetailSection.class, getInput().getClass().getCanonicalName()));
826
        }
827
        addPart(section);
828
        addPart(preparationPreservationSection);
829
        addPart(qualitySection);
830
        addPart(sampleDesignationDetailSection);
831
        if(!PreferencesUtil.isDeterminationOnlyForFieldUnits()){
832
            addPart(determinationDetailSection);
833
        }
834
    }
835

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

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

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

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

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

    
847

    
848
        addPart(section);
849
        addPart(referenceSection);
850
        addPart(contigFileSection);
851
    }
852

    
853
    private void createSingleReadSection(RootElement parent) {
854
        SingleReadGeneralDetailSection section = formFactory.createSingleReadGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(SingleReadGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
855
        addPart(section);
856

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

    
859
        SingleReadPherogramCollectionDetailSection pherogramSection = formFactory.createSingleReadPherogramCollectionDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(SingleReadPherogramCollectionDetailSection.class, getInput().getClass().getCanonicalName(), true));
860
        addPart(pherogramSection);
861

    
862
    }
863

    
864
    private void createMediaSpecimenSection(RootElement parent) {
865
        MediaSpecimenGeneralDetailSection generalSection = formFactory.createMediaSpecimenGeneralDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(MediaSpecimenGeneralDetailSection.class, getInput().getClass().getCanonicalName(), true));
866
        addPart(generalSection);
867

    
868
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
869

    
870
        RightsSection rightsSection = formFactory.createRightsSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(RightsSection.class, getInput().getClass().getCanonicalName()));
871
//        rightsSection.setEntity(generalSection.getEntity().innerDerivedUnit());
872
        addPart(rightsSection);
873

    
874
    }
875

    
876
    private void createFeatureTreeSectionForDto(RootElement parent) {
877
        FeatureTreeDetailSection section = formFactory.createFeatureTreeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FeatureTreeDetailSection.class, getInput().getClass().getCanonicalName(), true));
878

    
879
        addPart(section);
880
    }
881
    private void createFeatureTreeSection(RootElement parent) {
882
        FeatureTreeDetailSectionForNode section = formFactory.createFeatureTreeDetailSectionForTree(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(FeatureTreeDetailSection.class, getInput().getClass().getCanonicalName(), true));
883

    
884
        addPart(section);
885
    }
886

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

    
890
        addPart(featureDistributionSection);
891
    }
892

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

    
896
        addPart(featureDistributionSection);
897
    }
898

    
899
    private void createCharacterNodeSection(RootElement parent) {
900
        CharacterNodeDetailSection featureDistributionSection = formFactory.createCharacterNodeDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
901
        addPart(featureDistributionSection);
902
    }
903

    
904
    private void createCharacterNodeDtoSection(RootElement parent) {
905
        CharacterNodeDtoDetailSection featureDistributionSection = formFactory.createCharacterNodeDtoDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
906
        addPart(featureDistributionSection);
907
    }
908

    
909
    private void createCharacterSection(RootElement parent) {
910
        CharacterDetailSection featureDistributionSection = formFactory.createCharacterDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(CharacterDetailSection.class, getInput().getClass().getCanonicalName(), true));
911
        addPart(featureDistributionSection);
912
    }
913

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

    
917
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
918

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

    
921
        addPart(polytomousKeyDetailSection);
922
        addPart(polytomousKeyNodeDetailSection);
923

    
924
    }
925

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

    
929
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
930

    
931
        addPart(descriptionUseRecordSection);
932

    
933

    
934
    }
935

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

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

    
941
        addPart(userDetailSection);
942
        addPart(groupByUserDetailSection);
943
    }
944

    
945
    private void createMisappliedNameSection(RootElement parent) {
946
        TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(getConversationHolder(), parent, this,
947
                StoreUtil.getSectionStyle(TaxonRelationshipDetailSection.class, getInput().getClass().getCanonicalName(), true));
948
        addPart(taxonRelationshipDetailSection);
949

    
950
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
951

    
952

    
953
        NonViralNameDetailSection nonViralNameSection = formFactory
954
                .createNonViralNameDetailSection(getConversationHolder(), parent, this, true,
955
                        StoreUtil.getSectionStyle(NonViralNameDetailSection.class, getInput().getClass().getCanonicalName(), true));
956
        addPart(nonViralNameSection);
957

    
958
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
959

    
960
        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
961
                StoreUtil.getSectionStyle(NomenclaturalReferenceDetailSection.class, getInput().getClass().getCanonicalName(), true));
962
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
963
        addPart(referenceDetailSection);
964

    
965

    
966
        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
967
            		StoreUtil.getSectionStyle(NomenclaturalStatusSection.class, getInput().getClass().getCanonicalName(), true));
968
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
969
        addPart(nomenclaturalStatusSection);
970

    
971
//		ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(ProtologueSection.class, getInput().getClass().getCanonicalName()));
972
//		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
973
//		addPart(protologSection);
974

    
975
		TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(TypeDesignationSection.class, getInput().getClass().getCanonicalName()));
976
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
977
		addPart(typeDesignationSection);
978

    
979
		NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(NameRelationshipDetailSection.class, getInput().getClass().getCanonicalName()));
980
		formFactory.createHorizontalSeparator(parent, SWT.BORDER);
981
		addPart(nameRelationshipSection);
982

    
983
    }
984

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

    
988
        ReferencedEntityDetailSection referencedEntityBaseDetailSection = formFactory.createReferencedEntityDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(ReferencedEntityDetailSection.class, getInput().getClass().getCanonicalName(), true));
989
        addPart(taxonRelationshipDetailSection);
990
        addPart(referencedEntityBaseDetailSection);
991
    }
992
    private void createTermVocabularySection(RootElement parent) {
993
        TermVocabularyDetailSection termVocabularyDetailSection = formFactory.createTermVocabularyDetailSection(getConversationHolder(), parent, this, StoreUtil.getSectionStyle(TermVocabularyDetailSection.class, getInput().getClass().getCanonicalName(), true));
994
        addPart(termVocabularyDetailSection);
995
    }
996

    
997
    private void createDefinedTermSection(RootElement parent) {
998
        DefinedTermDetailSection definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
999
        addPart(definedTermDetailSection);
1000
        TermMediaSection termMediaSection = formFactory.createTermMediaSection(getConversationHolder(), parent, StoreUtil.getSectionStyle(DefinedTermDetailSection.class, getInput().getClass().getCanonicalName(), true));
1001
        addPart(termMediaSection);
1002
    }
1003

    
1004
    @Override
1005
    public void update(CdmDataChangeMap arg0) {
1006

    
1007
    }
1008
    @Inject
1009
    @Optional
1010
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS)boolean refresh){
1011
        if(refresh){
1012
            refresh();
1013
        }
1014
    }
1015

    
1016
    @Inject
1017
    @Optional
1018
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DETAILS_DISTRIBUTION)String nameCache){
1019
        if(nameCache != null && getInput() instanceof Distribution && this.activePart instanceof IDistributionEditorPart){
1020
           if (part instanceof CdmSectionPart && ((CdmSectionPart)part).getSection() instanceof DescriptionElementDetailSection){
1021
               for (ICdmFormElement element: ((DescriptionElementDetailSection)((CdmSectionPart)part).getSection()).getElements()){
1022
                   if (element instanceof DescriptionElementDetailElement){
1023
                       for(ICdmFormElement descriptionElement:((DescriptionElementDetailElement)element).getElements()){
1024
                           if (descriptionElement instanceof DistributionDetailElement){
1025
                               ((DistributionDetailElement) descriptionElement).setName(nameCache);
1026
                           }
1027
                       }
1028
                   }
1029
               }
1030
           }
1031
        }
1032
    }
1033

    
1034

    
1035
}
(2-2/2)