ref #7222 removing the 'Hint:' line in TaxonNameEditor
[cdm-vaadin.git] / src / main / java / eu / etaxonomy / cdm / vaadin / view / name / SpecimenTypeDesignationDTORow.java
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 collection.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Collection>(collection));
72 mediaUri.setWidth(150, Unit.PIXELS);
73 mediaUri.setConverter(new UriConverter());
74 mediaSpecimenReference.setWidth(200, Unit.PIXELS);
75 mediaSpecimenReference.setNestedButtonStateUpdater(new ToOneRelatedEntityButtonUpdater<Reference>(mediaSpecimenReference));
76 mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS);
77
78 kindOfUnit.addValueChangeListener(e ->
79 updateRowItemsEnablement()
80 );
81
82 }
83
84 /**
85 * @return
86 */
87 public Component[] components() {
88 Component[] components = new Component[]{
89 associatedTypeDesignationCount,
90 kindOfUnit, typeStatus,
91 collection, accessionNumber,
92 preferredStableUri,
93 mediaUri, mediaSpecimenReference,
94 mediaSpecimenReferenceDetail
95 };
96 addAll(Arrays.asList(components));
97 return components;
98 }
99
100 public static List<String> visibleFields() {
101 List<String> visibleFields = Arrays.asList(new String[]{
102 "kindOfUnit", "typeStatus",
103 "collection", "accessionNumber",
104 "preferredStableUri",
105 "mediaUri", "mediaSpecimenReference",
106 "mediaSpecimenReferenceDetail"
107 });
108 return visibleFields;
109 }
110
111 @Override
112 public void updateRowItemsEnablement() {
113
114 DefinedTerm kindOfUnitTerm = (DefinedTerm)kindOfUnit.getValue();
115
116 boolean publishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.PUBLISHED_IMAGE());
117 boolean unPublishedImageType = kindOfUnitTerm != null && kindOfUnitTerm.equals(KindOfUnitTerms.UNPUBLISHED_IMAGE());
118
119 boolean kindOfUnitLocked = !associatedTypeDesignationCount.getValue().isEmpty() && Integer.valueOf(associatedTypeDesignationCount.getValue()) > 1;
120 kindOfUnit.setEnabled(!kindOfUnitLocked);
121 kindOfUnit.setDescription(kindOfUnitLocked ?
122 "Can not be changed since the type specimen is associated with multiple type designations" : "");
123
124 mediaSpecimenReference.setEnabled(publishedImageType || unPublishedImageType);
125 mediaSpecimenReferenceDetail.setEnabled(publishedImageType || unPublishedImageType);
126 mediaUri.setEnabled(publishedImageType || unPublishedImageType);
127
128 }
129
130 /**
131 *
132 * @return the 0-based position index of the <code>kindOfUnit</code> field in this class
133 * which are visible according to {@link #visibleFields())
134 */
135 public static int rowListSelectColumn(){
136 return 0;
137 }
138
139 class RowListSelect extends ListSelect implements CollectionRowRepresentative {
140
141 private static final long serialVersionUID = 3235653923633494213L;
142
143 CollectionRow row;
144
145 protected void setRow(CollectionRow row){
146 this.row = row;
147 }
148
149 @Override
150 public void updateRowItemsEnabledStates() {
151 row.updateRowItemsEnablement();
152
153 }
154
155 }
156
157 }