Project

General

Profile

Download (8.42 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.reference;
10

    
11
import java.util.Collection;
12
import java.util.EnumSet;
13

    
14
import org.springframework.security.core.GrantedAuthority;
15

    
16
import com.vaadin.ui.Alignment;
17
import com.vaadin.ui.GridLayout;
18
import com.vaadin.ui.ListSelect;
19
import com.vaadin.ui.TextField;
20

    
21
import eu.etaxonomy.cdm.model.reference.Reference;
22
import eu.etaxonomy.cdm.model.reference.ReferenceType;
23
import eu.etaxonomy.cdm.vaadin.component.TextFieldNFix;
24
import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
25
import eu.etaxonomy.cdm.vaadin.component.common.TimePeriodField;
26
import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction;
27
import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
28
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
29
import eu.etaxonomy.cdm.vaadin.util.converter.DoiConverter;
30
import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter;
31
import eu.etaxonomy.vaadin.component.SwitchableTextField;
32
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
33
import eu.etaxonomy.vaadin.mvp.AbstractCdmPopupEditor;
34

    
35
/**
36
 * @author a.kohlbecker
37
 * @since Apr 4, 2017
38
 *
39
 */
40
public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, ReferenceEditorPresenter> implements ReferencePopupEditorView, AccessRestrictedView {
41

    
42
    private static final long serialVersionUID = -4347633563800758815L;
43

    
44
    private TextField titleField;
45

    
46
    private final static int GRID_COLS = 4;
47

    
48
    private final static int GRID_ROWS = 10;
49

    
50
    private ListSelect typeSelect;
51

    
52
    private ToOneRelatedEntityCombobox<Reference> inReferenceCombobox;
53

    
54
    private TeamOrPersonField authorshipField;
55

    
56
    private EnumSet<ReferenceType> referenceTypes = EnumSet.allOf(ReferenceType.class);
57

    
58
    /**
59
     * @param layout
60
     * @param dtoType
61
     */
62
    public ReferencePopupEditor() {
63
        super(new GridLayout(GRID_COLS, GRID_ROWS), Reference.class);
64
    }
65

    
66
    @Override
67
    protected void initContent() {
68
        GridLayout grid = (GridLayout)getFieldLayout();
69
        grid.setSpacing(true);
70
        grid.setMargin(true);
71

    
72
        /*
73
        "type",
74
        "uri",
75
        "abbrevTitleCache",
76
        "protectedAbbrevTitleCache",
77
        "nomenclaturallyRelevant",
78
        "authorship",
79
        "referenceAbstract",
80
        "title",
81
        "abbrevTitle",
82
        "editor",
83
        "volume",
84
        "pages",
85
        "edition",
86
        "isbn",
87
        "issn",
88
        "doi",
89
        "seriesPart",
90
        "datePublished",
91
        "publisher",
92
        "placePublished",
93
        "institution",
94
        "school",
95
        "organization",
96
        "inReference"
97
         */
98
        int row = 0;
99
        typeSelect = new ListSelect("Reference type");
100
        typeSelect.addItems(referenceTypes);
101
        typeSelect.setNullSelectionAllowed(false);
102
        typeSelect.setRows(1);
103
        typeSelect.addValueChangeListener(e -> updateFieldVisibility((ReferenceType)e.getProperty().getValue()));
104
        addField(typeSelect, "type", 3, row);
105
        grid.setComponentAlignment(typeSelect, Alignment.TOP_RIGHT);
106
        row++;
107
        SwitchableTextField titleCacheField = addSwitchableTextField("Reference cache", "titleCache", "protectedTitleCache", 0, row, GRID_COLS-1, row);
108
        titleCacheField.setWidth(100, Unit.PERCENTAGE);
109
        row++;
110
        SwitchableTextField abbrevTitleCacheField = addSwitchableTextField("Abbrev. cache", "abbrevTitleCache", "protectedAbbrevTitleCache", 0, row, GRID_COLS-1, row);
111
        abbrevTitleCacheField.setWidth(100, Unit.PERCENTAGE);
112
        row++;
113
        titleField = addTextField("Title", "title", 0, row, GRID_COLS-1, row);
114
        titleField.setWidth(100, Unit.PERCENTAGE);
115
        row++;
116
        addTextField("Nomenclatural title", "abbrevTitle", 0, row, GRID_COLS-1, row).setWidth(100, Unit.PERCENTAGE);
117
        row++;
118
        authorshipField = new TeamOrPersonField("Author(s)");
119
        authorshipField.setWidth(100,  Unit.PERCENTAGE);
120
        addField(authorshipField, "authorship", 0, row, 3, row);
121
        row++;
122
        addTextField("Series", "seriesPart", 0, row);
123
        addTextField("Volume", "volume", 1, row);
124
        addTextField("Pages", "pages", 2, row);
125
        addTextField("Editor", "editor", 3, row).setWidth(100, Unit.PERCENTAGE);
126
        row++;
127

    
128
        inReferenceCombobox = new ToOneRelatedEntityCombobox<Reference>("In-reference", Reference.class);
129
        inReferenceCombobox.setWidth(100, Unit.PERCENTAGE);
130
        inReferenceCombobox.addClickListenerAddEntity(e -> getEventBus().publishEvent(
131
                new ReferenceEditorAction(AbstractEditorAction.Action.ADD, null, inReferenceCombobox, this)
132
                ));
133
        inReferenceCombobox.addClickListenerEditEntity(e -> {
134
            if(inReferenceCombobox.getValue() != null){
135
                getEventBus().publishEvent(
136
                    new ReferenceEditorAction(
137
                            AbstractEditorAction.Action.EDIT,
138
                            inReferenceCombobox.getValue().getId(),
139
                            inReferenceCombobox,
140
                            this)
141
                );
142
            }
143
            });
144
        addField(inReferenceCombobox, "inReference", 0, row, 3, row);
145
        row++;
146
        addTextField("Place published", "placePublished", 0, row, 1, row).setWidth(100, Unit.PERCENTAGE);
147
        TextField publisherField = addTextField("Publisher", "publisher", 2, row, 3, row);
148
        publisherField.setWidth(100, Unit.PERCENTAGE);
149
        TimePeriodField timePeriodField = new TimePeriodField("Date published");
150
        addField(timePeriodField, "datePublished");
151
        row++;
152
        addTextField("ISSN", "issn", 0, row);
153
        addTextField("ISBN", "isbn", 1, row);
154
        TextFieldNFix doiField = new TextFieldNFix("DOI");
155
        doiField.setConverter(new DoiConverter());
156
        addField(doiField, "doi", 2, row);
157
        TextFieldNFix uriField = new TextFieldNFix("Uri");
158
        uriField.setConverter(new UriConverter());
159
        addField(uriField, "uri", 3, row);
160

    
161
//        titleField.setRequired(true);
162
//        publisherField.setRequired(true);
163

    
164
        setAdvancedModeEnabled(true);
165
        registerAdvancedModeComponents(titleCacheField, abbrevTitleCacheField);
166
        registerAdvancedModeComponents(authorshipField.getCachFields());
167
        setAdvancedMode(false);
168

    
169
    }
170

    
171
    /**
172
     * @param value
173
     * @return
174
     */
175
    private Object updateFieldVisibility(ReferenceType value) {
176
        getField("volume").setVisible(value.isVolumeReference());
177

    
178
        getField("placePublished").setVisible(value.isPublication());
179
        getField("publisher").setVisible(value.isPublication());
180

    
181
        getField("editor").setVisible(value.isPrintedUnit());
182
        getField("seriesPart").setVisible(value.isPrintedUnit());
183

    
184
        getField("inReference").setVisible(value.isPrintedUnit() || value.isSection());
185
        getField("pages").setVisible(value.isSection());
186

    
187
        return null;
188
    }
189

    
190
    /**
191
     * {@inheritDoc}
192
     */
193
    @Override
194
    public String getWindowCaption() {
195
        return "Reference editor";
196
    }
197

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

    
206
    /**
207
     * {@inheritDoc}
208
     */
209
    @Override
210
    public void focusFirst() {
211
        titleField.focus();
212
    }
213

    
214
    /**
215
     * {@inheritDoc}
216
     */
217
    @Override
218
    public boolean isResizable() {
219
        return false;
220
    }
221

    
222
    /**
223
     * {@inheritDoc}
224
     */
225
    @Override
226
    public boolean allowAnonymousAccess() {
227
        return false;
228
    }
229

    
230
    /**
231
     * {@inheritDoc}
232
     */
233
    @Override
234
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
235
        return null;
236
    }
237

    
238
    @Override
239
    public ListSelect getTypeSelect() {
240
        return typeSelect;
241
    }
242

    
243
    /**
244
     * {@inheritDoc}
245
     */
246
    @Override
247
    public ToOneRelatedEntityCombobox<Reference> getInReferenceCombobox() {
248
        return inReferenceCombobox;
249
    }
250

    
251
    /**
252
     * {@inheritDoc}
253
     */
254
    @Override
255
    public TeamOrPersonField getAuthorshipField() {
256
        return authorshipField;
257
    }
258

    
259
    public void withReferenceTypes(EnumSet<ReferenceType> types){
260
        this.referenceTypes = types;
261
        if(typeSelect != null){
262
            typeSelect.removeAllItems();
263
            typeSelect.addItems(referenceTypes);
264
        }
265
    }
266

    
267

    
268
}
(2-2/3)