2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
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.
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.
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
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.
30 package mircoders.media;
32 import java.io.BufferedInputStream;
34 import java.io.FileInputStream;
35 import java.io.InputStream;
36 import java.util.List;
37 import java.util.Vector;
39 import javax.servlet.ServletContext;
41 import mir.config.MirPropertiesConfiguration;
42 import mir.entity.Entity;
43 import mir.log.LoggerWrapper;
44 import mir.media.MediaExc;
45 import mir.media.MediaFailure;
46 import mir.media.MediaHandler;
47 import mir.misc.FileUtil;
48 import mir.misc.StringUtil;
52 * This is the Generic MediaHandler. It stores the media data on
53 * the filesystem and keeps basic metadata (size, type...) in the
54 * DB. Usually only representation needs to be overridden.
55 * See the MediaHandlerAudio class to see an example of how one
58 * Most media handlers should override this class.
60 * In theory, it could be used to handle miscellaneous media that
61 * we don't have entered in the media_type table, (like RTF documents,
64 * Of course it implements the MirMediaHandler interface.
66 * @see mir.media.MirMediaHandler
67 * @author mh <mh@nadir.org>
68 * @version $Id: MediaHandlerGeneric.java,v 1.20.2.6 2004/01/18 17:30:58 zapata Exp $
71 public class MediaHandlerGeneric implements MediaHandler
73 protected static MirPropertiesConfiguration configuration;
74 protected static String imageHost;
75 protected static String imageRoot;
77 protected LoggerWrapper logger;
81 configuration = MirPropertiesConfiguration.instance();
83 catch (MirPropertiesConfiguration.PropertiesConfigExc e) {
85 imageHost = configuration.getString("Producer.Image.Host");
86 imageRoot = configuration.getString("Producer.ImageRoot");
89 public MediaHandlerGeneric() {
90 logger = new LoggerWrapper("Media.Generic");
93 public void store (InputStream in, Entity ent, Entity mediaTypeEnt ) throws MediaExc, MediaFailure {
94 String ext = mediaTypeEnt.getFieldValue("name");
95 String mediaFname = ent.getId() + "." + ext;
96 String date = ent.getFieldValue("date");
97 String datePath = StringUtil.webdbDate2path(date);
99 long size = FileUtil.write(getStoragePath() + File.separator + datePath +
100 File.separator + mediaFname, in);
101 ent.setFieldValue("publish_path", datePath + mediaFname);
102 ent.setFieldValue("size", new Long(size).toString());
105 catch (Throwable e) {
106 logger.error("MediaHandlerGeneric.set: " + e.toString());
107 throw new MediaFailure(e);
111 public void produce (Entity ent, Entity mediaTypeEnt ) throws MediaExc, MediaFailure {
112 //check first if the media file exist since produced
113 //location is also the storage location
115 String date = ent.getFieldValue("date");
116 String datePath = StringUtil.webdbDate2path(date);
117 String relPath = datePath+ent.getId()+"."+mediaTypeEnt.getFieldValue("name");
118 String fname = getStoragePath()+relPath;
119 if(! new File(fname).exists())
120 throw new MediaExc("error in MirMediaHandler.produce(): " + relPath + " does not exist!");
123 public InputStream getMedia (Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure {
124 String publishPath = ent.getFieldValue("publish_path");
125 String fname = getStoragePath()+publishPath;
126 File f = new File(fname);
128 throw new MediaExc("error in MirMediaHandler.getMedia(): " + fname + " does not exist!");
130 BufferedInputStream inputStream;
132 inputStream = new BufferedInputStream(new FileInputStream(f));
134 catch (Throwable e) {
135 throw new MediaFailure("MediaHandlerGeneric.getMedia(): " + e.toString(), e);
141 public InputStream getThumbnail (Entity ent) throws MediaExc, MediaFailure {
145 public String getThumbnailMimeType (Entity aMediaEntity, Entity aMediaType) throws MediaExc, MediaFailure {
146 ServletContext servletContext = MirPropertiesConfiguration.getContext();
147 String fileName = aMediaEntity.getId()+"."+aMediaType.getFieldValue("name");
149 return servletContext.getMimeType(fileName);
152 public String getStoragePath()
154 return configuration.getString("Producer.Media.Path");
157 public String getIconStoragePath()
159 return configuration.getString("Producer.Image.IconPath");
162 public String getPublishHost()
164 return StringUtil.removeSlash(configuration.getString("Producer.Media.Host"));
167 public String getTinyIconName()
169 return configuration.getString("Producer.Icon.TinyText");
172 public String getBigIconName()
174 return configuration.getString("Producer.Icon.BigText");
177 public String getIconAltName()
179 return "Generic media";
182 public List getURL(Entity ent, Entity mediaTypeEnt)
184 List theList = new Vector();
189 public String getDescr( Entity mediaType)
191 return mediaType.getFieldValue("mime_type");