Converted media Interface to use streams (Java IO) instead of byte buffers of
[mir.git] / source / mircoders / servlet / ServletModuleContent.java
index 85de290..b89bbe0 100755 (executable)
@@ -1,3 +1,34 @@
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * 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.
+ */
+
 package mircoders.servlet;
 
 import java.io.*;
@@ -24,10 +55,33 @@ import mircoders.entity.*;
 
 /*
  *  ServletModuleContent -
- *  liefert HTML fuer Content
+ *  deliver html for the article admin form.
+ *
+ * @version $Revision: 1.19.2.2 $
+ * @author $Author: mh $
+ *
+ * $Log: ServletModuleContent.java,v $
+ * Revision 1.19.2.2  2002/11/01 05:38:21  mh
+ * Converted media Interface to use streams (Java IO) instead of byte buffers of
+ * the entire uplaoded files. These saves loads of unecessary memory use. JAI
+ * still consumes quite a bit though.
+ *
+ * A new temporary file (for JAI) parameter is necessary and is in the config.properties file.
+ *
+ * A nice side effect of this work is the FileHandler interface which is
+ * basically a call back mechanism for WebdbMultipartRequest which allows the
+ * uploaded file to handled by different classes. For example, for a media
+ * upload, the content-type, etc.. needs to be determined, but if say the
+ * FileEditor had a feature to upload static files... another handler wood be
+ * needed. Right now only the MediaRequest handler exists.
+ *
+ * Revision 1.19.2.1  2002/09/01 21:31:44  mh
+ * Mir goes GPL
+ *
+ * Revision 1.19  2002/07/20 22:24:25  mh
+ * made the add() method use _showObject. Fixes a bug that cause the popUps not to show up when adding an article in the admin
  *
  *
- * @author RK
  */
 
 public class ServletModuleContent extends ServletModule
@@ -46,9 +100,9 @@ public class ServletModuleContent extends ServletModule
 
   private ServletModuleContent() {
     try {
-      theLog = Logfile.getInstance(this.getClass().getName());
+               theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("ServletModule.Content.Logfile"));
       templateListString = MirConfig.getProp("ServletModule.Content.ListTemplate");
-      templateOpString = MirConfig.getProp("ServletModule.Content.OpTemplate");
+      //templateOpString = MirConfig.getProp("ServletModule.Content.OpTemplate");
       templateObjektString = MirConfig.getProp("ServletModule.Content.ObjektTemplate");
       templateConfirmString = MirConfig.getProp("ServletModule.Content.ConfirmTemplate");
       mainModule = new ModuleContent(DatabaseContent.getInstance());
@@ -140,27 +194,7 @@ public class ServletModuleContent extends ServletModule
 
   public void add(HttpServletRequest req, HttpServletResponse res)
     throws ServletModuleException {
-
-    EntityUsers   user = _getUser(req);
-    SimpleHash mergeData = new SimpleHash();
-    mergeData.put("new", "1");
-    mergeData.put("is_published", "1");
-    String now = StringUtil.date2webdbDate(new GregorianCalendar());
-    mergeData.put("date", new SimpleScalar(now));
-    mergeData.put("themenPopupData", themenModule.getTopicsAsSimpleList());
-    try {
-      mergeData.put("articletypePopupData", DatabaseArticleType.getInstance().getPopupData());
-    } catch (Exception e) {
-      theLog.printError("articletype could not be fetched.");
-    }
-    try {
-      mergeData.put("languagePopupData", DatabaseLanguage.getInstance().getPopupData());
-    } catch (Exception e) {
-      theLog.printError("language-popup could not be fetched.");
-    }
-    mergeData.put("schwerpunktPopupData", schwerpunktModule.getSchwerpunktAsSimpleList());
-    mergeData.put("login_user", user);
-    deliver(req, res, mergeData, templateObjektString);
+    _showObject(null, req, res);
   }
 
 
@@ -264,6 +298,10 @@ public class ServletModuleContent extends ServletModule
     catch(ModuleException e) {
       theLog.printError("smod content :: attach :: could not get entityContent");
     }
+    catch(StorageObjectException e) {
+      theLog.printError("smod content :: attach :: could not get entityContent");
+    }
+
     _showObject(idParam, req, res);
   }
 
@@ -281,6 +319,10 @@ public class ServletModuleContent extends ServletModule
     catch(ModuleException e) {
       theLog.printError("smod content :: dettach :: could not get entityContent");
     }
+    catch(StorageObjectException e) {
+      theLog.printError("smod content :: dettach :: could not get entityContent");
+    }
+
     _showObject(cidParam, req, res);
   }
 
@@ -295,6 +337,10 @@ public class ServletModuleContent extends ServletModule
     catch(ModuleException e) {
       theLog.printError("smod content :: newswire :: could not get entityContent");
     }
+    catch(StorageObjectException e) {
+      theLog.printError("smod content :: dettach :: could not get entityContent");
+    }
+
     list(req, res);
   }
 
@@ -342,55 +388,53 @@ public class ServletModuleContent extends ServletModule
     }
   }
 
-  //
-  // Hilfsmethoden
-
+  /* 
+   * HelperMethod shows the basic article editing form.
+   *
+   * if the "id" parameter is null, it means show an empty form to add a new
+   * article.
+   */ 
   private void _showObject(String id, HttpServletRequest req, HttpServletResponse res)
     throws ServletModuleException {
 
+    SimpleHash extraInfo = new SimpleHash();
     try {
-      EntityContent entContent=(EntityContent)mainModule.getById(id);
-      SimpleHash mergeData =  HTMLTemplateProcessor.makeSimpleHash(entContent);
-      EntityList topicToContent = DatabaseContentToTopics.getInstance().getTopics(entContent);
-      if (topicToContent!=null && topicToContent.size()>0){
-        theLog.printDebugInfo("topicanzahl: "+topicToContent.size());
-        Entity topics = null;
-        SimpleList topicList = new SimpleList();
-        for(int i=0;i<topicToContent.size();i++){
-          topics = (EntityTopics)topicToContent.elementAt(i);
-          topicList.add(topics.getId());
-        }
-        mergeData.put("to_topic",topicList);
+      TemplateModelRoot entContent;
+      if (id != null) {
+        entContent = (TemplateModelRoot)mainModule.getById(id);
+      } else {
+        SimpleHash withValues = new SimpleHash();
+        withValues.put("new", "1");
+        withValues.put("is_published", "0");
+        String now = StringUtil.date2webdbDate(new GregorianCalendar());
+        withValues.put("date", new SimpleScalar(now));
+        EntityUsers   user = _getUser(req);
+        withValues.put("login_user", user);
+        entContent = withValues;
       }
-      //obsolete, because of psqgl 7.1.x
-      //mergeData.put("content_data", entContent.getContentData());
-      mergeData.put("themenPopupData", themenModule.getTopicsAsSimpleList());
+        
+
+      extraInfo.put("themenPopupData", themenModule.getTopicsAsSimpleList());
       try {
-        mergeData.put("articletypePopupData", DatabaseArticleType.getInstance().getPopupData());
+        extraInfo.put("articletypePopupData",
+                        DatabaseArticleType.getInstance().getPopupData());
       } catch (Exception e) {
         theLog.printError("articletype could not be fetched.");
       }
       try {
-        mergeData.put("languagePopupData", DatabaseLanguage.getInstance().getPopupData());
+        extraInfo.put("languagePopupData", DatabaseLanguage.getInstance().getPopupData());
       } catch (Exception e) {
         theLog.printError("language-popup could not be fetched.");
       }
-      // get the images
-      EntityList currentMedia = DatabaseContentToMedia.getInstance().getMedia(entContent);
-      if (currentMedia!=null && currentMedia.getCount()>=1) {
-        SimpleList mediaList = HTMLTemplateProcessor.makeSimpleList(currentMedia);
-                               mergeData.put("to_media", mediaList);
-      }
 
-
-      mergeData.put("schwerpunktPopupData", schwerpunktModule.getSchwerpunktAsSimpleList());
+      extraInfo.put("schwerpunktPopupData", schwerpunktModule.getSchwerpunktAsSimpleList());
       // hier code um zur liste zurueckzukommen
       String offsetParam, whereParam, orderParam;
-      if ((offsetParam = req.getParameter("offset"))!=null) mergeData.put("offset", offsetParam);
-      if ((whereParam = req.getParameter("where"))!=null) mergeData.put("where", whereParam);
-      if ((orderParam = req.getParameter("order"))!=null) mergeData.put("order", orderParam);
-      mergeData.put("login_user", _getUser(req));
-      deliver(req, res, mergeData, templateObjektString);
+      if ((offsetParam = req.getParameter("offset"))!=null) extraInfo.put("offset", offsetParam);
+      if ((whereParam = req.getParameter("where"))!=null) extraInfo.put("where", whereParam);
+      if ((orderParam = req.getParameter("order"))!=null) extraInfo.put("order", orderParam);
+      extraInfo.put("login_user", _getUser(req));
+      deliver(req, res, entContent, extraInfo, templateObjektString);
     } catch (Exception e) {
       throw new ServletModuleException(e.toString());
     }
@@ -442,8 +486,6 @@ public class ServletModuleContent extends ServletModule
     String              tinyIcon;
     String              iconAlt;
 
-    opList = HTMLTemplateProcessor.makeSimpleList(theList);
-
       for (int i=0; i < theList.size();i++) {
         currentContent = (EntityContent)theList.elementAt(i);
         //fetching/setting the images
@@ -460,15 +502,6 @@ public class ServletModuleContent extends ServletModule
             //must of had a non-existant to_media_type entry..
             //let's save our ass.
             if (mediaType != null) {
-                /*
-                 * grrr. why doesn't getId return an int! if It
-                 * did I could just compare the value of getId and
-                 * pick the biggest one. or is there
-                 * another way around this that I am missing?
-                 * can we make getIdasInt() or can we just have
-                 * another getId() that returns an Int and the VM
-                 * will handle it transparantly? -mh
-                 */
                 try {
                   mediaHandlerName = mediaType.getValue("classname");
                   mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
@@ -486,8 +519,8 @@ public class ServletModuleContent extends ServletModule
                   tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
                   iconAlt = "Audio";
                 } else if (tinyIcon == null && !mediaHandler.isImage()) {
-                  tinyIcon = mediaHandler.getTinyIcon();
-                  iconAlt = mediaHandler.getIconAlt();
+                  tinyIcon = mediaHandler.getTinyIconName();
+                  iconAlt = mediaHandler.getIconAltName();
                 }
             }
           }
@@ -506,7 +539,7 @@ public class ServletModuleContent extends ServletModule
 
         try{
           //mediaList = HTMLTemplateProcessor.makeSimpleList(upMediaEntityList);
-          contentHash = (SimpleHash)opList.get(i);
+          contentHash = (SimpleHash)theList.get(i);
           contentHash.put("tiny_icon", imageRoot+"/"+tinyIcon);
           contentHash.put("icon_alt", iconAlt);
         } catch (Exception e){}