X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Flocalizer%2Fbasic%2FMirBasicArticlePostingHandler.java;h=c3f42e49d2e39f8d04eb271f8a58f4f095684753;hb=88455349028d7ecd46fe04ff8662b584c54c6143;hp=3923bcb78317068e99bd81f6d904462352ed86c1;hpb=b865b9333cb77f34a540a5ec102687af24f5cf24;p=mir.git diff --git a/source/mircoders/localizer/basic/MirBasicArticlePostingHandler.java b/source/mircoders/localizer/basic/MirBasicArticlePostingHandler.java index 3923bcb7..c3f42e49 100755 --- a/source/mircoders/localizer/basic/MirBasicArticlePostingHandler.java +++ b/source/mircoders/localizer/basic/MirBasicArticlePostingHandler.java @@ -30,12 +30,6 @@ package mircoders.localizer.basic; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import mir.entity.Entity; import mir.misc.StringUtil; import mir.session.Request; @@ -43,34 +37,37 @@ import mir.session.Response; import mir.session.Session; import mir.session.SessionExc; import mir.session.SessionFailure; -import mir.session.UploadedFile; -import mir.util.ExceptionFunctions; +import mir.session.ValidationHelper; +import mir.util.EntityUtility; import mircoders.entity.EntityContent; import mircoders.global.MirGlobal; import mircoders.media.MediaUploadProcessor; -import mircoders.module.ModuleContent; -import mircoders.module.ModuleMediaType; +import mircoders.module.ModuleArticleType; +import mircoders.module.ModuleMediafolder; import mircoders.storage.DatabaseContent; import mircoders.storage.DatabaseContentToMedia; import mircoders.storage.DatabaseContentToTopics; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + /** - * - *

Title: Experimental session handler for article postings

- *

Description:

- *

Copyright: Copyright (c) 2003

- *

Company:

- * @author Zapata - * @version 1.0 + * Extensible handler for open article postings */ public class MirBasicArticlePostingHandler extends MirBasicPostingSessionHandler { - protected ModuleContent contentModule = new ModuleContent(DatabaseContent.getInstance()); protected DatabaseContentToMedia contentToMedia = DatabaseContentToMedia.getInstance(); protected DatabaseContent contentDatabase = DatabaseContent.getInstance(); public MirBasicArticlePostingHandler() { - super(); + this(false); + } + + public MirBasicArticlePostingHandler(boolean aPersistentUploadedFiles) { + super(aPersistentUploadedFiles); setResponseGenerators( configuration.getString("Localizer.OpenSession.article.EditTemplate"), @@ -78,11 +75,13 @@ public class MirBasicArticlePostingHandler extends MirBasicPostingSessionHandler configuration.getString("Localizer.OpenSession.article.UnsupportedMediaTemplate"), configuration.getString("Localizer.OpenSession.article.DoneTemplate")); } - + /** + * {@inheritDoc} + */ protected void initializeResponseData(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure { super.initializeResponseData(aRequest, aSession, aResponse); - Iterator i = DatabaseContent.getInstance().getFields().iterator(); + Iterator i = DatabaseContent.getInstance().getFieldNames().iterator(); while (i.hasNext()) { String field = (String) i.next(); aResponse.setResponseValue(field, aRequest.getParameter(field)); @@ -90,29 +89,49 @@ public class MirBasicArticlePostingHandler extends MirBasicPostingSessionHandler aResponse.setResponseValue("to_topic", aRequest.getParameters("to_topic")); } + /** + * {@inheritDoc} + */ public void validate(List aResults, Request aRequest, Session aSession) throws SessionExc, SessionFailure { - testFieldEntered(aRequest, "title", "validationerror.missing", aResults); - testFieldEntered(aRequest, "description", "validationerror.missing", aResults); - testFieldEntered(aRequest, "creator", "validationerror.missing", aResults); - testFieldEntered(aRequest, "content_data", "validationerror.missing", aResults); + super.validate(aResults, aRequest, aSession); + + ValidationHelper.testFieldEntered(aRequest, "title", "validationerror.missing", aResults); + ValidationHelper.testFieldEntered(aRequest, "description", "validationerror.missing", aResults); + ValidationHelper.testFieldEntered(aRequest, "creator", "validationerror.missing", aResults); + ValidationHelper.testFieldEntered(aRequest, "content_data", "validationerror.missing", aResults); } + /** + * Called just before the article is stored in the database. + * The last opportunity to alter fields. + */ public void finalizeArticle(Request aRequest, Session aSession, EntityContent anArticle) throws SessionExc, SessionFailure { - anArticle.setValueForProperty("is_published", "1"); - anArticle.setValueForProperty("is_produced", "0"); - anArticle.setValueForProperty("date", StringUtil.date2webdbDate(new GregorianCalendar())); - anArticle.setValueForProperty("is_html","0"); - anArticle.setValueForProperty("publish_path", StringUtil.webdbDate2path(anArticle.getValue("date"))); - anArticle.setValueForProperty("to_article_type", "1"); - anArticle.setValueForProperty("to_publisher", "1"); + try { + anArticle.setFieldValue("is_published", "1"); + anArticle.setFieldValue("is_produced", "0"); + anArticle.setFieldValue("date", StringUtil.date2webdbDate(new GregorianCalendar())); + anArticle.setFieldValue("is_html", "0"); + anArticle.setFieldValue("publish_path", StringUtil.webdbDate2path(anArticle. getFieldValue("date"))); + + ModuleArticleType module = new ModuleArticleType(); + anArticle.setFieldValue("to_article_type", module.articleTypeIdForName(configuration.getString("Localizer.OpenSession.article.DefaultArticleType"))); + anArticle.setFieldValue("to_publisher", "1"); + } + catch (Throwable t) { + throw new SessionFailure(t); + } } - public void setArticleTopics(Request aRequest, Session aSession, EntityContent aContent) throws SessionExc, SessionFailure { + /** + * Extracts topics from the request and associated the + * article to them. + */ + public void setArticleTopics(Request aRequest, Session aSession, EntityContent anArticle) throws SessionExc, SessionFailure { // topics: List topics = aRequest.getParameters("to_topic"); if (topics.size() > 0) { try { - DatabaseContentToTopics.getInstance().setTopics(aContent.getId(), topics); + DatabaseContentToTopics.getInstance().setTopics(anArticle.getId(), topics); } catch (Throwable e) { logger.error("setting content_x_topic failed"); @@ -126,8 +145,8 @@ public class MirBasicArticlePostingHandler extends MirBasicPostingSessionHandler String id; Map values = getIntersectingValues(aRequest, DatabaseContent.getInstance()); - EntityContent article = (EntityContent) contentModule.createNew(); - article.setValues(values); + EntityContent article = (EntityContent) contentDatabase.createNewEntity(); + article.setFieldValues(values); finalizeArticle(aRequest, aSession, article); id = article.insert(); @@ -137,23 +156,31 @@ public class MirBasicArticlePostingHandler extends MirBasicPostingSessionHandler } aSession.setAttribute("content", article); - setArticleTopics(aRequest, aSession, article); - } catch (Throwable t) { throw new SessionFailure(t); } } - public void processUploadedFile(Request aRequest, Session aSession, UploadedFile aFile) throws SessionExc, SessionFailure { + public void processAttachmentError(Request aRequest, Session aSession, Attachment aFile, Throwable anError) { + EntityUtility.appendLineToField( ((EntityContent) aSession.getAttribute("content")), "comment", + "error with attachment: " + anError.toString()); + ((EntityContent) aSession.getAttribute("content")).update(); + } + + public void processAttachment(Request aRequest, Session aSession, Attachment aFile) throws SessionExc, SessionFailure { try { Map values = new HashMap(); - values.put("title", aRequest.getParameter(aFile.getFieldName()+"_title")); + values.put("creator", aRequest.getParameter("creator")); + values.putAll(aFile.getAllAttributes()); values.put("creator", aRequest.getParameter("creator")); values.put("to_publisher", "0"); values.put("is_published", "1"); values.put("is_produced", "1"); + ModuleMediafolder module = new ModuleMediafolder(); + values.put("to_media_folder", module.mediaFolderIdForName(configuration.getString("Localizer.OpenSession.article.DefaultMediaFolder"))); + Entity mediaItem = MediaUploadProcessor.processMediaUpload(aFile, values); mediaItem.update(); contentToMedia.addMedia(((EntityContent) aSession.getAttribute("content")).getId(), mediaItem.getId()); @@ -168,12 +195,12 @@ public class MirBasicArticlePostingHandler extends MirBasicPostingSessionHandler MirGlobal.abuse().checkArticle(article, aRequest, null); try { - MirGlobal.localizer().openPostings().afterContentPosting(article); + MirGlobal.localizer().openPostings().afterArticlePosting(article); } catch (Throwable t) { throw new SessionFailure(t); } logger.info("article posted"); - }; + } -} \ No newline at end of file +}