Project

General

Profile

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

    
11
import java.util.Arrays;
12
import java.util.List;
13

    
14
import com.vaadin.server.Sizeable.Unit;
15
import com.vaadin.ui.Component;
16
import com.vaadin.ui.NativeSelect;
17
import com.vaadin.ui.TextField;
18

    
19
import eu.etaxonomy.cdm.format.ReferenceEllypsisFormatter.LabelType;
20
import eu.etaxonomy.cdm.model.occurrence.Collection;
21
import eu.etaxonomy.cdm.model.reference.Reference;
22
import eu.etaxonomy.cdm.model.term.DefinedTerm;
23
import eu.etaxonomy.cdm.vaadin.component.CollectionRow;
24
import eu.etaxonomy.cdm.vaadin.component.CollectionRowItemCollection;
25
import eu.etaxonomy.cdm.vaadin.component.CollectionRowRepresentative;
26
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
27
import eu.etaxonomy.cdm.vaadin.event.ToOneRelatedEntityButtonUpdater;
28
import eu.etaxonomy.cdm.vaadin.model.registration.KindOfUnitTerms;
29
import eu.etaxonomy.cdm.vaadin.util.ReferenceEllypsisCaptionGenerator;
30
import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter;
31
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
32

    
33
/**
34
 * CollectionRow for {@link SpecimenTypeDesignationDTO}
35
 * SpecimenTypeDesignationDTORow needs to be instantiated by a EditorInstantiator which can only be provided by the presenter
36
 *  {@link SpecimenTypeDesignationWorkingsetEditorPresenter#handleViewEntered()}
37
 *
38
 * @author a.kohlbecker
39
 * @since Jun 22, 2017
40
 *
41
 */
42
public class SpecimenTypeDesignationDTORow extends CollectionRowItemCollection implements CollectionRow {
43

    
44
    /* CONVENTION!
45
     *
46
     * The fieldname must match the properties of the SpecimenTypeDesignationDTO
47
     */
48
    TextField associatedTypeDesignationCount = new TextField();
49
    RowListSelect kindOfUnit = new RowListSelect(); // position is IMPORTANT, see rowListSelectColumn()
50
    NativeSelect typeStatus = new NativeSelect();
51
    ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection> collection =
52
            new ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection>(null, eu.etaxonomy.cdm.model.occurrence.Collection.class);
53
    TextField accessionNumber = new TextFieldNFix();
54
    TextField preferredStableUri = new TextFieldNFix();
55
    TextField mediaUri = new TextFieldNFix();
56
    ToOneRelatedEntityCombobox<Reference> mediaSpecimenReference =
57
            new ToOneRelatedEntityCombobox<Reference>(null, Reference.class);
58
    TextField mediaSpecimenReferenceDetail = new TextFieldNFix(); //"Image reference detail");
59
    private ToOneRelatedEntityButtonUpdater<Reference> mediaSpecimenReferenceUpdater;
60
    private ToOneRelatedEntityButtonUpdater<Collection> collectionFieldUpdater;
61

    
62
    public SpecimenTypeDesignationDTORow(){
63

    
64
        kindOfUnit.setRequired(true);
65
        kindOfUnit.setRow(this);
66
        typeStatus.setRequired(true);
67

    
68
        accessionNumber.setWidth(100, Unit.PIXELS);
69
        preferredStableUri.setWidth(150, Unit.PIXELS);
70
        preferredStableUri.setConverter(new UriConverter());
71
        collection.setWidth(200, Unit.PIXELS);
72
        collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
73
        mediaUri.setWidth(150, Unit.PIXELS);
74
        mediaUri.setConverter(new UriConverter());
75
        mediaSpecimenReference.setWidth(200, Unit.PIXELS);
76
        mediaSpecimenReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
77
        mediaSpecimenReference.getSelect().setCaptionGenerator(
78
                new ReferenceEllypsisCaptionGenerator(LabelType.BIBLIOGRAPHIC, mediaSpecimenReference.getSelect())
79
                );
80
        mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
81

    
82
        kindOfUnit.addValueChangeListener(e ->
83
                updateRowItemsEnablement()
84
        );
85

    
86
    }
87

    
88
    /**
89
     * @return
90
     */
91
    public Component[] components() {
92
        Component[] components = new Component[]{
93
            associatedTypeDesignationCount,
94
            kindOfUnit, typeStatus,
95
            collection, accessionNumber,
96
            preferredStableUri,
97
            mediaUri, mediaSpecimenReference,
98
            mediaSpecimenReferenceDetail
99
            };
100
        addAll(Arrays.asList(components));
101
        return components;
102
    }
103

    
104
    public static List<String> visibleFields() {
105
        List<String> visibleFields = Arrays.asList(new String[]{
106
            "kindOfUnit", "typeStatus",
107
            "collection", "accessionNumber",
108
            "preferredStableUri",
109
            "mediaUri", "mediaSpecimenReference",
110
            "mediaSpecimenReferenceDetail"
111
            });
112
        return visibleFields;
113
    }
114

    
115
    @Override
116
    public void updateRowItemsEnablement() {
117

    
118
        DefinedTerm kindOfUnitTerm = (DefinedTerm)kindOfUnit.getValue();
119

    
120
        boolean publishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.PUBLISHED_IMAGE());
121
        boolean unPublishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.UNPUBLISHED_IMAGE());
122

    
123
        boolean kindOfUnitLocked = !associatedTypeDesignationCount.getValue().isEmpty() && Integer.valueOf(associatedTypeDesignationCount.getValue()) > 1;
124
        kindOfUnit.setEnabled(!kindOfUnitLocked);
125
        kindOfUnit.setDescription(kindOfUnitLocked ?
126
                "Can not be changed since the type specimen is associated with multiple type designations" : "");
127

    
128
        mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType);
129
        mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType);
130
        mediaUri.setEnabled(publishedImageType || unPublishedImageType);
131

    
132
    }
133

    
134
    /**
135
     *
136
     * @return the 0-based position index of the <code>kindOfUnit</code> field in this class
137
     * which are visible according to {@link #visibleFields())
138
     */
139
    public static int rowListSelectColumn(){
140
        return 0;
141
    }
142

    
143
    class RowListSelect extends NativeSelect implements CollectionRowRepresentative {
144

    
145
        private static final long serialVersionUID = 3235653923633494213L;
146

    
147
        CollectionRow row;
148

    
149
        protected void setRow(CollectionRow row){
150
            this.row = row;
151
        }
152

    
153
        @Override
154
        public void updateRowItemsEnabledStates() {
155
            row.updateRowItemsEnablement();
156

    
157
        }
158

    
159
    }
160

    
161
}
(6-6/14)