Merge branch 'phycobank' into develop
[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.Arrays;
12 import java.util.Collection;
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.common.TeamOrPersonField;
24 import eu.etaxonomy.cdm.vaadin.component.common.TimePeriodField;
25 import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction;
26 import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
27 import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
28 import eu.etaxonomy.vaadin.component.SwitchableTextField;
29 import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
30 import eu.etaxonomy.vaadin.mvp.AbstractCdmPopupEditor;
31
32 /**
33 * @author a.kohlbecker
34 * @since Apr 4, 2017
35 *
36 */
37 public class ReferencePopupEditor extends AbstractCdmPopupEditor<Reference, ReferenceEditorPresenter> implements ReferencePopupEditorView, AccessRestrictedView {
38
39 private static final long serialVersionUID = -4347633563800758815L;
40
41 private TextField titleField;
42
43 private final static int GRID_COLS = 4;
44
45 private final static int GRID_ROWS = 10;
46
47 private ListSelect typeSelect;
48
49 private ToOneRelatedEntityCombobox<Reference> inReferenceCombobox;
50
51 /**
52 * @param layout
53 * @param dtoType
54 */
55 public ReferencePopupEditor() {
56 super(new GridLayout(GRID_COLS, GRID_ROWS), Reference.class);
57 }
58
59 @Override
60 protected void initContent() {
61 GridLayout grid = (GridLayout)getFieldLayout();
62 grid.setSpacing(true);
63 grid.setMargin(true);
64
65 /*
66 "type",
67 "uri",
68 "abbrevTitleCache",
69 "protectedAbbrevTitleCache",
70 "nomenclaturallyRelevant",
71 "authorship",
72 "referenceAbstract",
73 "title",
74 "abbrevTitle",
75 "editor",
76 "volume",
77 "pages",
78 "edition",
79 "isbn",
80 "issn",
81 "doi",
82 "seriesPart",
83 "datePublished",
84 "publisher",
85 "placePublished",
86 "institution",
87 "school",
88 "organization",
89 "inReference"
90 */
91 int row = 0;
92 typeSelect = new ListSelect("Reference type", Arrays.asList(ReferenceType.values()));
93 typeSelect.setNullSelectionAllowed(false);
94 typeSelect.setRows(1);
95 typeSelect.addValueChangeListener(e -> updateFieldVisibility((ReferenceType)e.getProperty().getValue()));
96 addField(typeSelect, "type", 3, row);
97 grid.setComponentAlignment(typeSelect, Alignment.TOP_RIGHT);
98 row++;
99 SwitchableTextField titleCacheField = addSwitchableTextField("Reference cache", "titleCache", "protectedTitleCache", 0, row, GRID_COLS-1, row);
100 titleCacheField.setWidth(100, Unit.PERCENTAGE);
101 row++;
102 SwitchableTextField abbrevTitleCacheField = addSwitchableTextField("Abbrev. cache", "abbrevTitleCache", "protectedAbbrevTitleCache", 0, row, GRID_COLS-1, row);
103 abbrevTitleCacheField.setWidth(100, Unit.PERCENTAGE);
104 row++;
105 titleField = addTextField("Title", "title", 0, row, GRID_COLS-1, row);
106 titleField.setWidth(100, Unit.PERCENTAGE);
107 row++;
108 addTextField("NomenclaturalTitle", "abbrevTitle", 0, row, GRID_COLS-1, row).setWidth(100, Unit.PERCENTAGE);
109 row++;
110 TeamOrPersonField authorshipField = new TeamOrPersonField("Author(s)");
111 authorshipField.setWidth(100, Unit.PERCENTAGE);
112 addField(authorshipField, "authorship", 0, row, 3, row);
113 row++;
114 addTextField("Series", "seriesPart", 0, row);
115 addTextField("Volume", "volume", 1, row);
116 addTextField("Pages", "pages", 2, row);
117 addTextField("Editor", "editor", 3, row).setWidth(100, Unit.PERCENTAGE);
118 row++;
119
120 inReferenceCombobox = new ToOneRelatedEntityCombobox<Reference>("In-reference", Reference.class);
121 inReferenceCombobox.setWidth(100, Unit.PERCENTAGE);
122 inReferenceCombobox.addClickListenerAddEntity(e -> getEventBus().publishEvent(
123 new ReferenceEditorAction(AbstractEditorAction.Action.ADD, null, inReferenceCombobox, this)
124 ));
125 inReferenceCombobox.addClickListenerEditEntity(e -> {
126 if(inReferenceCombobox.getValue() != null){
127 getEventBus().publishEvent(
128 new ReferenceEditorAction(
129 AbstractEditorAction.Action.EDIT,
130 inReferenceCombobox.getValue().getId(),
131 inReferenceCombobox,
132 this)
133 );
134 }
135 });
136 addField(inReferenceCombobox, "inReference", 0, row, 3, row);
137 row++;
138 addTextField("Place published", "placePublished", 0, row, 1, row).setWidth(100, Unit.PERCENTAGE);
139 TextField publisherField = addTextField("Publisher", "publisher", 2, row, 3, row);
140 publisherField.setWidth(100, Unit.PERCENTAGE);
141 TimePeriodField timePeriodField = new TimePeriodField("Date published");
142 addField(timePeriodField, "datePublished");
143 row++;
144 addTextField("ISSN", "issn", 0, row);
145 addTextField("ISBN", "isbn", 1, row);
146 addTextField("DOI", "doi", 2, row);
147 addTextField("Uri", "uri", 3, row);
148
149 // titleField.setRequired(true);
150 // publisherField.setRequired(true);
151
152 setAdvancedModeEnabled(true);
153 registerAdvancedModeComponents(titleCacheField, abbrevTitleCacheField);
154 registerAdvancedModeComponents(authorshipField.getCachFields());
155 setAdvancedMode(false);
156
157 }
158
159 /**
160 * @param value
161 * @return
162 */
163 private Object updateFieldVisibility(ReferenceType value) {
164 getField("volume").setVisible(value.isVolumeReference());
165
166 getField("placePublished").setVisible(value.isPublication());
167 getField("publisher").setVisible(value.isPublication());
168
169 getField("editor").setVisible(value.isPrintedUnit());
170 getField("seriesPart").setVisible(value.isPrintedUnit());
171
172 getField("inReference").setVisible(value.isPrintedUnit() || value.isSection());
173 getField("pages").setVisible(value.isSection());
174
175 return null;
176 }
177
178 /**
179 * {@inheritDoc}
180 */
181 @Override
182 public String getWindowCaption() {
183 return "Reference editor";
184 }
185
186 /**
187 * {@inheritDoc}
188 */
189 @Override
190 protected String getDefaultComponentStyles() {
191 return "tiny";
192 }
193
194 /**
195 * {@inheritDoc}
196 */
197 @Override
198 public void focusFirst() {
199 titleField.focus();
200 }
201
202 /**
203 * {@inheritDoc}
204 */
205 @Override
206 public boolean isResizable() {
207 return false;
208 }
209
210 /**
211 * {@inheritDoc}
212 */
213 @Override
214 public boolean allowAnonymousAccess() {
215 return false;
216 }
217
218 /**
219 * {@inheritDoc}
220 */
221 @Override
222 public Collection<Collection<GrantedAuthority>> allowedGrantedAuthorities() {
223 return null;
224 }
225
226 @Override
227 public ListSelect getTypeSelect() {
228 return typeSelect;
229 }
230
231 /**
232 * {@inheritDoc}
233 */
234 @Override
235 public ToOneRelatedEntityCombobox<Reference> getInReferenceCombobox() {
236 return inReferenceCombobox;
237 }
238
239 }