package com.dotj.web.struts;
import java.util.Locale;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResources;
import com.dotj.io.DataSet;
import com.dotj.grid.interfaces.IGridCommandEventArgs;
import com.dotj.form.interfaces.IFormValidator;
import com.dotj.form.FormValidatorTag;
import com.dotj.test.MyGridListenerCustomSort;
public final class CustomSortAction extends Action {
/**
* The <code>Log</code> instance for this application.
*/
protected static Log log =
LogFactory.getLog(CustomSortAction.class);
// --------------------------------------------------------- Public Methods
/**
* Process the specified HTTP request, and create the corresponding HTTP
* response (or forward to another web component that will create it).
* Return an <code>ActionForward</code> instance describing where and how
* control should be forwarded, or <code>null</code> if the response has
* already been completed.
*
* @param mapping The ActionMapping used to select this instance
* @param form The optional ActionForm bean for this request (if any)
* @param request The HTTP request we are processing
* @param response The HTTP response we are creating
* @throws Exception if the application business logic throws
* an exception
*/
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// Extract attributes we will need
Locale locale = getLocale(request);
MessageResources messages = getResources(request);
HttpSession session = request.getSession();
// Set a transactional control token to prevent double posting
if (log.isTraceEnabled()) {
log.trace(" Setting transactional control token");
}
saveToken(request);
String[] dataFields = {"Id", "LastName", "FirstName", "Gender", "Zip"};
String[] sortTypes = {"", "ASC", "DESC"};
int sortColumn = 3;
String sortField = dataFields[sortColumn - 1];
int sortType = DataSet.SORT_ASCENDING;
String sortOrder = sortTypes[sortType];
IFormValidator formValidator = FormValidatorTag.getDotJFormValidator(request);
request.setAttribute("selectedColumn", new Integer(-1));
if (formValidator.IsPost()) {
if (formValidator.getCommandEvent() instanceof IGridCommandEventArgs) {
IGridCommandEventArgs cmdEvt = (IGridCommandEventArgs) formValidator.getCommandEvent();
sortColumn = cmdEvt.getSortColumnNumber();
request.setAttribute("selectedColumn", new Integer(sortColumn));
sortField = dataFields[sortColumn - 1];
sortType = cmdEvt.getSortType();
sortOrder = sortTypes[sortType];
}
}
String sql = "SELECT * FROM customer WHERE Id >= 1 ORDER BY " + sortField + " " + sortOrder;
DataSet ds = JDBCUtil.executeQuery(servlet.getServletContext(), sql);
if (ds != null) request.setAttribute("ds", ds);
// Transfer this sort state to the listener so the grid will know about it.
MyGridListenerCustomSort listener = new MyGridListenerCustomSort();
listener.setPost(formValidator.IsPost());
listener.setSortColumn(sortColumn);
listener.setSortType(sortType);
request.setAttribute("listener", listener);
sql = "SELECT Code, Value FROM codes WHERE CodeSet = 'Gender'";
DataSet dsGender = JDBCUtil.executeQuery(servlet.getServletContext(), sql);
if (dsGender != null) request.setAttribute("dsGender", dsGender);
// Forward control to the edit user registration page
if (log.isTraceEnabled()) {
log.trace(" Forwarding to 'success' page");
}
return (mapping.findForward("success"));
}
}