KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jbpm > db > hibernate > Converters


1 package org.jbpm.db.hibernate;
2
3 import java.util.HashMap JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.Properties JavaDoc;
6
7 import org.jbpm.context.exe.Converter;
8 import org.jbpm.instantiation.ClassLoaderUtil;
9
10 /**
11  * provides access to the list of converters and ensures that the converter objects are unique.
12  */

13 public class Converters {
14
15   // maps class names to unique converter objects
16
static HashMap JavaDoc convertersByClassNames = null;
17
18   // maps converter database-id-strings to unique converter objects
19
static HashMap JavaDoc convertersByDatabaseId = null;
20   
21   // maps unique converter objects to their database-id-string
22
static HashMap JavaDoc convertersIds = null;
23
24   public static Converter getConverterByClassName(String JavaDoc className) {
25     initConvertionMaps();
26     Converter converter = (Converter) convertersByClassNames.get(className);
27     if (converter==null) {
28       throw new RuntimeException JavaDoc("converter '"+className+"' is not declared in jbpm.converter.properties");
29     }
30     return converter;
31   }
32
33   public static Converter getConverterByDatabaseId(String JavaDoc converterDatabaseId) {
34     initConvertionMaps();
35     return (Converter) convertersByDatabaseId.get(converterDatabaseId);
36   }
37
38   public static String JavaDoc getConverterId(Converter converter) {
39     initConvertionMaps();
40     return (String JavaDoc) convertersIds.get(converter);
41   }
42
43   static void initConvertionMaps() {
44     if (convertersByClassNames==null) {
45       Properties JavaDoc converterProperties = ClassLoaderUtil.getProperties("jbpm.converter.properties", "org/jbpm/db/hibernate");
46       
47       convertersByClassNames = new HashMap JavaDoc();
48       convertersByDatabaseId = new HashMap JavaDoc();
49       convertersIds = new HashMap JavaDoc();
50
51       Iterator JavaDoc iter = converterProperties.keySet().iterator();
52       while (iter.hasNext()) {
53         String JavaDoc converterDatabaseId = (String JavaDoc) iter.next();
54         if (converterDatabaseId.length()!=1) throw new RuntimeException JavaDoc("converter-ids must be of length 1 (to be stored in a char)");
55         if (convertersByDatabaseId.containsKey(converterDatabaseId)) throw new RuntimeException JavaDoc("duplicate converter id : '"+converterDatabaseId+"'");
56
57         String JavaDoc converterClassName = converterProperties.getProperty(converterDatabaseId);
58         try {
59           Class JavaDoc converterClass = ClassLoaderUtil.loadClass(converterClassName);
60           Converter converter = (Converter) converterClass.newInstance();
61           convertersByClassNames.put(converterClassName, converter);
62           convertersByDatabaseId.put(converterDatabaseId, converter);
63           convertersIds.put(converter, converterDatabaseId);
64         } catch (Exception JavaDoc e) {
65           throw new RuntimeException JavaDoc("couldn't instantiate converter '"+converterClassName+"'");
66         }
67       }
68     }
69   }
70 }
71
Popular Tags