babce6c139ea48d881ed4692885ebbe317217ac4
[mir.git] / source / mircoders / media / MediaHandlerImages.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 mircoders.media;
31
32 import java.io.File;
33 import java.io.InputStream;
34 import java.util.*;
35
36 import mir.config.MirPropertiesConfiguration;
37 import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;
38 import mir.entity.Entity;
39 import mir.log.LoggerWrapper;
40 import mir.media.MediaExc;
41 import mir.media.MediaFailure;
42 import mir.media.MirMedia;
43 import mir.misc.FileUtil;
44 import mir.misc.StringUtil;
45 import mircoders.entity.EntityImages;
46
47 /**
48  * This class handles saving, fetching creating representations
49  * for all images. The image content is stored in the DB. The content is
50  * written out to a file at the ProducerImages level.
51  * Remember that Handlers for specific image types, Gif, Jpeg, etc..
52  * should override it.
53  * It implements the MirMedia interface.
54  * <p>
55  * slowly starting to look better, a next step would be to have the
56  * representation stuff (WebdbImage) happen here.
57  * -mh 01.03.2002
58  *
59  * @see mir.media.MirMedia
60  * @author mh
61  * @version $Id: MediaHandlerImages.java,v 1.24 2003/09/03 18:29:04 zapata Exp $
62  */
63
64
65 public abstract class MediaHandlerImages implements MirMedia
66 {
67   protected static MirPropertiesConfiguration configuration;
68   protected static final String PNG = "PNG";
69   protected static final String JPEG = "JPEG";
70
71   protected LoggerWrapper logger;
72
73   static {
74     try {
75       configuration = MirPropertiesConfiguration.instance();
76     }
77     catch (PropertiesConfigExc e) {
78       throw new RuntimeException("Can't get configuration: " + e.getMessage());
79     }
80   }
81
82   abstract String getType();
83
84   public MediaHandlerImages() {
85     logger = new LoggerWrapper("Media.Images");
86   }
87
88   public InputStream getMedia(Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure {
89     InputStream inputStream;
90
91     try {
92       inputStream = ((EntityImages)ent).getImage();
93     }
94     catch (Throwable e) {
95       logger.error("MediaHandlerImages.getImage: " + e.toString());
96
97       throw new MediaFailure(e);
98     }
99
100     return inputStream;
101   }
102
103   public void set(InputStream in, Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure {
104
105     try {
106       ((EntityImages)ent).setImage(in, getType());
107     }
108     catch (Throwable e) {
109       logger.error("MediaHandlerImages.set: "+e.getMessage());
110       e.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE));
111
112       throw new MediaFailure(e);
113     }
114   }
115
116   public void produce(Entity ent, Entity mediaTypeEnt) throws MediaExc, MediaFailure {
117     String date = ent.getValue("date");
118     String datePath = StringUtil.webdbDate2path(date);
119     String ext = "."+mediaTypeEnt.getValue("name");
120     String filepath = datePath+ent.getId()+ext;
121     String iconFilePath = configuration.getString("Producer.StorageRoot")
122                           +getIconStoragePath() + filepath;
123     String productionFilePath = getStoragePath() + File.separator + filepath;
124
125
126     if (ent.getValue("icon_data")!= null &&
127         ent.getValue("image_data")!= null) {
128       // make icon
129       try {
130         InputStream in = ((EntityImages)ent).getIcon();
131         FileUtil.write(iconFilePath, in);
132         in = ((EntityImages)ent).getImage();
133         FileUtil.write(productionFilePath, in);
134         ent.setValueForProperty("icon_path",getIconStoragePath()+filepath);
135         ent.setValueForProperty("publish_path",filepath);
136         ent.update();
137       }
138       catch (Throwable e) {
139         logger.error("MediaHandlerImages.produce: " + e.toString());
140         throw new MediaFailure("MediaHandlerImages.produce: " + e.toString(), e);
141       }
142     }
143     else {
144       logger.error("MediaHandlerImages.produce: missing image or icon OID for: " + ent.getId());
145
146       throw new MediaExc("MediaHandlerImages.produce: missing image or icon OID for: " + ent.getId());
147     }
148   }
149
150
151   public InputStream getIcon(Entity ent) throws MediaExc, MediaFailure {
152     InputStream in;
153     try {
154       in = ((EntityImages)ent).getIcon();
155     }
156     catch (Throwable e) {
157       logger.error("MediaHandlerImages.getIcon: " + e.toString());
158       throw new MediaFailure(e);
159     }
160
161     return in;
162   }
163
164   public List getURL(Entity ent, Entity mediaTypeEnt) {
165     List theList = new Vector();
166     theList.add(ent);
167     return theList;
168   }
169
170   public String getStoragePath() {
171     return configuration.getString("Producer.Image.Path");
172   }
173
174   public String getIconStoragePath() {
175     return configuration.getString("Producer.Image.IconPath");
176   }
177
178   public String getPublishHost() {
179     return StringUtil.removeSlash(configuration.getString("Producer.Image.Host"));
180   }
181
182   public String getTinyIconName() {
183     return configuration.getString("Producer.Icon.TinyImage");
184   }
185
186   public String getBigIconName() {
187     return configuration.getString("Producer.Icon.BigImage");
188   }
189
190   public String getIconAltName() {
191     return "Image";
192   }
193
194   public boolean isVideo() {
195     return false;
196   }
197
198   public boolean isAudio() {
199     return false;
200   }
201
202   public boolean isImage () {
203     return true;
204   }
205
206   public String getDescr(Entity mediaType) {
207     return "image/jpeg";
208   }
209
210 }