Project

General

Profile

Download (6.27 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.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
    ListSelect typeStatus = new ListSelect();
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
        kindOfUnit.setRows(1);
62
        kindOfUnit.setRequired(true);
63
        kindOfUnit.setRow(this);
64
        typeStatus.setRows(1);
65
        typeStatus.setRequired(true);
66

    
67
        accessionNumber.setWidth(100, Unit.PIXELS);
68
        preferredStableUri.setWidth(150, Unit.PIXELS);
69
        preferredStableUri.setConverter(new UriConverter());
70
        collection.setWidth(200, Unit.PIXELS);
71
        collectionFieldUpdater = new ToOneRelatedEntityButtonUpdater<Collection>(collection);
72
        collection.addValueChangeListener(
73
                collectionFieldUpdater
74
                );
75
        mediaUri.setWidth(150, Unit.PIXELS);
76
        mediaUri.setConverter(new UriConverter());
77
        mediaSpecimenReference.setWidth(200, Unit.PIXELS);
78
        mediaSpecimenReferenceUpdater = new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference);
79
        mediaSpecimenReference.addValueChangeListener(
80
                mediaSpecimenReferenceUpdater
81
                );
82
        mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
83

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

    
88
    }
89

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

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

    
117
    @Override
118
    public void updateRowItemsEnablement() {
119

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

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

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

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

    
134
    }
135

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

    
145
    class RowListSelect extends ListSelect implements CollectionRowRepresentative {
146

    
147
        private static final long serialVersionUID = 3235653923633494213L;
148

    
149
        CollectionRow row;
150

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

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

    
159
        }
160

    
161
    }
162

    
163
}
(5-5/13)