Project

General

Profile

Download (8.96 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.context.annotation.Scope;
15
import org.springframework.security.core.GrantedAuthority;
16

    
17
import com.vaadin.spring.annotation.SpringComponent;
18
import com.vaadin.ui.Alignment;
19
import com.vaadin.ui.GridLayout;
20
import com.vaadin.ui.ListSelect;
21
import com.vaadin.ui.TextField;
22

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

    
37
/**
38
 * @author a.kohlbecker
39
 * @since Apr 4, 2017
40
 *
41
 */
42
@SpringComponent
43
@Scope("prototype")
44
public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, ReferenceEditorPresenter> implements ReferencePopupEditorView, AccessRestrictedView {
45

    
46
    private static final long serialVersionUID = -4347633563800758815L;
47

    
48
    private TextField titleField;
49

    
50
    private final static int GRID_COLS = 4;
51

    
52
    private final static int GRID_ROWS = 10;
53

    
54
    private ListSelect typeSelect;
55

    
56
    private ToOneRelatedEntityCombobox<Reference> inReferenceCombobox;
57

    
58
    private TeamOrPersonField authorshipField;
59

    
60
    private EnumSet<ReferenceType> referenceTypes = EnumSet.allOf(ReferenceType.class);
61

    
62
    /**
63
     * @param layout
64
     * @param dtoType
65
     */
66
    public ReferencePopupEditor() {
67
        super(new GridLayout(GRID_COLS, GRID_ROWS), Reference.class);
68
    }
69

    
70
    @Override
71
    protected void initContent() {
72
        GridLayout grid = (GridLayout)getFieldLayout();
73
        grid.setSpacing(true);
74
        grid.setMargin(true);
75

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

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

    
165
//        titleField.setRequired(true);
166
//        publisherField.setRequired(true);
167

    
168
        setAdvancedModeEnabled(true);
169
        registerAdvancedModeComponents(titleCacheField, abbrevTitleCacheField);
170
        registerAdvancedModeComponents(authorshipField.getCachFields());
171
        setAdvancedMode(false);
172

    
173
    }
174

    
175
    /**
176
     * @param value
177
     * @return
178
     */
179
    private Object updateFieldVisibility(ReferenceType value) {
180
        getField("volume").setVisible(value.isVolumeReference());
181

    
182
        getField("placePublished").setVisible(value.isPublication());
183
        getField("publisher").setVisible(value.isPublication());
184

    
185
        getField("editor").setVisible(value.isPrintedUnit());
186
        getField("seriesPart").setVisible(value.isPrintedUnit());
187

    
188
        getField("inReference").setVisible(value.isPrintedUnit() || value.isSection());
189
        getField("pages").setVisible(value.isSection());
190

    
191
        EnumSet<ReferenceType> hideNomTitle = EnumSet.of(ReferenceType.Article, ReferenceType.Section, ReferenceType.BookSection, ReferenceType.InProceedings, ReferenceType.PrintSeries);
192
        EnumSet<ReferenceType> hideTitle = EnumSet.of(ReferenceType.Section, ReferenceType.BookSection);
193
        getField("abbrevTitle").setVisible(!hideNomTitle.contains(value));
194
        getField("title").setVisible(!hideTitle.contains(value));
195

    
196
        return null;
197
    }
198

    
199
    /**
200
     * {@inheritDoc}
201
     */
202
    @Override
203
    public String getWindowCaption() {
204
        return "Reference editor";
205
    }
206

    
207
    /**
208
     * {@inheritDoc}
209
     */
210
    @Override
211
    protected String getDefaultComponentStyles() {
212
        return "tiny";
213
    }
214

    
215
    /**
216
     * {@inheritDoc}
217
     */
218
    @Override
219
    public void focusFirst() {
220
        titleField.focus();
221
    }
222

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

    
231
    /**
232
     * {@inheritDoc}
233
     */
234
    @Override
235
    public boolean allowAnonymousAccess() {
236
        return false;
237
    }
238

    
239
    /**
240
     * {@inheritDoc}
241
     */
242
    @Override
243
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
244
        return null;
245
    }
246

    
247
    @Override
248
    public ListSelect getTypeSelect() {
249
        return typeSelect;
250
    }
251

    
252
    /**
253
     * {@inheritDoc}
254
     */
255
    @Override
256
    public ToOneRelatedEntityCombobox<Reference> getInReferenceCombobox() {
257
        return inReferenceCombobox;
258
    }
259

    
260
    /**
261
     * {@inheritDoc}
262
     */
263
    @Override
264
    public TeamOrPersonField getAuthorshipField() {
265
        return authorshipField;
266
    }
267

    
268
    public void withReferenceTypes(EnumSet<ReferenceType> types){
269
        this.referenceTypes = types;
270
        if(typeSelect != null){
271
            typeSelect.removeAllItems();
272
            typeSelect.addItems(referenceTypes);
273
        }
274
    }
275

    
276

    
277
}
(2-2/3)