fix #7425 VerbatimTimePeriodField implemented
[cdm-vaadin.git] / src / main / java / eu / etaxonomy / cdm / vaadin / view / reference / ReferencePopupEditor.java
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.VerbatimTimePeriodField;
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 VerbatimTimePeriodField timePeriodField = new VerbatimTimePeriodField("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 }