changes that break existing sites and change mir requirements drastically
[mir.git] / source / mir / media / MirMedia.java
index af6dc99..e706d9a 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001, 2002  The Mir-coders group
+ * Copyright (C) 2001, 2002 The Mir-coders group
  *
  * This file is part of Mir.
  *
  * 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.
+ * the code of this program with  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  mir.media;
 
-import java.util.*;
-
-import freemarker.template.SimpleList;
-
-import mir.entity.*;
+import java.io.InputStream;\r
+import java.util.List;\r
+\r
+import mir.entity.Entity;
 
 /**
  * Interface for Media handling in Mir. All media handlers
  * must implement this interface. Each specific media type,
  * be it Gif, Jpeg, Mp3 audio, Real Audio or quicktime video
  * has special needs when it comes to representation on the various
- * pages (article, list, summary), must be stored differently and has a 
- * different URL, etc... This interface allows Mir to support 
+ * pages (article, list, summary), must be stored differently and has a
+ * different URL, etc... This interface allows Mir to support
  * an infinite (I hope) number of media types. Once this is done,
  * no code at any other level in Mir needs to be changed other than
  * adding the content-type <-> media handler name mapping in the
@@ -62,7 +59,7 @@ import mir.entity.*;
  * <p>
  * The "name" field is used for various display/filenaming purposes. it should
  * match a valid file extension name for a media_type (we could have used the
- * content-type map for this....). 
+ * content-type map for this....).
  * <p>
  * The "mime_type" field is the most important as it does maps the type to Java
  * classes (the storage and media_handler name). We call those classes using
@@ -80,9 +77,9 @@ import mir.entity.*;
  * <p>
  * Most media handlers should just extend MediaHandlerGeneric (i.e inherit from
  * ) and just override the things that need to be specific. see MediaHandlerAudio
- * 
- * @author mh <heckmann@hbe.ca>
- * @version 24.09.2001
+ *
+ * @author <mh@nadir.org>, the Mir-coders group
+ * @version $Id: MirMedia.java,v 1.18.2.1 2003/09/03 17:49:38 zapata Exp $
  */
 
 public interface  MirMedia{
@@ -93,43 +90,50 @@ public interface  MirMedia{
    * all the info for the specific media type itself. It's job is store the
    * Media data (content) itself, this could be on the local filesystem, in the
    * DB or even on a remote host. It then inserts the MetaData in the DB.
-   * @param uploadedData, a byte array containing the uploaded data.
+   * @param InputStream, a stream of the uploaded data.
    * @param ent, an Entity holding the media MetaData
    * @param mediaType, an Entity holding the media_table entry
    * @return boolean, success/fail
    * @see mir.entity.Entity
    */
-  public abstract boolean set (byte[] uploadedData, Entity ent,
-                                Entity mediaTypeEnt ) throws MirMediaException;
+  public abstract void set (InputStream in, Entity ent, Entity mediaTypeEnt ) throws MediaExc, MediaFailure;
 
-       public abstract void produce (Entity ent, Entity mediaTypeEnt ) 
-    throws MirMediaException;
+  public abstract void produce (Entity ent, Entity mediaTypeEnt ) throws MediaExc, MediaFailure;
 
   /**
-   * Get's the media data from storage and returns it as a byte array
+   * Get's the media data from storage and returns it as an InputStream
    * Not very useful for most media types as they are stored in a file,
    * but very usefull for ones stored in the DB as it is necessary to get
    * it first before making a file out of it (in Producer*).
    * @param ent, an Entity holding the media MetaData
    * @param mediaType, an Entity holding the media_table entry
-   * @return byte[]
+   * @return java.io.InputStream
    * @see mir.entity.Entity
    */
-  public abstract byte[] get (Entity ent, Entity mediaTypeEnt)
-          throws MirMediaException;
+  public abstract InputStream getMedia (Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure;
 
   /**
    * Pretty much like get() above. But get's the specific Icon
    * representation. useful for media stored in the DB.
    * @param ent, an Entity holding the media MetaData
-   * @return byte[]
+   * @return java.io.InputStream
    * @see mir.entity.Entity
    */
-  public abstract byte[] getIcon (Entity ent) throws MirMediaException;
+  public abstract InputStream getIcon (Entity ent) throws MediaExc, MediaFailure;
+
+
+  /**
+   *
+   * @param ent
+   * @return
+   * @throws MediaExc
+   * @throws MediaFailure
+   */
+  public abstract String getIconMimeType (Entity aMediaEntity, Entity aMediaType) throws MediaExc, MediaFailure;
 
-       /**
+  /**
    * gets the final content representation for the media
-   * in the form of a URL (String) that allows someone to 
+   * in the form of a URL (String) that allows someone to
    * download, look at or listen to the media. (HREF, img src
    * streaming link, etc..)
    * It should use the helper functions in the StringUtil class to
@@ -140,10 +144,9 @@ public interface  MirMedia{
    * @see mir.entity.Entity
    * @see mir.misc.StringUtil
    */
-  public abstract SimpleList getURL (Entity ent, Entity mediaTypeEnt)
-    throws MirMediaException;
+  public abstract List getURL (Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure;
 
-       /**
+        /**
    * Returns the absolute filesystem path to where the media
    * content should be stored. This path is usually defined
    * in the configuration wich is accessible through the MirConfig
@@ -151,9 +154,9 @@ public interface  MirMedia{
    * @return String, the path.
    * @see mir.misc.MirConfig
    */
-  public abstract String getStoragePath () throws MirMediaException;
+  public abstract String getStoragePath () throws MediaExc, MediaFailure;
 
-       /**
+        /**
    * Returns the *relative* filesystem path to where the media
    * icon content should be stored. It is relative to the path
    * returned by getStoragePath()
@@ -163,9 +166,9 @@ public interface  MirMedia{
    * @return String, the path.
    * @see mir.misc.MirConfig
    */
-  public abstract String getIconStoragePath () throws MirMediaException;
+  public abstract String getIconStoragePath () throws MediaExc, MediaFailure;
 
-       /**
+        /**
    * Returns the base URL to that the media is accessible from
    * to the end user. This could be a URL to another host.
    * This is used in the Metadata stored in the DB and later on
@@ -176,9 +179,9 @@ public interface  MirMedia{
    * @return String, the base URL to the host.
    * @see mir.misc.MirConfig
    */
-  public abstract String getPublishHost () throws MirMediaException;
+  public abstract String getPublishHost () throws MediaExc, MediaFailure;
 
-       /**
+        /**
    * Returns the file name of the Icon representing the media type.
    * It is used in the summary view.
    * It is usually defined
@@ -187,10 +190,10 @@ public interface  MirMedia{
    * @return String, the icon filename.
    * @see mir.misc.MirConfig
    */
-  public abstract String getBigIcon ();
-  
-       /**
-   * Returns the file name of the small Icon representing 
+  public abstract String getBigIconName ();
+
+        /**
+   * Returns the file name of the small Icon representing
    * the media type.
    * It is used in the right hand newswire list of the startpage.
    * It is usually defined
@@ -199,28 +202,28 @@ public interface  MirMedia{
    * @return String, the icon filename.
    * @see mir.misc.MirConfig
    */
-  public abstract String getTinyIcon ();
+  public abstract String getTinyIconName ();
 
-       /**
+        /**
    * Returns the IMG SRC "ALT" text to be used
    * for the Icon representations
    * @return String, the ALT text.
    */
-  public abstract String getIconAlt ();
+  public abstract String getIconAltName ();
 
-       /**
+        /**
    * your can all figure it out.
    * @return boolean.
    */
   public abstract boolean isVideo ();
 
-       /**
+        /**
    * you can all figure it out.
    * @return boolean.
    */
   public abstract boolean isAudio ();
 
-       /**
+        /**
    * you can all figure it out.
    * @return boolean.
    */