first cut of merge of STABLE-pre1_0 into HEAD. I won't even guarantee that it
[mir.git] / source / mircoders / servlet / ServletModuleImages.java
index 8ead0ef..89df034 100755 (executable)
@@ -1,9 +1,11 @@
 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.*;
 
@@ -16,10 +18,12 @@ 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 -
@@ -69,6 +73,7 @@ public class ServletModuleImages extends mir.servlet.ServletModule
     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();
@@ -82,21 +87,65 @@ public class ServletModuleImages extends mir.servlet.ServletModule
         parameters.put("is_published","0");
 
       String id = mainModule.add(parameters);
-      EntityImage entImage = (EntityImage)mainModule.getById(id);
+      EntityImages entImage = (EntityImages)mainModule.getById(id);
 
       if (imageData!=null && fileName!=null) {
-        int fileType = -1;
-        if (contentType.equals("image/jpeg")) fileType=0;
-        if (contentType.equals("image/gif")) fileType=1;
-        if (fileType>=0)
-          entImage.setImage(imageData, fileType);
-        else
-          theLog.printError("Wrong file uploaded!");
+           //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 ProducerMedia().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());}
 
   }
 
@@ -106,10 +155,10 @@ public class ServletModuleImages extends mir.servlet.ServletModule
     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();
+      //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());
@@ -118,17 +167,7 @@ public class ServletModuleImages extends mir.servlet.ServletModule
         parameters.put("is_published","0");
 
       String id = mainModule.set(parameters);
-      EntityImage entImage = (EntityImage)mainModule.getById(id);
-
-      if (imageData!=null && fileName!=null) {
-        int fileType = -1;
-        if (contentType.equals("image/jpeg")) fileType=0;
-        if (contentType.equals("image/gif")) fileType=1;
-        if (fileType>=0)
-          entImage.setImage(imageData, fileType);
-        else
-          theLog.printError("Wrong file uploaded!");
-      }
+      theLog.printError("Image ID"+id);
       _edit(id, req, res);
     }
     catch (IOException e) { throw new ServletModuleException("upload -- ioexception " + e.toString());}
@@ -143,7 +182,7 @@ public class ServletModuleImages extends mir.servlet.ServletModule
     String idParam = req.getParameter("id");
     if (idParam!=null && !idParam.equals("")) {
       try {
-        EntityImage entImage =(EntityImage)mainModule.getById(idParam);
+        EntityImages entImage =(EntityImages)mainModule.getById(idParam);
         res.setContentType("image/jpeg"); // testweise
         ServletOutputStream out = res.getOutputStream(); // wichtig, dass vorher kein res.getwriter() gelaufen ist
 
@@ -166,7 +205,7 @@ public class ServletModuleImages extends mir.servlet.ServletModule
     String idParam = req.getParameter("id");
     if (idParam!=null && !idParam.equals("")) {
       try {
-        EntityImage entImage =(EntityImage)mainModule.getById(idParam);
+        EntityImages entImage =(EntityImages)mainModule.getById(idParam);
         res.setContentType("image/jpeg"); // testweise
         ServletOutputStream out = res.getOutputStream(); // wichtig, dass vorher kein res.getwriter() gelaufen ist
 
@@ -312,18 +351,12 @@ public class ServletModuleImages extends mir.servlet.ServletModule
         String fileName=mpReq.getFilename();
         String contentType=mpReq.getContentType();
 
-        int fileType = -1;
-        if (contentType.equals("image/jpeg")) fileType=0;
-        if (contentType.equals("image/gif")) fileType=1;
-        if (fileType>=0) {
-          EntityImage entImage = (EntityImage)mainModule.getById(idParam);
-          entImage.setImage(imageData, fileType);
-        }
-        else
-          theLog.printError("Wrong file uploaded!");
+        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");