ORMappingConfig is now provided by the datasource component.
[utils] / security / src / test / java / org / wamblee / usermgt / hibernate / ExternalDatasourceComponent.java
index 490c230523f03a96ca5b3a7db4b4f94ca770d546..55a2537c613d69c91305ad29dbe535f8187a5dd9 100644 (file)
@@ -23,34 +23,66 @@ import java.util.TreeMap;
 import javax.sql.DataSource;
 
 import org.springframework.core.io.ClassPathResource;
+import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.wamblee.system.core.AbstractComponent;
 import org.wamblee.system.core.DefaultProvidedInterface;
 import org.wamblee.system.core.ProvidedInterface;
 import org.wamblee.system.core.RequiredInterface;
+import org.wamblee.system.core.Scope;
 import org.wamblee.system.spring.SpringComponent;
+import org.wamblee.system.spring.component.ORMappingConfig;
+import org.wamblee.system.spring.component.ORMappingConfig.DatabaseType;
 
-public class ExternalDatasourceComponent extends SpringComponent {
+public class ExternalDatasourceComponent extends AbstractComponent<DataSource> {
 
     private static final String DATABASE_PROPERTIES = "properties/test.org.wamblee.security.database.properties";
-    private static final String DATASOURCE_SPRING_CONFIG = "spring/test.org.wamblee.security.datasource.xml";
+   
+    private static ProvidedInterface DATASOURCE =  new DefaultProvidedInterface("datasource",
+            DataSource.class);
+    private static ProvidedInterface ORM_CONFIG = new DefaultProvidedInterface("ormconfig",
+            ORMappingConfig.class);
 
+    private Properties _dbProps;
+   
     public ExternalDatasourceComponent(String aName) throws IOException {
-        super(
-                aName,
-                new String[] { DATASOURCE_SPRING_CONFIG },
-                createProvidedMap(), new TreeMap<RequiredInterface, String>());
-        Properties props = new Properties(); 
-        props.load(new ClassPathResource(DATABASE_PROPERTIES).getInputStream());
-        for (Object key: props.keySet()) { 
-            System.out.println("Key " + key + " value " + props.getProperty((String)key));
-        }
-        addProperties(props);
+        this(aName, loadProperties());
     }
 
-    private static Map<String, ProvidedInterface> createProvidedMap() {
-        Map<String, ProvidedInterface> provided = new TreeMap<String, ProvidedInterface>();
-        provided.put("dataSource", new DefaultProvidedInterface("datasource",
-                DataSource.class));
-        return provided;
+    private static Properties loadProperties() throws IOException {
+        Properties dbProps = new Properties();
+        dbProps.load(new ClassPathResource(DATABASE_PROPERTIES)
+                .getInputStream());
+        return dbProps;
     }
+    
+    public ExternalDatasourceComponent(String aName, Properties aProps) throws IOException {
+        super(aName);
+        _dbProps = aProps;
+        
+        addProvidedInterface(DATASOURCE);
+        addProvidedInterface(ORM_CONFIG);
+    }
+
 
+    @Override
+    protected DataSource doStart(Scope aScope) {
+        DriverManagerDataSource ds = new DriverManagerDataSource(
+                _dbProps.getProperty("database.driver"),
+                _dbProps.getProperty("database.url"), 
+                _dbProps.getProperty("database.username"),
+                _dbProps.getProperty("database.password"));
+       addInterface(DATASOURCE, ds, aScope);
+       DatabaseType type = DatabaseType.valueOf(_dbProps.getProperty("database.type"));
+       
+       ORMappingConfig config = new ORMappingConfig(true, type);
+       
+       addInterface(ORM_CONFIG, config, aScope);
+       
+       return ds; 
+    }
+
+    @Override
+    protected void doStop(DataSource aRuntime) {
+       // Empty.
+    }
 }