Project

General

Profile

Download (8.87 KB) Statistics
| Branch: | Tag: | Revision:
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.Collection;
12
import java.util.EnumSet;
13

    
14
import org.springframework.security.core.GrantedAuthority;
15
import org.vaadin.viritin.fields.ElementCollectionField;
16

    
17
import com.vaadin.data.validator.DoubleRangeValidator;
18
import com.vaadin.ui.AbstractSelect.ItemCaptionMode;
19
import com.vaadin.ui.Component;
20
import com.vaadin.ui.GridLayout;
21
import com.vaadin.ui.ListSelect;
22
import com.vaadin.ui.Panel;
23
import com.vaadin.ui.TextArea;
24
import com.vaadin.ui.TextField;
25

    
26
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
27
import eu.etaxonomy.cdm.vaadin.component.PartialDateField;
28
import eu.etaxonomy.cdm.vaadin.component.common.GeoLocationField;
29
import eu.etaxonomy.cdm.vaadin.component.common.MinMaxTextField;
30
import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
31
import eu.etaxonomy.cdm.vaadin.model.registration.SpecimenTypeDesignationDTO;
32
import eu.etaxonomy.cdm.vaadin.model.registration.SpecimenTypeDesignationWorkingSetDTO;
33
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
34
import eu.etaxonomy.cdm.vaadin.view.PerEntityAuthorityGrantingEditor;
35
import eu.etaxonomy.vaadin.mvp.AbstractPopupEditor;
36

    
37
/**
38
 * @author a.kohlbecker
39
 * @since May 15, 2017
40
 *
41
 */
42
public class SpecimenTypeDesignationWorkingsetPopupEditor
43
    extends AbstractPopupEditor<SpecimenTypeDesignationWorkingSetDTO, SpecimenTypeDesignationWorkingsetEditorPresenter>
44
    implements SpecimenTypeDesignationWorkingsetPopupEditorView, AccessRestrictedView, PerEntityAuthorityGrantingEditor {
45
    /**
46
     * @param layout
47
     * @param dtoType
48
     */
49
    public SpecimenTypeDesignationWorkingsetPopupEditor() {
50
        super(new GridLayout(), SpecimenTypeDesignationWorkingSetDTO.class);
51
        GridLayout grid = (GridLayout) getFieldLayout();
52
        grid.setMargin(true);
53
        grid.setSpacing(true);
54
    }
55

    
56
    private static final long serialVersionUID = 5418275817834009509L;
57

    
58
    private ListSelect countrySelectField;
59

    
60
    private ElementCollectionField<SpecimenTypeDesignationDTO> typeDesignationsCollectionField;
61

    
62
    private EnumSet<CRUD> crud;
63

    
64
    /**
65
     * @return the countrySelectField
66
     */
67
    @Override
68
    public ListSelect getCountrySelectField() {
69
        return countrySelectField;
70
    }
71

    
72
    /**
73
     * {@inheritDoc}
74
     */
75
    @Override
76
    protected void initContent() {
77

    
78
        GridLayout grid = (GridLayout)getFieldLayout();
79
        grid.setSpacing(true);
80
        grid.setMargin(true);
81
        grid.setColumns(3);
82
        grid.setRows(9);
83

    
84
        //TODO typifyingAuthors
85

    
86
        // FieldUnit + GatheringEvent
87

    
88
        int row = 0;
89
        countrySelectField = new ListSelect("Country");
90
        addField(countrySelectField, "country", 1, row , 2, row);
91
        countrySelectField.setWidth("100%");
92
        countrySelectField.setItemCaptionMode(ItemCaptionMode.PROPERTY);
93
        countrySelectField.setItemCaptionPropertyId("label");
94
        countrySelectField.setRows(1);
95

    
96
        row++;
97
        TextArea localityField = new TextArea("Locality");
98
        addField(localityField, "locality", 0, row , 2, row);
99
        localityField.setWidth("100%");
100
        // NOTE: setRows and SetCold breaks he width setting,
101
        //        see https://github.com/vaadin/framework/issues/3617
102

    
103
        row++;
104
        GeoLocationField exactLocation = new GeoLocationField("Geo location");
105
        addField(exactLocation, "exactLocation", 0, row, 2, row);
106
        exactLocation.setWidth("100%");
107

    
108
        row++;
109
        MinMaxTextField absElevationMinMax = new MinMaxTextField("Altitude", "m");
110
        absElevationMinMax.setWidth("100%");
111
        absElevationMinMax.addSubComponentsStyleName(getDefaultComponentStyles());
112
        grid.addComponent(absElevationMinMax, 0, row, 2, row);
113

    
114
        bindField(absElevationMinMax.getMinField(), "absoluteElevation");
115
        bindField(absElevationMinMax.getMaxField(), "absoluteElevationMax");
116
        bindField(absElevationMinMax.getTextField(), "absoluteElevationText");
117

    
118
        row++;
119
        MinMaxTextField distanceToWaterSurfaceMinMax = new MinMaxTextField("Distance to water surface", "m");
120
        distanceToWaterSurfaceMinMax.setWidth("100%");
121
        distanceToWaterSurfaceMinMax.addSubComponentsStyleName(getDefaultComponentStyles());
122
        grid.addComponent(distanceToWaterSurfaceMinMax, 0, row, 2, row);
123

    
124
        bindField(distanceToWaterSurfaceMinMax.getMinField(), "distanceToWaterSurface");
125
        bindField(distanceToWaterSurfaceMinMax.getMaxField(), "distanceToWaterSurfaceMax");
126
        bindField(distanceToWaterSurfaceMinMax.getTextField(), "distanceToWaterSurfaceText");
127
        distanceToWaterSurfaceMinMax.getMaxField().addValidator(new DoubleRangeValidator("Negative values are not allowed here.", 0.0, Double.MAX_VALUE));
128
        distanceToWaterSurfaceMinMax.getMinField().addValidator(new DoubleRangeValidator("Negative values are not allowed here.", 0.0, Double.MAX_VALUE));
129

    
130
        row++;
131
        MinMaxTextField distanceToGroundMinMax = new MinMaxTextField("Distance to substrate", "m");
132
        distanceToGroundMinMax.setWidth("100%");
133
        distanceToGroundMinMax.addSubComponentsStyleName(getDefaultComponentStyles());
134
        grid.addComponent(distanceToGroundMinMax, 0, row, 2, row);
135

    
136
        bindField(distanceToGroundMinMax.getMinField(), "distanceToGround");
137
        bindField(distanceToGroundMinMax.getMaxField(), "distanceToGroundMax");
138
        bindField(distanceToGroundMinMax.getTextField(), "distanceToGroundText");
139

    
140
        row++;
141
        TeamOrPersonField collectorField = new TeamOrPersonField("Collector");
142
        addField(collectorField, "collector", 0, row, 2, row);
143

    
144
        row++;
145
        PartialDateField collectionDateField = new PartialDateField("Collection date");
146
        collectionDateField.setInputPrompt("dd.mm.yyyy");
147
        addField(collectionDateField, "gatheringDate", 0, row);
148
        TextField fieldNumberField = addTextField("Field number", "fieldNumber", 2, row);
149

    
150
        row++;
151

    
152
        // FIXME: can we use the Grid instead?
153
        typeDesignationsCollectionField = new ElementCollectionField<>(
154
                SpecimenTypeDesignationDTO.class,
155
                //getPresenter().specimenTypeDesignationDTOInstantiator(getBean());
156
                SpecimenTypeDesignationDTORow.class
157
                );
158
        typeDesignationsCollectionField.withCaption("Types");
159
        typeDesignationsCollectionField.getLayout().setSpacing(false);
160
        typeDesignationsCollectionField.getLayout().setColumns(3);
161

    
162
        typeDesignationsCollectionField.setPropertyHeader("accessionNumber", "Access. num.");
163
        typeDesignationsCollectionField.setPropertyHeader("mediaSpecimenReference", "Image reference");
164
        typeDesignationsCollectionField.setPropertyHeader("mediaSpecimenReferenceDetail", "Reference detail");
165

    
166
        // typeDesignationsCollectionField.getLayout().setMargin(false);
167
        // typeDesignationsCollectionField.addStyleName("composite-field-wrapper");
168
        // addField(typeDesignationsCollectionField, "specimenTypeDesignationDTOs", 0, row, 2, row);
169

    
170
        Panel scrollPanel = new Panel(typeDesignationsCollectionField.getLayout());
171
        scrollPanel.setCaption("Types");
172
        scrollPanel.setWidth(800, Unit.PIXELS);
173

    
174
        bindField(typeDesignationsCollectionField, "specimenTypeDesignationDTOs");
175
        addComponent(scrollPanel, 0, row, 2, row);
176

    
177
     }
178

    
179

    
180
    /**
181
     * {@inheritDoc}
182
     */
183
    @Override
184
    public String getWindowCaption() {
185
        return "Specimen typedesignations editor";
186
    }
187

    
188
    /**
189
     * {@inheritDoc}
190
     */
191
    @Override
192
    public void focusFirst() {
193
        // none
194
    }
195

    
196
    /**
197
     * {@inheritDoc}
198
     */
199
    @Override
200
    protected String getDefaultComponentStyles() {
201
        return "tiny";
202
    }
203

    
204
    /**
205
     * {@inheritDoc}
206
     */
207
    @Override
208
    public boolean allowAnonymousAccess() {
209
        return false;
210
    }
211

    
212
    /**
213
     * {@inheritDoc}
214
     */
215
    @Override
216
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
217
        return null;
218
    }
219

    
220
    /**
221
     * {@inheritDoc}
222
     */
223
    @Override
224
    public boolean isResizable() {
225
        return true;
226
    }
227

    
228

    
229
    // ------- SpecimenTypeDesignationWorkingsetPopupEditorView methods ---- //
230
    @Override
231
    public ElementCollectionField<SpecimenTypeDesignationDTO> getTypeDesignationsCollectionField() {
232
        return typeDesignationsCollectionField;
233
    }
234

    
235
    @Override
236
    public void applyDefaultComponentStyle(Component ... components){
237
        for(int i = 0; i <components.length; i++){
238
            components[i].setStyleName(getDefaultComponentStyles());
239
        }
240
    }
241

    
242
    /**
243
     * {@inheritDoc}
244
     */
245
    @Override
246
    public void grantToCurrentUser(EnumSet<CRUD> crud) {
247
        getPresenter().setGrantsForCurrentUser(crud);
248

    
249
    }
250

    
251

    
252
}
(4-4/9)