X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fmedia%2FMediaHandlerImages.java;h=eb4ecf52d7a708bb7df364a146378613acde6ec0;hb=89b2edf40f1b71d810243d7eb550aea1b79c94aa;hp=c24add8206dd4b915852856a7f398594e288b100;hpb=c6a2204d8d75293256fd17c07e54971d7672359a;p=mir.git diff --git a/source/mircoders/media/MediaHandlerImages.java b/source/mircoders/media/MediaHandlerImages.java index c24add82..eb4ecf52 100755 --- a/source/mircoders/media/MediaHandlerImages.java +++ b/source/mircoders/media/MediaHandlerImages.java @@ -1,15 +1,53 @@ - +/* + * 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 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.lang.*; -import java.io.*; -import java.util.*; -import java.lang.reflect.*; - -import mir.media.*; -import mir.misc.*; -import mir.entity.*; -import mir.storage.StorageObjectException; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.sql.SQLException; + +import mir.config.MirPropertiesConfiguration; +import mir.entity.Entity; +import mir.log.LoggerWrapper; +import mir.media.MediaExc; +import mir.media.MediaFailure; +import mir.media.MediaHandler; +import mir.misc.StringUtil; +import mir.session.SessionExc; +import mir.session.UploadedFile; +import mir.util.FileRoutines; +import mir.util.IORoutines; import mircoders.entity.EntityImages; /** @@ -18,127 +56,174 @@ import mircoders.entity.EntityImages; * written out to a file at the ProducerImages level. * Remember that Handlers for specific image types, Gif, Jpeg, etc.. * should override it. - * It implements the MirMedia interface. + * It implements the MirMediaHandler interface. *

* slowly starting to look better, a next step would be to have the * representation stuff (WebdbImage) happen here. * -mh 01.03.2002 * - * @see mir.media.MirMedia + * @see mir.media.MediaHandler * @author mh - * @version 24.09.2001 + * @version $Id: MediaHandlerImages.java,v 1.23.2.11 2006/11/12 18:44:46 yossarian Exp $ */ -public class MediaHandlerImages implements MirMedia -{ - private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+ - "log/media.log"); +public abstract class MediaHandlerImages extends AbstractMediaHandler implements MediaHandler { + protected static MirPropertiesConfiguration configuration = MirPropertiesConfiguration.instance(); + protected static final String PNG = "PNG"; + protected static final String JPEG = "JPEG"; - public byte[] get(Entity ent, Entity mediaTypeEnt) - throws MirMediaException - { - byte[] image_data = null; + protected LoggerWrapper logger; - try { - image_data = ((EntityImages)ent).getImage(); - } catch ( StorageObjectException e) { - theLog.printDebugInfo("MediaHandlerImages.get: "+e.toString()); - throw new MirMediaException(e.toString()); - } + abstract String getType(); + public MediaHandlerImages() { + logger = new LoggerWrapper("Media.Images"); + } - return image_data; - } + public InputStream getMedia(Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure { + try { + return new ByteArrayInputStream(((EntityImages) ent).getImage()); + } + catch (Throwable e) { + logger.error("MediaHandlerImages.getImage: " + e.toString()); - public boolean set(byte[] uploadData, Entity ent, Entity mediaTypeEnt) - throws MirMediaException { + throw new MediaFailure(e); + } + } - try { - ((EntityImages)ent).setImage(uploadData); - } catch ( StorageObjectException e) { - theLog.printDebugInfo("MediaHandlerImages.set: "+e.toString()); - throw new MirMediaException(e.toString()); - } - //deref. -mh - uploadData=null; + public void store(UploadedFile anUploadedFile, Entity aMedia, Entity aMediaType) throws MediaExc, MediaFailure { + try { + store(anUploadedFile.getInputStream(), aMedia, aMediaType); + } + catch (SessionExc e) { + throw new MediaFailure(e); + } + } - return true; - } + public void store(InputStream in, Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure { + try { + ((EntityImages) ent).setImage(in, getType()); + } + catch (IOException e) { + logger.error("MediaHandlerImages.store", e); - public byte[] getIcon(Entity ent) throws MirMediaException - { - byte[] icon_data = null; + throw new MediaFailure("A problem has occurred processing the media file", e); + } + catch (SQLException e) { + logger.error("MediaHandlerImages.store", e); + throw new MediaFailure("A problem has occurred processing the media file", e); + } + } + + public void produce(Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure { + String date = ent.getFieldValue("date"); + String datePath = StringUtil.webdbDate2path(date); + String ext = "."+mediaTypeEnt.getFieldValue("name"); + String filepath = datePath+ent.getId()+ext; + String iconFilePath = configuration.getString("Producer.StorageRoot") + getBaseIconStoragePath() + filepath; + String productionFilePath = getBaseStoragePath() + File.separator + filepath; + + + if (ent.getFieldValue("icon_data")!= null && + ent.getFieldValue("image_data")!= null) { + // make icon + try { + OutputStream out; + InputStream in = new ByteArrayInputStream(((EntityImages) ent).getIcon()); try { - icon_data = ((EntityImages)ent).getIcon(); - } catch ( StorageObjectException e) { - theLog.printDebugInfo("MediaHandlerImages.getIcon: "+e.toString()); - throw new MirMediaException(e.toString()); + File iconFile = new File(iconFilePath); + + FileRoutines.createParentDirectories(iconFile); + + out = new FileOutputStream(iconFile); + try { + IORoutines.copyStream(in, out); + reportChange(iconFile.getAbsolutePath()); + } + finally { + out.close(); + } + } + finally { + in.close(); } - return icon_data; - } + in = new ByteArrayInputStream(((EntityImages) ent).getImage()); + try { + File imageFile = new File(productionFilePath); + + FileRoutines.createParentDirectories(imageFile); + + out = new FileOutputStream(imageFile); + try { + IORoutines.copyStream(in, out); + reportChange(imageFile.getAbsolutePath()); + } + finally { + out.close(); + } + } + finally { + in.close(); + } - public String getURL(Entity ent, Entity mediaTypeEnt) - { - String title = ent.getValue("title"); - return StringUtil.createIMGLinks(ent.getValue("publish_server")+ - ent.getValue("publish_path"), title, ent.getValue("img_height"), - ent.getValue("img_width")); + ent.setFieldValue("icon_path", getBaseIconStoragePath() + filepath); + ent.setFieldValue("publish_path", filepath); + ent.update(); + } + catch (Throwable e) { + logger.error("Error producing image", e); + + throw new MediaFailure("Error producing image", e); + } + finally { + } } + else { + logger.error("Can't produce image " + ent.getId() + ": missing image or icon OID"); - public String getListView(Entity ent, Entity mediaTypeEnt) - { - //String title = ent.getValue("title"); - return StringUtil.createIMGLinks( MirConfig.getProp("Producer.ProductionHost")+ - ent.getValue("icon_path"), null, ent.getValue("icon_height"), - ent.getValue("icon_width")); + throw new MediaExc("Can't produce image " + ent.getId() + ": missing image or icon OID"); } - - public String getStoragePath() - { - return MirConfig.getProp("Producer.Image.Path"); + } + + public InputStream getThumbnail(Entity ent) throws MediaExc, MediaFailure { + try { + return new ByteArrayInputStream(((EntityImages) ent).getIcon()); } - - public String getIconStoragePath() - { - return MirConfig.getProp("Producer.Image.IconPath"); + catch (Throwable e) { + logger.error("MediaHandlerImages.getIcon: " + e.toString()); + throw new MediaFailure(e); } + } - public String getPublishHost() - { - return MirConfig.getProp("Producer.Image.Host"); - } + public String getBaseStoragePath() { + return configuration.getString("Producer.Image.Path"); + } + + public String getBaseIconStoragePath() { + return configuration.getString("Producer.Image.IconPath"); + } + + public String getPublishHost() { + return StringUtil.removeSlash(configuration.getString("Producer.Image.Host")); + } + + public String getTinyIconName() { + return configuration.getString("Producer.Icon.TinyImage"); + } + + public String getBigIconName() { + return configuration.getString("Producer.Icon.BigImage"); + } + + public String getIconAltName() { + return "Image"; + } - public String getTinyIcon () - { - return MirConfig.getProp("Producer.Icon.TinyImage"); - } - - public String getBigIcon () - { - return MirConfig.getProp("Producer.Icon.BigImage"); - } - - public String getIconAlt () - { - return "Image"; - } - - public boolean isVideo () - { - return false; - } - - public boolean isAudio () - { - return false; - } - - public boolean isImage () - { - return true; - } + public String getDescr(Entity mediaType) { + return "image/jpeg"; + } }