Project

General

Profile

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

    
60
    public SpecimenTypeDesignationDTORow(){
61

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

    
66
        accessionNumber.setWidth(100, Unit.PIXELS);
67
        preferredStableUri.setWidth(150, Unit.PIXELS);
68
        preferredStableUri.setConverter(new UriConverter());
69
        collection.setWidth(200, Unit.PIXELS);
70
        collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
71
        mediaUri.setWidth(150, Unit.PIXELS);
72
        mediaUri.setConverter(new UriConverter());
73
        mediaSpecimenReference.setWidth(200, Unit.PIXELS);
74
        mediaSpecimenReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
75
        mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
76

    
77
        kindOfUnit.addValueChangeListener(e ->
78
                updateRowItemsEnablement()
79
        );
80

    
81
    }
82

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

    
99
    public static List<String> visibleFields() {
100
        List<String> visibleFields = Arrays.asList(new String[]{
101
            "kindOfUnit", "typeStatus",
102
            "collection", "accessionNumber",
103
            "preferredStableUri",
104
            "mediaUri", "mediaSpecimenReference",
105
            "mediaSpecimenReferenceDetail"
106
            });
107
        return visibleFields;
108
    }
109

    
110
    @Override
111
    public void updateRowItemsEnablement() {
112

    
113
        DefinedTerm kindOfUnitTerm = (DefinedTerm)kindOfUnit.getValue();
114

    
115
        boolean publishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.PUBLISHED_IMAGE());
116
        boolean unPublishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.UNPUBLISHED_IMAGE());
117

    
118
        boolean kindOfUnitLocked = !associatedTypeDesignationCount.getValue().isEmpty() && Integer.valueOf(associatedTypeDesignationCount.getValue()) > 1;
119
        kindOfUnit.setEnabled(!kindOfUnitLocked);
120
        kindOfUnit.setDescription(kindOfUnitLocked ?
121
                "Can not be changed since the type specimen is associated with multiple type designations" : "");
122

    
123
        mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType);
124
        mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType);
125
        mediaUri.setEnabled(publishedImageType || unPublishedImageType);
126

    
127
    }
128

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

    
138
    class RowListSelect extends NativeSelect implements CollectionRowRepresentative {
139

    
140
        private static final long serialVersionUID = 3235653923633494213L;
141

    
142
        CollectionRow row;
143

    
144
        protected void setRow(CollectionRow row){
145
            this.row = row;
146
        }
147

    
148
        @Override
149
        public void updateRowItemsEnabledStates() {
150
            row.updateRowItemsEnablement();
151

    
152
        }
153

    
154
    }
155

    
156
}
(6-6/14)