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 mircoders.storage.*;
-import mircoders.global.*;
-import mircoders.localizer.*;
-import mircoders.module.*;
+import java.io.PrintWriter;
+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.LoggerToWriterAdapter;
+import mir.log.LoggerWrapper;
+import mir.servlet.ServletModule;
+import mir.servlet.ServletModuleException;
+import mir.util.CachingRewindableIterator;
+import mir.util.HTTPRequestParser;
+import mir.util.JDBCStringRoutines;
+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
public static ServletModule getInstance() { return instance; }
private ServletModuleComment() {
- theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("ServletModule.Comment.Logfile"));
- templateListString = MirConfig.getProp("ServletModule.Comment.ListTemplate");
- templateObjektString = MirConfig.getProp("ServletModule.Comment.ObjektTemplate");
- templateConfirmString = MirConfig.getProp("ServletModule.Comment.ConfirmTemplate");
+ logger = new LoggerWrapper("ServletModule.Comment");
+
+
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) {
- theLog.printError("servletmodule: comment could not be initialized");
+ catch (Exception e) {
+ logger.error("servletmodule comment could not be initialized:" + e.getMessage());
}
}
- public void list(HttpServletRequest req, HttpServletResponse res)
- throws ServletModuleException
+ public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
{
- // Parameter auswerten
- SimpleHash mergeData = new SimpleHash();
- String query_text = req.getParameter("query_text");
- mergeData.put("query_text",query_text);
- if (query_text!=null) mergeData.put("query_text_encoded",URLEncoder.encode(query_text));
- String query_field = req.getParameter("query_field");
- mergeData.put("query_field",query_field);
- String query_is_published = req.getParameter("query_is_published");
- mergeData.put("query_is_published",query_is_published);
-
- String offset = req.getParameter("offset");
- if (offset==null || offset.equals("")) offset="0";
- mergeData.put("offset",offset);
-
- // patching order
- String order = req.getParameter("order");
- if(order!=null) {
- mergeData.put("order", order);
- mergeData.put("order_encoded", URLEncoder.encode(order));
- if (order.equals("webdb_create")) order="webdb_create desc";
- }
+ String idParam = req.getParameter("id");
- // sql basteln
- String whereClause=""; boolean isFirst=true;
- if (query_text!=null && !query_text.equalsIgnoreCase("")) {
- whereClause += "lower("+query_field+") like lower('%"+query_text+"%')"; isFirst=false;}
- if (query_is_published != null && !query_is_published.equals("")) {
- if (isFirst==false) whereClause+=" and ";
- whereClause += "is_published='"+query_is_published+"'";
- isFirst=false;
- }
+ if (idParam == null)
+ throw new ServletModuleException("Invalid call: id not supplied ");
- theLog.printDebugInfo("sql-whereclause: " + whereClause + " order: " + order + " offset: " + offset);
+ showComment(idParam, req, res);
+ }
- // fetch und ausliefern
+ public void showComment(String anId, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {
try {
+ SimpleHash extraInfo = new SimpleHash();
+ TemplateModelRoot data;
- if (query_text!=null || query_is_published!=null ) {
- EntityList theList = mainModule.getByWhereClause(whereClause, order, (new Integer(offset)).intValue());
- if (theList!=null && theList.size()>0) {
-
- //make articleHash for comment
- StringBuffer buf= new StringBuffer("id in (");boolean first=true;
- for(int i=0;i<theList.size();i++) {
- if (first==false) buf.append(",");
- first=false;
- buf.append(theList.elementAt(i).getValue("to_media"));
- }
- buf.append(")");
- SimpleHash articleHash = HTMLTemplateProcessor.makeSimpleHash(moduleContent.getByWhereClause(buf.toString(),-1));
- mergeData.put("articleHash", articleHash);
-
- // get comment
- mergeData.put("contentlist",theList);
- mergeData.put("count", (new Integer(theList.getCount())).toString());
- mergeData.put("from", (new Integer(theList.getFrom())).toString());
- mergeData.put("to", (new Integer(theList.getTo())).toString());
- if (theList.hasNextBatch())
- mergeData.put("next", (new Integer(theList.getNextBatch())).toString());
- if (theList.hasPrevBatch())
- mergeData.put("prev", (new Integer(theList.getPrevBatch())).toString());
- }
- }
- // raus damit
- HTMLTemplateProcessor.process(res, templateListString, mergeData, res.getWriter(), getLocale(req));
+ 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 (Exception e) {
+ throw new ServletModuleException(e.toString());
}
- catch (ModuleException e) {throw new ServletModuleException(e.toString());}
- catch (IOException e) {throw new ServletModuleException(e.toString());}
- catch (Exception e) {throw new ServletModuleException(e.toString());}
}
- public void showArticleCommentList(Object aWriter, int anOffset, int anArticleId, Locale aLocale) throws ServletModuleException {
- int nrCommentsPerPage = 20;
- Object comments;
- Map generationData;
- Generator generator;
- int totalNrComments;
- EntityAdapterModel model;
- MessageResources messages = MessageResources.getMessageResources("bundles.admin");
+ public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException
+ {
+ HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
- try {
- generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator("admin/commentlist2.template");
- model = MirGlobal.localizer().dataModel().adapterModel();
+ String where = requestParser.getParameter("where");
+ String order = requestParser.getParameterWithDefault("order", "webdb_create desc");
+ int offset = requestParser.getIntegerWithDefault("offset", 0);
-// commentList = mainModule.getByWhereClause(whereClause, order, offset);
+ returnCommentList(aRequest, aResponse, where, order, offset);
+ }
- generationData = new HashMap();
- MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(generationData);
+ public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException
+ {
+ HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
- comments =
- new CachingRewindableIterator(
- new EntityIteratorAdapter( "to_media = " + anArticleId,
- "webdb_create desc",
- nrCommentsPerPage,
- model,
- "comment",
- nrCommentsPerPage,
- anOffset
- )
- );
+ String queryField = "";
+ String searchField = requestParser.getParameter("searchfield");
+ String searchText = requestParser.getParameter("searchtext");
+ String searchIsPublished = requestParser.getParameter("searchispublished");
+ String searchOrder = requestParser.getParameter("searchorder");
- totalNrComments = model.getMappingForName("comment").getStorage().getSize("to_media = " + anArticleId);
+ String whereClause = " (1=1) ";
+ String orderClause = "webdb_create desc";
- generationData.put( "comments", comments);
- generationData.put( "offset", new Integer(anOffset));
- generationData.put( "articleid", new Integer(anArticleId));
- generationData.put( "lang", new MessageMethodModel(aLocale, messages) );
- generationData.put( "thisurl", "module=Comment&do=listarticlecomments&offset="+anOffset+"&articleid="+anArticleId);
+ if (searchIsPublished.equals("0")) {
+ whereClause=whereClause + "is_published='f'";
+ }
+ else if (searchIsPublished.equals("1")) {
+ whereClause=whereClause + "is_published='t'";
+ }
- if (anOffset>0) {
- generationData.put( "previousurl", "module=Comment&do=listarticlecomments&offset="+
- Math.max( 0, anOffset - nrCommentsPerPage )+"&articleid="+anArticleId);
- generationData.put("previous", new Integer(Math.max( 0, anOffset - nrCommentsPerPage )));
- }
+ if (!searchField.equals("") && !searchText.equals("")) {
+ queryField="";
- if (anOffset + nrCommentsPerPage < totalNrComments) {
- generationData.put( "nexturl", "module=Comment&do=listarticlecomments&offset="+
- Math.min( anOffset + nrCommentsPerPage, totalNrComments-1 )+"&articleid="+anArticleId);
- generationData.put("next", new Integer(Math.min( anOffset + nrCommentsPerPage, totalNrComments-1 )));
+ 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 ";
+
+ whereClause = whereClause + "lower(" + queryField + ") like '%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'";
}
+ }
+
+ System.out.println("search order = " + searchOrder);
- generator.generate(aWriter, generationData, new PrintWriter(new NullWriter()));
+ if (searchOrder.equals("datedesc")) {
+ orderClause = "webdb_create desc";
}
- catch (Throwable t) {
- t.printStackTrace(System.out);
- throw new ServletModuleException(t.getMessage());
+ else if (searchOrder.equals("dateasc")) {
+ orderClause = "webdb_create asc";
}
+ else if (searchOrder.equals("articletitle")) {
+ orderClause = "(select content.title from content where content.id = comment.to_media) asc";
+ }
+
+ returnCommentList(aRequest, aResponse, whereClause, orderClause, 0);
}
- public void listarticlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+ public void articlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
{
String articleIdString = req.getParameter("articleid");
- String offsetString = req.getParameter("offset");
- int offset = 0;
- int articleId = 0;
-
- try {
- offset = Integer.parseInt(offsetString);
- }
- catch (Throwable t) {
- }
+ int articleId;
try {
articleId = Integer.parseInt(articleIdString);
- showArticleCommentList( res.getWriter(), offset, articleId, getLocale(req));
+ returnCommentList( req, res, "to_media="+articleId, "webdb_create desc", 0);
}
catch (ServletModuleException e) {
throw e;
}
catch (Throwable e) {
- e.printStackTrace(System.out);
throw new ServletModuleException(e.getMessage());
}
}
- public void performarticlecommentsoperation(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException {
- String commentIdString = req.getParameter("commentid");
- String articleIdString = req.getParameter("articleid");
- String offsetString = req.getParameter("offset");
- String operation = req.getParameter("operation");
- int offset = 0;
- int articleId = 0;
+ public void returnCommentList(HttpServletRequest aRequest, HttpServletResponse aResponse,
+ String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleException {
+ // ML: experiment in using the producer's generation system instead of the
+ // old one...
+
+ HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
+ URLBuilder urlBuilder = new URLBuilder();
+ EntityAdapterModel model;
+ int nrCommentsPerPage = 20;
+ int count;
try {
- articleId = Integer.parseInt(articleIdString);
+ Map responseData = ServletHelper.makeGenerationData(getLocale(aRequest));
+ model = MirGlobal.localizer().dataModel().adapterModel();
- showArticleCommentList( res.getWriter(), offset, articleId, getLocale(req));
- }
- catch (ServletModuleException e) {
- throw e;
+ Object commentList =
+ new CachingRewindableIterator(
+ new EntityIteratorAdapter( aWhereClause, anOrderByClause, nrCommentsPerPage,
+ MirGlobal.localizer().dataModel().adapterModel(), "comment", nrCommentsPerPage, anOffset)
+ );
+
+ responseData.put("nexturl", null);
+ responseData.put("prevurl", null);
+
+ count=mainModule.getSize(aWhereClause);
+
+ urlBuilder.setValue("module", "Comment");
+ 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("searchorder", requestParser.getParameter("searchorder"));
+
+ responseData.put("searchfield", requestParser.getParameter("searchfield"));
+ responseData.put("searchtext", requestParser.getParameter("searchtext"));
+ responseData.put("searchispublished", requestParser.getParameter("searchispublished"));
+ 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) {
+ urlBuilder.setValue("offset", anOffset + nrCommentsPerPage);
+ responseData.put("nexturl" , urlBuilder.getQuery());
+ }
+
+ if (anOffset>0) {
+ urlBuilder.setValue("offset", Math.max(anOffset - nrCommentsPerPage, 0));
+ responseData.put("prevurl" , urlBuilder.getQuery());
+ }
+
+ responseData.put("comments", commentList);
+ responseData.put("from" , Integer.toString(anOffset+1));
+ responseData.put("count", Integer.toString(count));
+ responseData.put("to", Integer.toString(Math.min(anOffset+nrCommentsPerPage, count)));
+
+ ServletHelper.generateResponse(aResponse.getWriter(), responseData, "commentlist.template");
}
catch (Throwable e) {
- e.printStackTrace(System.out);
+ e.printStackTrace(new PrintWriter(new LoggerToWriterAdapter(logger, LoggerWrapper.ERROR_MESSAGE)));
+
throw new ServletModuleException(e.getMessage());
}
}
}
+