import java.util.Properties;\r
\r
import org.apache.log4j.Logger;\r
+import org.hibernate.cache.CacheProvider;\r
+import org.hibernate.cache.NoCacheProvider;\r
import org.jdom.Attribute;\r
import org.jdom.Document;\r
import org.jdom.Element;\r
public static final String DATASOURCE_BEAN_POSTFIX = "DataSource";\r
public final static String DATASOURCE_FILE_NAME = "cdm.datasource.xml";\r
private final static Format format = Format.getPrettyFormat(); \r
+\r
+ \r
+ public enum DbProperties{\r
+ DRIVER_CLASS,\r
+ URL,\r
+ USERNAME,\r
+ PASSWORD;\r
+\r
+ public String toString(){\r
+ switch (this){\r
+ case DRIVER_CLASS:\r
+ return "driverClassName";\r
+ case URL:\r
+ return "url";\r
+ case USERNAME:\r
+ return "username";\r
+ case PASSWORD:\r
+ return "password";\r
+ default: \r
+ throw new IllegalArgumentException( "Unknown enumeration type" );\r
+ }\r
+ }\r
+ }\r
+ \r
+ public enum HBM2DDL{\r
+ VALIDATE,\r
+ UPDATE,\r
+ CREATE;\r
+\r
+ public String getHibernateString(){\r
+ switch (this){\r
+ case VALIDATE:\r
+ return "validate";\r
+ case UPDATE:\r
+ return "update";\r
+ case CREATE:\r
+ return "create";\r
+ default: \r
+ throw new IllegalArgumentException( "Unknown enumeration type" );\r
+ }\r
+ }\r
+ }\r
\r
//name\r
protected String dataSourceName;\r
}\r
}\r
}\r
+\r
\r
+ \r
+ /**\r
+ * Returns the url of . \r
+ * @return the database type of the data source. Null if the bean or the url property does not exist.\r
+ */\r
+ public String getDbProperty(DbProperties dbProp){\r
+ Element bean = getDatasourceBeanXml(this.dataSourceName);\r
+ if (bean == null){\r
+ return null;\r
+ }else{\r
+ Element elProperty = XmlHelp.getFirstAttributedChild(bean, "property", "name", dbProp.toString());\r
+ if (elProperty == null){\r
+ logger.warn("Unknown property: " + dbProp.toString());\r
+ return null;\r
+ }else{\r
+ String strValue = elProperty.getAttributeValue("value");\r
+ return strValue;\r
+ }\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * Returns a BeanDefinition object of type DriverManagerDataSource that contains\r
+ * datsource properties (url, username, password, ...)\r
+ * @return\r
+ */\r
public BeanDefinition getDatasourceBean(){\r
AbstractBeanDefinition bd = new RootBeanDefinition(DriverManagerDataSource.class);\r
- DatabaseTypeEnum dbtype = getDatabaseType();\r
+ DatabaseTypeEnum dbtype = DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDbProperty(DbProperties.DRIVER_CLASS));\r
//TODO: read real values\r
MutablePropertyValues props = new MutablePropertyValues();\r
props.addPropertyValue("driverClassName", dbtype.getDriverClassName());\r
- props.addPropertyValue("url", "jdbc:mysql://192.168.2.10/cdm_build");\r
- props.addPropertyValue("username", "edit");\r
- props.addPropertyValue("password", "wp5");\r
+ props.addPropertyValue("url", getDbProperty(DbProperties.URL));\r
+ props.addPropertyValue("username", getDbProperty(DbProperties.USERNAME));\r
+ props.addPropertyValue("password", getDbProperty(DbProperties.PASSWORD));\r
bd.setPropertyValues(props);\r
return bd;\r
}\r
- public BeanDefinition getHibernatePropertiesBean(HBM2DDL hbm2dll, boolean showSql){\r
+ \r
+ /**\r
+ * @param hbm2dll\r
+ * @param showSql\r
+ * @return\r
+ */\r
+ public BeanDefinition getHibernatePropertiesBean(HBM2DDL hbm2dll){\r
+ boolean showSql = false;\r
+ boolean formatSql = false;\r
+ Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;\r
+ return getHibernatePropertiesBean(hbm2dll, showSql, formatSql, cacheProviderClass);\r
+ }\r
+ \r
+ \r
+ /**\r
+ * @param hbm2dll\r
+ * @param showSql\r
+ * @return\r
+ */\r
+ public BeanDefinition getHibernatePropertiesBean(HBM2DDL hbm2dll, Boolean showSql, Boolean formatSql, Class<? extends CacheProvider> cacheProviderClass){\r
+ //Hibernate default values\r
+ if (showSql == null){\r
+ showSql = false;\r
+ }\r
+ if (formatSql == null){\r
+ formatSql = false;\r
+ }\r
+ if (cacheProviderClass == null){\r
+ cacheProviderClass = NoCacheProvider.class;\r
+ }\r
+ \r
DatabaseTypeEnum dbtype = getDatabaseType();\r
AbstractBeanDefinition bd = new RootBeanDefinition(PropertiesFactoryBean.class);\r
MutablePropertyValues hibernateProps = new MutablePropertyValues();\r
Properties props = new Properties();\r
props.setProperty("hibernate.hbm2ddl.auto", hbm2dll.getHibernateString());\r
props.setProperty("hibernate.dialect", dbtype.getHibernateDialect());\r
- props.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.NoCacheProvider");\r
+ props.setProperty("hibernate.cache.provider_class", cacheProviderClass.getName());\r
props.setProperty("hibernate.show_sql", String.valueOf(showSql));\r
- props.setProperty("hibernate.format_sql", String.valueOf(false));\r
+ props.setProperty("hibernate.format_sql", String.valueOf(formatSql));\r
\r
hibernateProps.addPropertyValue("properties",props);\r
bd.setPropertyValues(hibernateProps);\r
return bd;\r
}\r
\r
+ \r
/**\r
* Tests existing of the datsource in the according config file.\r
* @return true if a datasource with the given name exists in the according datasource config file.\r
return f.getPath();\r
}\r
\r
-// /**\r
-// * Returns the session factory config file input stream.\r
-// * @return session factory config file\r
-// */\r
-// private FileInputStream get22SessionFactoryInputStream(){\r
-// String dir = getResourceDirectory();\r
-// File file = new File(dir + File.separator + SESSION_FACTORY_FILE);\r
-// return fileInputStream(file);\r
-// }\r
-// \r
-// /**\r
-// * Returns the session factory output stream.\r
-// * @return \r
-// */\r
-// private FileOutputStream get22SessionFactoryOutputStream(){\r
-// String dir = getResourceDirectory();\r
-// File file = new File(dir + File.separator + SESSION_FACTORY_FILE);\r
-// return fileOutputStream(file);\r
-// }\r
-// \r
- \r
static private FileInputStream fileInputStream(File file){\r
try {\r
FileInputStream fis = new FileInputStream(file);\r