Project

General

Profile

Download (5.95 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.occurrence.Collection;
20
import eu.etaxonomy.cdm.model.reference.Reference;
21
import eu.etaxonomy.cdm.model.term.DefinedTerm;
22
import eu.etaxonomy.cdm.vaadin.component.CollectionRow;
23
import eu.etaxonomy.cdm.vaadin.component.CollectionRowItemCollection;
24
import eu.etaxonomy.cdm.vaadin.component.CollectionRowRepresentative;
25
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
26
import eu.etaxonomy.cdm.vaadin.event.ToOneRelatedEntityButtonUpdater;
27
import eu.etaxonomy.cdm.vaadin.model.registration.KindOfUnitTerms;
28
import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter;
29
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
30

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

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

    
60
    public SpecimenTypeDesignationDTORow(){
61

    
62
        kindOfUnit.setRequired(true);
63
        kindOfUnit.setRow(this);
64

    
65
        typeStatus.setRequired(true);
66

    
67
        accessionNumber.setWidth(100, Unit.PIXELS);
68

    
69
        preferredStableUri.setWidth(150, Unit.PIXELS);
70
        preferredStableUri.setConverter(new UriConverter());
71

    
72
        collection.setWidth(200, Unit.PIXELS);
73
        collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
74

    
75
        mediaUri.setWidth(150, Unit.PIXELS);
76
        mediaUri.setConverter(new UriConverter());
77

    
78
        mediaSpecimenReference.setWidth(200, Unit.PIXELS);
79
        mediaSpecimenReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
80

    
81
        mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
82

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

    
87
    }
88

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

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

    
116
    @Override
117
    public void updateRowItemsEnablement() {
118

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

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

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

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

    
133
    }
134

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

    
144
    class RowListSelect extends NativeSelect implements CollectionRowRepresentative {
145

    
146
        private static final long serialVersionUID = 3235653923633494213L;
147

    
148
        CollectionRow row;
149

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

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

    
158
        }
159

    
160
    }
161

    
162
}
(7-7/15)