View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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 }