Project

General

Profile

Download (7 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
    private static final long serialVersionUID = -5637834800897331072L;
44

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

    
64
    public SpecimenTypeDesignationDTORow(){
65

    
66
        kindOfUnit.setRequired(true);
67
        kindOfUnit.setRow(this);
68
        kindOfUnit.addValueChangeListener(e ->
69
            updateRowItemsEnablement()
70
            );
71

    
72
        typeStatus.setRequired(true);
73
        typeStatus.addValueChangeListener(e ->
74
            updateRowItemsEnablement()
75
            );
76

    
77
        accessionNumber.setWidth(100, Unit.PIXELS);
78

    
79
        collection.setWidth(200, Unit.PIXELS);
80
        collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
81

    
82
        preferredStableUri.setWidth(150, Unit.PIXELS);
83
        preferredStableUri.setConverter(new UriConverter());
84

    
85
        designationReference.setWidth(200, Unit.PIXELS);
86
        designationReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
87

    
88
        designationReferenceDetail.setWidth(200, Unit.PIXELS);
89

    
90
        mediaUri.setWidth(150, Unit.PIXELS);
91
        mediaUri.setConverter(new UriConverter());
92

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

    
96
        mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
97

    
98

    
99
    }
100

    
101
    /**
102
     * @return
103
     */
104
    public Component[] components() {
105
        Component[] components = new Component[]{
106
            associatedTypeDesignationCount,
107
            kindOfUnit, typeStatus,
108
            collection, accessionNumber,
109
            preferredStableUri,
110
            designationReference, designationReferenceDetail,
111
            mediaUri, mediaSpecimenReference,
112
            mediaSpecimenReferenceDetail
113
            };
114
        addAll(Arrays.asList(components));
115
        return components;
116
    }
117

    
118
    public static List<String> visibleFields() {
119
        List<String> visibleFields = Arrays.asList(new String[]{
120
            "kindOfUnit", "typeStatus",
121
            "collection", "accessionNumber",
122
            "preferredStableUri",
123
            "designationReference", "designationReferenceDetail",
124
            "mediaUri", "mediaSpecimenReference",
125
            "mediaSpecimenReferenceDetail"
126
            });
127
        return visibleFields;
128
    }
129

    
130
    @Override
131
    public void updateRowItemsEnablement() {
132

    
133
        DefinedTerm kindOfUnitTerm = (DefinedTerm)kindOfUnit.getValue();
134

    
135
        boolean publishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.PUBLISHED_IMAGE());
136
        boolean unPublishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.UNPUBLISHED_IMAGE());
137

    
138
        boolean kindOfUnitLocked = !associatedTypeDesignationCount.getValue().isEmpty() && Integer.valueOf(associatedTypeDesignationCount.getValue()) > 1;
139
        kindOfUnit.setEnabled(!kindOfUnitLocked);
140
        kindOfUnit.setDescription(kindOfUnitLocked ?
141
                "Can not be changed since the type specimen is associated with multiple type designations" : "");
142

    
143
        boolean withDesignationReference = typeStatus.getValue() != null && ((SpecimenTypeDesignationStatus)typeStatus.getValue()).hasDesignationSource();
144

    
145
        designationReference.setEnabled(withDesignationReference);
146
        designationReferenceDetail.setEnabled(withDesignationReference);
147

    
148
        mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType);
149
        mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType);
150
        mediaUri.setEnabled(publishedImageType || unPublishedImageType);
151

    
152
    }
153

    
154
    /**
155
     *
156
     * @return the 0-based position index of the <code>kindOfUnit</code> field in this class
157
     * which are visible according to {@link #visibleFields())
158
     */
159
    public static int rowListSelectColumn(){
160
        return 0;
161
    }
162

    
163
    class RowListSelect extends NativeSelect implements CollectionRowRepresentative {
164

    
165
        private static final long serialVersionUID = 3235653923633494213L;
166

    
167
        CollectionRow row;
168

    
169
        protected void setRow(CollectionRow row){
170
            this.row = row;
171
        }
172

    
173
        @Override
174
        public void updateRowItemsEnabledStates() {
175
            row.updateRowItemsEnablement();
176

    
177
        }
178

    
179
    }
180

    
181
}
(8-8/17)