Project

General

Profile

Download (6.1 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
    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
        mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
78

    
79
        kindOfUnit.addValueChangeListener(e ->
80
                updateRowItemsEnablement()
81
        );
82

    
83
    }
84

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

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

    
112
    @Override
113
    public void updateRowItemsEnablement() {
114

    
115
        DefinedTerm kindOfUnitTerm = (DefinedTerm)kindOfUnit.getValue();
116

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

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

    
125
        mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType);
126
        mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType);
127
        mediaUri.setEnabled(publishedImageType || unPublishedImageType);
128

    
129
    }
130

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

    
140
    class RowListSelect extends NativeSelect implements CollectionRowRepresentative {
141

    
142
        private static final long serialVersionUID = 3235653923633494213L;
143

    
144
        CollectionRow row;
145

    
146
        protected void setRow(CollectionRow row){
147
            this.row = row;
148
        }
149

    
150
        @Override
151
        public void updateRowItemsEnabledStates() {
152
            row.updateRowItemsEnablement();
153

    
154
        }
155

    
156
    }
157

    
158
}
(6-6/14)