KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sapia > regis > hibernate > HibernateRegistryFactory


1 package org.sapia.regis.hibernate;
2
3 import java.io.ByteArrayInputStream JavaDoc;
4 import java.io.ByteArrayOutputStream JavaDoc;
5 import java.io.IOException JavaDoc;
6 import java.io.InputStream JavaDoc;
7 import java.util.Properties JavaDoc;
8
9 import javax.xml.parsers.DocumentBuilder JavaDoc;
10 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
11
12 import org.hibernate.cfg.Configuration;
13 import org.sapia.regis.Registry;
14 import org.sapia.regis.RegistryFactory;
15 import org.sapia.regis.impl.NodeImpl;
16 import org.sapia.util.text.TemplateContextIF;
17 import org.sapia.util.text.TemplateElementIF;
18 import org.sapia.util.text.TemplateFactory;
19 import org.w3c.dom.Document JavaDoc;
20
21 /**
22  * An instance of this class creates an <code>HibernateRegistry</code> instance.
23  *
24  * @author yduchesne
25  *
26  */

27 public class HibernateRegistryFactory implements RegistryFactory{
28   
29   /**
30    * This method expects properties that follow the Hibernate configuration spec. The
31    * properties are simply delegated to an Hibernate <code>Configuration</code> object.
32    * <p>
33    * The returned <code>Registry</code> implementation will thus be based on an
34    * Hibernate <code>SessionFactory</code>.
35    *
36    * @param props some Hibernate properties.
37    * @return an <code>HibernateRegistry</code> instance.
38    */

39   public Registry connect(Properties JavaDoc props) throws Exception JavaDoc {
40     Configuration cfg = new Configuration();
41     cfg.addClass(NodeImpl.class);
42     
43     TemplateFactory fac = new TemplateFactory();
44     TemplateElementIF templ = fac.parse(loadHibernateConfig(props.getProperty("hbm2ddl.auto") != null));
45     String JavaDoc configStr = templ.render(new HibernateConfigContext(props));
46     DocumentBuilderFactory JavaDoc builderFac = DocumentBuilderFactory.newInstance();
47     DocumentBuilder JavaDoc builder = builderFac.newDocumentBuilder();
48     Document JavaDoc doc = builder.parse(new ByteArrayInputStream JavaDoc(configStr.getBytes()));
49
50     cfg.configure(doc);
51     return new HibernateRegistry(cfg.buildSessionFactory());
52   }
53   
54   private String JavaDoc loadHibernateConfig(boolean ddl) throws IOException JavaDoc{
55     
56     InputStream JavaDoc is = null;
57     if(ddl){
58       is = getClass().getResourceAsStream("hibernate.ddl.xml");
59     }
60     else{
61       is = getClass().getResourceAsStream("hibernate.xml");
62     }
63     try{
64       ByteArrayOutputStream JavaDoc bos = new ByteArrayOutputStream JavaDoc();
65       byte[] buf = new byte[100];
66       int i;
67       while((i = is.read(buf)) > 0){
68         bos.write(buf, 0, i);
69       }
70       return new String JavaDoc(bos.toByteArray());
71     }finally{
72       is.close();
73     }
74   }
75   
76   public static class HibernateConfigContext implements TemplateContextIF{
77     
78     private static Properties JavaDoc DEFAULT = new Properties JavaDoc();
79     private Properties JavaDoc _props;
80     
81     HibernateConfigContext(Properties JavaDoc props){
82       _props = props;
83     }
84     
85     static{
86       InputStream JavaDoc is = HibernateConfigContext.class.getResourceAsStream("hibernate.default.properties");
87       try{
88         DEFAULT.load(is);
89         is.close();
90       }catch(IOException JavaDoc e){
91         e.printStackTrace();
92         throw new IllegalStateException JavaDoc("Could not load default Hibernate configuration properties");
93       }
94     }
95     
96     public Object JavaDoc getValue(String JavaDoc name) {
97       String JavaDoc prop = _props.getProperty(name);
98       if(prop == null) prop = DEFAULT.getProperty(name);
99       return prop;
100     }
101     
102     public void put(String JavaDoc arg0, Object JavaDoc arg1) {
103     }
104     
105   }
106
107 }
108
Popular Tags