1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.example.demo;
21
22 import org.apache.commons.lang3.RandomUtils;
23 import org.apache.myfaces.tobago.model.AutoSuggestExtensionItem;
24 import org.apache.myfaces.tobago.model.AutoSuggestItem;
25 import org.apache.myfaces.tobago.model.AutoSuggestItems;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 import javax.enterprise.context.SessionScoped;
30 import javax.faces.component.UIInput;
31 import javax.faces.model.SelectItem;
32 import javax.inject.Named;
33 import java.io.Serializable;
34 import java.lang.invoke.MethodHandles;
35 import java.util.ArrayList;
36 import java.util.List;
37
38 @SessionScoped
39 @Named
40 public class InputSuggestController implements Serializable {
41
42 private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
43
44 private String simpleValue;
45 private String zipValue;
46 private String cityValue;
47
48 private List<SelectItem> regionItems;
49
50 private String region;
51
52 private String[][] suggestData = {
53 {"26127 Oldenburg", "26127", "Oldenburg", "Niedersachsen"},
54 {"26203 Wardenburg", "26203", "Wardenburg", "Niedersachsen"},
55 {"26160 Bad Zwischenahn", "26160", "Bad Zwischenahn", "Niedersachsen"},
56 {"26655 Westerstede", "26655", "Westerstede", "Niedersachsen"},
57 {"26919 Brake (Unterweser)", "26919", "Brake", "Niedersachsen"},
58 {"57462 Olpe", "57462", "Olpe", "Nordrhein-Westfalen"},
59 {"23758 Oldenburg (Holstein)", "23758", "Oldenburg", "Schleswig Holstein"},
60 {"99628 Olbersleben", "99628", "Olbersleben", "Tueringen"},
61 {"25860 Olderup", "25860", "Olderup", "Schleswig Holstein"},
62 {"66851 Olenkorb", "66851", "Olenkorb", "Rheinland-Pfalz"}
63 };
64
65
66 public String getSimpleValue() {
67 return simpleValue;
68 }
69
70 public void setSimpleValue(final String simpleValue) {
71 this.simpleValue = simpleValue;
72 }
73
74 public String getZipValue() {
75 return zipValue;
76 }
77
78 public void setZipValue(final String zipValue) {
79 this.zipValue = zipValue;
80 }
81
82 public String getCityValue() {
83 return cityValue;
84 }
85
86 public void setCityValue(final String cityValue) {
87 this.cityValue = cityValue;
88 }
89
90 public List<SelectItem> getRegionItems() {
91 if (regionItems == null) {
92 regionItems = new ArrayList<>(17);
93 regionItems.add(new SelectItem("Please select"));
94 regionItems.add(new SelectItem("Baden-Württemberg"));
95 regionItems.add(new SelectItem("Bayern"));
96 regionItems.add(new SelectItem("Berlin"));
97 regionItems.add(new SelectItem("Brandenburg"));
98 regionItems.add(new SelectItem("Bremen"));
99 regionItems.add(new SelectItem("Hamburg"));
100 regionItems.add(new SelectItem("Hessen"));
101 regionItems.add(new SelectItem("Mecklenburg-Vorpommern"));
102 regionItems.add(new SelectItem("Niedersachsen"));
103 regionItems.add(new SelectItem("Nordrhein-Westfalen"));
104 regionItems.add(new SelectItem("Rheinland-Pfalz"));
105 regionItems.add(new SelectItem("Saarland"));
106 regionItems.add(new SelectItem("Sachsen"));
107 regionItems.add(new SelectItem("Sachsen-Anhalt"));
108 regionItems.add(new SelectItem("Schleswig Holstein"));
109 regionItems.add(new SelectItem("Tueringen"));
110 }
111 return regionItems;
112 }
113
114 public String getRegion() {
115 return region;
116 }
117
118 public void setRegion(final String region) {
119 this.region = region;
120 }
121
122 public List<String> getSimpleSuggestItems(final UIInput component) {
123 String prefix = (String) component.getSubmittedValue();
124 LOG.info("Creating items for prefix '" + prefix + "'");
125 if (prefix == null) {
126 prefix = "";
127 }
128 final List<String> list = new ArrayList<>();
129 final int n = RandomUtils.nextInt(0, 10);
130 for (int i = 0; i < n; i++) {
131 list.add(prefix + i);
132 }
133 return list;
134 }
135
136 public AutoSuggestItems getZipSuggestItems(final UIInput component) {
137 final String prefix = (String) component.getSubmittedValue();
138 final AutoSuggestItems item = new AutoSuggestItems();
139 item.setItems(getSuggestItems(prefix, true));
140 item.setNextFocusId("page:txarea");
141 return item;
142 }
143
144
145
146 public AutoSuggestItems getCitySuggestItems(final UIInput component) {
147 final String prefix = (String) component.getSubmittedValue();
148 final AutoSuggestItems item = new AutoSuggestItems();
149 item.setItems(getSuggestItems(prefix, false));
150 item.setNextFocusId("page:txarea");
151 return item;
152 }
153
154 private List<AutoSuggestItem> getSuggestItems(final String prefix, final boolean zip) {
155 final List<AutoSuggestItem> items = new ArrayList<>();
156 for (final String[] dataRow : suggestData) {
157 if (zip) {
158 if (dataRow[1].startsWith(prefix)) {
159 final AutoSuggestItem item = new AutoSuggestItem();
160 item.setLabel(dataRow[0]);
161 item.setValue(dataRow[1]);
162 final List<AutoSuggestExtensionItem> extensionItems = new ArrayList<>(2);
163 extensionItems.add(createExtensionItem("page:isCity", dataRow[2]));
164 if (dataRow[3] != null) {
165 extensionItems.add(createExtensionItem("page:isState", dataRow[3]));
166 }
167 item.setExtensionItems(extensionItems);
168 items.add(item);
169 }
170 } else {
171 if (dataRow[2].toLowerCase().startsWith(prefix.toLowerCase())) {
172 final AutoSuggestItem item = new AutoSuggestItem();
173 item.setLabel(dataRow[0]);
174 item.setValue(dataRow[2]);
175 final List<AutoSuggestExtensionItem> extensionItems = new ArrayList<>(2);
176 extensionItems.add(createExtensionItem("page:isZip", dataRow[1]));
177 if (dataRow[3] != null) {
178 extensionItems.add(createExtensionItem("page:isState", dataRow[3]));
179 }
180 item.setExtensionItems(extensionItems);
181 items.add(item);
182 }
183 }
184 }
185
186 return items;
187 }
188
189 private AutoSuggestExtensionItem createExtensionItem(final String id, final String value) {
190 final AutoSuggestExtensionItem extItem = new AutoSuggestExtensionItem();
191 extItem.setId(id);
192 extItem.setValue(value);
193 return extItem;
194 }
195 }