sascha@176: package de.intevation.flys.backend; sascha@176: sascha@176: import de.intevation.artifacts.common.utils.Config; sascha@176: sascha@176: import java.util.Properties; sascha@176: sascha@176: import org.hibernate.SessionFactory; sascha@176: sascha@176: import org.hibernate.cfg.Configuration; sascha@176: import org.hibernate.cfg.Environment; sascha@176: sascha@176: import de.intevation.flys.model.Annotation; sascha@763: import de.intevation.flys.model.AnnotationType; sascha@176: import de.intevation.flys.model.Attribute; sascha@1194: import de.intevation.flys.model.CrossSection; sascha@1194: import de.intevation.flys.model.CrossSectionPoint; sascha@176: import de.intevation.flys.model.DischargeTable; sascha@176: import de.intevation.flys.model.DischargeTableValue; sascha@760: import de.intevation.flys.model.Edge; sascha@176: import de.intevation.flys.model.Gauge; sascha@176: import de.intevation.flys.model.MainValueType; sascha@189: import de.intevation.flys.model.NamedMainValue; sascha@189: import de.intevation.flys.model.MainValue; sascha@1193: import de.intevation.flys.model.Point3d; sascha@176: import de.intevation.flys.model.Position; sascha@176: import de.intevation.flys.model.Range; sascha@176: import de.intevation.flys.model.River; sascha@176: import de.intevation.flys.model.TimeInterval; sascha@176: import de.intevation.flys.model.WstColumn; sascha@176: import de.intevation.flys.model.WstColumnQRange; sascha@176: import de.intevation.flys.model.WstColumnValue; sascha@176: import de.intevation.flys.model.Wst; sascha@176: import de.intevation.flys.model.WstQRange; sascha@176: sascha@176: import org.apache.log4j.Logger; sascha@176: sascha@176: public final class SessionFactoryProvider sascha@176: { sascha@176: private static Logger log = Logger.getLogger(SessionFactoryProvider.class); sascha@176: sascha@176: public static final String XPATH_USER = sascha@176: "/artifact-database/backend-database/user/text()"; sascha@176: sascha@176: public static final String XPATH_PASSWORD = sascha@176: "/artifact-database/backend-database/password/text()"; sascha@176: sascha@176: public static final String XPATH_DIALECT = sascha@176: "/artifact-database/backend-database/dialect/text()"; sascha@176: sascha@176: public static final String XPATH_DRIVER = sascha@176: "/artifact-database/backend-database/driver/text()"; sascha@176: sascha@176: public static final String XPATH_URL = sascha@176: "/artifact-database/backend-database/url/text()"; sascha@176: sascha@179: public static final String DEFAULT_USER = sascha@179: System.getProperty("flys.backend.user", "flys"); sascha@179: sascha@179: public static final String DEFAULT_PASSWORD = sascha@179: System.getProperty("flys.backend.password", "flys"); sascha@179: sascha@179: public static final String DEFAULT_DIALECT = sascha@179: System.getProperty( sascha@179: "flys.backend.dialect", sascha@179: "org.hibernate.dialect.PostgreSQLDialect"); sascha@176: sascha@176: public static final String DEFAULT_DRIVER = sascha@179: System.getProperty( sascha@179: "flys.backend.driver", sascha@179: "org.postgresql.Driver"); sascha@176: sascha@176: public static final String DEFAULT_URL = sascha@179: System.getProperty( sascha@179: "flys.backend.url", sascha@179: "jdbc:postgresql://localhost:5432/flys"); sascha@176: sascha@176: private static SessionFactory sessionFactory; sascha@176: sascha@176: private SessionFactoryProvider() { sascha@176: } sascha@176: sascha@176: public static synchronized SessionFactory getSessionFactory() { sascha@176: if (sessionFactory == null) { sascha@178: String user = sascha@178: Config.getStringXPath(XPATH_USER, DEFAULT_USER); sascha@178: String password = sascha@178: Config.getStringXPath(XPATH_PASSWORD, DEFAULT_PASSWORD); sascha@178: String dialect = sascha@178: Config.getStringXPath(XPATH_DIALECT, DEFAULT_DIALECT); sascha@464: String driver = sascha@178: Config.getStringXPath(XPATH_DRIVER, DEFAULT_DRIVER); sascha@178: String url = sascha@178: Config.getStringXPath(XPATH_URL, DEFAULT_URL); sascha@178: sascha@178: sessionFactory = createSessionFactory( sascha@178: user, password, dialect, driver, url); sascha@176: } sascha@176: return sessionFactory; sascha@176: } sascha@176: sascha@179: public static SessionFactory createSessionFactory() { sascha@179: return createSessionFactory( sascha@179: DEFAULT_USER, sascha@179: DEFAULT_PASSWORD, sascha@179: DEFAULT_DIALECT, sascha@179: DEFAULT_DRIVER, sascha@179: DEFAULT_URL); sascha@179: } sascha@179: sascha@178: public static SessionFactory createSessionFactory( sascha@178: String user, sascha@178: String password, sascha@178: String dialect, sascha@178: String driver, sascha@178: String url sascha@178: ) { sascha@176: Configuration cfg = new Configuration(); sascha@176: sascha@176: // TODO: Use package reflection here. sascha@176: cfg.addAnnotatedClass(Annotation.class); sascha@763: cfg.addAnnotatedClass(AnnotationType.class); sascha@176: cfg.addAnnotatedClass(Attribute.class); sascha@1194: cfg.addAnnotatedClass(CrossSection.class); sascha@1194: cfg.addAnnotatedClass(CrossSectionPoint.class); sascha@176: cfg.addAnnotatedClass(DischargeTable.class); sascha@176: cfg.addAnnotatedClass(DischargeTableValue.class); sascha@760: cfg.addAnnotatedClass(Edge.class); sascha@176: cfg.addAnnotatedClass(Gauge.class); sascha@176: cfg.addAnnotatedClass(MainValueType.class); sascha@189: cfg.addAnnotatedClass(NamedMainValue.class); sascha@189: cfg.addAnnotatedClass(MainValue.class); sascha@1193: cfg.addAnnotatedClass(Point3d.class); sascha@176: cfg.addAnnotatedClass(Position.class); sascha@176: cfg.addAnnotatedClass(Range.class); sascha@176: cfg.addAnnotatedClass(River.class); sascha@176: cfg.addAnnotatedClass(TimeInterval.class); sascha@176: cfg.addAnnotatedClass(WstColumn.class); sascha@176: cfg.addAnnotatedClass(WstColumnQRange.class); sascha@176: cfg.addAnnotatedClass(WstColumnValue.class); sascha@176: cfg.addAnnotatedClass(Wst.class); sascha@176: cfg.addAnnotatedClass(WstQRange.class); sascha@176: sascha@176: if (log.isDebugEnabled()) { sascha@176: log.debug("user: " + user); sascha@176: log.debug("dialect: " + dialect); sascha@176: log.debug("driver: " + driver); sascha@176: log.debug("url: " + url); sascha@176: } sascha@176: sascha@176: Properties props = new Properties(); sascha@176: sascha@176: // We rely on our own connection pool sascha@176: props.setProperty( sascha@176: "hibernate.connection.provider_class", sascha@176: "org.hibernate.connection.DBCPConnectionProvider"); sascha@176: sascha@176: props.setProperty(Environment.DIALECT, dialect); sascha@176: props.setProperty(Environment.USER, user); sascha@176: props.setProperty(Environment.PASS, password); sascha@176: props.setProperty(Environment.DRIVER, driver); sascha@176: props.setProperty(Environment.URL, url); sascha@176: sascha@176: cfg.mergeProperties(props); sascha@176: sascha@176: return cfg.buildSessionFactory(); sascha@176: } sascha@176: } sascha@176: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :