X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleComment.java;h=510b98442153ae83820f00a877f2611de037aeb4;hb=86a7f9a337462ad82b23c77e91621929b2a741e3;hp=8894213a3d9fc7a94bd8de54317020f3d7e64786;hpb=97a33333e6920e0b2578e506475f04c6d1d45a38;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleComment.java b/source/mircoders/servlet/ServletModuleComment.java index 8894213a..510b9844 100755 --- a/source/mircoders/servlet/ServletModuleComment.java +++ b/source/mircoders/servlet/ServletModuleComment.java @@ -31,33 +31,32 @@ 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 @@ -77,195 +76,186 @@ 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 req, HttpServletResponse res) - throws ServletModuleException + public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { - // 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 ServletModuleExc("Invalid call: id not supplied "); - logger.debug("list comments: whereclause = " + whereClause + ", order = " + order + ", offset = " + offset); + showComment(idParam, req, res); + } - // fetch und ausliefern + public void showComment(String anId, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { 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;i0) { - 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 ))); - } + 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"); + + if (searchIsPublished.equals("0")) { + queryBuilder.appendAndCondition("is_published='f'"); + } + else if (searchIsPublished.equals("1")) { + queryBuilder.appendAndCondition("is_published='t'"); + } - 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 (searchText.length()>0) { + queryBuilder.appendAndCondition( + "lower("+ searchField + ") like " + + "'%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'"); + } - generator.generate(aWriter, generationData, new PrintWriter(new NullWriter())); + if (searchStatus.length()>0) { + queryBuilder.appendAndCondition("to_comment_status="+Integer.parseInt(searchStatus)); } - catch (Throwable t) { - t.printStackTrace(System.out); - throw new ServletModuleException(t.getMessage()); + + 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, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0); } - public void listarticlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException + public void articlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { 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)); - } - catch (ServletModuleException e) { - throw e; + returnCommentList( req, res, "to_media="+articleId, "webdb_create desc", 0); } catch (Throwable e) { - e.printStackTrace(System.out); - throw new ServletModuleException(e.getMessage()); + throw new ServletModuleFailure(e); } } - 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 ServletModuleExc { + // 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("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) { + 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); - throw new ServletModuleException(e.getMessage()); + throw new ServletModuleFailure(e); } } } +