Project

General

Profile

Download (9.15 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.permission.AccessRestrictedView;
30
import eu.etaxonomy.cdm.vaadin.util.TeamOrPersonBaseCaptionGenerator;
31
import eu.etaxonomy.cdm.vaadin.util.converter.DoiConverter;
32
import eu.etaxonomy.cdm.vaadin.util.converter.UriConverter;
33
import eu.etaxonomy.vaadin.component.SwitchableTextField;
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 Apr 4, 2017
41
 *
42
 */
43
@SpringComponent
44
@Scope("prototype")
45
public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, ReferenceEditorPresenter> implements ReferencePopupEditorView, AccessRestrictedView {
46

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

    
49
    private TextField titleField;
50

    
51
    private final static int GRID_COLS = 4;
52

    
53
    private final static int GRID_ROWS = 10;
54

    
55
    private ListSelect typeSelect;
56

    
57
    private ToOneRelatedEntityCombobox<Reference> inReferenceCombobox;
58

    
59
    private TeamOrPersonField authorshipField;
60

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

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

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

    
77
        /*
78
        "type",
79
        "uri",
80
        "abbrevTitleCache",
81
        "protectedAbbrevTitleCache",
82
        "nomenclaturallyRelevant",
83
        "authorship",
84
        "referenceAbstract",
85
        "title",
86
        "abbrevTitle",
87
        "editor",
88
        "volume",
89
        "pages",
90
        "edition",
91
        "isbn",
92
        "issn",
93
        "doi",
94
        "seriesPart",
95
        "datePublished",
96
        "publisher",
97
        "placePublished",
98
        "institution",
99
        "school",
100
        "organization",
101
        "inReference"
102
         */
103
        int row = 0;
104
        typeSelect = new ListSelect("Reference type");
105
        typeSelect.addItems(referenceTypes);
106
        typeSelect.setNullSelectionAllowed(false);
107
        typeSelect.setRows(1);
108
        typeSelect.addValueChangeListener(e -> updateFieldVisibility((ReferenceType)e.getProperty().getValue()));
109
        addField(typeSelect, "type", 3, row);
110
        grid.setComponentAlignment(typeSelect, Alignment.TOP_RIGHT);
111
        row++;
112

    
113
        SwitchableTextField titleCacheField = addSwitchableTextField("Reference cache", "titleCache", "protectedTitleCache", 0, row, GRID_COLS-1, row);
114
        titleCacheField.setWidth(100, Unit.PERCENTAGE);
115
        row++;
116

    
117
        SwitchableTextField abbrevTitleCacheField = addSwitchableTextField("Abbrev. cache", "abbrevTitleCache", "protectedAbbrevTitleCache", 0, row, GRID_COLS-1, row);
118
        abbrevTitleCacheField.setWidth(100, Unit.PERCENTAGE);
119
        row++;
120

    
121
        titleField = addTextField("Title", "title", 0, row, GRID_COLS-1, row);
122
        titleField.setWidth(100, Unit.PERCENTAGE);
123
        row++;
124
        addTextField("Nomenclatural title", "abbrevTitle", 0, row, GRID_COLS-1, row).setWidth(100, Unit.PERCENTAGE);
125
        row++;
126

    
127
        authorshipField = new TeamOrPersonField("Author(s)", TeamOrPersonBaseCaptionGenerator.CacheType.BIBLIOGRAPHIC_TITLE);
128
        authorshipField.setWidth(100,  Unit.PERCENTAGE);
129
        addField(authorshipField, "authorship", 0, row, 3, row);
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, e.getButton(), 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().getUuid(),
143
                            e.getButton(),
144
                            inReferenceCombobox,
145
                            this)
146
                );
147
            }
148
            });
149
        addField(inReferenceCombobox, "inReference", 0, row, 3, row);
150
        row++;
151

    
152
        addTextField("Series", "seriesPart", 0, row);
153
        addTextField("Volume", "volume", 1, row);
154
        addTextField("Pages", "pages", 2, row);
155
        addTextField("Editor", "editor", 3, row).setWidth(100, Unit.PERCENTAGE);
156
        row++;
157

    
158
        addTextField("Place published", "placePublished", 0, row, 1, row).setWidth(100, Unit.PERCENTAGE);
159
        TextField publisherField = addTextField("Publisher", "publisher", 2, row, 3, row);
160
        publisherField.setWidth(100, Unit.PERCENTAGE);
161
        TimePeriodField timePeriodField = new TimePeriodField("Date published");
162
        addField(timePeriodField, "datePublished");
163
        row++;
164

    
165
        addTextField("ISSN", "issn", 0, row);
166
        addTextField("ISBN", "isbn", 1, row);
167
        TextFieldNFix doiField = new TextFieldNFix("DOI");
168
        doiField.setConverter(new DoiConverter());
169
        addField(doiField, "doi", 2, row);
170
        TextFieldNFix uriField = new TextFieldNFix("Uri");
171
        uriField.setConverter(new UriConverter());
172
        addField(uriField, "uri", 3, row);
173

    
174
//        titleField.setRequired(true);
175
//        publisherField.setRequired(true);
176

    
177
        setAdvancedModeEnabled(true);
178
        registerAdvancedModeComponents(titleCacheField, abbrevTitleCacheField);
179
        registerAdvancedModeComponents(authorshipField.getCachFields());
180
        setAdvancedMode(false);
181

    
182
    }
183

    
184
    /**
185
     * @param value
186
     * @return
187
     */
188
    private Object updateFieldVisibility(ReferenceType value) {
189
        getField("volume").setVisible(value.isVolumeReference());
190

    
191
        getField("placePublished").setVisible(value.isPublication());
192
        getField("publisher").setVisible(value.isPublication());
193

    
194
        getField("editor").setVisible(value.isPrintedUnit());
195
        getField("seriesPart").setVisible(value.isPrintedUnit());
196

    
197
        getField("inReference").setVisible(value.isPrintedUnit() || value.isSection());
198
        getField("pages").setVisible(value.isSection());
199

    
200
        EnumSet<ReferenceType> hideNomTitle = EnumSet.of(ReferenceType.Article, ReferenceType.Section, ReferenceType.BookSection, ReferenceType.InProceedings, ReferenceType.PrintSeries);
201
        EnumSet<ReferenceType> hideTitle = EnumSet.of(ReferenceType.Section, ReferenceType.BookSection);
202
        getField("abbrevTitle").setVisible(!hideNomTitle.contains(value));
203
        getField("title").setVisible(!hideTitle.contains(value));
204

    
205
        return null;
206
    }
207

    
208
    /**
209
     * {@inheritDoc}
210
     */
211
    @Override
212
    public String getWindowCaption() {
213
        return "Reference editor";
214
    }
215

    
216
    /**
217
     * {@inheritDoc}
218
     */
219
    @Override
220
    protected String getDefaultComponentStyles() {
221
        return "tiny";
222
    }
223

    
224
    /**
225
     * {@inheritDoc}
226
     */
227
    @Override
228
    public void focusFirst() {
229
        titleField.focus();
230
    }
231

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

    
240
    /**
241
     * {@inheritDoc}
242
     */
243
    @Override
244
    public boolean allowAnonymousAccess() {
245
        return false;
246
    }
247

    
248
    /**
249
     * {@inheritDoc}
250
     */
251
    @Override
252
    public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
253
        return null;
254
    }
255

    
256
    @Override
257
    public ListSelect getTypeSelect() {
258
        return typeSelect;
259
    }
260

    
261
    /**
262
     * {@inheritDoc}
263
     */
264
    @Override
265
    public ToOneRelatedEntityCombobox<Reference> getInReferenceCombobox() {
266
        return inReferenceCombobox;
267
    }
268

    
269
    /**
270
     * {@inheritDoc}
271
     */
272
    @Override
273
    public TeamOrPersonField getAuthorshipField() {
274
        return authorshipField;
275
    }
276

    
277
    public void withReferenceTypes(EnumSet<ReferenceType> types){
278
        this.referenceTypes = types;
279
        if(typeSelect != null){
280
            typeSelect.removeAllItems();
281
            typeSelect.addItems(referenceTypes);
282
        }
283
    }
284

    
285

    
286
}
(2-2/3)