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