Project

General

Profile

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

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

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

    
17
import javax.inject.Inject;
18

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

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

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

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

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

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

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

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

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

    
184
        if(input instanceof TreeNode){
185
            input = ((TreeNode) input).getValue();
186
        }
187
        if(input instanceof GbifResponse){
188
            input = ((GbifResponse) input).getDerivedUnitFacade();
189
        }
190
       if (input !=null && input instanceof DerivedUnit) {
191
            DerivedUnit derivedUnit = (DerivedUnit)input;
192
            try {
193
                input = DerivedUnitFacade.NewInstance(derivedUnit,
194
                        PreferencesUtil.getDerivedUnitConfigurator());
195
            } catch (DerivedUnitFacadeNotSupportedException e) {
196
                                MessagingUtils.error(getClass(), e); //nothing should happen, later on the Details View will show an according information that it is not possible to open this data
197
            }
198
        }
199
        else if(input instanceof FieldUnit){
200
            input = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) input);
201
        }
202
        super.setInput(input);
203
    }
204

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
391
        } else if (input instanceof Character) {
392
            createCharacterSection(rootElement);
393

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

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

    
416
//            createDescriptionElementSection(rootElement);
417

    
418
        }else {
419
            createEmptySection(null, rootElement);
420
        }
421
        layout();
422

    
423
    }
424

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

    
430
        addPart(groupDetailSection);
431
        addPart(memberDetailSection);
432
        addPart(grantedAuthorityDetailSection);
433
    }
434

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

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

    
445
        this.selection = selection;
446

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

    
452
    }
453

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

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

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

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

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

    
554

    
555
        addPart(parsingMessagesSection);
556

    
557
        addPart(nonViralNameSection);
558

    
559
    }
560

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

    
565
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
566

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

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

    
575
        addPart(nonViralNameSection);
576
        addPart(nomenclaturalStatusSection);
577
        addPart(referenceDetailSection);
578

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

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

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

    
591
    }
592

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

    
597
        addPart(referenceDetailSection);
598
    }
599

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

    
603
        addPart(teamOrPersonBaseDetailSection);
604
    }
605

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

    
609
        addPart(teamDetailSection);
610
    }
611

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

    
617
    private void createDescriptionElementSection(RootElement parent) {
618
        createDescriptionElementSection(parent, null);
619
    }
620

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

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

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

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

    
637

    
638
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
639

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

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

    
644
        addPart(descriptionElementDetailSection);
645
        addPart(descriptionElementSourceSection);
646
        addPart(descriptionElementMediaSection);
647
    }
648

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

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

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

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

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

    
673
    private void createTaxonDescriptionSection(RootElement parent) {
674
        createDescriptionSection(parent, true);
675
    }
676

    
677
    private void createSpecimenDescriptionSection(RootElement parent) {
678
        createDescriptionSection(parent, false);
679
    }
680

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

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

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

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

    
690
        addPart(descriptionDetailSection);
691
        addPart(descriptionSourceSection);
692

    
693
    }
694

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

    
698
        addPart(descriptionDetailSection);
699
    }
700

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

    
704
        addPart(mediaDetailSection);
705
    }
706

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

    
715
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
716

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

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

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

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

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

    
751
    }
752

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

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

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

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

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

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

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

    
772
    }
773

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
825

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

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

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

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

    
840
    }
841

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

    
846
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
847

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

    
852
    }
853

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

    
857
        addPart(section);
858
    }
859

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

    
863
        addPart(featureDistributionSection);
864
    }
865

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

    
869
        addPart(featureDistributionSection);
870
    }
871

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

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

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

    
885
        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
886

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

    
889
        addPart(polytomousKeyDetailSection);
890
        addPart(polytomousKeyNodeDetailSection);
891

    
892
    }
893

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

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

    
899
        addPart(descriptionUseRecordSection);
900

    
901

    
902
    }
903

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

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

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

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

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

    
920

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

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

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

    
933

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

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

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

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

    
951
    }
952

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

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

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

    
972
    @Override
973
    public void update(CdmDataChangeMap arg0) {
974

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

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

    
1002

    
1003
}
(2-2/2)