Project

General

Profile

Download (9.33 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2018 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 org.springframework.context.annotation.Scope;
12

    
13
import com.vaadin.spring.annotation.SpringComponent;
14
import com.vaadin.ui.Alignment;
15
import com.vaadin.ui.CheckBox;
16
import com.vaadin.ui.GridLayout;
17
import com.vaadin.ui.NativeSelect;
18
import com.vaadin.ui.TextField;
19

    
20
import eu.etaxonomy.cdm.api.utility.RoleProber;
21
import eu.etaxonomy.cdm.model.common.AnnotationType;
22
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
23
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
24
import eu.etaxonomy.cdm.model.name.TaxonName;
25
import eu.etaxonomy.cdm.model.reference.Reference;
26
import eu.etaxonomy.cdm.service.UserHelperAccess;
27
import eu.etaxonomy.cdm.vaadin.component.common.FilterableAnnotationsField;
28
import eu.etaxonomy.cdm.vaadin.event.TaxonNameEditorAction;
29
import eu.etaxonomy.cdm.vaadin.permission.CdmEditDeletePermissionTester;
30
import eu.etaxonomy.cdm.vaadin.permission.RolesAndPermissions;
31
import eu.etaxonomy.cdm.vaadin.ui.RegistrationUIDefaults;
32
import eu.etaxonomy.cdm.vaadin.util.converter.SetToListConverter;
33
import eu.etaxonomy.vaadin.component.ToManyRelatedEntitiesComboboxSelect;
34
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
35
import eu.etaxonomy.vaadin.event.EditorActionType;
36
import eu.etaxonomy.vaadin.mvp.AbstractCdmPopupEditor;
37

    
38
/**
39
 * @author a.kohlbecker
40
 * @since Jan 26, 2018
41
 */
42
@SpringComponent
43
@Scope("prototype")
44
public class NameTypeDesignationPopupEditor extends AbstractCdmPopupEditor<NameTypeDesignation, NameTypeDesignationPresenter>
45
    implements NameTypeDesignationEditorView {
46

    
47
    private static final long serialVersionUID = 8233876984579344340L;
48

    
49
    private static final int GRID_COLS = 4;
50
    private static final int GRID_ROWS = 7;
51

    
52
    private CheckBox conservedTypeField;
53
    private CheckBox rejectedTypeField;
54
    private CheckBox notDesignatedField;
55

    
56
    private ToOneRelatedEntityCombobox<TaxonName> typeNameField;
57

    
58
    private ToManyRelatedEntitiesComboboxSelect<TaxonName> typifiedNamesComboboxSelect;
59

    
60
    private NativeSelect typeStatusSelect;
61

    
62
    private ToOneRelatedEntityCombobox<Reference> designationReferenceCombobox;
63

    
64
    private TextField designationReferenceDetailField;
65

    
66
    private boolean showTypeFlags = true;
67

    
68

    
69
    private FilterableAnnotationsField annotationsListField;
70

    
71
    private AnnotationType[] editableAnotationTypes = RegistrationUIDefaults.EDITABLE_ANOTATION_TYPES;
72

    
73

    
74
    /**
75
     * @param layout
76
     * @param dtoType
77
     */
78
    public NameTypeDesignationPopupEditor() {
79
        super(new GridLayout(GRID_COLS, GRID_ROWS), NameTypeDesignation.class);
80
    }
81

    
82
    /**
83
     * {@inheritDoc}
84
     */
85
    @Override
86
    public String getWindowCaption() {
87
        return "Name type designation editor";
88
    }
89

    
90
    /**
91
     * {@inheritDoc}
92
     */
93
    @Override
94
    public void focusFirst() {
95
        // none
96
    }
97

    
98
    /**
99
     * {@inheritDoc}
100
     */
101
    @Override
102
    protected String getDefaultComponentStyles() {
103
        return "tiny";
104
    }
105

    
106
    /**
107
     * {@inheritDoc}
108
     */
109
    @Override
110
    protected void initContent() {
111
        /*
112
            conservedType : boolean
113
            rejectedType : boolean
114
            typeName : TaxonName
115

    
116
            typifiedNames
117
            notDesignated : boolean
118
            registrations : Set<Registration>
119
            typeStatus : T
120

    
121
            citation : Reference
122
            citationMicroReference : String
123
            originalNameString : String
124
         */
125

    
126
        GridLayout grid = (GridLayout)getFieldLayout();
127
        // grid.setSizeFull();
128
        grid.setSpacing(true);
129
        grid.setColumnExpandRatio(0, 0.25f);
130
        grid.setColumnExpandRatio(1, 0.25f);
131
        grid.setColumnExpandRatio(2, 0.25f);
132
        grid.setColumnExpandRatio(3, 0.25f);
133

    
134
        int row = 0;
135

    
136
        if(showTypeFlags){
137
            conservedTypeField = addCheckBox("Conserved type", "conservedType", 0, row);
138
            rejectedTypeField = addCheckBox("Rejected type", "rejectedType", 1, row);
139
            notDesignatedField = addCheckBox("Not designated", "notDesignated", 2, row);
140
            row++;
141
        }
142

    
143
        typeStatusSelect = new NativeSelect("Type status");
144
        typeStatusSelect.setNullSelectionAllowed(false);
145
        typeStatusSelect.setWidth(100, Unit.PERCENTAGE);
146
        addField(typeStatusSelect, "typeStatus", 0, row, 1, row);
147
        grid.setComponentAlignment(typeStatusSelect, Alignment.TOP_RIGHT);
148
        typeStatusSelect.addValueChangeListener(e -> {
149
            updateDesignationReferenceFields();
150
        });
151

    
152
        row++;
153
        typeNameField = new ToOneRelatedEntityCombobox<TaxonName>("Type name", TaxonName.class);
154
        addField(typeNameField, "typeName", 0, row, 3, row);
155
        typeNameField.addClickListenerAddEntity(e -> getViewEventBus().publish(this,
156
                new TaxonNameEditorAction(
157
                        EditorActionType.ADD,
158
                        e.getButton(),
159
                        typeNameField,
160
                        this))
161
        );
162
        typeNameField.addClickListenerEditEntity(e -> {
163
            if(typeNameField.getValue() != null){
164
                getViewEventBus().publish(this,
165
                    new TaxonNameEditorAction(
166
                            EditorActionType.EDIT,
167
                            typeNameField.getValue().getUuid(),
168
                            e.getButton(),
169
                            typeNameField,
170
                            this)
171
                );
172
            }
173
        });
174

    
175
        row++;
176
        typifiedNamesComboboxSelect = new ToManyRelatedEntitiesComboboxSelect<TaxonName>(TaxonName.class, "Typified names");
177
        typifiedNamesComboboxSelect.setConverter(new SetToListConverter<TaxonName>());
178
        typifiedNamesComboboxSelect.setEditPermissionTester(new CdmEditDeletePermissionTester());
179
        addField(typifiedNamesComboboxSelect, "typifiedNames", 0, row, 3, row);
180
        typifiedNamesComboboxSelect.setReadOnly(false); // FIXME this does not help, see #7389
181

    
182
        row++;
183
        designationReferenceCombobox = new ToOneRelatedEntityCombobox<Reference>("Designation reference", Reference.class);
184
        addField(designationReferenceCombobox, "citation", 0, row, 2, row);
185
        designationReferenceCombobox.setWidth(400, Unit.PIXELS);
186
        designationReferenceDetailField = addTextField("Reference detail", "citationMicroReference", 3, row);
187

    
188
        row++;
189
        annotationsListField = new FilterableAnnotationsField("Editorial notes");
190
        annotationsListField.setWidth(100, Unit.PERCENTAGE);
191
        boolean isCurator = UserHelperAccess.userHelper().userIs(new RoleProber(RolesAndPermissions.ROLE_CURATION));
192
        boolean isAdmin = UserHelperAccess.userHelper().userIsAdmin();
193
        if(isCurator || isAdmin){
194
            annotationsListField.withNewButton(true);
195
        } else {
196
            annotationsListField.setAnnotationTypesVisible(editableAnotationTypes);
197
        }
198
        addField(annotationsListField, "annotations", 0, row, 3, row);
199
    }
200

    
201

    
202

    
203
    @Override
204
    protected void afterItemDataSourceSet() {
205
        super.afterItemDataSourceSet();
206
        updateDesignationReferenceFields();
207
    }
208

    
209
    protected void updateDesignationReferenceFields() {
210
        boolean hasDesignationSource = typeStatusSelect.getValue() != null && ((NameTypeDesignationStatus)typeStatusSelect.getValue()).hasDesignationSource();
211
        designationReferenceDetailField.setVisible(hasDesignationSource);
212
        designationReferenceCombobox.setVisible(hasDesignationSource);
213
        // NOTE: For better usability we only hide these fields here,
214
        // NameTypeDesignationPresenter.preSaveBean(NameTypeDesignation bean) will empty them in needed
215
    }
216

    
217
    /**
218
     * @return the typeNameField
219
     */
220
    @Override
221
    public ToOneRelatedEntityCombobox<TaxonName> getTypeNameField() {
222
        return typeNameField;
223
    }
224

    
225
    /**
226
     * @return the typifiedNamesComboboxSelect
227
     */
228
    @Override
229
    public ToManyRelatedEntitiesComboboxSelect<TaxonName> getTypifiedNamesComboboxSelect() {
230
        return typifiedNamesComboboxSelect;
231
    }
232

    
233
    /**
234
     * @return the typeStatusSelect
235
     */
236
    @Override
237
    public NativeSelect getTypeStatusSelect() {
238
        return typeStatusSelect;
239
    }
240

    
241
    /**
242
     * @return the citationCombobox
243
     */
244
    @Override
245
    public ToOneRelatedEntityCombobox<Reference> getDesignationReferenceCombobox() {
246
        return designationReferenceCombobox;
247
    }
248

    
249

    
250
    /**
251
     * @return the showTypeFlags
252
     */
253
    @Override
254
    public boolean isShowTypeFlags() {
255
        return showTypeFlags;
256
    }
257

    
258
    /**
259
     * @param showTypeFlags the showTypeFlags to set
260
     */
261
    @Override
262
    public void setShowTypeFlags(boolean showTypeFlags) {
263
        this.showTypeFlags = showTypeFlags;
264
    }
265

    
266
    /**
267
     * {@inheritDoc}
268
     */
269
    @Override
270
    public AnnotationType[] getEditableAnotationTypes() {
271
        return editableAnotationTypes;
272
    }
273

    
274
    /**
275
     * {@inheritDoc}
276
     */
277
    @Override
278
    public void setEditableAnotationTypes(AnnotationType... editableAnotationTypes) {
279
        this.editableAnotationTypes = editableAnotationTypes;
280
    }
281

    
282
    /**
283
     * {@inheritDoc}
284
     */
285
    @Override
286
    public FilterableAnnotationsField getAnnotationsField() {
287
        return annotationsListField;
288
    }
289
}
(3-3/15)