package org.springmodules.xt.examples.ajax;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.springmodules.xt.ajax.AbstractAjaxHandler;
import org.springmodules.xt.ajax.AjaxActionEvent;
import org.springmodules.xt.ajax.AjaxResponse;
import org.springmodules.xt.ajax.AjaxResponseImpl;
import org.springmodules.xt.ajax.action.ReplaceContentAction;
import org.springmodules.xt.ajax.action.SetAttributeAction;
import org.springmodules.xt.ajax.component.Option;
import org.springmodules.xt.examples.domain.IEmployee;
import org.springmodules.xt.examples.domain.MemoryRepository;
/**
* Ajax handler for handling offices and employees selections.
*
* @author Sergio Bossa
*/
public class SelectionHandler extends AbstractAjaxHandler {
private MemoryRepository store;
public AjaxResponse officeSelection(AjaxActionEvent event) {
String officeId = event.getHttpRequest().getParameter(event.getElementName());
// Upon office selection, get employees related to the selected office:
Collection<IEmployee> employees = store.getEmployeesByOffice(store.getOffice(officeId));
// Create the component to render (a list of html option element):
List options = new LinkedList();
Option first = new Option("-1", "Select one ...");
options.add(first);
for(IEmployee emp : employees) {
Option option = new Option(emp, "matriculationCode", "surname");
options.add(option);
}
// Create an ajax action for replacing the content of the "employees" element:
ReplaceContentAction action = new ReplaceContentAction("employees", options);
// Create the ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the action:
response.addAction(action);
return response;
}
public AjaxResponse employeeSelection(AjaxActionEvent event)
throws Exception {
String matriculationCode = event.getHttpRequest().getParameter(event.getElementName());
// Get the selected employee:
IEmployee e = store.getEmployee(matriculationCode);
// Create an ajax action for setting the "value" attribute of the "firstname" html element:
SetAttributeAction setFirstname = new SetAttributeAction("firstname", "value", e.getFirstname());
// Create an ajax action for setting the "value" attribute of the "surname" html element:
SetAttributeAction setSurname = new SetAttributeAction("surname", "value", e.getSurname());
// Create the ajax response:
AjaxResponse response = new AjaxResponseImpl();
// Add the actions to the response:
response.addAction(setFirstname);
response.addAction(setSurname);
return response;
}
public void setStore(MemoryRepository store) {
this.store = store;
}
}