KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > images > Factory


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.util.images;
11
12 import java.util.*;
13 import org.mmbase.util.Queue;
14
15 import org.mmbase.module.core.MMObjectNode;
16
17 import org.mmbase.util.logging.Logging;
18 import org.mmbase.util.logging.Logger;
19
20 /**
21  * Loads the ImageConverters and ImageInformers.
22  *
23  * @author Michiel Meeuwissen
24  * @since MMBase-1.8
25  */

26
27
28 public class Factory {
29     private static final Logger log = Logging.getLoggerInstance(Factory.class);
30
31
32
33     private static ImageInformer imageInformer;
34     protected static Map params = new HashMap();
35
36     /**
37      * The ImageConvertInterface implementation to be used (defaults to ConvertImageMagic)
38      */

39     protected static final Class JavaDoc DEFAULT_IMAGECONVERTER = ImageMagickImageConverter.class;
40     protected static final Class JavaDoc DEFAULT_IMAGEINFORMER = DummyImageInformer.class;
41
42     protected static int maxConcurrentRequests = 2;
43
44
45     protected static final int maxRequests = 32;
46     protected static Queue imageRequestQueue = new Queue(maxRequests);
47     protected static Map imageRequestTable = new Hashtable(maxRequests);
48     protected static ImageConversionRequestProcessor ireqprocessors[];
49
50     /**
51      * The default image format.
52      */

53     protected static String JavaDoc defaultImageFormat = "jpeg";
54
55
56     public static void init(Map properties, org.mmbase.module.core.MMObjectBuilder imageCaches) {
57         params.putAll(properties);
58
59         String JavaDoc tmp = (String JavaDoc) properties.get("MaxConcurrentRequests");
60         if (tmp != null) {
61             try {
62                 maxConcurrentRequests = Integer.parseInt(tmp);
63             } catch (NumberFormatException JavaDoc e) {
64                 //
65
}
66         }
67
68         tmp = (String JavaDoc) params.get("ImageConvert.DefaultImageFormat");
69         if (tmp != null && ! tmp.equals("")) {
70             defaultImageFormat = tmp;
71         }
72
73
74         ImageConverter imageConverter = loadImageConverter();
75         imageInformer = loadImageInformer();
76         log.info("Got " + imageInformer);
77
78         imageConverter.init(params);
79         imageInformer.init(params);
80
81
82         // Startup parrallel converters
83
ireqprocessors = new ImageConversionRequestProcessor[maxConcurrentRequests];
84         log.info("Starting " + maxConcurrentRequests + " Converters for " + imageConverter);
85         for (int i = 0; i < maxConcurrentRequests; i++) {
86             ireqprocessors[i] = new ImageConversionRequestProcessor(imageCaches, imageConverter, imageInformer, imageRequestQueue, imageRequestTable);
87         }
88     }
89
90
91     public static String JavaDoc getDefaultImageFormat() {
92         return defaultImageFormat;
93     }
94
95
96     private static ImageConverter loadImageConverter() {
97
98         String JavaDoc className = DEFAULT_IMAGECONVERTER.getName();
99         String JavaDoc tmp = (String JavaDoc) params.get("ImageConvertClass");
100         if (tmp != null) className = tmp;
101
102
103         // backwards compatibility
104
if (className.equals("org.mmbase.module.builders.ConvertImageMagick")) {
105             className = "org.mmbase.util.images.ImageMagickImageConverter";
106         }
107         if (className.equals("org.mmbase.module.builders.ConvertJAI")) {
108             className = "org.mmbase.util.images.JAIImageConverter";
109         }
110         if (className.equals("org.mmbase.module.builders.ConvertDummy")) {
111             className = "org.mmbase.util.images.DummyImageConverter";
112         }
113         ImageConverter ici = null;
114
115         try {
116             Class JavaDoc cl = Class.forName(className);
117             ici = (ImageConverter) cl.newInstance();
118             log.service("loaded '" + className+"' for image Factory");
119         } catch (ClassNotFoundException JavaDoc e) {
120             log.error("is classname in " + params.get("configfile") + " correct? ('not found class " + className + "')");
121             log.error(Logging.stackTrace(e));
122         } catch (InstantiationException JavaDoc e) {
123             log.error("something went wrong ('could not instantiate class " + className + "')");
124             log.error(Logging.stackTrace(e));
125         } catch (java.lang.IllegalAccessException JavaDoc e) {
126             log.error("something went wrong ('illegal access class " + className + "')");
127             log.error(Logging.stackTrace(e));
128         } catch (NoClassDefFoundError JavaDoc e) {
129             log.error("are all lib's available? ('missing class used by class" + className + "')");
130             log.error(Logging.stackTrace(e));
131         }
132         return ici;
133     }
134
135     private static ImageInformer loadImageInformer() {
136         String JavaDoc className = DEFAULT_IMAGEINFORMER.getName();
137         String JavaDoc tmp = (String JavaDoc) params.get("ImageInformerClass");
138         if (tmp != null) className = tmp;
139
140         ImageInformer ii = null;
141
142         try {
143             Class JavaDoc cl = Class.forName(className);
144             ii = (ImageInformer) cl.newInstance();
145             log.service("loaded '" + className+"' for image Factory");
146         } catch (ClassNotFoundException JavaDoc e) {
147             log.error("is classname in " + params.get("configfile") + " correct? ('not found class " + className + "')");
148             log.error(Logging.stackTrace(e));
149         } catch (InstantiationException JavaDoc e) {
150             log.error("something went wrong ('could not instantiate class " + className + "')");
151             log.error(Logging.stackTrace(e));
152         } catch (java.lang.IllegalAccessException JavaDoc e) {
153             log.error("something went wrong ('illegal access class " + className + "')");
154             log.error(Logging.stackTrace(e));
155         } catch (NoClassDefFoundError JavaDoc e) {
156             log.error("are all lib's available? ('missing class used by class" + className + "')");
157             log.error(Logging.stackTrace(e));
158         }
159         if (ii == null) ii = new DummyImageInformer();
160         return ii;
161     }
162
163     public static ImageInformer getImageInformer() {
164         return imageInformer;
165     }
166
167
168     /**
169      * Triggers a image-conversion.
170      */

171     public static ImageConversionRequest getImageConversionRequest(List pars, byte[] in, String JavaDoc format, MMObjectNode icacheNode) {
172         ImageConversionRequest req;
173         String JavaDoc ckey = icacheNode.getStringValue(Imaging.FIELD_CKEY);
174         // convert the image, this will be done in an special thread,...
175
synchronized(imageRequestTable) {
176             req = (ImageConversionRequest) imageRequestTable.get(ckey);
177             if (req != null) {
178                 log.info("A conversion is already in progress (" + ckey + ")... (requests=" + ( req.count() + 1) + ")");
179             } else {
180                 req = new ImageConversionRequest(pars, in, format, icacheNode);
181                 imageRequestTable.put(ckey, req);
182                 imageRequestQueue.append(req);
183             }
184         }
185         return req;
186     }
187
188     public static Imaging.CKey getCKey(int nodeNumber, String JavaDoc template) {
189         return new Imaging.CKey(nodeNumber, template);
190     }
191
192 }
193
Popular Tags