2 * Copyright (C) 2017 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.vaadin
.view
.reference
;
11 import java
.util
.Collection
;
12 import java
.util
.EnumSet
;
14 import org
.springframework
.context
.annotation
.Scope
;
15 import org
.springframework
.security
.core
.GrantedAuthority
;
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
;
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
;
39 * @author a.kohlbecker
45 public class ReferencePopupEditor
extends AbstractCdmPopupEditor
<Reference
, ReferenceEditorPresenter
> implements ReferencePopupEditorView
, AccessRestrictedView
{
47 private static final long serialVersionUID
= -4347633563800758815L;
49 private TextField titleField
;
51 private final static int GRID_COLS
= 4;
53 private final static int GRID_ROWS
= 10;
55 private ListSelect typeSelect
;
57 private ToOneRelatedEntityCombobox
<Reference
> inReferenceCombobox
;
59 private TeamOrPersonField authorshipField
;
61 private EnumSet
<ReferenceType
> referenceTypes
= EnumSet
.allOf(ReferenceType
.class);
67 public ReferencePopupEditor() {
68 super(new GridLayout(GRID_COLS
, GRID_ROWS
), Reference
.class);
72 protected void initContent() {
73 GridLayout grid
= (GridLayout
)getFieldLayout();
74 grid
.setSpacing(true);
81 "protectedAbbrevTitleCache",
82 "nomenclaturallyRelevant",
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
);
113 SwitchableTextField titleCacheField
= addSwitchableTextField("Reference cache", "titleCache", "protectedTitleCache", 0, row
, GRID_COLS
-1, row
);
114 titleCacheField
.setWidth(100, Unit
.PERCENTAGE
);
117 SwitchableTextField abbrevTitleCacheField
= addSwitchableTextField("Abbrev. cache", "abbrevTitleCache", "protectedAbbrevTitleCache", 0, row
, GRID_COLS
-1, row
);
118 abbrevTitleCacheField
.setWidth(100, Unit
.PERCENTAGE
);
121 titleField
= addTextField("Title", "title", 0, row
, GRID_COLS
-1, row
);
122 titleField
.setWidth(100, Unit
.PERCENTAGE
);
124 addTextField("Nomenclatural title", "abbrevTitle", 0, row
, GRID_COLS
-1, row
).setWidth(100, Unit
.PERCENTAGE
);
127 authorshipField
= new TeamOrPersonField("Author(s)", TeamOrPersonBaseCaptionGenerator
.CacheType
.BIBLIOGRAPHIC_TITLE
);
128 authorshipField
.setWidth(100, Unit
.PERCENTAGE
);
129 addField(authorshipField
, "authorship", 0, row
, 3, row
);
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)
137 inReferenceCombobox
.addClickListenerEditEntity(e
-> {
138 if(inReferenceCombobox
.getValue() != null){
139 getViewEventBus().publish(this,
140 new ReferenceEditorAction(
141 EditorActionType
.EDIT
,
142 inReferenceCombobox
.getValue().getUuid(),
149 addField(inReferenceCombobox
, "inReference", 0, row
, 3, row
);
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
);
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");
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
);
174 // titleField.setRequired(true);
175 // publisherField.setRequired(true);
177 setAdvancedModeEnabled(true);
178 registerAdvancedModeComponents(titleCacheField
, abbrevTitleCacheField
);
179 registerAdvancedModeComponents(authorshipField
.getCachFields());
180 setAdvancedMode(false);
188 private Object
updateFieldVisibility(ReferenceType value
) {
189 getField("volume").setVisible(value
.isVolumeReference());
191 getField("placePublished").setVisible(value
.isPublication());
192 getField("publisher").setVisible(value
.isPublication());
194 getField("editor").setVisible(value
.isPrintedUnit());
195 getField("seriesPart").setVisible(value
.isPrintedUnit());
197 getField("inReference").setVisible(value
.isPrintedUnit() || value
.isSection());
198 getField("pages").setVisible(value
.isSection());
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
));
212 public String
getWindowCaption() {
213 return "Reference editor";
220 protected String
getDefaultComponentStyles() {
228 public void focusFirst() {
236 public boolean isResizable() {
244 public boolean allowAnonymousAccess() {
252 public Collection
<Collection
<GrantedAuthority
>> allowedGrantedAuthorities() {
257 public ListSelect
getTypeSelect() {
265 public ToOneRelatedEntityCombobox
<Reference
> getInReferenceCombobox() {
266 return inReferenceCombobox
;
273 public TeamOrPersonField
getAuthorshipField() {
274 return authorshipField
;
277 public void withReferenceTypes(EnumSet
<ReferenceType
> types
){
278 this.referenceTypes
= types
;
279 if(typeSelect
!= null){
280 typeSelect
.removeAllItems();
281 typeSelect
.addItems(referenceTypes
);