added databasecomponent and now using Derby in the unit tests.
[utils] / system / spring / src / main / java / org / wamblee / system / spring / component / HibernateComponent.java
index 9d6303fee89c26749c4a35076526fa75508a4cdf..4b256254ab0e00317d6d4927899321463b2dc8ab 100644 (file)
@@ -19,33 +19,68 @@ 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;
 
 public class HibernateComponent extends SpringComponent {
 
-    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";
+    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);
 
     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);
+        addProperties(HIBERNATE_PROPS_KEY, props);
+   
+        addRequiredInterface(CONFIG);
+    }
+    
+    @Override
+    protected Scope doStart(Scope aExternalScope) {
+        
+        ORMappingConfig config = aExternalScope.getInterfaceImplementation(CONFIG.getProvider(), ORMappingConfig.class);
+        setProperty(HIBERNATE_SCHEMAUPDATE_PROP, "" + config.isSchemaUpdate());
+        
+        DatabaseType db = config.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() {