package com.jsonde.client.dao; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.util.LinkedList; import java.util.List; public class DaoFactory { private static DaoFactory instance; private final List<AbstractEntityDao> daoList = new LinkedList<AbstractEntityDao>(); private DataSource dataSource; private final ClazzLoaderDao clazzLoaderDao; private final CodeSourceDao codeSourceDao; private final ClazzDao clazzDao; private final MethodDao methodDao; private final MethodCallDao methodCallDao; private final TopMethodCallDao topMethodCallDao; private final MethodCallSummaryDao methodCallSummaryDao; private final ReportDao reportDao; private final TelemetryDataDao telemetryDataDao; public static void initialize(DataSource dataSource) throws DaoException { instance = new DaoFactory(dataSource); } private DaoFactory(DataSource dataSource) throws DaoException { this.dataSource = dataSource; clazzLoaderDao = new ClazzLoaderDao(dataSource); codeSourceDao = new CodeSourceDao(dataSource); clazzDao = new ClazzDao(dataSource); methodDao = new MethodDao(dataSource); methodCallDao = new MethodCallDao(dataSource); topMethodCallDao = new TopMethodCallDao(dataSource); methodCallSummaryDao = new MethodCallSummaryDao(dataSource); reportDao = new ReportDao(dataSource); telemetryDataDao = new TelemetryDataDao(dataSource); daoList.add(clazzLoaderDao); daoList.add(codeSourceDao); daoList.add(clazzDao); daoList.add(methodDao); daoList.add(methodCallDao); daoList.add(topMethodCallDao); daoList.add(methodCallSummaryDao); daoList.add(telemetryDataDao); } public static ClazzLoaderDao getClazzLoaderDao() { return instance.clazzLoaderDao; } public static CodeSourceDao getCodeSourceDao() { return instance.codeSourceDao; } public static ClazzDao getClazzDao() { return instance.clazzDao; } public static MethodDao getMethodDao() { return instance.methodDao; } public static MethodCallDao getMethodCallDao() { return instance.methodCallDao; } public static TopMethodCallDao getTopMethodCallDao() { return instance.topMethodCallDao; } public static MethodCallSummaryDao getMethodCallSummaryDao() { return instance.methodCallSummaryDao; } public static ReportDao getReportDao() { return instance.reportDao; } public static TelemetryDataDao getTelemetryDataDao() { return instance.telemetryDataDao; } public static Connection getConnection() throws DaoException { try { return instance.dataSource.getConnection(); } catch (SQLException e) { throw new DaoException(e); } } public static void createSchema() throws DaoException { for (AbstractEntityDao dao : instance.daoList) { dao.createTable(); } } }