Project

General

Profile

Download (7.89 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.model.name.SpecimenTypeDesignationStatus;
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.converter.UriConverter;
30
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
31

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

    
43
    public static final String FIELD_NAME_TYPE_STATUS = "typeStatus";
44
    public static final String FIELD_NAME_KIND_OF_UNIT = "kindOfUnit";
45
    public static final String FIELD_NAME_DESIGNATION_REFERENCE = "designationReference";
46

    
47
    public static final int FIELD_INDEX_TYPE_STATUS = 0;
48
    public static final int FIELD_INDEX_KIND_OF_UNIT = 1;
49
    public static final int FIELD_INDEX_COLLECTION = 3;
50
    public static final int FIELD_INDEX_DESIGNATION_REFERENCE = 5;
51

    
52
    private static final long serialVersionUID = -5637834800897331072L;
53

    
54
    /* CONVENTION!
55
     *
56
     * The fieldname must match the properties of the SpecimenTypeDesignationDTO
57
     */
58
    TextField associatedTypeDesignationCount = new TextField();
59
    RowListSelect kindOfUnit = new RowListSelect(); // position is IMPORTANT, see rowListSelectColumn()
60
    RowListSelect typeStatus = new RowListSelect();
61
    ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection> collection =
62
            new ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection>(null, eu.etaxonomy.cdm.model.occurrence.Collection.class);
63
    TextField accessionNumber = new TextFieldNFix();
64
    TextField preferredStableUri = new TextFieldNFix();
65
    ToOneRelatedEntityCombobox<Reference> designationReference =
66
            new ToOneRelatedEntityCombobox<Reference>(null, Reference.class);
67
    TextField designationReferenceDetail = new TextFieldNFix(); //"Image reference detail");
68
    TextField mediaUri = new TextFieldNFix();
69
    ToOneRelatedEntityCombobox<Reference> mediaSpecimenReference =
70
            new ToOneRelatedEntityCombobox<Reference>(null, Reference.class);
71
    TextField mediaSpecimenReferenceDetail = new TextFieldNFix(); //"Image reference detail");
72

    
73
    public SpecimenTypeDesignationDTORow(){
74

    
75
        kindOfUnit.setRequired(true);
76
        kindOfUnit.setRow(this);
77
        kindOfUnit.addValueChangeListener(e ->
78
            updateRowItemsEnablement()
79
            );
80

    
81
        typeStatus.setRequired(true);
82
        typeStatus.addValueChangeListener(e ->
83
            updateRowItemsEnablement()
84
            );
85

    
86
        accessionNumber.setWidth(100, Unit.PIXELS);
87

    
88
        collection.setWidth(200, Unit.PIXELS);
89
        collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
90

    
91
        preferredStableUri.setWidth(150, Unit.PIXELS);
92
        preferredStableUri.setConverter(new UriConverter());
93

    
94
        designationReference.setWidth(200, Unit.PIXELS);
95
        designationReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
96

    
97
        designationReferenceDetail.setWidth(200, Unit.PIXELS);
98

    
99
        mediaUri.setWidth(150, Unit.PIXELS);
100
        mediaUri.setConverter(new UriConverter());
101

    
102
        mediaSpecimenReference.setWidth(200, Unit.PIXELS);
103
        mediaSpecimenReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
104

    
105
        mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
106

    
107

    
108
    }
109

    
110
    /**
111
     * @return
112
     */
113
    public Component[] components() {
114
        Component[] components = new Component[]{
115
            associatedTypeDesignationCount,
116
            kindOfUnit, typeStatus,
117
            collection, accessionNumber,
118
            preferredStableUri,
119
            designationReference, designationReferenceDetail,
120
            mediaUri, mediaSpecimenReference,
121
            mediaSpecimenReferenceDetail
122
            };
123
        addAll(Arrays.asList(components));
124
        return components;
125
    }
126

    
127
    /**
128
     * IMPORTANT!!!
129
     * When changing the field order FIELD_INDEX_* must be adapted
130
     */
131
    public static List<String> visibleFields() {
132
        List<String> visibleFields = Arrays.asList(new String[]{
133
            FIELD_NAME_KIND_OF_UNIT, FIELD_NAME_TYPE_STATUS,
134
            "collection", "accessionNumber",
135
            "preferredStableUri",
136
            FIELD_NAME_DESIGNATION_REFERENCE, "designationReferenceDetail",
137
            "mediaUri", "mediaSpecimenReference",
138
            "mediaSpecimenReferenceDetail"
139
            });
140
        return visibleFields;
141
    }
142

    
143
    @Override
144
    public void updateRowItemsEnablement() {
145

    
146
        DefinedTerm kindOfUnitTerm = (DefinedTerm)kindOfUnit.getValue();
147

    
148
        boolean publishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.PUBLISHED_IMAGE());
149
        boolean unPublishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.UNPUBLISHED_IMAGE());
150

    
151
        boolean kindOfUnitLocked = !associatedTypeDesignationCount.getValue().isEmpty() && Integer.valueOf(associatedTypeDesignationCount.getValue()) > 1;
152
        kindOfUnit.setEnabled(!kindOfUnitLocked);
153
        kindOfUnit.setDescription(kindOfUnitLocked ?
154
                "Can not be changed since the type specimen is associated with multiple type designations" : "");
155

    
156
        boolean withDesignationReference = typeStatus.getValue() != null && ((SpecimenTypeDesignationStatus)typeStatus.getValue()).hasDesignationSource();
157

    
158
        designationReference.setEnabled(withDesignationReference || designationReference.isRequired());
159
        designationReference.setImmediate(designationReference.isRequired());
160
//        if(designationReference.isRequired() && designationReference.isEmpty()) {
161
//            designationReference.selectFirst();
162
//            designationReference.commitSelect();
163
//        }
164
        designationReferenceDetail.setEnabled(withDesignationReference);
165

    
166
        mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType);
167
        mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType);
168
        mediaUri.setEnabled(publishedImageType || unPublishedImageType);
169

    
170
    }
171

    
172
    /**
173
     * @return the 0-based position index of the <code>kindOfUnit</code> field in this class
174
     * which are visible according to {@link #visibleFields())
175
     */
176
    public static int rowListSelectColumn(){
177
        return 0;
178
    }
179

    
180
    class RowListSelect extends NativeSelect implements CollectionRowRepresentative {
181

    
182
        private static final long serialVersionUID = 3235653923633494213L;
183

    
184
        CollectionRow row;
185

    
186
        protected void setRow(CollectionRow row){
187
            this.row = row;
188
        }
189

    
190
        @Override
191
        public void updateRowItemsEnabledStates() {
192
            row.updateRowItemsEnablement();
193
        }
194

    
195
    }
196

    
197
}
(9-9/18)