Project

General

Profile

« Previous | Next » 

Revision 4a3c0817

Added by Andreas Kohlbecker almost 7 years ago

ref #6724 SpecimenTypeDesignationWorkingsetEditor with Types sub section for contained SpecimenTypeDesignation

View differences:

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()} -&gt; {@link DerivedUnit}</li>
42
 * <li>{@link DerivationEventTypes#CULTURE_METABOLIC_INACTIVE()} -&gt; {@link DerivedUnit}</li>
43
 * <li>{@link DerivationEventTypes#UNPUBLISHED_IMAGE()} -&gt; {@link MediaSpecimen}</li>
44
 * <li>{@link DerivationEventTypes#PUBLISHED_IMAGE()} -&gt; {@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