* @author RK
*/
-public class ServletModuleImages extends mir.servlet.ServletModule
+public class ServletModuleImages extends ServletModuleUploadedMedia
{
//private static DatabaseRights dbRights;
}
}
-
- public void insert(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
- {
- try {
- WebdbMultipartRequest mp = new WebdbMultipartRequest(req);
- HashMap parameters = mp.getParameters();
- String mediaId=null;
- MpRequest mpReq = (MpRequest)mp.requestList.get(0);
- byte[] imageData=mpReq.getMedia();
- String fileName=mpReq.getFilename();
- String contentType= mpReq.getContentType();
-
- EntityUsers user = _getUser(req);
- parameters.put("date", StringUtil.date2webdbDate(new GregorianCalendar()));
- parameters.put("to_publisher", user.getId());
- parameters.put("is_produced", "0");
- if (!parameters.containsKey("is_published"))
- parameters.put("is_published","0");
-
- String id = mainModule.add(parameters);
- EntityImages entImage = (EntityImages)mainModule.getById(id);
-
- if (imageData!=null && fileName!=null) {
- //the where clause to find the media_type entry
- //from the content-type.
- //we use the media type entry to lookup the
- //media Handler/Storage classes
- String wc = " mime_type='"+contentType+"'";
-
- EntityList mediaTypesList = DatabaseMediaType.getInstance().selectByWhereClause(wc);
- String mediaTypeId = null;
- String mediaStorageName = null;
- String mediaHandlerName = null;
-
- //if we found an entry matching the
- //content-type int the table.
- if (mediaTypesList.size() > 0) {
- //get the class names from the media_type table.
- mediaTypeId = mediaTypesList.elementAt(0).getId();
- mediaStorageName = mediaTypesList.elementAt(0).getValue("tablename");
- mediaHandlerName = mediaTypesList.elementAt(0).getValue("classname");
- parameters.put("to_media_type",mediaTypeId);
-
- //load the classes via reflection
- String MediaId;
- try {
- Class mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
- Method m = mediaStorageClass.getMethod("getInstance", null);
- Database mediaStorage = (Database)m.invoke(null, null);
- Entity mediaEnt = (Entity)mediaStorage.getEntityClass().newInstance();
- mediaEnt.setStorage(mediaStorage);
- mediaEnt.setValues(parameters);
- mediaId = mediaEnt.insert();
-
- Class mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
- MirMedia mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
- //save and store the media data/metadata
- mediaHandler.set(mpReq.getMedia(), mediaEnt,mediaTypesList.elementAt(0));
-
- //were done with mpReq at this point, dereference it. as it contains
- //mucho mem. -mh 01.10.2001
- mpReq=null;
-
- if(mediaId!=null){
- new ProducerImages().handle(null, null, false, false, mediaId);
- }
- } catch (Exception e) {
- theLog.printError("setting uploaded_media failed: "+e.toString());
- } //end try-catch
-
-
- entImage.setImage(imageData);
- }
- _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 (StorageObjectException e) { throw new ServletModuleException("StorageObjectException" + e.toString());}
-
- }
-
- public void update(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
- {
-
- try {
- WebdbMultipartRequest mp = new WebdbMultipartRequest(req);
- HashMap parameters = mp.getParameters();
- //MpRequest mpReq = (MpRequest)mp.requestList.get(0);
- //byte[] imageData=mpReq.getMedia();
- //String fileName=mpReq.getFilename();
- //String contentType=mpReq.getContentType();
-
- EntityUsers user = _getUser(req);
- parameters.put("to_publisher", user.getId());
- parameters.put("is_produced", "0");
- if (!parameters.containsKey("is_published"))
- parameters.put("is_published","0");
-
- String id = mainModule.set(parameters);
- theLog.printError("Image 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());}
-
- }
-
-
public void showimg(HttpServletRequest req, HttpServletResponse res)
throws ServletModuleException
{
else throw new ServletModuleException("id nicht angeben.");
}
- public void list(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 query_media_folder = req.getParameter("query_media_folder");
- mergeData.put("query_media_folder",query_media_folder);
- String offset = req.getParameter("offset");
- if (offset==null || offset.equals("")) offset="0";
- mergeData.put("offset",offset);
-
- String order = req.getParameter("order");
- if (order==null) order="webdb_lastchange desc";
-
- // if in connection mode to content
- String cid = req.getParameter("cid");
- mergeData.put("cid",cid);
-
-
- // 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 (query_media_folder != null && !query_media_folder.equals("")) {
- if (isFirst==false) whereClause+=" and ";
- whereClause += "to_media_folder='"+query_media_folder+"'";
- }
- //theLog.printDebugInfo("sql-whereclause: " + whereClause + " order: " + order + " offset: " + offset);
-
- // fetch und ausliefern
- try {
- if (query_text!=null || query_is_published!=null || query_media_folder!=null) {
- EntityList theList = mainModule.getByWhereClause(whereClause, order, (new Integer(offset)).intValue(),10);
- if (theList != null) {
- mergeData.put("contentlist",theList);
- if(theList.getOrder()!=null) {
- mergeData.put("order", theList.getOrder());
- mergeData.put("order_encoded", URLEncoder.encode(theList.getOrder()));
- }
- 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));
- }
- 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 add(HttpServletRequest req, HttpServletResponse res)
- throws ServletModuleException
- {
- try {
- SimpleHash mergeData = new SimpleHash();
- mergeData.put("new", "1");
- SimpleHash popups = new SimpleHash();
- popups.put("mediafolderPopupData",DatabaseMediafolder.getInstance().getPopupData());
- deliver(req, res, mergeData, popups, templateObjektString);
- }
- catch (Exception e) { throw new ServletModuleException(e.toString());}
- }
-
- public void edit(HttpServletRequest req, HttpServletResponse res)
- throws ServletModuleException {
- String idParam = req.getParameter("id");
- _edit(idParam, req, res);
- }
-
- private void _edit(String idParam, HttpServletRequest req, HttpServletResponse res)
- throws ServletModuleException {
- if (idParam!=null && !idParam.equals("")) {
- try {
- SimpleHash popups = new SimpleHash();
- popups.put("mediafolderPopupData",DatabaseMediafolder.getInstance().getPopupData());
- deliver(req, res, mainModule.getById(idParam),popups,
- templateObjektString);
- } catch (ModuleException e) {
- throw new ServletModuleException(e.toString());
- } catch (StorageObjectException e) {
- throw new ServletModuleException(e.toString());
- }
- } else {
- throw new ServletModuleException("ServletmoduleImage :: _edit without id");
- }
- }
-
-
- /** @todo should be in ServletModule.java */
- private EntityUsers _getUser(HttpServletRequest req)
- {
- HttpSession session=req.getSession(false);
- return (EntityUsers)session.getAttribute("login.uid");
- }
-
-
- // deprecated
- public void upload(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
- {
- //theLog.printDebugInfo("-- trying to upload");
- String idParam = req.getParameter("id");
- if (idParam!=null && !idParam.equals("")) {
- try {
-
- WebdbMultipartRequest mp = new WebdbMultipartRequest(req);
- HashMap withValues = mp.getParameters();
- MpRequest mpReq = (MpRequest)mp.requestList.get(0);
- byte[] imageData=mpReq.getMedia();
- String fileName=mpReq.getFilename();
- String contentType=mpReq.getContentType();
-
- EntityImages entImage = (EntityImages)mainModule.getById(idParam);
- entImage.setImage(imageData);
- }
- catch (IOException e) { throw new ServletModuleException("upload -- ioexception " + e.toString());}
- catch (ModuleException e) { throw new ServletModuleException("upload -- moduleexception " + e.toString());}
- catch (StorageObjectException e) { throw new ServletModuleException("upload -- storageobjectexception " + e.toString());}
- }
- else // keine id
- throw new ServletModuleException("Keine id angegeben");
- edit(req,res);
- }
-
}
--- /dev/null
+package mircoders.servlet;
+
+import java.io.*;
+import java.lang.*;
+import java.sql.*;
+import java.util.*;
+import java.net.*;
+import java.lang.reflect.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import freemarker.template.*;
+import com.oreilly.servlet.multipart.*;
+import com.oreilly.servlet.*;
+
+import mir.servlet.*;
+import mir.module.*;
+import mir.misc.*;
+import mir.entity.*;
+import mir.storage.*;
+import mir.media.*;
+
+import mircoders.entity.*;
+import mircoders.storage.*;
+import mircoders.module.*;
+import mircoders.producer.*;
+
+/*
+ * ServletModuleBilder -
+ * liefert HTML fuer Bilder
+ *
+ *
+ * @author RK
+ */
+
+public abstract class ServletModuleUploadedMedia
+ extends mir.servlet.ServletModule
+{
+
+ //private static DatabaseRights dbRights;
+
+ public static ServletModule getInstance() { return null; }
+
+ public void insert(HttpServletRequest req, HttpServletResponse res)
+ throws ServletModuleException, ServletModuleUserException
+ {
+ try {
+ WebdbMultipartRequest mp = new WebdbMultipartRequest(req);
+ HashMap parameters = mp.getParameters();
+ EntityUsers user = _getUser(req);
+ String mediaId=null;
+ MpRequest mpReq = (MpRequest)mp.requestList.get(0);
+ String mediaTypeId; //= null;
+ MirMedia mediaHandler;
+ Database mediaStorage;
+
+ // get the content-type from what the client browser
+ // sends us. (the "Oreilly method")
+ String contentType = mpReq.getContentType();
+ String fileName = mpReq.getFilename();
+ theLog.printInfo("CONTENT-TYPE 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") ||
+ 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
+ * 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
+ * sure that it is in this file -mh
+ */
+ contentType = FileUtil.guessContentTypeFromName(fileName);
+ if (contentType==null)
+ contentType = "text/plain"; // rfc1867 says this is the default
+ }
+ theLog.printInfo("CONTENT TYPE IS: "+contentType);
+
+ if (contentType.equals("text/plain") ||
+ contentType.equals("application/octet-stream")) {
+ throw new ServletModuleUserException(
+ "One or more files of unrecognized types");
+ }
+
+ parameters.put("date", StringUtil.date2webdbDate(new GregorianCalendar()));
+ parameters.put("to_publisher", user.getId());
+
+ //the where clause to find the media_type entry from the content-type.
+ //we use the media type entry to lookup the media Handler/Storage classes
+ // @todo this should probably be moved to DatabaseMediaType or
+ // somewhere else appropriate -mh
+ String[] contentTypeSplit = StringUtil.split(contentType, "/");
+ String wc = " mime_type LIKE '"+contentTypeSplit[0]+"%'";
+ DatabaseMediaType mediaTypeStor = DatabaseMediaType.getInstance();
+ EntityList mediaTypesList = mediaTypeStor.selectByWhereClause(wc);
+
+ // if we didn't find an entry matching the
+ // content-type in the table.
+ if (mediaTypesList.size() == 0) {
+ theLog.printDebugInfo("Wrong file type uploaded!: " + fileName);
+ throw new MirMediaUserException("One or more files of unrecognized type");
+ }
+ 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<mediaTypesList.size();j++) {
+ if(contentType.equals(
+ mediaTypesList.elementAt(j).getValue("mime_type")))
+ mediaType = mediaTypesList.elementAt(j);
+ }
+
+ // if no exact match, whatever foo/* might match
+ if( mediaType == null )
+ mediaType = mediaTypesList.elementAt(0);
+
+ // get the class names from the media_type table.
+ mediaTypeId = mediaType.getId();
+ try {
+ // ############### @todo: merge these and the getURL call into one
+ // getURL helper call that just takes the Entity as a parameter
+ // along with media_type
+ mediaHandler = MediaHelper.getHandler(mediaType);
+ mediaStorage = MediaHelper.getStorage(mediaType,
+ "mircoders.storage.Database");
+ } catch (Exception e) {
+ theLog.printError("getting media handler failed: "+e.toString());
+ throw new MirMediaException("getting media handler failed: "
+ +e.toString());
+ }
+
+ parameters.put("to_media_type",mediaTypeId);
+ //load the classes via reflection
+ Entity mediaEnt = null;
+ try {
+ mediaEnt = (Entity)mediaStorage.getEntityClass().newInstance();
+ mediaEnt.setStorage(mediaStorage);
+ mediaEnt.setValues(parameters);
+ // unfortunatly we have to insert it first because of the way
+ // Image setting works right now. that should change soon. -mh
+ mediaId = mediaEnt.insert();
+ //save and store the media data/metadata
+ mediaHandler.set(mpReq.getMedia(), mediaEnt, mediaType);
+
+ //were done with mpReq at this point, dereference it.
+ //as it contains mucho mem. -mh 01.10.2001
+ mpReq=null;
+
+ //we got this far, associate the media to the article
+ mediaEnt.setValueForProperty("is_published","1");
+ mediaEnt.update();
+ } catch (Exception e) {
+ try {
+ mediaStorage.delete(mediaId);
+ } catch (Exception e2) {
+ // dont't do anything here as the error was setting the media,
+ // this just means that the entity may not have been inserted yet
+ }
+ theLog.printError("setting media failed: "+e.toString());
+ throw new MirMediaException("setting media failed: "+e.toString());
+ }
+
+ _edit(mediaId, req, res);
+ }
+ catch (MirMediaException e) { throw new ServletModuleException(
+ "upload -- media handling exception " +e.toString());}
+ catch (MirMediaUserException e) { throw new ServletModuleUserException(
+ e.getMsg());}
+ catch (IOException e) { throw new ServletModuleException("upload -- ioexception " + e.toString());}
+ catch (StorageObjectException e) { throw new ServletModuleException("StorageObjectException" + e.toString());}
+
+ }
+
+ public void update(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+ {
+
+ try {
+ WebdbMultipartRequest mp = new WebdbMultipartRequest(req);
+ HashMap parameters = mp.getParameters();
+
+ EntityUsers user = _getUser(req);
+ parameters.put("to_publisher", user.getId());
+ parameters.put("is_produced", "0");
+ if (!parameters.containsKey("is_published"))
+ parameters.put("is_published","0");
+
+ String id = mainModule.set(parameters);
+ theLog.printError("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());}
+
+ }
+
+
+ public void list(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 query_media_folder = req.getParameter("query_media_folder");
+ mergeData.put("query_media_folder",query_media_folder);
+ String offset = req.getParameter("offset");
+ if (offset==null || offset.equals("")) offset="0";
+ mergeData.put("offset",offset);
+
+ String order = req.getParameter("order");
+ if (order==null) order="webdb_lastchange desc";
+
+ // if in connection mode to content
+ String cid = req.getParameter("cid");
+ mergeData.put("cid",cid);
+
+
+ // 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 (query_media_folder != null && !query_media_folder.equals("")) {
+ if (isFirst==false) whereClause+=" and ";
+ whereClause += "to_media_folder='"+query_media_folder+"'";
+ }
+ //theLog.printDebugInfo("sql-whereclause: " + whereClause + " order: " + order + " offset: " + offset);
+
+ // fetch und ausliefern
+ try {
+ if (query_text!=null || query_is_published!=null || query_media_folder!=null) {
+ EntityList theList = mainModule.getByWhereClause(whereClause, order, (new Integer(offset)).intValue(),10);
+ if (theList != null) {
+ mergeData.put("contentlist",theList);
+ if(theList.getOrder()!=null) {
+ mergeData.put("order", theList.getOrder());
+ mergeData.put("order_encoded", URLEncoder.encode(theList.getOrder()));
+ }
+ 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));
+ }
+ 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 add(HttpServletRequest req, HttpServletResponse res)
+ throws ServletModuleException
+ {
+ try {
+ SimpleHash mergeData = new SimpleHash();
+ mergeData.put("new", "1");
+ SimpleHash popups = new SimpleHash();
+ popups.put("mediafolderPopupData",DatabaseMediafolder.getInstance().getPopupData());
+ deliver(req, res, mergeData, popups, templateObjektString);
+ }
+ catch (Exception e) { throw new ServletModuleException(e.toString());}
+ }
+
+ public void edit(HttpServletRequest req, HttpServletResponse res)
+ throws ServletModuleException {
+ String idParam = req.getParameter("id");
+ _edit(idParam, req, res);
+ }
+
+ private void _edit(String idParam, HttpServletRequest req, HttpServletResponse res)
+ throws ServletModuleException {
+ if (idParam!=null && !idParam.equals("")) {
+ try {
+ SimpleHash popups = new SimpleHash();
+ popups.put("mediafolderPopupData",DatabaseMediafolder.getInstance().getPopupData());
+ deliver(req, res, mainModule.getById(idParam),popups,
+ templateObjektString);
+ } catch (ModuleException e) {
+ throw new ServletModuleException(e.toString());
+ } catch (StorageObjectException e) {
+ throw new ServletModuleException(e.toString());
+ }
+ } else {
+ throw new ServletModuleException("ServletmoduleUploadedMedia :: _edit without id");
+ }
+ }
+
+
+ /** @todo should be in ServletModule.java */
+ private EntityUsers _getUser(HttpServletRequest req)
+ {
+ HttpSession session=req.getSession(false);
+ return (EntityUsers)session.getAttribute("login.uid");
+ }
+
+}
+