X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleOpenIndy.java;h=6e10b89c2b6c7ca2d8bf8e8803505f45a1f23fec;hb=c6a2204d8d75293256fd17c07e54971d7672359a;hp=ff2935447e49d1e4f25d42116fac358ed6ea1872;hpb=f648183ac28a7f1fc1a4dede14065d752404576b;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleOpenIndy.java b/source/mircoders/servlet/ServletModuleOpenIndy.java index ff293544..6e10b89c 100755 --- a/source/mircoders/servlet/ServletModuleOpenIndy.java +++ b/source/mircoders/servlet/ServletModuleOpenIndy.java @@ -36,40 +36,30 @@ import mircoders.producer.*; public class ServletModuleOpenIndy extends ServletModule { - private ModuleContent contentModule; - private ModuleImages imageModule; - private ModuleTopics themenModule; - - //config values - private static String commentFormTemplate = "open/comment.template"; - private static String commentFormDoneTemplate = "open/comment_done.template"; - private static String commentFormDupeTemplate = "open/comment_dupe.template"; - private static String postingFormTemplate = "open/posting.template"; - private static String postingFormDoneTemplate = "open/posting_done.template"; - private static String postingFormDupeTemplate = "open/posting_dupe.template"; - private static boolean directOp = true; + + private String commentFormTemplate, commentFormDoneTemplate, + commentFormDupeTemplate; + private String postingFormTemplate, postingFormDoneTemplate, + postingFormDupeTemplate; + private ModuleContent contentModule; + private ModuleImages imageModule; + private ModuleTopics themenModule; + private String directOp ="yes"; // Singelton / Kontruktor private static ServletModuleOpenIndy instance = new ServletModuleOpenIndy(); public static ServletModule getInstance() { return instance; } - public static void setDirectOp(boolean v) { - directOp=v; - } - -// public static setCommentFormTemplate(String template) throws { - // if - private ServletModuleOpenIndy() { try { - theLog = Logfile.getInstance(this.getClass().getName()); - //commentFormTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentTemplate"); - //commentFormDoneTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentDoneTemplate"); - //commentFormDupeTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentDupeTemplate"); - //postingFormTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingTemplate"); - //postingFormDoneTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingDoneTemplate"); - //postingFormDupeTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingDupeTemplate"); - //directOp = MirConfig.getProp("DirectOpenposting").toLowerCase(); + theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("ServletModule.OpenIndy.Logfile")); + commentFormTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentTemplate"); + commentFormDoneTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentDoneTemplate"); + commentFormDupeTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentDupeTemplate"); + postingFormTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingTemplate"); + postingFormDoneTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingDoneTemplate"); + postingFormDupeTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingDupeTemplate"); + directOp = MirConfig.getProp("DirectOpenposting").toLowerCase(); mainModule = new ModuleComment(DatabaseComment.getInstance()); contentModule = new ModuleContent(DatabaseContent.getInstance()); themenModule = new ModuleTopics(DatabaseTopics.getInstance()); @@ -154,8 +144,8 @@ public class ServletModuleOpenIndy extends ServletModule * Method for delivering the form-Page for open posting */ - public void addposting(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException - { + public void addposting(HttpServletRequest req, HttpServletResponse res) + throws ServletModuleException { SimpleHash mergeData = new SimpleHash(); String numOfMedia = req.getParameter("medianum"); if(numOfMedia==null||numOfMedia.equals("")){ @@ -170,15 +160,19 @@ public class ServletModuleOpenIndy extends ServletModule } mergeData.put("medianum",numOfMedia); mergeData.put("mediafields",mediaFields); - mergeData.put("themenPopupData", themenModule.getTopicsAsSimpleList()); /** @todo popups missing */ try{ - mergeData.put("languagePopUpData",DatabaseLanguage.getInstance().getPopupData()); + SimpleList popUpData = DatabaseLanguage.getInstance().getPopupData(); + mergeData.put("languagePopUpData", popUpData ); + mergeData.put("themenPopupData", themenModule.getTopicsAsSimpleList()); } catch (Exception e) { - theLog.printError("languagePopUpData failed"); - } + theLog.printError("languagePopUpData or getTopicslist failed " + +e.toString()); + throw new ServletModuleException("OpenIndy -- failed getting language or topics: "+e.toString()); + } + deliver(req, res, mergeData, postingFormTemplate); } @@ -188,15 +182,21 @@ public class ServletModuleOpenIndy extends ServletModule */ public void insposting(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException + throws ServletModuleException, ServletModuleUserException { SimpleHash mergeData = new SimpleHash(); boolean setMedia=false; + boolean setTopic = false; try { WebdbMultipartRequest mp = new WebdbMultipartRequest(req); HashMap withValues = mp.getParameters(); + + if ((((String)withValues.get("title")).length() == 0) || + (((String)withValues.get("description")).length() == 0) || + (((String)withValues.get("content_data")).length() == 0)) + throw new ServletModuleUserException("Missing field"); // call the routines that escape html @@ -217,10 +217,11 @@ public class ServletModuleOpenIndy extends ServletModule withValues.put("date", StringUtil.date2webdbDate(new GregorianCalendar())); withValues.put("publish_path", StringUtil.webdbDate2path((String)withValues.get("date"))); withValues.put("is_produced", "0"); - // op-articles are immediatly published - withValues.put("is_published","1"); + // op-articles are not immediatly published + // we don't know that all is good yet (media, title is present, etc..) + withValues.put("is_published","0"); // if op direct article-type == newswire - if (directOp) withValues.put("to_article_type","1"); + if (directOp.equals("yes")) withValues.put("to_article_type","1"); // owner is openposting user withValues.put("to_publisher","1"); @@ -232,7 +233,7 @@ public class ServletModuleOpenIndy extends ServletModule theLog.printDebugInfo("id: "+cid); //insert was not successfull if(cid==null){ - //How do we know that it was not succesful cause of a + //How do we know that it was not succesful cause of a //dupe, what if it failed cause of "No space left on device"? //Or is there something I am missing? Wouldn't it be better //to have an explicit dupe check and then insert? I have no @@ -242,12 +243,15 @@ public class ServletModuleOpenIndy extends ServletModule } String[] to_topicsArr = mp.getParameterValues("to_topic"); - if (to_topicsArr != null && to_topicsArr.length > 0) { + + if (to_topicsArr != null && to_topicsArr.length > 0) { try{ DatabaseContentToTopics.getInstance().setTopics(cid,to_topicsArr); - theLog.printError("setting content_x_topic success"); + setTopic = true; } catch (Exception e) { theLog.printError("setting content_x_topic failed"); + contentModule.deleteById(cid); + throw new ServletModuleException("smod - openindy :: insposting: setting content_x_topic failed: "+e.toString()); } //end try } //end if @@ -262,39 +266,38 @@ public class ServletModuleOpenIndy extends ServletModule //sends us. (the "Oreilly method") String contentType = mpReq.getContentType(); - theLog.printError("FROM BROWSER: "+contentType); + theLog.printInfo("FROM BROWSER: "+contentType); //if the client browser sent us unknown (text/plain is default) //or if we got application/octet-stream, it's possible that //the browser is in error, better check against the file extension - if (contentType.equals("text/plain") || + if (contentType.equals("text/plain") || contentType.equals("application/octet-stream")) { - /** + /** * This is just a temporary way to get the content-type via * the .extension , we could maybe use a magic method, by looking * at the header (first few bytes) of the file. (like the file(1) * command). - * The Oreilly method relies on the content-type that the client + * The Oreilly method relies on the content-type that the client * browser sends and that sometimes is application-octet stream with * broken/mis-configured browsers. - * - * The map file should be Mir/content-types.properties, it's the - * default Sun Java file with some additional entries that it did - * not have. So if you support a new media type you have to make + * + * The map file should be Mir/content-types.properties, it's the + * default Sun Java file with some additional entries that it did + * not have. So if you support a new media type you have to make * sure that it is in this file -mh */ contentType = FileUtil.guessContentTypeFromName(fileName); - theLog.printError("tYPE: "+contentType); if (contentType==null) contentType = "text/plain"; // rfc1867 says this is the default } HashMap mediaValues = new HashMap(); - theLog.printError("CONTENT TYPE IS: "+contentType); + theLog.printInfo("CONTENT TYPE IS: "+contentType); - if (contentType.equals("text/plain") || + if (contentType.equals("text/plain") || contentType.equals("application/octet-stream")) { - throw new ServletModuleException("ModuleException: One or more files of unrecognized types"); + throw new ServletModuleUserException("One or more files of unrecognized types"); } String mediaTitle=(String)withValues.get("media_title"+i); @@ -308,71 +311,102 @@ public class ServletModuleOpenIndy extends ServletModule mediaValues.put("to_publisher", "1"); // op user mediaValues.put("to_media_folder", "7"); // op media_folder mediaValues.put("is_produced", "0"); - mediaValues.put("is_published","1"); + mediaValues.put("is_published","0"); //the where clause to find the media_type entry //from the content-type. - //we use the media type entry to lookup the + //we use the media type entry to lookup the //media Handler/Storage classes - String wc = " mime_type='"+contentType+"'"; + //String wc = " mime_type = '"+contentType+"'"; - EntityList mediaTypesList = DatabaseMediaType.getInstance().selectByWhereClause(wc); + // @todo this should probably be moved to DatabaseMediaType -mh + String[] cTypeSplit = StringUtil.split(contentType, "/"); + String wc = " mime_type LIKE '"+cTypeSplit[0]+"%'"; + + DatabaseMediaType mediaTypeStor = DatabaseMediaType.getInstance(); + EntityList mediaTypesList = mediaTypeStor.selectByWhereClause(wc); String mediaTypeId = null; - String mediaStorageName = null; - String mediaHandlerName = null; + MirMedia mediaHandler; + Database mediaStorage; //if we found an entry matching the //content-type int the table. if (mediaTypesList.size() > 0) { + Entity mediaType = null; + + // find out if we an exact content-type match if so take it. + // otherwise just use the first one. + // @todo this should probably be moved to DatabaseMediaType -mh + for(int j=0;j 0 } //end for Iterator... + //if we're here all is ok... + EntityContent contentEnt = (EntityContent)contentModule.getById(cid); + contentEnt.setValueForProperty("is_published","1"); + contentEnt.update(); + + //dereference mp. -mh mp=null; @@ -381,8 +415,12 @@ public class ServletModuleOpenIndy extends ServletModule // producing new page new ProducerContent().handle(null, null, false, false,cid); //if direct op producing startpage - if (directOp) new ProducerStartPage().handle(null,null); + if (directOp.equals("yes")) new ProducerStartPage().handle(null,null); + //produce the topicPages if set + //should be more intelligent + //if(setTopic==true) new ProducerTopics().handle(null,null); + // sync the server //should be configureable int exitValue = Helper.rsync(); @@ -394,7 +432,6 @@ public class ServletModuleOpenIndy extends ServletModule catch (ModuleException e) { throw new ServletModuleException("ModuleException"+e.toString());} deliver(req, res, mergeData, postingFormDoneTemplate); - //System.gc(); } }