code style improvements.
[utils] / system / spring / src / main / java / org / wamblee / system / spring / component / HibernateComponent.java
index 9d6303fee89c26749c4a35076526fa75508a4cdf..9d5bb83bf6e38e9b03ccad4958906f46b89f24c1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 the original author or authors.
+ * Copyright 2005-2010 the original author or authors.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */ 
 package org.wamblee.system.spring.component;
 
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
-import java.util.TreeMap;
 
 import javax.sql.DataSource;
 
 import org.hibernate.SessionFactory;
-import org.springframework.core.io.ClassPathResource;
+import org.hibernate.dialect.DerbyDialect;
+import org.hibernate.dialect.MySQLInnoDBDialect;
 import org.springframework.orm.hibernate3.HibernateTemplate;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.wamblee.persistence.hibernate.HibernateMappingFiles;
+import org.wamblee.system.components.ORMappingConfig;
+import org.wamblee.system.components.ORMappingConfig.DatabaseType;
 import org.wamblee.system.core.DefaultProvidedInterface;
 import org.wamblee.system.core.DefaultRequiredInterface;
 import org.wamblee.system.core.ProvidedInterface;
 import org.wamblee.system.core.RequiredInterface;
+import org.wamblee.system.core.Scope;
 import org.wamblee.system.spring.SpringComponent;
 
+/**
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
 public class HibernateComponent extends SpringComponent {
+    private static final String HIBERNATE_DIALECT_PROP = "hibernate.dialect";
+
+    private static final String HIBERNATE_SCHEMAUPDATE_PROP = "hibernate.schemaupdate";
+
+    private static final String HIBERNATE_PROPS_KEY = "hibernateProperties";
+
+    private static final String HIBERNATE_SPRING_CONFIG = "spring/org.wamblee.system.spring.component.hibernate.xml";
+
+    private final RequiredInterface config = new DefaultRequiredInterface(
+        "config", ORMappingConfig.class);
 
-    private static final String HIBERNATE_PROPERTIES = "properties/test.org.wamblee.security.hibernate.properties";
-    private static final String HIBERNATE_SPRING_CONFIG = "spring/test.org.wamblee.security.database.xml";
+    /**
+     * Creates a new HibernateComponent object.
+     * 
+     * 
+     */
+    public HibernateComponent(String aName) {
+        super(aName, new String[] { HIBERNATE_SPRING_CONFIG },
+            createProvided(), createRequired());
 
-    public HibernateComponent(String aName) throws IOException { 
-        super(aName, new String[] { HIBERNATE_SPRING_CONFIG}, 
-                createProvided(), createRequired()); 
-        
-        Properties props = new Properties(); 
-        props.load(new ClassPathResource(HIBERNATE_PROPERTIES).getInputStream());
-        addProperties(props);
+        Properties props = new Properties();
+        addProperties(HIBERNATE_PROPS_KEY, props);
+
+        addRequiredInterface(config);
+    }
+
+    @Override
+    protected Scope doStart(Scope aExternalScope) {
+        ORMappingConfig orMappingConfig = aExternalScope.getInterfaceImplementation(
+            config.getProvider(), ORMappingConfig.class);
+        setProperty(HIBERNATE_SCHEMAUPDATE_PROP, "" + orMappingConfig.isSchemaUpdate());
+
+        DatabaseType db = orMappingConfig.getType();
+        String dialect = db.handleCases(new DatabaseType.Switch<String>() {
+            @Override
+            public String handleMySqlInnoDb() {
+                return MySQLInnoDBDialect.class.getName();
+            }
+
+            @Override
+            public String handleDerby() {
+                return DerbyDialect.class.getName();
+            }
+        });
+
+        getHibernateProperties().put(HIBERNATE_DIALECT_PROP, dialect);
+
+        return super.doStart(aExternalScope);
+    }
+
+    private Properties getHibernateProperties() {
+        return getProperties(HIBERNATE_PROPS_KEY);
     }
 
     private static Map<RequiredInterface, String> createRequired() {
-        Map<RequiredInterface,String> required = new HashMap<RequiredInterface, String>();
-        required.put(new DefaultRequiredInterface("datasource", DataSource.class), "dataSource");
-        required.put(new DefaultRequiredInterface("mappingFiles", HibernateMappingFiles.class), 
-                "hibernateMappingFiles");
+        Map<RequiredInterface, String> required = new HashMap<RequiredInterface, String>();
+        required.put(new DefaultRequiredInterface("datasource",
+            DataSource.class), "dataSource");
+        required.put(new DefaultRequiredInterface("mappingFiles",
+            HibernateMappingFiles.class), "hibernateMappingFiles");
+
         return required;
     }
 
     private static Map<String, ProvidedInterface> createProvided() {
-        Map<String,ProvidedInterface> provided = new HashMap<String,ProvidedInterface>(); 
-        
+        Map<String, ProvidedInterface> provided = new HashMap<String, ProvidedInterface>();
+
         provided.put("transactionManager", new DefaultProvidedInterface(
-                "transactionMgr", PlatformTransactionManager.class));
+            "transactionMgr", PlatformTransactionManager.class));
         provided.put("sessionFactory", new DefaultProvidedInterface(
-                "sessionFactory", SessionFactory.class));
-        provided.put("org.springframework.orm.hibernate3.HibernateTemplate", new DefaultProvidedInterface(
-                "hibernateTemplate", HibernateTemplate.class));
+            "sessionFactory", SessionFactory.class));
+        provided.put("org.springframework.orm.hibernate3.HibernateTemplate",
+            new DefaultProvidedInterface("hibernateTemplate",
+                HibernateTemplate.class));
+
         return provided;
     }
 }