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
.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
;
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()}
34 * @author a.kohlbecker
38 public class SpecimenTypeDesignationDTORow
extends CollectionRowItemCollection
implements CollectionRow
{
42 * The fieldname must match the properties of the SpecimenTypeDesignationDTO
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");
56 public SpecimenTypeDesignationDTORow(){
57 kindOfUnit
.setRows(1);
58 kindOfUnit
.setRequired(true);
59 kindOfUnit
.setRow(this);
60 typeStatus
.setRows(1);
61 typeStatus
.setRequired(true);
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
);
72 kindOfUnit
.addValueChangeListener(e
->
73 updateRowItemsEnablement()
81 public Component
[] components() {
82 Component
[] components
= new Component
[]{
83 associatedTypeDesignationCount
,
84 kindOfUnit
, typeStatus
,
85 collection
, accessionNumber
,
87 mediaUri
, mediaSpecimenReference
,
88 mediaSpecimenReferenceDetail
90 addAll(Arrays
.asList(components
));
94 public static List
<String
> visibleFields() {
95 List
<String
> visibleFields
= Arrays
.asList(new String
[]{
96 "kindOfUnit", "typeStatus",
97 "collection", "accessionNumber",
99 "mediaUri", "mediaSpecimenReference",
100 "mediaSpecimenReferenceDetail"
102 return visibleFields
;
106 public void updateRowItemsEnablement() {
108 DefinedTerm kindOfUnitTerm
= (DefinedTerm
)kindOfUnit
.getValue();
110 boolean publishedImageType
= kindOfUnitTerm
!= null && kindOfUnitTerm
.equals(KindOfUnitTerms
.PUBLISHED_IMAGE());
111 boolean unPublishedImageType
= kindOfUnitTerm
!= null && kindOfUnitTerm
.equals(KindOfUnitTerms
.UNPUBLISHED_IMAGE());
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
);
125 * @return the 0-based position index of the <code>kindOfUnit</code> field in this class
126 * which are visible according to {@link #visibleFields())
128 public static int rowListSelectColumn(){
132 class RowListSelect
extends ListSelect
implements CollectionRowRepresentative
{
134 private static final long serialVersionUID
= 3235653923633494213L;
138 protected void setRow(CollectionRow row
){
143 public void updateRowItemsEnabledStates() {
144 row
.updateRowItemsEnablement();