Project

General

Profile

Download (5.57 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.ListSelect;
17
import com.vaadin.ui.TextField;
18

    
19
import eu.etaxonomy.cdm.model.common.DefinedTerm;
20
import eu.etaxonomy.cdm.model.reference.Reference;
21
import eu.etaxonomy.cdm.vaadin.component.CollectionRow;
22
import eu.etaxonomy.cdm.vaadin.component.CollectionRowItemCollection;
23
import eu.etaxonomy.cdm.vaadin.component.CollectionRowRepresentative;
24
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
25
import eu.etaxonomy.cdm.vaadin.model.registration.KindOfUnitTerms;
26
import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter;
27
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
28

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

    
40
    /* CONVENTION!
41
     *
42
     * The fieldname must match the properties of the SpecimenTypeDesignationDTO
43
     */
44
    TextField associatedTypeDesignationCount = new TextField();
45
    RowListSelect kindOfUnit = new RowListSelect(); // position is IMPORTANT, see rowListSelectColumn()
46
    ListSelect typeStatus = new ListSelect();
47
    ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection> collection =
48
            new ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection>(null, eu.etaxonomy.cdm.model.occurrence.Collection.class);
49
    TextField accessionNumber = new TextFieldNFix();
50
    TextField preferredStableUri = new TextFieldNFix();
51
    TextField mediaUri = new TextFieldNFix();
52
    ToOneRelatedEntityCombobox<Reference> mediaSpecimenReference =
53
            new ToOneRelatedEntityCombobox<Reference>(null, Reference.class);
54
    TextField mediaSpecimenReferenceDetail = new TextFieldNFix(); //"Image reference detail");
55

    
56
    public SpecimenTypeDesignationDTORow(){
57
        kindOfUnit.setRows(1);
58
        kindOfUnit.setRequired(true);
59
        kindOfUnit.setRow(this);
60
        typeStatus.setRows(1);
61
        typeStatus.setRequired(true);
62

    
63
        accessionNumber.setWidth(100, Unit.PIXELS);
64
        preferredStableUri.setWidth(150, Unit.PIXELS);
65
        preferredStableUri.setConverter(new UriConverter());
66
        collection.setWidth(200, Unit.PIXELS);
67
        mediaUri.setWidth(150, Unit.PIXELS);
68
        mediaUri.setConverter(new UriConverter());
69
        mediaSpecimenReference.setWidth(200, Unit.PIXELS);
70
        mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
71

    
72
        kindOfUnit.addValueChangeListener(e ->
73
                updateRowItemsEnablement()
74
        );
75

    
76
    }
77

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

    
94
    public static List<String> visibleFields() {
95
        List<String> visibleFields = Arrays.asList(new String[]{
96
            "kindOfUnit", "typeStatus",
97
            "collection", "accessionNumber",
98
            "preferredStableUri",
99
            "mediaUri", "mediaSpecimenReference",
100
            "mediaSpecimenReferenceDetail"
101
            });
102
        return visibleFields;
103
    }
104

    
105
    @Override
106
    public void updateRowItemsEnablement() {
107

    
108
        DefinedTerm kindOfUnitTerm = (DefinedTerm)kindOfUnit.getValue();
109

    
110
        boolean publishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.PUBLISHED_IMAGE());
111
        boolean unPublishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.UNPUBLISHED_IMAGE());
112

    
113
        boolean kindOfUnitLocked = !associatedTypeDesignationCount.getValue().isEmpty() && Integer.valueOf(associatedTypeDesignationCount.getValue()) > 1;
114
        kindOfUnit.setEnabled(!kindOfUnitLocked);
115
        kindOfUnit.setDescription(kindOfUnitLocked ?
116
                "Can not be changed since the type specimen is associated with multiple type designations" : "");
117
        mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType);
118
        mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType);
119
        mediaUri.setEnabled(publishedImageType || unPublishedImageType);
120

    
121
    }
122

    
123
    /**
124
     *
125
     * @return the 0-based position index of the <code>kindOfUnit</code> field in this class
126
     * which are visible according to {@link #visibleFields())
127
     */
128
    public static int rowListSelectColumn(){
129
        return 0;
130
    }
131

    
132
    class RowListSelect extends ListSelect implements CollectionRowRepresentative {
133

    
134
        private static final long serialVersionUID = 3235653923633494213L;
135

    
136
        CollectionRow row;
137

    
138
        protected void setRow(CollectionRow row){
139
            this.row = row;
140
        }
141

    
142
        @Override
143
        public void updateRowItemsEnabledStates() {
144
            row.updateRowItemsEnablement();
145

    
146
        }
147

    
148
    }
149

    
150
}
(5-5/13)