X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleUploadedMedia.java;h=ba34a6392260daaab9be2c2154ee3db9b0f0942d;hb=a0e0629d9b38c2eb4eba6d9420ccbc6d1b44ab00;hp=30f9a2facb099da063230c630760241dcf3e51e5;hpb=97a33333e6920e0b2578e506475f04c6d1d45a38;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleUploadedMedia.java b/source/mircoders/servlet/ServletModuleUploadedMedia.java index 30f9a2fa..ba34a639 100755 --- a/source/mircoders/servlet/ServletModuleUploadedMedia.java +++ b/source/mircoders/servlet/ServletModuleUploadedMedia.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001, 2002 The Mir-coders group + * Copyright (C) 2001, 2002 The Mir-coders group * * This file is part of Mir. * @@ -18,57 +18,65 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * In addition, as a special exception, The Mir-coders gives permission to link - * the code of this program with the com.oreilly.servlet library, any library - * licensed under the Apache Software License, The Sun (tm) Java Advanced - * Imaging library (JAI), The Sun JIMI library (or with modified versions of - * the above that use the same license as the above), and distribute linked - * combinations including the two. You must obey the GNU General Public - * License in all respects for all of the code used other than the above - * mentioned libraries. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If you do - * not wish to do so, delete this exception statement from your version. + * the code of this program with any library licensed under the Apache Software License, + * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library + * (or with modified versions of the above that use the same license as the above), + * and distribute linked combinations including the two. You must obey the + * GNU General Public License in all respects for all of the code used other than + * the above mentioned libraries. If you modify this file, you may extend this + * exception to your version of the file, but you are not obligated to do so. + * If you do not wish to do so, delete this exception statement from your version. */ package mircoders.servlet; -import freemarker.template.SimpleHash; -import freemarker.template.SimpleList; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import javax.servlet.ServletContext; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import mir.config.MirPropertiesConfiguration; import mir.entity.Entity; import mir.entity.EntityList; +import mir.log.LoggerWrapper; import mir.media.MediaHelper; import mir.media.MirMedia; -import mir.media.MirMediaException; -import mir.media.MirMediaUserException; -import mir.misc.*; -import mir.module.ModuleException; import mir.servlet.ServletModule; -import mir.servlet.ServletModuleException; -import mir.servlet.ServletModuleUserException; -import mir.storage.Database; -import mir.storage.StorageObjectException; -import mircoders.entity.EntityUsers; +import mir.servlet.ServletModuleExc; +import mir.servlet.ServletModuleFailure; +import mir.servlet.ServletModuleUserExc; +import mir.session.UploadedFile; +import mir.util.ExceptionFunctions; +import mir.util.HTTPParsedRequest; +import mircoders.entity.EntityComment; +import mircoders.entity.EntityContent; import mircoders.entity.EntityUploadedMedia; -import mircoders.storage.DatabaseMediaType; +import mircoders.entity.EntityUsers; +import mircoders.media.MediaUploadProcessor; +import mircoders.module.*; +import mircoders.storage.DatabaseComment; +import mircoders.storage.DatabaseContent; import mircoders.storage.DatabaseMediafolder; -import mircoders.media.MediaRequest; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import javax.servlet.ServletContext; -import javax.servlet.ServletOutputStream; +import org.apache.commons.fileupload.FileItem; -import java.io.IOException; -import java.io.InputStream; -import java.net.URLEncoder; -import java.util.GregorianCalendar; -import java.util.HashMap; +import freemarker.template.SimpleHash; +import freemarker.template.SimpleList; /* * ServletModuleBilder - * liefert HTML fuer Bilder * - * @version $Id: ServletModuleUploadedMedia.java,v 1.12 2002/11/29 13:43:42 zapata Exp $ + * @version $Id: ServletModuleUploadedMedia.java,v 1.28 2003/04/29 02:36:51 zapata Exp $ * @author RK, the mir-coders group */ @@ -81,80 +89,133 @@ public abstract class ServletModuleUploadedMedia return null; } + public ServletModuleUploadedMedia() { + super(); + logger = new LoggerWrapper("ServletModule.UploadedMedia"); + } + public void insert(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException, ServletModuleUserException { + throws ServletModuleExc, ServletModuleUserExc { try { + HTTPParsedRequest parsedRequest = new HTTPParsedRequest(req, + configuration.getString("Mir.DefaultEncoding"), + configuration.getInt("MaxMediaUploadSize")*1024, + configuration.getString("TempDir")); + EntityUsers user = _getUser(req); - MediaRequest mediaReq = new MediaRequest(user.getId(), false, false); - WebdbMultipartRequest mp = new WebdbMultipartRequest(req, (FileHandler)mediaReq); - EntityList mediaList = mediaReq.getEntityList(); + Map mediaValues = new HashMap(); + + mediaValues.put("to_publisher", _getUser(req).getId()); + + Iterator i = mainModule.getStorageObject().getFields().iterator(); + while (i.hasNext()) { + String field = (String) i.next(); + String value = parsedRequest.getParameter(field); + if (value!=null) + mediaValues.put(field, value); + } + + List mediaList = new Vector(); + + i = parsedRequest.getFiles().iterator(); + while (i.hasNext()) { + UploadedFile file = new mir.session.CommonsUploadedFileAdapter((FileItem) i.next()); + + String suffix = file.getFieldName().substring(5); + mediaValues.put("title", parsedRequest.getParameter("media_title" + suffix)); + + mediaList.add(MediaUploadProcessor.processMediaUpload(file, mediaValues)); + } + + String articleid = parsedRequest.getParameter("articleid"); + String commentid = parsedRequest.getParameter("commentid"); + + if (articleid!=null) { + EntityContent entContent = (EntityContent) DatabaseContent.getInstance().selectById(articleid); + + i=mediaList.iterator(); + + while (i.hasNext()) { + entContent.attach(((EntityUploadedMedia) i.next()).getId()); + } + + ((ServletModuleContent) ServletModuleContent.getInstance())._showObject(articleid, req, res); + + return; + } + + if (commentid!=null) { + EntityComment comment = (EntityComment) DatabaseComment.getInstance().selectById(commentid); + + i=mediaList.iterator(); + + while (i.hasNext()) { + comment.attach( ( (EntityUploadedMedia) i.next()).getId()); + } + + ((ServletModuleComment) ServletModuleComment.getInstance()).showComment(commentid, req, res); + + return; + } SimpleHash mergeData = new SimpleHash(); SimpleHash popups = new SimpleHash(); - mergeData.put("contentlist", mediaList); - if (mediaList.getOrder() != null) { - mergeData.put("order", mediaList.getOrder()); - mergeData.put("order_encoded", URLEncoder.encode(mediaList.getOrder())); - } - mergeData.put("count", (new Integer(mediaList.getCount())).toString()); - mergeData.put("from", (new Integer(mediaList.getFrom())).toString()); - mergeData.put("to", (new Integer(mediaList.getTo())).toString()); - if (mediaList.hasNextBatch()) - mergeData.put("next", (new Integer(mediaList.getNextBatch())).toString()); - if (mediaList.hasPrevBatch()) - mergeData.put("prev", (new Integer(mediaList.getPrevBatch())).toString()); + mergeData.put("contentlist", mir.generator.FreemarkerGenerator.makeAdapter(mediaList)); + + mergeData.put("count", Integer.toString(mediaList.size())); + mergeData.put("from", "1"); + mergeData.put("to", Integer.toString(mediaList.size())); + //fetch the popups popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData()); // raus damit deliver(req, res, mergeData, popups, templateListString); } - catch (FileHandlerUserException e) { - throw new ServletModuleUserException(e.getMsg()); - } - catch (FileHandlerException e) { - throw new ServletModuleException( - "upload -- media handling exception " + e.toString()); - } - catch (StorageObjectException e) { - throw new ServletModuleException("upload -- storageobjectexception " - + e.toString()); - } - catch (IOException e) { - throw new ServletModuleException("upload -- ioexception " + e.toString()); + catch (Throwable t) { + Throwable cause = ExceptionFunctions.traceCauseException(t); + + if (cause instanceof ModuleMediaType.UnsupportedMimeTypeExc) { + throw new ServletModuleUserExc("media.error.unsupportedformat", new String[] {}); + } + throw new ServletModuleFailure("ServletModuleUploadedMedia.insert: " + t.toString(), t); } } - public void update(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException { + public void update(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { try { + HTTPParsedRequest parsedRequest = new HTTPParsedRequest(req, + configuration.getString("Mir.DefaultEncoding"), + configuration.getInt("MaxMediaUploadSize")*1024, + configuration.getString("TempDir")); EntityUsers user = _getUser(req); - WebdbMultipartRequest mp = new WebdbMultipartRequest(req, null); - HashMap parameters = mp.getParameters(); + Map mediaValues = new HashMap(); + + Iterator i = mainModule.getStorageObject().getFields().iterator(); + while (i.hasNext()) { + String field = (String) i.next(); + String value = parsedRequest.getParameter(field); + if (value!=null) + mediaValues.put(field, value); + } - parameters.put("to_publisher", user.getId()); - parameters.put("is_produced", "0"); - if (!parameters.containsKey("is_published")) - parameters.put("is_published", "0"); + mediaValues.put("to_publisher", user.getId()); + mediaValues.put("is_produced", "0"); + if (!mediaValues.containsKey("is_published")) + mediaValues.put("is_published", "0"); - String id = mainModule.set(parameters); + String id = mainModule.set(mediaValues); logger.debug("update: media ID = " + id); _edit(id, req, res); } - catch (IOException e) { - throw new ServletModuleException("upload -- ioexception " + e.toString()); - } - catch (ModuleException e) { - throw new ServletModuleException("upload -- moduleexception " + e.toString()); - } - catch (Exception e) { - throw new ServletModuleException("upload -- exception " + e.toString()); + catch (Throwable e) { + throw new ServletModuleFailure("upload -- exception " + e.toString(), e); } } - public void list(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { + public void list(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { // Parameter auswerten SimpleHash mergeData = new SimpleHash(); SimpleHash popups = new SimpleHash(); @@ -173,11 +234,11 @@ public abstract class ServletModuleUploadedMedia mergeData.put("offset", offset); String order = req.getParameter("order"); - if (order == null) order = "webdb_lastchange desc"; + if (order == null || order.equals("")) order = "webdb_lastchange desc"; // if in connection mode to content - String cid = req.getParameter("cid"); - mergeData.put("cid", cid); + mergeData.put("articleid", req.getParameter("articleid")); + mergeData.put("commentid", req.getParameter("commentid")); // sql basteln @@ -221,27 +282,29 @@ public abstract class ServletModuleUploadedMedia deliver(req, res, mergeData, popups, templateListString); } - catch (ModuleException e) { - throw new ServletModuleException(e.toString()); - } - catch (Exception e) { - throw new ServletModuleException(e.toString()); + catch (Throwable e) { + throw new ServletModuleFailure(e); } } - public void add(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { + public void add(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { try { SimpleHash mergeData = new SimpleHash(); - mergeData.put("new", "1"); SimpleHash popups = new SimpleHash(); - popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData()); - String maxMedia = MirConfig.getProp("ServletModule.OpenIndy.MaxMediaUploadItems"); + String maxMedia = MirPropertiesConfiguration.instance().getString("ServletModule.OpenIndy.MaxMediaUploadItems"); String numOfMedia = req.getParameter("medianum"); - if(numOfMedia==null||numOfMedia.equals("")){ + + mergeData.put("new", "1"); + mergeData.put("articleid", req.getParameter("articleid")); + mergeData.put("commentid", req.getParameter("commentid")); + + popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData()); + + if (numOfMedia==null || numOfMedia.equals("")) { numOfMedia="1"; - } else if(Integer.parseInt(numOfMedia) > Integer.parseInt(maxMedia)) { + } + else if(Integer.parseInt(numOfMedia) > Integer.parseInt(maxMedia)) { numOfMedia = maxMedia; } @@ -254,19 +317,18 @@ public abstract class ServletModuleUploadedMedia mergeData.put("medianum",numOfMedia); mergeData.put("mediafields",mediaFields); deliver(req, res, mergeData, popups, templateObjektString); - } catch (Exception e) { - throw new ServletModuleException(e.toString()); + } + catch (Exception e) { + throw new ServletModuleFailure(e); } } - public void edit(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { + public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { String idParam = req.getParameter("id"); _edit(idParam, req, res); } - private void _edit(String idParam, HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { + private void _edit(String idParam, HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { if (idParam != null && !idParam.equals("")) { try { SimpleHash popups = new SimpleHash(); @@ -274,15 +336,12 @@ public abstract class ServletModuleUploadedMedia deliver(req, res, mainModule.getById(idParam), popups, templateObjektString); } - catch (ModuleException e) { - throw new ServletModuleException(e.toString()); - } - catch (StorageObjectException e) { - throw new ServletModuleException(e.toString()); + catch (Throwable e) { + throw new ServletModuleFailure(e); } } else { - throw new ServletModuleException("ServletmoduleUploadedMedia :: _edit without id"); + throw new ServletModuleExc("ServletmoduleUploadedMedia :: _edit without id"); } } @@ -293,9 +352,7 @@ public abstract class ServletModuleUploadedMedia return (EntityUsers) session.getAttribute("login.uid"); } - public void getMedia(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException - { + public void getMedia(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { String idParam = req.getParameter("id"); if (idParam!=null && !idParam.equals("")) { try { @@ -303,8 +360,7 @@ public abstract class ServletModuleUploadedMedia Entity mediaType = ent.getMediaType(); MirMedia mediaHandler; - ServletContext ctx = - (ServletContext)MirConfig.getPropAsObject("ServletContext"); + ServletContext ctx = MirPropertiesConfiguration.getContext(); String fName = ent.getId()+"."+mediaType.getValue("name"); mediaHandler = MediaHelper.getHandler(mediaType); @@ -322,39 +378,30 @@ public abstract class ServletModuleUploadedMedia in.close(); out.close(); } - - catch (IOException e) { - throw new ServletModuleException(e.toString()); - } - catch (ModuleException e) { - throw new ServletModuleException(e.toString()); - } - catch (Exception e) { - throw new ServletModuleException(e.toString()); + catch (Throwable e) { + throw new ServletModuleFailure(e); } } else logger.error("id not specified."); // no exception allowed } - public void getIcon(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException + public void getIcon(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc { String idParam = req.getParameter("id"); if (idParam!=null && !idParam.equals("")) { try { - EntityUploadedMedia ent = (EntityUploadedMedia)mainModule.getById(idParam); + EntityUploadedMedia ent = (EntityUploadedMedia) mainModule.getById(idParam); Entity mediaType = ent.getMediaType(); MirMedia mediaHandler; - ServletContext ctx = - (ServletContext)MirConfig.getPropAsObject("ServletContext"); - String fName = ent.getId()+"."+mediaType.getValue("name"); - mediaHandler = MediaHelper.getHandler(mediaType); InputStream in = mediaHandler.getIcon(ent); - res.setContentType(ctx.getMimeType(fName)); + if (in==null) + throw new ServletModuleExc("no icon available"); + + res.setContentType(mediaHandler.getIconMimeType(ent, mediaType)); //important that before calling this res.getWriter was not called first ServletOutputStream out = res.getOutputStream(); @@ -367,14 +414,8 @@ public abstract class ServletModuleUploadedMedia out.close(); } - catch (IOException e) { - throw new ServletModuleException(e.toString()); - } - catch (ModuleException e) { - throw new ServletModuleException(e.toString()); - } - catch (Exception e) { - throw new ServletModuleException(e.toString()); + catch (Throwable e) { + throw new ServletModuleFailure(e); } } else logger.error("getIcon: id not specified.");