fix #6999 generic button state updater for toOne relation field
[cdm-vaadin.git] / src / main / java / eu / etaxonomy / vaadin / component / ToOneRelatedEntityListSelect.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.vaadin.component;
10
11 import com.vaadin.data.Container;
12 import com.vaadin.data.Property;
13 import com.vaadin.data.fieldgroup.FieldGroup;
14 import com.vaadin.server.FontAwesome;
15 import com.vaadin.ui.Button;
16 import com.vaadin.ui.Button.ClickListener;
17 import com.vaadin.ui.Component;
18 import com.vaadin.ui.CssLayout;
19 import com.vaadin.ui.ListSelect;
20 import com.vaadin.ui.themes.ValoTheme;
21
22 /**
23 * @author a.kohlbecker
24 * @since May 24, 2017
25 *
26 */
27 public class ToOneRelatedEntityListSelect<V extends Object> extends CompositeCustomField<V> implements ToOneRelatedEntityField<V> {
28
29 private static final long serialVersionUID = 6277565876657520311L;
30
31 public static final String PRIMARY_STYLE = "v-related-entity-list-select";
32
33 private Class<V> type;
34
35 private CssLayout container = new CssLayout();
36
37 private ListSelect select;
38
39
40 private Button addButton = new Button(FontAwesome.PLUS);
41 private Button editButton = new Button(FontAwesome.EDIT);
42
43 public ToOneRelatedEntityListSelect(String caption, Class<V> type, Container dataSource){
44 this.type = type;
45 setCaption(caption);
46 select = new ListSelect(caption, dataSource);
47 addStyledComponents(select, addButton, editButton);
48 addSizedComponent(select);
49 }
50
51 /**
52 * {@inheritDoc}
53 */
54 @Override
55 protected Component initContent() {
56 container.addComponents(select, addButton, editButton);
57 setPrimaryStyleName(PRIMARY_STYLE);
58 addDefaultStyles();
59 return container;
60 }
61
62 /**
63 * {@inheritDoc}
64 */
65 @Override
66 public Class<? extends V> getType() {
67 return type;
68 }
69
70 /**
71 * {@inheritDoc}
72 */
73 @Override
74 protected void addDefaultStyles() {
75 container.addStyleName(ValoTheme.LAYOUT_COMPONENT_GROUP);
76 }
77
78 /**
79 * {@inheritDoc}
80 */
81 @Override
82 public FieldGroup getFieldGroup() {
83 return null;
84 }
85
86 /**
87 * @return the select
88 * @deprecated list specific method should not be in the interface
89 */
90 @Deprecated
91 public ListSelect getSelect() {
92 return select;
93 }
94
95 /**
96 * {@inheritDoc}
97 */
98 @Override
99 public void setPropertyDataSource(Property newDataSource) {
100 select.setPropertyDataSource(newDataSource);
101 }
102
103 @Override
104 public Property getPropertyDataSource() {
105 return select.getPropertyDataSource();
106 }
107
108 /**
109 * {@inheritDoc}
110 */
111 @Override
112 public void addClickListenerAddEntity(ClickListener listener) {
113 addButton.addClickListener(listener);
114 }
115
116 /**
117 * {@inheritDoc}
118 */
119 @Override
120 public void setAddButtonEnabled(boolean enabled) {
121 addButton.setEnabled(enabled);
122 }
123
124 /**
125 * {@inheritDoc}
126 */
127 @Override
128 public void addClickListenerEditEntity(ClickListener listener) {
129 editButton.addClickListener(listener);
130 }
131
132 /**
133 * {@inheritDoc}
134 */
135 @Override
136 public void setEditButtonEnabled(boolean enabled) {
137 editButton.setEnabled(enabled);
138 }
139
140 /**
141 * {@inheritDoc}
142 */
143 @Override
144 public void selectNewItem(V bean) {
145
146 select.addItem(bean);
147 select.select(bean);
148 }
149
150
151 }