2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.vaadin
.view
.name
;
11 import java
.util
.Arrays
;
12 import java
.util
.List
;
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
;
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
;
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()}
36 * @author a.kohlbecker
40 public class SpecimenTypeDesignationDTORow
extends CollectionRowItemCollection
implements CollectionRow
{
44 * The fieldname must match the properties of the SpecimenTypeDesignationDTO
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
;
60 public SpecimenTypeDesignationDTORow(){
61 kindOfUnit
.setRows(1);
62 kindOfUnit
.setRequired(true);
63 kindOfUnit
.setRow(this);
64 typeStatus
.setRows(1);
65 typeStatus
.setRequired(true);
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
);
78 kindOfUnit
.addValueChangeListener(e
->
79 updateRowItemsEnablement()
87 public Component
[] components() {
88 Component
[] components
= new Component
[]{
89 associatedTypeDesignationCount
,
90 kindOfUnit
, typeStatus
,
91 collection
, accessionNumber
,
93 mediaUri
, mediaSpecimenReference
,
94 mediaSpecimenReferenceDetail
96 addAll(Arrays
.asList(components
));
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"
108 return visibleFields
;
112 public void updateRowItemsEnablement() {
114 DefinedTerm kindOfUnitTerm
= (DefinedTerm
)kindOfUnit
.getValue();
116 boolean publishedImageType
= kindOfUnitTerm
!= null && kindOfUnitTerm
.equals(KindOfUnitTerms
.PUBLISHED_IMAGE());
117 boolean unPublishedImageType
= kindOfUnitTerm
!= null && kindOfUnitTerm
.equals(KindOfUnitTerms
.UNPUBLISHED_IMAGE());
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" : "");
124 mediaSpecimenReference
.setEnabled(publishedImageType
|| unPublishedImageType
);
125 mediaSpecimenReferenceDetail
.setEnabled(publishedImageType
|| unPublishedImageType
);
126 mediaUri
.setEnabled(publishedImageType
|| unPublishedImageType
);
132 * @return the 0-based position index of the <code>kindOfUnit</code> field in this class
133 * which are visible according to {@link #visibleFields())
135 public static int rowListSelectColumn(){
139 class RowListSelect
extends ListSelect
implements CollectionRowRepresentative
{
141 private static final long serialVersionUID
= 3235653923633494213L;
145 protected void setRow(CollectionRow row
){
150 public void updateRowItemsEnabledStates() {
151 row
.updateRowItemsEnablement();