Bundletool dev
[mir.git] / source / mircoders / servlet / ServletModuleComment.java
index a94e49e..510b984 100755 (executable)
 
 package mircoders.servlet;
 
-import java.io.*;
-import java.sql.*;
-import java.util.*;
-import java.net.*;
-
-import javax.servlet.*;
-import javax.servlet.http.*;
-
-import org.apache.struts.util.MessageResources;
-
-import freemarker.template.*;
-
-import mir.servlet.*;
-import mir.module.*;
-import mir.misc.*;
-import mir.entity.*;
-import mir.storage.*;
-import mir.generator.*;
-import mir.entity.*;
-import mir.entity.adapter.*;
-import mir.util.*;
-import mir.log.*;
-
-import mircoders.storage.*;
-import mircoders.global.*;
-import mircoders.localizer.*;
-import mircoders.module.*;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import mir.config.MirPropertiesConfiguration;
+import mir.entity.adapter.EntityAdapterModel;
+import mir.entity.adapter.EntityIteratorAdapter;
+import mir.log.LoggerWrapper;
+import mir.servlet.ServletModule;
+import mir.servlet.ServletModuleExc;
+import mir.servlet.ServletModuleFailure;
+import mir.util.CachingRewindableIterator;
+import mir.util.HTTPRequestParser;
+import mir.util.JDBCStringRoutines;
+import mir.util.SQLQueryBuilder;
+import mir.util.URLBuilder;
+import mircoders.global.MirGlobal;
+import mircoders.module.ModuleComment;
+import mircoders.module.ModuleContent;
+import mircoders.storage.DatabaseComment;
+import mircoders.storage.DatabaseCommentStatus;
+import mircoders.storage.DatabaseContent;
+import mircoders.storage.DatabaseLanguage;
+import freemarker.template.SimpleHash;
+import freemarker.template.TemplateModelRoot;
 
 /*
  *  ServletModuleComment - controls navigation for Comments
@@ -78,87 +77,104 @@ public class ServletModuleComment extends ServletModule
   private ServletModuleComment() {
     logger = new LoggerWrapper("ServletModule.Comment");
 
-    templateListString = MirConfig.getProp("ServletModule.Comment.ListTemplate");
-    templateObjektString = MirConfig.getProp("ServletModule.Comment.ObjektTemplate");
-    templateConfirmString = MirConfig.getProp("ServletModule.Comment.ConfirmTemplate");
 
     try {
+      configuration = MirPropertiesConfiguration.instance();
+      templateListString = configuration.getString("ServletModule.Comment.ListTemplate");
+      templateObjektString = configuration.getString("ServletModule.Comment.ObjektTemplate");
+      templateConfirmString = configuration.getString("ServletModule.Comment.ConfirmTemplate");
+
       mainModule = new ModuleComment(DatabaseComment.getInstance());
       moduleContent = new ModuleContent(DatabaseContent.getInstance());
     }
-    catch (StorageObjectException e) {
+    catch (Exception e) {
       logger.error("servletmodule comment could not be initialized:" + e.getMessage());
     }
   }
 
-  public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException
+  public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc
+  {
+    String idParam = req.getParameter("id");
+
+    if (idParam == null)
+      throw new ServletModuleExc("Invalid call: id not supplied ");
+
+    showComment(idParam, req, res);
+  }
+
+  public void showComment(String anId, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+    try {
+      SimpleHash extraInfo = new SimpleHash();
+      TemplateModelRoot data;
+
+      data = (TemplateModelRoot) mainModule.getById(anId);
+
+      extraInfo.put("languages", DatabaseLanguage.getInstance().getPopupData());
+      extraInfo.put("comment_status_values", DatabaseCommentStatus.getInstance().getPopupData());
+
+      deliver(aRequest, aResponse, data, extraInfo, templateObjektString);
+    }
+    catch (Throwable e) {
+      throw new ServletModuleFailure(e);
+    }
+  }
+
+
+  public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
   {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
     String where = requestParser.getParameter("where");
-    String order = requestParser.getParameter("order");
+    String order = requestParser.getParameterWithDefault("order", "webdb_create desc");
     int offset = requestParser.getIntegerWithDefault("offset", 0);
 
     returnCommentList(aRequest, aResponse, where, order, offset);
   }
 
-  public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException
+  public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
   {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
+    SQLQueryBuilder queryBuilder = new SQLQueryBuilder();
 
     String queryField = "";
     String searchField = requestParser.getParameter("searchfield");
     String searchText = requestParser.getParameter("searchtext");
     String searchIsPublished = requestParser.getParameter("searchispublished");
+    String searchStatus = requestParser.getParameter("searchstatus");
     String searchOrder = requestParser.getParameter("searchorder");
 
-    String whereClause = " (1=1) ";
-    String orderClause = "webdb_create desc";
-
     if (searchIsPublished.equals("0")) {
-      whereClause=whereClause + "is_published='f'";
+      queryBuilder.appendAndCondition("is_published='f'");
     }
     else if (searchIsPublished.equals("1")) {
-      whereClause=whereClause + "is_published='t'";
+      queryBuilder.appendAndCondition("is_published='t'");
     }
 
-    if (!searchField.equals("") && !searchText.equals("")) {
-      queryField="";
-
-      if (searchField.equals("title"))
-        queryField = "title";
-      else if (searchField.equals("creator"))
-        queryField = "creator";
-      else if (searchField.equals("description"))
-        queryField = "description";
-      else
-        queryField = "";
-
-      if (!queryField.equals("")) {
-        if (!whereClause.equals(""))
-          whereClause = whereClause + " and ";
-
-        // ML: searchText must be properly escaped!
-        whereClause = whereClause + "lower(" + queryField + ") like '%" + searchText.toLowerCase() + "%'";
-      }
+    if (searchText.length()>0) {
+        queryBuilder.appendAndCondition(
+          "lower("+ searchField + ") like " +
+          "'%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'");
     }
 
-    System.out.println("search order = " + searchOrder);
-
-    if (searchOrder.equals("datedesc")) {
-      orderClause = "webdb_create desc";
-    }
-    else if (searchOrder.equals("dateasc")) {
-      orderClause = "webdb_create asc";
+    if (searchStatus.length()>0) {
+      queryBuilder.appendAndCondition("to_comment_status="+Integer.parseInt(searchStatus));
     }
-    else if (searchOrder.equals("articletitle")) {
-      orderClause = "(select content.title from content where content.id = comment.to_media) asc";
+
+    if (searchOrder.length()>0) {
+      if (searchOrder.equals("datedesc"))
+        queryBuilder.appendAscendingOrder("webdb_create");
+      else if (searchOrder.equals("dateasc"))
+        queryBuilder.appendDescendingOrder("webdb_create");
+      else if (searchOrder.equals("articletitle"))
+        queryBuilder.appendAscendingOrder("(select content.title from content where content.id = comment.to_media)");
+      else if (searchOrder.equals("creator"))
+        queryBuilder.appendDescendingOrder("creator");
     }
 
-    returnCommentList(aRequest, aResponse, whereClause, orderClause, 0);
+    returnCommentList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0);
   }
 
-  public void articlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+  public void articlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc
   {
     String articleIdString = req.getParameter("articleid");
     int articleId;
@@ -168,16 +184,13 @@ public class ServletModuleComment extends ServletModule
 
       returnCommentList( req, res, "to_media="+articleId, "webdb_create desc", 0);
     }
-    catch (ServletModuleException e) {
-      throw e;
-    }
     catch (Throwable e) {
-      throw new ServletModuleException(e.getMessage());
+      throw new ServletModuleFailure(e);
     }
   }
 
   public void returnCommentList(HttpServletRequest aRequest, HttpServletResponse aResponse,
-     String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleException {
+     String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc {
     // ML: experiment in using the producer's generation system instead of the
     //     old one...
 
@@ -210,14 +223,17 @@ public class ServletModuleComment extends ServletModule
       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+nrCommentsPerPage) {
@@ -238,9 +254,7 @@ public class ServletModuleComment extends ServletModule
       ServletHelper.generateResponse(aResponse.getWriter(), responseData, "commentlist.template");
     }
     catch (Throwable e) {
-      e.printStackTrace(new PrintWriter(new LoggerToWriterAdapter(logger, logger.ERROR_MESSAGE)));
-
-      throw new ServletModuleException(e.getMessage());
+      throw new ServletModuleFailure(e);
     }
   }
 }