Revision 4a3c0817
Added by Andreas Kohlbecker almost 7 years ago
src/main/java/eu/etaxonomy/cdm/vaadin/component/SelectFieldFactory.java | ||
---|---|---|
138 | 138 |
return termItemContainer; |
139 | 139 |
} |
140 | 140 |
|
141 |
/** |
|
142 |
* @param termType |
|
143 |
*/ |
|
144 |
public BeanItemContainer<DefinedTermBase> buildTermItemContainer(UUID ... termUuid) { |
|
145 |
// TODO use TermCacher? |
|
146 |
List<DefinedTermBase> terms = repo.getTermService().load(Arrays.asList(termUuid), INIT_STRATEGY); |
|
147 |
BeanItemContainer<DefinedTermBase> termItemContainer = new BeanItemContainer<>(DefinedTermBase.class); |
|
148 |
termItemContainer.addAll(terms); |
|
149 |
return termItemContainer; |
|
150 |
} |
|
151 |
|
|
141 | 152 |
/** |
142 | 153 |
* @param termType |
143 | 154 |
*/ |
src/main/java/eu/etaxonomy/cdm/vaadin/model/registration/SpecimenTypeDesignationDTO.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.model.registration; |
|
10 |
|
|
11 |
import java.net.URI; |
|
12 |
import java.util.UUID; |
|
13 |
|
|
14 |
import org.apache.commons.collections.CollectionUtils; |
|
15 |
|
|
16 |
import eu.etaxonomy.cdm.api.utility.DerivedUnitConversionException; |
|
17 |
import eu.etaxonomy.cdm.api.utility.DerivedUnitConverter; |
|
18 |
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; |
|
19 |
import eu.etaxonomy.cdm.model.common.IdentifiableSource; |
|
20 |
import eu.etaxonomy.cdm.model.media.Media; |
|
21 |
import eu.etaxonomy.cdm.model.media.MediaRepresentation; |
|
22 |
import eu.etaxonomy.cdm.model.media.MediaRepresentationPart; |
|
23 |
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation; |
|
24 |
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus; |
|
25 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
|
26 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent; |
|
27 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType; |
|
28 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; |
|
29 |
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen; |
|
30 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; |
|
31 |
import eu.etaxonomy.cdm.model.reference.Reference; |
|
32 |
|
|
33 |
/** |
|
34 |
* A DTO which is use in the context of the {@link SpecimenTypeDesignationWorkingSetDTO} which is backed up |
|
35 |
* <code>SpecimenTypeDesignation.typeSpecimen.derivedFrom.type</code> object graph. |
|
36 |
* <p> |
|
37 |
* The contained {@link DerivedUnit} either is a {@link MediaSpecimen} with or a {@link DerivedUnit}, depending on the |
|
38 |
* "kind of unit" which is defined by the associated <code>DerivationEvent.type</code>: |
|
39 |
* |
|
40 |
* <ul> |
|
41 |
* <li>{@link DerivationEventType#GATHERING_IN_SITU()} -> {@link DerivedUnit}</li> |
|
42 |
* <li>{@link DerivationEventTypes#CULTURE_METABOLIC_INACTIVE()} -> {@link DerivedUnit}</li> |
|
43 |
* <li>{@link DerivationEventTypes#UNPUBLISHED_IMAGE()} -> {@link MediaSpecimen}</li> |
|
44 |
* <li>{@link DerivationEventTypes#PUBLISHED_IMAGE()} -> {@link MediaSpecimen}</li> |
|
45 |
* </ul> |
|
46 |
* |
|
47 |
* @author a.kohlbecker |
|
48 |
* @since Jun 22, 2017 |
|
49 |
* |
|
50 |
*/ |
|
51 |
public class SpecimenTypeDesignationDTO { |
|
52 |
|
|
53 |
SpecimenTypeDesignation std; |
|
54 |
|
|
55 |
/** |
|
56 |
* Creates an new new instance of SpecimenTypeDesignationDTO which is backed up |
|
57 |
* by an newly instantiated <code>SpecimenTypeDesignation.typeSpecimen.derivedFrom.type</code> object graph. |
|
58 |
*/ |
|
59 |
public SpecimenTypeDesignationDTO(){ |
|
60 |
this(SpecimenTypeDesignation.NewInstance()); |
|
61 |
} |
|
62 |
|
|
63 |
/** |
|
64 |
* Creates a new instance of SpecimenTypeDesignationDTO. |
|
65 |
* |
|
66 |
* The constructor assures that <code>SpecimenTypeDesignation.typeSpecimen.derivedFrom.type</code> are never null. |
|
67 |
* That is in case the supplied std parameter or if any of the above listed properties is null the missing instances |
|
68 |
* are created and added to the object graph. |
|
69 |
* |
|
70 |
* @param std |
|
71 |
*/ |
|
72 |
public SpecimenTypeDesignationDTO(SpecimenTypeDesignation std) { |
|
73 |
this.std = std; |
|
74 |
if(std.getTypeSpecimen() == null){ |
|
75 |
DerivedUnit derivedUnit = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen); |
|
76 |
std.setTypeSpecimen(derivedUnit); |
|
77 |
} |
|
78 |
if(std.getTypeSpecimen().getDerivedFrom() == null){ |
|
79 |
DerivationEvent derivedFrom = DerivationEvent.NewInstance(DerivationEventType.GATHERING_IN_SITU()); |
|
80 |
std.getTypeSpecimen().setDerivedFrom(derivedFrom); |
|
81 |
} |
|
82 |
} |
|
83 |
|
|
84 |
public DerivationEventType getDerivationEventType(){ |
|
85 |
return std.getTypeSpecimen().getDerivedFrom().getType(); |
|
86 |
} |
|
87 |
|
|
88 |
public void setDerivationEventType(DerivationEventType derivationEventType) throws DerivedUnitConversionException{ |
|
89 |
|
|
90 |
std.getTypeSpecimen().getDerivedFrom().setType(derivationEventType); |
|
91 |
|
|
92 |
Class<? extends DerivedUnit> requiredSpecimenType = specimenTypeFor(derivationEventType); |
|
93 |
|
|
94 |
if(!requiredSpecimenType.equals(std.getTypeSpecimen())){ |
|
95 |
|
|
96 |
DerivedUnit convertedSpecimen; |
|
97 |
|
|
98 |
if(requiredSpecimenType.equals(MediaSpecimen.class)){ |
|
99 |
DerivedUnitConverter<MediaSpecimen> converter = new DerivedUnitConverter<MediaSpecimen> (std.getTypeSpecimen()); |
|
100 |
convertedSpecimen = converter.convertTo((Class<MediaSpecimen>)requiredSpecimenType, specimenOrObservationTypeFor(derivationEventType)); |
|
101 |
} else { |
|
102 |
DerivedUnitConverter<DerivedUnit> converter = new DerivedUnitConverter<DerivedUnit> (std.getTypeSpecimen()); |
|
103 |
convertedSpecimen = converter.convertTo((Class<DerivedUnit>)requiredSpecimenType, specimenOrObservationTypeFor(derivationEventType)); |
|
104 |
} |
|
105 |
|
|
106 |
std.setTypeSpecimen(convertedSpecimen); |
|
107 |
} |
|
108 |
} |
|
109 |
|
|
110 |
|
|
111 |
/** |
|
112 |
* See constructor doc. |
|
113 |
* |
|
114 |
* @param derivationEventType |
|
115 |
* @return |
|
116 |
* either <code>DerivedUnit</code> or <code>MediaSpecimen</code> never null. |
|
117 |
* <code>DerivedUnit</code> is the fall back return value. |
|
118 |
*/ |
|
119 |
private Class<? extends DerivedUnit> specimenTypeFor(DerivationEventType derivationEventType) { |
|
120 |
UUID detUuid = derivationEventType.getUuid(); |
|
121 |
|
|
122 |
if(detUuid.equals(DerivationEventType.GATHERING_IN_SITU().getUuid())) { |
|
123 |
return DerivedUnit.class; |
|
124 |
} |
|
125 |
if(detUuid.equals(DerivationEventTypes.CULTURE_METABOLIC_INACTIVE().getUuid())) { |
|
126 |
return DerivedUnit.class; |
|
127 |
} |
|
128 |
if(detUuid.equals(DerivationEventTypes.PUBLISHED_IMAGE().getUuid())) { |
|
129 |
return MediaSpecimen.class; |
|
130 |
} |
|
131 |
if(detUuid.equals(DerivationEventTypes.UNPUBLISHED_IMAGE().getUuid())) { |
|
132 |
return MediaSpecimen.class; |
|
133 |
} |
|
134 |
return DerivedUnit.class; |
|
135 |
} |
|
136 |
|
|
137 |
private SpecimenOrObservationType specimenOrObservationTypeFor(DerivationEventType derivationEventType) { |
|
138 |
|
|
139 |
UUID detUuid = derivationEventType.getUuid(); |
|
140 |
|
|
141 |
if(detUuid.equals(DerivationEventType.GATHERING_IN_SITU().getUuid())) { |
|
142 |
return SpecimenOrObservationType.PreservedSpecimen; |
|
143 |
} |
|
144 |
if(detUuid.equals(DerivationEventTypes.CULTURE_METABOLIC_INACTIVE().getUuid())) { |
|
145 |
return SpecimenOrObservationType.LivingSpecimen; |
|
146 |
} |
|
147 |
if(detUuid.equals(DerivationEventTypes.PUBLISHED_IMAGE().getUuid())) { |
|
148 |
return SpecimenOrObservationType.StillImage; |
|
149 |
} |
|
150 |
if(detUuid.equals(DerivationEventTypes.UNPUBLISHED_IMAGE().getUuid())) { |
|
151 |
return SpecimenOrObservationType.StillImage; |
|
152 |
} |
|
153 |
return SpecimenOrObservationType.PreservedSpecimen; |
|
154 |
|
|
155 |
} |
|
156 |
|
|
157 |
public SpecimenTypeDesignationStatus getTypeStatus(){ |
|
158 |
return HibernateProxyHelper.deproxy(std.getTypeStatus(), SpecimenTypeDesignationStatus.class); |
|
159 |
} |
|
160 |
|
|
161 |
public void setTypeStatus(SpecimenTypeDesignationStatus typeStatus){ |
|
162 |
std.setTypeStatus(typeStatus); |
|
163 |
} |
|
164 |
|
|
165 |
public Collection getCollection(){ |
|
166 |
return std.getTypeSpecimen().getCollection(); |
|
167 |
} |
|
168 |
|
|
169 |
public void setCollection(Collection collection){ |
|
170 |
std.getTypeSpecimen().setCollection(collection); |
|
171 |
} |
|
172 |
|
|
173 |
public String getAccessionNumber(){ |
|
174 |
return std.getTypeSpecimen().getAccessionNumber(); |
|
175 |
} |
|
176 |
|
|
177 |
public void setAccessionNumber(String accessionNumber){ |
|
178 |
std.getTypeSpecimen().setAccessionNumber(accessionNumber); |
|
179 |
} |
|
180 |
|
|
181 |
public URI getMediaUri(){ |
|
182 |
if(checkMediaSpecimen()){ |
|
183 |
MediaRepresentationPart part = findMediaRepresentationPart(); |
|
184 |
if(part != null){ |
|
185 |
return part.getUri(); |
|
186 |
} |
|
187 |
} |
|
188 |
return null; |
|
189 |
} |
|
190 |
|
|
191 |
public void setMediaUri(URI mediaUri){ |
|
192 |
if(checkMediaSpecimen()){ |
|
193 |
MediaRepresentationPart part = findOrMakeMediaRepresentationPart(); |
|
194 |
part.setUri(mediaUri); |
|
195 |
} |
|
196 |
} |
|
197 |
|
|
198 |
public Reference getMediaSpecimenReference(){ |
|
199 |
if(checkMediaSpecimen()){ |
|
200 |
IdentifiableSource source = findMediaSpecimenIdentifieableSource(); |
|
201 |
if(source != null){ |
|
202 |
return source.getCitation(); |
|
203 |
} |
|
204 |
} |
|
205 |
return null; |
|
206 |
} |
|
207 |
|
|
208 |
public void setMediaSpecimenReference(Reference reference){ |
|
209 |
if(checkMediaSpecimen()){ |
|
210 |
IdentifiableSource source = findOrMakeMediaSpecimenIdentifieableSource(); |
|
211 |
source.setCitation(reference); |
|
212 |
} |
|
213 |
} |
|
214 |
|
|
215 |
public String getMediaSpecimenReferenceDetail(){ |
|
216 |
if(checkMediaSpecimen()){ |
|
217 |
IdentifiableSource source = findMediaSpecimenIdentifieableSource(); |
|
218 |
if(source != null){ |
|
219 |
return source.getCitationMicroReference(); |
|
220 |
} |
|
221 |
} |
|
222 |
return null; |
|
223 |
} |
|
224 |
|
|
225 |
public void setMediaSpecimenReferenceDetail(String referenceDetail){ |
|
226 |
if(checkMediaSpecimen()){ |
|
227 |
IdentifiableSource source = findOrMakeMediaSpecimenIdentifieableSource(); |
|
228 |
source.setCitationMicroReference(referenceDetail); |
|
229 |
} |
|
230 |
} |
|
231 |
|
|
232 |
/** |
|
233 |
* @return |
|
234 |
*/ |
|
235 |
private IdentifiableSource findMediaSpecimenIdentifieableSource() { |
|
236 |
IdentifiableSource source = null; |
|
237 |
Media media = findMediaSpecimen().getMediaSpecimen(); |
|
238 |
if(media != null){ |
|
239 |
// FIXME use marker type to tag the MediaSpecimenReference and make sure that there is always only one. |
|
240 |
if(!CollectionUtils.isEmpty(media.getSources())){ |
|
241 |
source = media.getSources().iterator().next(); |
|
242 |
} |
|
243 |
} |
|
244 |
return source; |
|
245 |
} |
|
246 |
|
|
247 |
/** |
|
248 |
* |
|
249 |
*/ |
|
250 |
private MediaRepresentationPart findMediaRepresentationPart() { |
|
251 |
|
|
252 |
Media media = findMediaSpecimen().getMediaSpecimen(); |
|
253 |
if(media != null){ |
|
254 |
if(!CollectionUtils.isEmpty(media.getRepresentations())){ |
|
255 |
MediaRepresentation repr = media.getRepresentations().iterator().next(); |
|
256 |
if(!CollectionUtils.isEmpty(repr.getParts())) { |
|
257 |
MediaRepresentationPart part = repr.getParts().iterator().next(); |
|
258 |
return part; |
|
259 |
} |
|
260 |
} |
|
261 |
} |
|
262 |
return null; |
|
263 |
} |
|
264 |
|
|
265 |
private MediaRepresentationPart findOrMakeMediaRepresentationPart() { |
|
266 |
|
|
267 |
if(findMediaSpecimen().getMediaSpecimen() == null){ |
|
268 |
findMediaSpecimen().setMediaSpecimen(Media.NewInstance()); |
|
269 |
} |
|
270 |
Media media = findMediaSpecimen().getMediaSpecimen(); |
|
271 |
if(CollectionUtils.isEmpty(media.getRepresentations())){ |
|
272 |
media.addRepresentation(MediaRepresentation.NewInstance()); |
|
273 |
} |
|
274 |
MediaRepresentation repr = media.getRepresentations().iterator().next(); |
|
275 |
if(CollectionUtils.isEmpty(repr.getParts())) { |
|
276 |
repr.addRepresentationPart(MediaRepresentationPart.NewInstance(null, null)); |
|
277 |
} |
|
278 |
MediaRepresentationPart part = repr.getParts().iterator().next(); |
|
279 |
|
|
280 |
return part; |
|
281 |
} |
|
282 |
|
|
283 |
/** |
|
284 |
* @return |
|
285 |
*/ |
|
286 |
private IdentifiableSource findOrMakeMediaSpecimenIdentifieableSource() { |
|
287 |
IdentifiableSource source ; |
|
288 |
Media media = findMediaSpecimen().getMediaSpecimen(); |
|
289 |
if(media == null){ |
|
290 |
findMediaSpecimen().setMediaSpecimen(Media.NewInstance()); |
|
291 |
} |
|
292 |
if(CollectionUtils.isEmpty(media.getSources())){ |
|
293 |
source = IdentifiableSource.NewPrimaryMediaSourceInstance(null, null); |
|
294 |
media.addSource(source); |
|
295 |
} else { |
|
296 |
source = media.getSources().iterator().next(); |
|
297 |
} |
|
298 |
return source; |
|
299 |
} |
|
300 |
|
|
301 |
/** |
|
302 |
* @return |
|
303 |
*/ |
|
304 |
public boolean checkMediaSpecimen() { |
|
305 |
return findMediaSpecimen() != null; |
|
306 |
} |
|
307 |
|
|
308 |
/** |
|
309 |
* @return |
|
310 |
*/ |
|
311 |
private MediaSpecimen findMediaSpecimen() { |
|
312 |
DerivedUnit sp = std.getTypeSpecimen(); |
|
313 |
if(MediaSpecimen.class.isAssignableFrom(sp.getClass())){ |
|
314 |
return (MediaSpecimen) sp; |
|
315 |
} |
|
316 |
return null; |
|
317 |
} |
|
318 |
|
|
319 |
} |
src/main/java/eu/etaxonomy/cdm/vaadin/model/registration/SpecimenTypeDesignationWorkingSetDTO.java | ||
---|---|---|
8 | 8 |
*/ |
9 | 9 |
package eu.etaxonomy.cdm.vaadin.model.registration; |
10 | 10 |
|
11 |
import java.util.ArrayList; |
|
11 | 12 |
import java.util.List; |
12 | 13 |
import java.util.Set; |
13 | 14 |
|
... | ... | |
36 | 37 |
|
37 | 38 |
List<SpecimenTypeDesignation> specimenTypeDesignations; |
38 | 39 |
|
40 |
List<SpecimenTypeDesignationDTO> specimenTypeDesignationsDTOs = new ArrayList<>(); |
|
41 |
|
|
39 | 42 |
VersionableEntity owner; |
40 | 43 |
|
41 | 44 |
/** |
... | ... | |
53 | 56 |
} |
54 | 57 |
} |
55 | 58 |
this.specimenTypeDesignations = specimenTypeDesignations; |
59 |
specimenTypeDesignations.forEach(std -> specimenTypeDesignationsDTOs.add(new SpecimenTypeDesignationDTO(std))); |
|
56 | 60 |
} |
57 | 61 |
|
58 | 62 |
/** |
... | ... | |
80 | 84 |
return specimenTypeDesignations; |
81 | 85 |
} |
82 | 86 |
|
87 |
public List<SpecimenTypeDesignationDTO> getSpecimenTypeDesignationDTOs(){ |
|
88 |
return specimenTypeDesignationsDTOs; |
|
89 |
} |
|
90 |
|
|
83 | 91 |
/** |
84 | 92 |
* The IdentifiableEntity which contains the DerivedUnit in this working set. |
85 | 93 |
* |
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 com.vaadin.server.Sizeable.Unit; |
|
12 |
import com.vaadin.ui.Component; |
|
13 |
import com.vaadin.ui.ListSelect; |
|
14 |
import com.vaadin.ui.TextField; |
|
15 |
|
|
16 |
import eu.etaxonomy.cdm.model.reference.Reference; |
|
17 |
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox; |
|
18 |
|
|
19 |
/** |
|
20 |
* SpecimenTypeDesignationDTORow needs to be instantiated by a EditorInstantiator which can only be provided by the presenter |
|
21 |
* {@link SpecimenTypeDesignationWorkingsetEditorPresenter#handleViewEntered()} |
|
22 |
* |
|
23 |
* @author a.kohlbecker |
|
24 |
* @since Jun 22, 2017 |
|
25 |
* |
|
26 |
*/ |
|
27 |
public class SpecimenTypeDesignationDTORow { |
|
28 |
|
|
29 |
/* CONVENTION! |
|
30 |
* |
|
31 |
* The fieldname must match the properties of the SpecimenTypeDesignationDTO |
|
32 |
*/ |
|
33 |
ListSelect derivationEventType = new ListSelect(); // "Kind of unit"); |
|
34 |
ListSelect typeStatus = new ListSelect(); // "Kind of unit"); |
|
35 |
ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection> collection = |
|
36 |
new ToOneRelatedEntityCombobox<eu.etaxonomy.cdm.model.occurrence.Collection>(null, eu.etaxonomy.cdm.model.occurrence.Collection.class); |
|
37 |
TextField accessionNumber = new TextField(); // "Accession number"); |
|
38 |
TextField mediaUri = new TextField(); // "Image URI"); |
|
39 |
ToOneRelatedEntityCombobox<Reference> mediaSpecimenReference = |
|
40 |
new ToOneRelatedEntityCombobox<Reference>(null, Reference.class); |
|
41 |
TextField mediaSpecimenReferenceDetail = new TextField(); //"Image reference detail"); |
|
42 |
|
|
43 |
public SpecimenTypeDesignationDTORow(){ |
|
44 |
derivationEventType.setRows(1); |
|
45 |
typeStatus.setRows(1); |
|
46 |
accessionNumber.setWidth(100, Unit.PIXELS); |
|
47 |
collection.setWidth(150, Unit.PIXELS); |
|
48 |
mediaUri.setWidth(150, Unit.PIXELS); |
|
49 |
mediaSpecimenReference.setWidth(200, Unit.PIXELS); |
|
50 |
mediaSpecimenReferenceDetail.setWidth(200, Unit.PIXELS); |
|
51 |
} |
|
52 |
|
|
53 |
/** |
|
54 |
* @return |
|
55 |
*/ |
|
56 |
public Component[] components() { |
|
57 |
return new Component[]{ |
|
58 |
derivationEventType, typeStatus, |
|
59 |
collection, accessionNumber, |
|
60 |
mediaUri, mediaSpecimenReference, |
|
61 |
mediaSpecimenReferenceDetail, mediaSpecimenReferenceDetail |
|
62 |
}; |
|
63 |
} |
|
64 |
} |
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/SpecimenTypeDesignationWorkingsetEditorPresenter.java | ||
---|---|---|
9 | 9 |
package eu.etaxonomy.cdm.vaadin.view.name; |
10 | 10 |
|
11 | 11 |
import java.util.Set; |
12 |
import java.util.UUID; |
|
12 | 13 |
|
13 | 14 |
import org.hibernate.Session; |
15 |
import org.vaadin.viritin.fields.AbstractElementCollection; |
|
14 | 16 |
|
17 |
import eu.etaxonomy.cdm.model.common.TermType; |
|
15 | 18 |
import eu.etaxonomy.cdm.model.common.VersionableEntity; |
16 | 19 |
import eu.etaxonomy.cdm.model.location.Country; |
17 | 20 |
import eu.etaxonomy.cdm.model.name.Registration; |
18 | 21 |
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation; |
19 | 22 |
import eu.etaxonomy.cdm.model.name.TypeDesignationBase; |
23 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
|
20 | 24 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent; |
21 | 25 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType; |
22 | 26 |
import eu.etaxonomy.cdm.model.occurrence.FieldUnit; |
23 | 27 |
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent; |
28 |
import eu.etaxonomy.cdm.model.reference.Reference; |
|
29 |
import eu.etaxonomy.cdm.service.CdmFilterablePagingProvider; |
|
24 | 30 |
import eu.etaxonomy.cdm.vaadin.component.SelectFieldFactory; |
25 | 31 |
import eu.etaxonomy.cdm.vaadin.model.TypedEntityReference; |
32 |
import eu.etaxonomy.cdm.vaadin.model.registration.DerivationEventTypes; |
|
26 | 33 |
import eu.etaxonomy.cdm.vaadin.model.registration.SpecimenTypeDesignationWorkingSetDTO; |
34 |
import eu.etaxonomy.cdm.vaadin.util.CdmTitleCacheCaptionGenerator; |
|
27 | 35 |
import eu.etaxonomy.cdm.vaadin.view.registration.RegistrationDTO; |
28 | 36 |
import eu.etaxonomy.vaadin.mvp.AbstractEditorPresenter; |
29 |
|
|
30 | 37 |
/** |
31 | 38 |
* SpecimenTypeDesignationWorkingsetPopupEditorView implementation must override the showInEditor() method, |
32 | 39 |
* see {@link #prepareAsFieldGroupDataSource()} for details. |
... | ... | |
44 | 51 |
/** |
45 | 52 |
* {@inheritDoc} |
46 | 53 |
*/ |
54 |
@SuppressWarnings("serial") |
|
47 | 55 |
@Override |
48 | 56 |
public void handleViewEntered() { |
57 |
|
|
49 | 58 |
SelectFieldFactory selectFactory = new SelectFieldFactory(getRepo()); |
50 | 59 |
getView().getCountrySelectField().setContainerDataSource(selectFactory.buildBeanItemContainer(Country.uuidCountryVocabulary)); |
60 |
|
|
61 |
getView().getTypeDesignationsCollectionField().setEditorInstantiator(new AbstractElementCollection.Instantiator<SpecimenTypeDesignationDTORow>() { |
|
62 |
|
|
63 |
CdmFilterablePagingProvider<Collection> collectionPagingProvider = new CdmFilterablePagingProvider<Collection>(getRepo().getCollectionService()); |
|
64 |
|
|
65 |
CdmFilterablePagingProvider<Reference> referencePagingProvider = new CdmFilterablePagingProvider<Reference>(getRepo().getReferenceService()); |
|
66 |
|
|
67 |
@Override |
|
68 |
public SpecimenTypeDesignationDTORow create() { |
|
69 |
SpecimenTypeDesignationDTORow row = new SpecimenTypeDesignationDTORow(); |
|
70 |
|
|
71 |
row.typeStatus.setContainerDataSource(selectFactory.buildBeanItemContainer(TermType.SpecimenTypeDesignationStatus)); |
|
72 |
row.derivationEventType.setContainerDataSource(selectFactory.buildTermItemContainer(new UUID[]{ |
|
73 |
DerivationEventType.GATHERING_IN_SITU().getUuid(), |
|
74 |
DerivationEventTypes.UNPUBLISHED_IMAGE().getUuid(), |
|
75 |
DerivationEventTypes.PUBLISHED_IMAGE().getUuid(), |
|
76 |
DerivationEventTypes.CULTURE_METABOLIC_INACTIVE().getUuid() |
|
77 |
})); |
|
78 |
|
|
79 |
row.collection.loadFrom(collectionPagingProvider, collectionPagingProvider, collectionPagingProvider.getPageSize()); |
|
80 |
row.collection.getSelect().setCaptionGenerator(new CdmTitleCacheCaptionGenerator<Collection>()); |
|
81 |
|
|
82 |
row.mediaSpecimenReference.loadFrom(referencePagingProvider, referencePagingProvider, collectionPagingProvider.getPageSize()); |
|
83 |
row.mediaSpecimenReference.getSelect().setCaptionGenerator(new CdmTitleCacheCaptionGenerator<Reference>()); |
|
84 |
|
|
85 |
getView().applyDefaultComponentStyle(row.components()); |
|
86 |
return row; |
|
87 |
} |
|
88 |
|
|
89 |
}); |
|
51 | 90 |
} |
52 | 91 |
|
53 | 92 |
/** |
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/SpecimenTypeDesignationWorkingsetPopupEditor.java | ||
---|---|---|
11 | 11 |
import java.util.Collection; |
12 | 12 |
|
13 | 13 |
import org.springframework.security.core.GrantedAuthority; |
14 |
import org.vaadin.viritin.fields.ElementCollectionField; |
|
14 | 15 |
|
15 | 16 |
import com.vaadin.data.validator.DoubleRangeValidator; |
16 | 17 |
import com.vaadin.ui.AbstractSelect.ItemCaptionMode; |
18 |
import com.vaadin.ui.Component; |
|
17 | 19 |
import com.vaadin.ui.GridLayout; |
18 | 20 |
import com.vaadin.ui.ListSelect; |
21 |
import com.vaadin.ui.Panel; |
|
19 | 22 |
import com.vaadin.ui.TextArea; |
20 | 23 |
import com.vaadin.ui.TextField; |
21 | 24 |
|
... | ... | |
23 | 26 |
import eu.etaxonomy.cdm.vaadin.component.common.GeoLocationField; |
24 | 27 |
import eu.etaxonomy.cdm.vaadin.component.common.MinMaxTextField; |
25 | 28 |
import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField; |
29 |
import eu.etaxonomy.cdm.vaadin.model.registration.SpecimenTypeDesignationDTO; |
|
26 | 30 |
import eu.etaxonomy.cdm.vaadin.model.registration.SpecimenTypeDesignationWorkingSetDTO; |
27 | 31 |
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView; |
28 | 32 |
import eu.etaxonomy.vaadin.mvp.AbstractPopupEditor; |
... | ... | |
47 | 51 |
} |
48 | 52 |
|
49 | 53 |
private static final long serialVersionUID = 5418275817834009509L; |
54 |
|
|
50 | 55 |
private ListSelect countrySelectField; |
51 | 56 |
|
57 |
private ElementCollectionField<SpecimenTypeDesignationDTO> typeDesignationsCollectionField; |
|
52 | 58 |
|
53 | 59 |
/** |
54 | 60 |
* @return the countrySelectField |
... | ... | |
68 | 74 |
grid.setSpacing(true); |
69 | 75 |
grid.setMargin(true); |
70 | 76 |
grid.setColumns(3); |
71 |
grid.setRows(8);
|
|
72 |
//grid.setWidth("600px");
|
|
77 |
grid.setRows(9);
|
|
78 |
grid.setWidth("1200px");
|
|
73 | 79 |
|
74 | 80 |
//TODO typifyingAuthors |
75 | 81 |
|
... | ... | |
135 | 141 |
PartialDateField collectionDateField = new PartialDateField("Collection date"); |
136 | 142 |
addField(collectionDateField, "gatheringDate", 0, row); |
137 | 143 |
TextField fieldNumberField = addTextField("Field number", "fieldNumber", 2, row); |
144 |
|
|
145 |
row++; |
|
146 |
|
|
147 |
// FIXME: can we use the Grid instaed? |
|
148 |
typeDesignationsCollectionField = new ElementCollectionField<>( |
|
149 |
SpecimenTypeDesignationDTO.class, |
|
150 |
SpecimenTypeDesignationDTORow.class |
|
151 |
); |
|
152 |
typeDesignationsCollectionField.withCaption("Types"); |
|
153 |
typeDesignationsCollectionField.getLayout().setSpacing(false); |
|
154 |
typeDesignationsCollectionField.getLayout().setColumns(3); |
|
155 |
|
|
156 |
typeDesignationsCollectionField.setPropertyHeader("accessionNumber", "Access. num."); |
|
157 |
typeDesignationsCollectionField.setPropertyHeader("mediaSpecimenReference", "Image reference"); |
|
158 |
typeDesignationsCollectionField.setPropertyHeader("mediaSpecimenReferenceDetail", "Reference detail"); |
|
159 |
|
|
160 |
// typeDesignationsCollectionField.getLayout().setMargin(false); |
|
161 |
// typeDesignationsCollectionField.addStyleName("composite-field-wrapper"); |
|
162 |
// addField(typeDesignationsCollectionField, "specimenTypeDesignationDTOs", 0, row, 2, row); |
|
163 |
|
|
164 |
Panel scrollPanel = new Panel(typeDesignationsCollectionField.getLayout()); |
|
165 |
scrollPanel.setCaption("Types"); |
|
166 |
scrollPanel.setWidth(800, Unit.PIXELS); |
|
167 |
|
|
168 |
bindField(typeDesignationsCollectionField, "specimenTypeDesignationDTOs"); |
|
169 |
addComponent(scrollPanel, 0, row, 2, row); |
|
170 |
|
|
138 | 171 |
} |
139 | 172 |
|
140 | 173 |
|
... | ... | |
187 | 220 |
} |
188 | 221 |
|
189 | 222 |
|
223 |
// ------- SpecimenTypeDesignationWorkingsetPopupEditorView methods ---- // |
|
224 |
@Override |
|
225 |
public ElementCollectionField<SpecimenTypeDesignationDTO> getTypeDesignationsCollectionField() { |
|
226 |
return typeDesignationsCollectionField; |
|
227 |
} |
|
228 |
|
|
229 |
@Override |
|
230 |
public void applyDefaultComponentStyle(Component ... components){ |
|
231 |
for(int i = 0; i <components.length; i++){ |
|
232 |
components[i].setStyleName(getDefaultComponentStyles()); |
|
233 |
} |
|
234 |
} |
|
235 |
|
|
236 |
|
|
237 |
|
|
190 | 238 |
|
191 | 239 |
} |
src/main/java/eu/etaxonomy/cdm/vaadin/view/name/SpecimenTypeDesignationWorkingsetPopupEditorView.java | ||
---|---|---|
8 | 8 |
*/ |
9 | 9 |
package eu.etaxonomy.cdm.vaadin.view.name; |
10 | 10 |
|
11 |
import org.vaadin.viritin.fields.ElementCollectionField; |
|
12 |
|
|
13 |
import com.vaadin.ui.Component; |
|
11 | 14 |
import com.vaadin.ui.ListSelect; |
12 | 15 |
|
16 |
import eu.etaxonomy.cdm.vaadin.model.registration.SpecimenTypeDesignationDTO; |
|
13 | 17 |
import eu.etaxonomy.vaadin.mvp.ApplicationView; |
14 | 18 |
|
15 | 19 |
/** |
... | ... | |
20 | 24 |
public interface SpecimenTypeDesignationWorkingsetPopupEditorView extends ApplicationView<SpecimenTypeDesignationWorkingsetEditorPresenter> { |
21 | 25 |
|
22 | 26 |
public ListSelect getCountrySelectField(); |
27 |
|
|
28 |
ElementCollectionField<SpecimenTypeDesignationDTO> getTypeDesignationsCollectionField(); |
|
29 |
|
|
30 |
void applyDefaultComponentStyle(Component ... components); |
|
23 | 31 |
} |
src/main/webapp/VAADIN/themes/edit-valo/custom-fields.scss | ||
---|---|---|
60 | 60 |
|
61 | 61 |
body .edit-valo { // increasing specifity to allow overriding the valo default field themes |
62 | 62 |
|
63 |
.composite-field-wrapper { |
|
64 |
@include composite-field-wrapper; |
|
65 |
} |
|
66 |
|
|
63 | 67 |
// ------------ TimePeriodField ------------ // |
64 | 68 |
.v-time-period-field { |
65 | 69 |
.margin-wrapper { |
Also available in: Unified diff
ref #6724 SpecimenTypeDesignationWorkingsetEditor with Types sub section for contained SpecimenTypeDesignation