package net.ftlines.blog.cdidemo.web.app;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import net.ftlines.blog.cdidemo.model.Employee;
import net.ftlines.blog.cdidemo.model.EmployeesRepository;
import net.ftlines.blog.cdidemo.util.IteratorAdapter;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
public class EmployeePicker extends AutoCompleteTextField<String> {
@Inject
EmployeesRepository employees;
@Inject
EntityManager em;
private final IModel<Employee> employee;
public EmployeePicker(String id, IModel<Employee> model) {
super(id, new Model<String>(toString(model.getObject())));
this.employee = model;
}
@Override
protected Iterator<String> getChoices(String input) {
final Iterator<Employee> matches = employees.search(input).iterator();
return new IteratorAdapter<Employee, String>(matches) {
@Override
public String next(Employee employee) {
return EmployeePicker.toString(employee);
}
};
}
@Override
public void updateModel() {
super.updateModel();
Employee employee = null;
String value = getModelObject();
Pattern pattern = Pattern.compile("\\[([0-9]+)\\]");
Matcher matcher = pattern.matcher(value);
if (matcher.find()) {
String id = matcher.group(1);
try {
employee = em.find(Employee.class, Long.parseLong(id));
} catch (NumberFormatException e) {
// ignoring
}
}
this.employee.setObject(employee);
if (employee != null) {
clear();
}
}
@Override
protected void onDetach() {
super.onDetach();
employee.detach();
}
private void clear() {
clearInput();
setModelObject(null);
}
private static String toString(Employee employee) {
if (employee != null) {
return employee.getFirstName() + " " + employee.getLastName() + " [" + employee.getId() + "]";
} else {
return "";
}
}
}