Initial revision
[mir.git] / source / mircoders / servlet / ServletModuleImages.java
diff --git a/source/mircoders/servlet/ServletModuleImages.java b/source/mircoders/servlet/ServletModuleImages.java
new file mode 100755 (executable)
index 0000000..8159cc4
--- /dev/null
@@ -0,0 +1,328 @@
+package mircoders.servlet;
+
+import java.io.*;
+import java.sql.*;
+import java.util.*;
+import java.net.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+import freemarker.template.*;
+import com.oreilly.servlet.multipart.*;
+import com.oreilly.servlet.*;
+
+import webdb.servlet.*;
+import webdb.module.*;
+import webdb.misc.*;
+import webdb.entity.*;
+import webdb.storage.*;
+
+import mir.entity.*;
+import mir.storage.*;
+import mir.module.*;
+
+/*
+ *  ServletModuleBilder -
+ *  liefert HTML fuer Bilder
+ *
+ *
+ * @author RK
+ */
+
+public class ServletModuleImages extends webdb.servlet.ServletModule
+{
+
+       private static ModuleMediafolder mediafolderModule;
+       private static DatabaseRights dbRights;
+       private static DatabaseImageFormat dbImageFormat;
+       private static DatabaseImageType dbImageType;
+       private static DatabaseImageColor dbImageColor;
+       private static DatabaseImageLayout dbImageLayout;
+
+       // Singelton / Kontruktor
+       private static ServletModuleImages instance = new ServletModuleImages();
+       public static ServletModule getInstance() { return instance; }
+
+
+       private ServletModuleImages() {
+               theLog = Logfile.getInstance(Configuration.getProperty("Home") + Configuration.getProperty("ServletModule.Bilder.Logfile"));
+               templateListString = Configuration.getProperty("ServletModule.Bilder.ListTemplate");
+               templateObjektString = Configuration.getProperty("ServletModule.Bilder.ObjektTemplate");
+               templateConfirmString = Configuration.getProperty("ServletModule.Bilder.ConfirmTemplate");
+               try {
+                       mainModule = new ModuleImages(DatabaseImages.getInstance());
+                       mediafolderModule = new ModuleMediafolder(DatabaseMediafolder.getInstance());
+                       dbRights = DatabaseRights.getInstance();
+                       dbImageFormat = DatabaseImageFormat.getInstance();
+                       dbImageColor = DatabaseImageColor.getInstance();
+                       dbImageType = DatabaseImageType.getInstance();
+                       dbImageLayout = DatabaseImageLayout.getInstance();
+               }
+               catch (StorageObjectException e) {
+                       theLog.printDebugInfo("servletmodulebilder konnte nicht initialisiert werden");
+               }
+       }
+
+
+       public void insert(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+               try {
+                       WebdbMultipartRequest mp = new WebdbMultipartRequest(req);
+                       HashMap parameters = mp.getParameters();
+                       byte[] imageData=mp.getMedia();
+                       String fileName=mp.getFilename();
+
+                       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);
+                       EntityImage entImage = (EntityImage)mainModule.getById(id);
+
+                       if (imageData!=null && fileName!=null) {
+                               int fileType = -1;
+                               if (fileName.toLowerCase().endsWith(".jpg")) fileType=0;
+                               if (fileName.toLowerCase().endsWith(".gif")) fileType=1;
+                               if (fileType>=0)
+                                       entImage.setImage(imageData, fileType);
+                               else
+                                       theLog.printError("Wrong file uploaded!");
+                       }
+                       _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 update(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+
+               try {
+                       WebdbMultipartRequest mp = new WebdbMultipartRequest(req);
+                       HashMap parameters = mp.getParameters();
+                       byte[] imageData=mp.getMedia();
+                       String fileName=mp.getFilename();
+
+                       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);
+                       EntityImage entImage = (EntityImage)mainModule.getById(id);
+
+                       if (imageData!=null && fileName!=null) {
+                               int fileType = -1;
+                               if (fileName.toLowerCase().endsWith(".jpg")) fileType=0;
+                               if (fileName.toLowerCase().endsWith(".gif")) fileType=1;
+                               if (fileType>=0)
+                                       entImage.setImage(imageData, fileType);
+                               else
+                                       theLog.printError("Wrong file uploaded!");
+                       }
+                       _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
+       {
+               String idParam = req.getParameter("id");
+               if (idParam!=null && !idParam.equals("")) {
+                       try {
+                               EntityImage entImage =(EntityImage)mainModule.getById(idParam);
+                               res.setContentType("image/jpeg"); // testweise
+                               ServletOutputStream out = res.getOutputStream(); // wichtig, dass vorher kein res.getwriter() gelaufen ist
+
+                               byte[] outbytes = entImage.getImage();
+                               out.write(outbytes);
+                               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());}
+               }
+               else theLog.printDebugInfo("id nicht angeben.");
+               // darf keine exception werfen
+       }
+
+       public void showicon(HttpServletRequest req, HttpServletResponse res)
+               throws ServletModuleException
+       {
+               String idParam = req.getParameter("id");
+               if (idParam!=null && !idParam.equals("")) {
+                       try {
+                               EntityImage entImage =(EntityImage)mainModule.getById(idParam);
+                               res.setContentType("image/jpeg"); // testweise
+                               ServletOutputStream out = res.getOutputStream(); // wichtig, dass vorher kein res.getwriter() gelaufen ist
+
+                               byte[] outbytes = entImage.getIcon();
+                               out.write(outbytes);
+                               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());}
+               }
+               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 {
+                               mergeData.put("mediafolderPopupData", mediafolderModule.getPopupData());
+                               mergeData.put("mediafolderHashdata", mediafolderModule.getHashData());
+                               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",HTMLTemplateProcessor.makeSimpleList(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(getLanguage(req)+"/"+templateListString, mergeData, res.getWriter());
+                       }
+                       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");
+                       mergeData.put("mediafolderPopupData", mediafolderModule.getPopupData());
+                       deliver(req, res, mergeData, 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 mergeData =  HTMLTemplateProcessor.makeSimpleHash(mainModule.getById(idParam));
+                               mergeData.put("mediafolderPopupData", mediafolderModule.getPopupData());
+                               mergeData.put("rightsHashdata", dbRights.getHashData());
+                               mergeData.put("imgformatHashdata", dbImageFormat.getHashData());
+                               mergeData.put("imgcolorHashdata", dbImageColor.getHashData());
+                               mergeData.put("imgtypeHashdata", dbImageType.getHashData());
+                               mergeData.put("imglayoutHashdata", dbImageLayout.getHashData());
+                               deliver(req, res, mergeData, templateObjektString);
+                       }
+                       catch (ModuleException 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();
+                               byte[] imageData=mp.getMedia();
+                               String fileName=mp.getFilename();
+
+                               int fileType = -1;
+                               if (fileName.toLowerCase().endsWith(".jpg")) fileType=0;
+                               if (fileName.toLowerCase().endsWith(".gif")) fileType=1;
+                               if (fileType>=0) {
+                                       EntityImage entImage = (EntityImage)mainModule.getById(idParam);
+                                       entImage.setImage(imageData, fileType);
+                               }
+                               else
+                                       theLog.printError("Wrong file uploaded!");
+                       }
+                       catch (IOException e) { throw new ServletModuleException("upload -- ioexception " + e.toString());}
+                       catch (ModuleException e) { throw new ServletModuleException("upload -- moduleexception " + e.toString());}
+               }
+               else // keine id
+                       throw new ServletModuleException("Keine id angegeben");
+               edit(req,res);
+       }
+
+
+}