Converted media Interface to use streams (Java IO) instead of byte buffers of
[mir.git] / source / mircoders / media / MediaHandlerGeneric.java
index 31eaff9..f0402e7 100755 (executable)
@@ -1,13 +1,41 @@
 /*
- * put your module comment here
+ * 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.media;
 
 import java.util.*;
 import java.io.*;
 
+import freemarker.template.SimpleList;
+
 import mir.media.*;
 import mir.entity.*;
 import mir.misc.*;
@@ -36,33 +64,28 @@ import mir.storage.*;
 
 public class MediaHandlerGeneric implements MirMedia
 {
-    protected String imageHost = MirConfig.getProp("Producer.Image.Host");
-    protected String imageRoot = MirConfig.getProp("Producer.ImageRoot");
-    protected Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+
+    protected static String imageHost = MirConfig.getProp("Producer.Image.Host");
+    protected static String imageRoot = MirConfig.getProp("Producer.ImageRoot");
+    protected static Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+
                                                   "log/media.log");
-    public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt )
+    public void set (InputStream in, Entity ent, Entity mediaTypeEnt )
         throws MirMediaException {
 
         String ext = mediaTypeEnt.getValue("name");
         String mediaFname = ent.getId()+"."+ext;
         String date = ent.getValue("date");
         String datePath = StringUtil.webdbDate2path(date);
-        Integer size = new Integer(uploadedData.length);
         try {
-            FileUtil.write(getStoragePath()+"/"+datePath+"/"+mediaFname,
-                            uploadedData);
-            //were done with the data, dereference.
-            uploadedData=null;
-            
+            long size = FileUtil.write(getStoragePath()+"/"+datePath+"/"+
+                                      mediaFname, in);
             ent.setValueForProperty("publish_path",datePath+"/"+mediaFname);
-            ent.setValueForProperty("size", size.toString());
+            ent.setValueForProperty("size", new Long(size).toString());
             ent.update();
         } catch (Exception e) {
             theLog.printError(e.toString()); 
             throw new MirMediaException(e.toString());
         }
 
-        return true;
     }
 
     public void produce (Entity ent, Entity mediaTypeEnt )
@@ -80,30 +103,24 @@ public class MediaHandlerGeneric implements MirMedia
     }
       
 
-    //a method that will probably never get used..
-    private byte[] getFile (String fileName)
-        throws MirMediaException {
-
-        long size = FileUtil.getSize(fileName);
-        if (size < 0) return null;
-
-        byte[] container = new byte[(int)size];
-            
-        try {
-            FileUtil.read(fileName, container);
-        } catch (Exception e) {
-            theLog.printError(e.toString()); 
-            throw new MirMediaException(e.toString());
-        }
-
-        return container;
-    }
-
-    public byte[] get (Entity ent, Entity mediaTypeEnt) {
-        return null;
+    public InputStream getMedia (Entity ent, Entity mediaTypeEnt)
+      throws MirMediaException {
+      String publishPath = mediaTypeEnt.getValue("publish_path");
+      String fname = getStoragePath()+publishPath;
+      File f = new File(fname);
+      if(! f.exists())
+        throw new MirMediaException("error in MirMedia.getMedia(): "+fname+
+                                    "does not exist!");
+      FileInputStream in;
+      try {
+        in = new FileInputStream(f);
+      } catch (IOException e) {
+        throw new MirMediaException("getMedia(): "+e.toString());
+      }
+      return in;
     }
 
-    public byte[] getIcon (Entity ent) {
+    public InputStream getIcon (Entity ent) {
         return null;
     }
 
@@ -122,56 +139,46 @@ public class MediaHandlerGeneric implements MirMedia
         return MirConfig.getProp("Producer.Media.Host");
     }
 
-    public String getTinyIcon()
+    public String getTinyIconName()
     {
         return MirConfig.getProp("Producer.Icon.TinyText");
     }
 
-    public String getBigIcon()
+    public String getBigIconName()
     {
         return MirConfig.getProp("Producer.Icon.BigText");
     }
 
-    public String getIconAlt()
+    public String getIconAltName()
     {
         return "Generic media"; 
     }
 
-    public String getURL(Entity ent, Entity mediaTypeEnt)
+    public SimpleList getURL(Entity ent, Entity mediaTypeEnt)
     {
-      String stringSize = ent.getValue("size");
-      if (stringSize == null)
-        return null;
-      int size = Integer.parseInt(stringSize, 10)/1024;
-      String title = ent.getValue("title")+
-        " - "+mediaTypeEnt.getValue("name")+" "+
-        size+" KB";
-      return StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+
-        ent.getValue("publish_path"), title, imageRoot, getBigIcon());
-    }
-
-    public String getListView(Entity ent, Entity mediaTypeEnt)
-    {
-      //String title = ent.getValue("title")+
-      //  " - "+mediaTypeEnt.getValue("name")+" "+
-      //  ent.getValue("size")+" Bytes";
-      return StringUtil.createIMGLinks(imageHost+
-        getBigIcon(), null, null, null);
+      SimpleList theList = new SimpleList();
+      theList.add(ent);
+      return theList;
     }
 
     public boolean isVideo()
     {
-        return false;
+      return false;
     }
 
     public boolean isAudio()
     {
-        return false;
+      return false;
     }
 
     public boolean isImage()
     {
-        return false;
+      return false;
+    }
+
+    public String getDescr( Entity mediaType)
+    {
+      return mediaType.getValue("mime_type");
     }
 
 }