/*
* Copyright 2008 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.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under 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 org.hibernate.SessionFactory;
-import javax.sql.DataSource;
+import org.hibernate.dialect.DerbyDialect;
+import org.hibernate.dialect.MySQLInnoDBDialect;
-import org.hibernate.SessionFactory;
-import org.springframework.core.io.ClassPathResource;
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;
+import java.io.IOException;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.sql.DataSource;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision$
+ */
public class HibernateComponent extends SpringComponent {
+ /**
+ * DOCUMENT ME!
+ */
+ private static final String HIBERNATE_DIALECT_PROP = "hibernate.dialect";
+
+ /**
+ * DOCUMENT ME!
+ */
+ private static final String HIBERNATE_SCHEMAUPDATE_PROP = "hibernate.schemaupdate";
+
+ /**
+ * DOCUMENT ME!
+ */
+ private static final String HIBERNATE_PROPS_KEY = "hibernateProperties";
+
+ /**
+ * DOCUMENT ME!
+ */
+ private static final String HIBERNATE_SPRING_CONFIG = "spring/org.wamblee.system.spring.component.hibernate.xml";
+
+ /**
+ * DOCUMENT ME!
+ */
+ 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.
+ *
+ * @param aName DOCUMENT ME!
+ *
+ * @throws IOException DOCUMENT ME!
+ */
+ public HibernateComponent(String aName) throws IOException {
+ 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);
}
+ /**
+ * DOCUMENT ME!
+ *
+ * @param aExternalScope DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ @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);
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ private Properties getHibernateProperties() {
+ return getProperties(HIBERNATE_PROPS_KEY);
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
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;
}
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
private static Map<String, ProvidedInterface> createProvided() {
- Map<String,ProvidedInterface> provided = new HashMap<String,ProvidedInterface>();
-
- provided.put("transactionManager", new DefaultProvidedInterface(
- "transactionMgr", PlatformTransactionManager.class));
- provided.put("sessionFactory", new DefaultProvidedInterface(
- "sessionFactory", SessionFactory.class));
- provided.put("org.springframework.orm.hibernate3.HibernateTemplate", new DefaultProvidedInterface(
- "hibernateTemplate", HibernateTemplate.class));
+ Map<String, ProvidedInterface> provided = new HashMap<String, ProvidedInterface>();
+
+ provided.put("transactionManager",
+ new DefaultProvidedInterface("transactionMgr",
+ PlatformTransactionManager.class));
+ provided.put("sessionFactory",
+ new DefaultProvidedInterface("sessionFactory", SessionFactory.class));
+ provided.put("org.springframework.orm.hibernate3.HibernateTemplate",
+ new DefaultProvidedInterface("hibernateTemplate",
+ HibernateTemplate.class));
+
return provided;
}
}