*/
package mir.servlet;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
+
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import mir.util.HTTPRequestParser;
import mir.util.URLBuilder;
import mircoders.global.MirGlobal;
-import mircoders.servlet.ServletHelper;
import mircoders.localizer.MirLocalizerExc;
-import multex.Failure;
+import mircoders.servlet.ServletHelper;
/**
*
- * <p>Title: </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- * @author not attributable
- * @version 1.0
*/
public abstract class ServletModule {
protected String deleteConfirmationGenerator;
protected int nrEntitiesPerListPage;
+ /** the list of parameters that need to be propagated in the list */
+ protected List propagatedParameters = new ArrayList();
public ServletModule(){
+ propagatedParameters.add("searchfield");
+ propagatedParameters.add("searchtext");
+ propagatedParameters.add("searchispublished");
+ propagatedParameters.add("searchstatus");
+ propagatedParameters.add("searchorder");
+
definition = null;
try {
model = MirGlobal.localizer().dataModel().adapterModel();
throw new ServletModuleFailure("Can't retrieve model", e);
}
-
-
listGenerator = configuration.getString("ServletModule."+getOperationModuleName()+".ListTemplate");
editGenerator = configuration.getString("ServletModule."+getOperationModuleName()+".EditTemplate");
deleteConfirmationGenerator = configuration.getString("ServletModule."+getOperationModuleName()+".DeleteConfirmationTemplate");
* this supersedes getLanguage for the new i18n
*/
public static Locale getLocale(HttpServletRequest aRequest) {
- Locale loc = null;
+ Locale locale = null;
HttpSession session = aRequest.getSession(false);
if (session != null) {
// session can be null in case of logout
- loc = (Locale) session.getAttribute("locale");
+ locale = (Locale) session.getAttribute("locale");
}
// if there is nothing in the session get it fron the accept-language
- if (loc == null) {
- loc = aRequest.getLocale();
+ if (locale == null) {
+ locale = aRequest.getLocale();
}
- return loc;
+ return locale;
}
/**
*/
public String getDefaultListOrdering() {
- if (mainModule!=null && mainModule.getStorageObject()!=null){
+ if (mainModule!=null && mainModule.getStorageObject()!=null) {
if (mainModule.getStorageObject().getFieldNames().contains("webdb_create"))
return "webdb_create desc";
}
* Generic list servlet method
*/
- public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
- {
+ public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
String where = requestParser.getParameter("where");
public void returnList(HttpServletRequest aRequest, HttpServletResponse aResponse,
String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc {
+ returnList(aRequest, aResponse, aWhereClause, anOrderByClause, anOffset, Collections.EMPTY_MAP);
+ }
- HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
+ public void returnList(HttpServletRequest aRequest, HttpServletResponse aResponse,
+ String aWhereClause, String anOrderByClause, int anOffset, Map anOverridingRequestParameters) throws ServletModuleExc {
+ HTTPRequestParser requestParser = new HTTPRequestParser(aRequest, anOverridingRequestParameters);
URLBuilder urlBuilder = new URLBuilder();
- int count;
try {
Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
responseData.put("prevurl", null);
responseData.put("module", getOperationModuleName());
- count=mainModule.getSize(aWhereClause);
-
urlBuilder.setValue("module", getOperationModuleName());
urlBuilder.setValue("do", "list");
urlBuilder.setValue("where", aWhereClause);
urlBuilder.setValue("order", anOrderByClause);
- urlBuilder.setValue("searchfield", requestParser.getParameter("searchfield"));
- urlBuilder.setValue("searchtext", requestParser.getParameter("searchtext"));
- urlBuilder.setValue("searchispublished", requestParser.getParameter("searchispublished"));
- urlBuilder.setValue("searchstatus", requestParser.getParameter("searchstatus"));
- urlBuilder.setValue("searchorder", requestParser.getParameter("searchorder"));
-
- responseData.put("searchfield", requestParser.getParameter("searchfield"));
- responseData.put("searchtext", requestParser.getParameter("searchtext"));
- responseData.put("searchispublished", requestParser.getParameter("searchispublished"));
- responseData.put("searchstatus", requestParser.getParameter("searchstatus"));
- responseData.put("searchorder", requestParser.getParameter("searchorder"));
urlBuilder.setValue("offset", anOffset);
responseData.put("offset" , new Integer(anOffset).toString());
responseData.put("thisurl" , urlBuilder.getQuery());
- if (count>anOffset+nrEntitiesPerListPage) {
+ propagateFields(requestParser, urlBuilder, responseData);
+
+ if (list.size()>=nrEntitiesPerListPage) {
urlBuilder.setValue("offset", anOffset + nrEntitiesPerListPage);
responseData.put("nexturl" , urlBuilder.getQuery());
}
responseData.put("entities", list);
responseData.put("from" , Integer.toString(anOffset+1));
- responseData.put("count", Integer.toString(count));
- responseData.put("to", Integer.toString(Math.min(anOffset+nrEntitiesPerListPage, count)));
+ responseData.put("count", "?");
+ responseData.put("to", Integer.toString(anOffset+list.size()-1));
ServletHelper.generateResponse(aResponse.getWriter(), responseData, listGenerator);
}
}
return withValues;
}
+
+ private void propagateFields(HTTPRequestParser aRequest, URLBuilder aUrlBuilder, Map aResponseData) {
+ Iterator i = propagatedParameters.iterator();
+ while (i.hasNext()) {
+ String parameter = (String) i.next();
+ String value = aRequest.getParameter(parameter);
+ aUrlBuilder.setValue(parameter, value);
+ aResponseData.put(parameter, value);
+ }
+ }
}
\ No newline at end of file