cc1ea370989037bcabff3a2b08896dc3f4d6c5f3
[mir.git] / source / mir / media / MediaHandler.java
1 /*
2  * Copyright (C) 2001, 2002 The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with  any library licensed under the Apache Software License,
22  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23  * (or with modified versions of the above that use the same license as the above),
24  * and distribute linked combinations including the two.  You must obey the
25  * GNU General Public License in all respects for all of the code used other than
26  * the above mentioned libraries.  If you modify this file, you may extend this
27  * exception to your version of the file, but you are not obligated to do so.
28  * If you do not wish to do so, delete this exception statement from your version.
29  */
30 package  mir.media;
31
32 import java.io.File;
33 import java.io.InputStream;
34
35 import mir.entity.Entity;
36 import mir.session.UploadedFile;
37
38 /**
39  * Interface for Media handling in Mir. All media handlers
40  * must implement this interface. Each specific media type,
41  * be it Gif, Jpeg, Mp3 audio, Real Audio or quicktime video
42  * has special needs when it comes to representation on the various
43  * pages (article, list, summary), must be stored differently and has a
44  * different URL, etc... This interface allows Mir to support
45  * an infinite (I hope) number of media types. Once this is done,
46  * no code at any other level in Mir needs to be changed other than
47  * adding the content-type <-> media handler name mapping in the
48  * media_type table. The following is an example of the media_type
49  * table:
50  * <p>
51  * id |  name   |        mime_type         | classname |   tablename   | dcname<br>
52  *---+---------+--------------------------+-----------+---------------+-------<br>
53  *  2 | unknown | application/octet-stream | --        | UploadedMedia | <br>
54  *  3 | jpg     | image/gif                | ImagesGif | Images        | <br>
55  *  4 | mp3     | audio/mp3                | Audio     | UploadedMedia | <br>
56  * <p>
57  * The "id" field is used as a mapping in the table that contains the media type
58  * to the media_type table. For example, the images table has a to_media_type
59  * field that contains the id in the media_type table.
60  * <p>
61  * The "name" field is used for various display/filenaming purposes. it should
62  * match a valid file extension name for a media_type (we could have used the
63  * content-type map for this....).
64  * <p>
65  * The "mime_type" field is the most important as it does maps the type to Java
66  * classes (the database and media_handler name). We call those classes using
67  * reflection. This way, once a Handler for a specific media type is implemented
68  * and entered into the media_type table, no other Mir code needs to be modified.
69  * <p>
70  * The "classname" field is the name of the media handler (e.g MediaHandlerAudio)
71  * we use it to call the MediaHandler methods via reflection.
72  * <p>
73  * The "tablename" is the name of the database database classes (e.g DatabaseImages
74  * and EntityImages). We use this to fetch/database the media (meta)data in the db.
75  * <p?
76  * The "dcname" field is as of yet unused. Do search for "Dublin Core" on google
77  * to learn more.
78  * <p>
79  * Most media handlers should just extend MediaHandlerGeneric (i.e inherit from
80  * ) and just override the things that need to be specific. see MediaHandlerAudio
81  *
82  * @author <mh@nadir.org>, the Mir-coders group
83  * @version $Id: MediaHandler.java,v 1.1.2.5 2005/01/23 15:36:03 zapata Exp $
84  */
85
86 public interface MediaHandler {
87   /**
88    * Store the media content from an {@link UploadedFile}
89    */
90   public void store(UploadedFile anUploadedFile, Entity aMedia, Entity aMediaType) throws MediaExc, MediaFailure;
91
92   /**
93    * Store the media content from an input stream.
94    */
95   public void store(InputStream anInputStream, Entity aMedia, Entity aMediaType) throws MediaExc, MediaFailure;
96
97   /**
98    * Store the media content from a file.
99    */
100   public void store(File aFile, Entity aMedia, Entity aMediaType) throws MediaExc, MediaFailure;
101
102   /**
103    * Perform production related tasks for this media.  
104    */
105   public void produce(Entity aMedia, Entity aMediaType ) throws MediaExc, MediaFailure;
106
107   /**
108    * Get's the media data from database and returns it as an InputStream
109    * Not very useful for most media types as they are stored in a file,
110    * but very usefull for ones stored in the DB as it is necessary to get
111    * it first before making a file out of it (in Producer*).
112    */
113   public InputStream getMedia (Entity aMedia, Entity aMediaType) throws MediaExc, MediaFailure;
114
115   /**
116    * Pretty much like get() above. But get's the specific Icon
117    * representation. useful for media stored in the DB.
118    */
119   public InputStream getThumbnail(Entity aMedia) throws MediaExc, MediaFailure;
120
121
122   /**
123    * Returns the mime-type of the media's thumbnail
124    */
125   public String getThumbnailMimeType(Entity aMediaEntity, Entity aMediaType) throws MediaExc, MediaFailure;
126
127   /**
128    * Returns the absolute filesystem path to where the media
129    * content should be stored. This path is usually defined
130    * in the configuration wich is accessible through the MirConfig
131    * class.
132    */
133   public String getStoragePath () throws MediaExc, MediaFailure;
134
135   /**
136    * Returns the *relative* filesystem path to where the media
137    * icon content should be stored. It is relative to the path
138    * returned by getStoragePath()
139    * This path is usually defined
140    * in the configuration wich is accessible through the MirConfig
141    * class.
142    */
143   public String getIconStoragePath () throws MediaExc, MediaFailure;
144
145         /**
146    * Returns the base URL to that the media is accessible from
147    * to the end user. This could be a URL to another host.
148    * This is used in the Metadata stored in the DB and later on
149    * ,the templates use it.
150    * It is usually defined
151    * in the configuration witch is accessible through the MirConfig
152    * class.
153    */
154   public String getPublishHost () throws MediaExc, MediaFailure;
155
156         /**
157    * Returns the file name of the Icon representing the media type.
158    * It is used in the summary view.
159    * It is usually defined
160    * in the configuration wich is accessible through the MirConfig
161    * class.
162    */
163   public String getBigIconName ();
164
165         /**
166    * Returns the file name of the small Icon representing
167    * the media type.
168    * It is used in the right hand newswire list of the startpage.
169    * It is usually defined
170    * in the configuration wich is accessible through the MirConfig
171    * class.
172    */
173   public String getTinyIconName ();
174
175   /**
176    * Returns the IMG SRC "ALT" text to be used
177    * for the Icon representations
178    * @return String, the ALT text.
179    */
180   public String getIconAltName ();
181
182   /**
183    * returns a brief text dscription of what this
184    * media type is.
185    * @return String
186    */
187   public String getDescr (Entity aMediaType);
188
189 }
190
191