1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.chooser;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.icons.MagnoliaIcons;
38 import info.magnolia.ui.UIComponent;
39 import info.magnolia.ui.filter.DataFilter;
40 import info.magnolia.ui.filter.FilterContext;
41 import info.magnolia.ui.theme.ResurfaceTheme;
42
43 import javax.inject.Inject;
44
45 import org.apache.commons.lang3.StringUtils;
46
47 import com.vaadin.data.HasValue;
48 import com.vaadin.ui.Button;
49 import com.vaadin.ui.HorizontalLayout;
50 import com.vaadin.ui.TextField;
51
52
53
54
55 public class FullTextSearchView extends HorizontalLayout implements UIComponent {
56
57 private final FilterContext filterContext;
58 private final SimpleTranslator i18n;
59
60 @Inject
61 public FullTextSearchView(FilterContext filterContext, SimpleTranslator i18n) {
62 this.filterContext = filterContext;
63 this.i18n = i18n;
64 setStyleName("full-text-search");
65 init();
66 }
67
68 protected void init() {
69 Button searchButton = new Button(MagnoliaIcons.SEARCH);
70 searchButton.addStyleName(ResurfaceTheme.BUTTON_ICON);
71
72 TextField searchField = new TextField();
73 searchField.addStyleName("fts-field");
74 searchField.addValueChangeListener((HasValue.ValueChangeListener<String>) event -> {
75 DataFilter DataFilter = filterContext.getFilter().value().orElse(new DataFilter());
76 dataFilter.setFullTextSearchStatement(event.getValue());
77 filterContext.getFilter().set(dataFilter, true);
78 });
79 searchField.setVisible(false);
80 searchField.setPlaceholder(i18n.translate("dialogs.chooseDialog.fts.placeholder"));
81
82 Button cleanText = new Button(MagnoliaIcons.CLOSE);
83 cleanText.addStyleName("clear-search-button");
84 cleanText.setVisible(false);
85
86 setUpListeners(searchButton, searchField, cleanText);
87
88 this.addComponents(searchButton, searchField, cleanText);
89 }
90
91 private void setUpListeners(Button searchButton, TextField searchField, Button cleanText) {
92 searchButton.addClickListener((Button.ClickListener) event -> {
93 boolean visible = !searchField.isVisible();
94 searchField.setVisible(visible);
95 cleanText.setVisible(visible);
96 if (visible) {
97 searchField.focus();
98 cleanText.setEnabled(false);
99 } else {
100 searchField.clear();
101 }
102 });
103
104 searchField.addValueChangeListener((HasValue.ValueChangeListener<String>) event ->
105 cleanText.setEnabled(StringUtils.isNotEmpty(event.getValue())));
106
107 cleanText.addClickListener((Button.ClickListener) event -> searchField.clear());
108 }
109 }