Author: [log in to unmask]
Date: Tue Sep 29 13:07:36 2015
New Revision: 3733
Log:
Add additional methods to run db manager.
Modified:
java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java
Modified: java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java
=============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java (original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java Tue Sep 29 13:07:36 2015
@@ -21,24 +21,20 @@
* @author Jeremy McCormick, SLAC
*/
public final class RunManager implements ConditionsListener {
-
+
/**
* Simple class for caching data.
*/
private class DataCache {
+
+ List<EpicsData> epicsData;
+ RunSummary fullRunSummary;
Boolean runExists;
+ RunSummary runSummary;
+ List<ScalerData> scalerData;
TriggerConfig triggerConfig;
- List<EpicsData> epicsData;
- List<ScalerData> scalerData;
- RunSummary runSummary;
- RunSummary fullRunSummary;
- }
-
- /**
- * The data cache of run information.
- */
- private DataCache dataCache;
-
+ }
+
/**
* The default connection parameters for read-only access to the run database.
*/
@@ -78,33 +74,47 @@
private final ConnectionParameters connectionParameters = DEFAULT_CONNECTION_PARAMETERS;
/**
+ * The data cache of run information.
+ */
+ private DataCache dataCache;
+
+ /**
+ * Factory for creating database API objects.
+ */
+ private final RunDatabaseDaoFactory factory;
+
+ /**
* The run number; the -1 value indicates that this has not been set externally yet.
*/
private Integer run = null;
- /**
- * Factory for creating database API objects.
- */
- private RunDatabaseDaoFactory factory;
-
- /**
- * Class constructor.
- *
- * @param connection the database connection
- */
- public RunManager(Connection connection) {
- this.connection = connection;
- openConnection();
- factory = new RunDatabaseDaoFactory(this.connection);
- }
-
/**
* Class constructor using default connection parameters.
*/
public RunManager() {
this.connection = DEFAULT_CONNECTION_PARAMETERS.createConnection();
- openConnection();
+ this.openConnection();
factory = new RunDatabaseDaoFactory(this.connection);
+ }
+
+ /**
+ * Class constructor.
+ *
+ * @param connection the database connection
+ */
+ public RunManager(final Connection connection) {
+ this.connection = connection;
+ this.openConnection();
+ factory = new RunDatabaseDaoFactory(this.connection);
+ }
+
+ /**
+ * Check if the run number has been set.
+ */
+ private void checkRunNumber() {
+ if (this.run == null) {
+ throw new IllegalStateException("The run number was not set.");
+ }
}
/**
@@ -117,12 +127,12 @@
}
} catch (final SQLException e) {
e.printStackTrace();
- }
+ }
}
/**
* Load new run information when conditions have changed.
- *
+ *
* @param conditionsEvent the event with new conditions information
*/
@Override
@@ -131,6 +141,66 @@
}
/**
+ * Delete a run from the database.
+ *
+ * @param run the run number
+ */
+ public void deleteRun() {
+ // Create object for updating run info in the database.
+ final RunSummaryDao runSummaryDao = factory.createRunSummaryDao();
+
+ // Delete run from the database.
+ runSummaryDao.deleteFullRun(run);
+ }
+
+ /**
+ * Return the database connection.
+ *
+ * @return the database connection
+ */
+ Connection getConnection() {
+ return this.connection;
+ }
+
+ /**
+ * Get the EPICS data for the current run.
+ *
+ * @param epicsType the type of EPICS data
+ * @return the EPICS data for the current run
+ */
+ public List<EpicsData> getEpicsData(final EpicsType epicsType) {
+ this.checkRunNumber();
+ if (this.dataCache.epicsData == null) {
+ LOGGER.info("loading EPICS data for run " + this.run);
+ this.dataCache.epicsData = factory.createEpicsDataDao().getEpicsData(epicsType, this.run);
+ }
+ return this.dataCache.epicsData;
+ }
+
+ /**
+ * Get the EPICS variables.
+ *
+ * @param epicsType the type of EPICS data
+ * @return the EPICS data for the current run
+ */
+ public List<EpicsVariable> getEpicsVariables(final EpicsType epicsType) {
+ return factory.createEpicsVariableDao().getEpicsVariables(epicsType);
+ }
+
+ /**
+ * Get the full run summary for the current run including scaler data, etc.
+ *
+ * @return the full run summary for the current run
+ */
+ public RunSummary getFullRunSummary() {
+ this.checkRunNumber();
+ if (this.dataCache.fullRunSummary == null) {
+ this.dataCache.fullRunSummary = factory.createRunSummaryDao().readFullRunSummary(this.run);
+ }
+ return this.dataCache.fullRunSummary;
+ }
+
+ /**
* Get the current run number.
*
* @return the run number
@@ -146,6 +216,74 @@
*/
public List<Integer> getRuns() {
return new RunSummaryDaoImpl(this.connection).getRuns();
+ }
+
+ /**
+ * Get the full list of summaries for all runs in the database without complex data like EPICS records.
+ *
+ * @return the full list of run summaries
+ */
+ public List<RunSummary> getRunSummaries() {
+ return this.factory.createRunSummaryDao().getRunSummaries();
+ }
+
+ /**
+ * Get the run summary for the current run not including its sub-objects like scaler data.
+ *
+ * @return the run summary for the current run
+ */
+ public RunSummary getRunSummary() {
+ this.checkRunNumber();
+ if (this.dataCache.runSummary == null) {
+ this.dataCache.runSummary = factory.createRunSummaryDao().getRunSummary(this.run);
+ }
+ return this.dataCache.runSummary;
+ }
+
+ /**
+ * Get the scaler data for the current run.
+ *
+ * @return the scaler data for the current run
+ */
+ public List<ScalerData> getScalerData() {
+ this.checkRunNumber();
+ if (this.dataCache.scalerData == null) {
+ LOGGER.info("loading scaler data for run " + this.run);
+ this.dataCache.scalerData = factory.createScalerDataDao().getScalerData(run);
+ }
+ return this.dataCache.scalerData;
+ }
+
+ /**
+ * Get the trigger config for the current run.
+ *
+ * @return the trigger config for the current run
+ */
+ public TriggerConfig getTriggerConfig() {
+ this.checkRunNumber();
+ if (this.dataCache.triggerConfig == null) {
+ LOGGER.info("loading trigger config for run " + this.run);
+ this.dataCache.triggerConfig = factory.createTriggerConfigDao().getTriggerConfig(run);
+ }
+ return this.dataCache.triggerConfig;
+ }
+
+ /**
+ * Update the database with information found from crawling the files.
+ *
+ * @param runs the list of runs to update
+ * @throws SQLException if there is a database query error
+ */
+ public void insertRun(final RunSummary runSummary) throws SQLException {
+ LOGGER.info("updating run database for run " + runSummary.getRun());
+
+ // Create object for updating run info in the database.
+ final RunSummaryDao runSummaryDao = factory.createRunSummaryDao();
+
+ // Insert run summary into database.
+ runSummaryDao.insertFullRunSummary(runSummary);
+
+ LOGGER.info("done updating run database");
}
/**
@@ -167,152 +305,47 @@
}
/**
+ * Return <code>true</code> if the run exists in the database.
+ *
+ * @return <code>true</code> if the run exists in the database
+ */
+ public boolean runExists() {
+ this.checkRunNumber();
+ if (this.dataCache.runExists == null) {
+ this.dataCache.runExists = factory.createRunSummaryDao().runSummaryExists(this.run);
+ }
+ return this.dataCache.runExists;
+ }
+
+ /**
+ * Return <code>true</code> if the run exists in the database.
+ *
+ * @param run the run number
+ * @return <code>true</code> if the run exists in the database
+ */
+ boolean runExists(final int run) {
+ if (this.dataCache.runExists == null) {
+ this.dataCache.runExists = factory.createRunSummaryDao().runSummaryExists(run);
+ }
+ return this.dataCache.runExists;
+ }
+
+ /**
* Set the run number and then load the applicable {@link RunSummary} from the database.
*
* @param run the run number
*/
public void setRun(final int run) {
-
+
if (this.run == null || run != this.run) {
-
+
LOGGER.info("setting new run " + run);
-
+
// Set the run number.
this.run = run;
-
+
// Reset the data cache.
this.dataCache = new DataCache();
- }
- }
-
- /**
- * Get the run summary for the current run not including its sub-objects like scaler data.
- *
- * @return the run summary for the current run
- */
- public RunSummary getRunSummary() {
- checkRunNumber();
- if (this.dataCache.runSummary == null) {
- this.dataCache.runSummary = factory.createRunSummaryDao().getRunSummary(this.run);
- }
- return this.dataCache.runSummary;
- }
-
- /**
- * Get the full run summary for the current run including scaler data, etc.
- *
- * @return the full run summary for the current run
- */
- public RunSummary getFullRunSummary() {
- checkRunNumber();
- if (this.dataCache.fullRunSummary == null) {
- this.dataCache.fullRunSummary = factory.createRunSummaryDao().readFullRunSummary(this.run);
- }
- return this.dataCache.fullRunSummary;
- }
-
- /**
- * Get the trigger config for the current run.
- *
- * @return the trigger config for the current run
- */
- public TriggerConfig getTriggerConfig() {
- checkRunNumber();
- if (this.dataCache.triggerConfig == null) {
- LOGGER.info("loading trigger config for run " + this.run);
- this.dataCache.triggerConfig = factory.createTriggerConfigDao().getTriggerConfig(run);
- }
- return this.dataCache.triggerConfig;
- }
-
- /**
- * Get the EPICS data for the current run.
- *
- * @param epicsType the type of EPICS data
- * @return the EPICS data for the current run
- */
- public List<EpicsData> getEpicsData(EpicsType epicsType) {
- checkRunNumber();
- if (this.dataCache.epicsData == null) {
- LOGGER.info("loading EPICS data for run " + this.run);
- this.dataCache.epicsData = factory.createEpicsDataDao().getEpicsData(epicsType, this.run);
- }
- return this.dataCache.epicsData;
- }
-
- /**
- * Get the scaler data for the current run.
- *
- * @return the scaler data for the current run
- */
- public List<ScalerData> getScalerData() {
- checkRunNumber();
- if (this.dataCache.scalerData == null) {
- LOGGER.info("loading scaler data for run " + this.run);
- this.dataCache.scalerData = factory.createScalerDataDao().getScalerData(run);
- }
- return this.dataCache.scalerData;
- }
-
- /**
- * Update the database with information found from crawling the files.
- *
- * @param runs the list of runs to update
- * @throws SQLException if there is a database query error
- */
- public void insertRun(final RunSummary runSummary) throws SQLException {
- LOGGER.info("updating run database for run " + runSummary.getRun());
-
- // Create object for updating run info in the database.
- final RunSummaryDao runSummaryDao = factory.createRunSummaryDao();
-
- // Insert run summary into database.
- runSummaryDao.insertFullRunSummary(runSummary);
-
- LOGGER.info("done updating run database");
- }
-
- /**
- * Delete a run from the database.
- *
- * @param run the run number
- */
- public void deleteRun() {
- // Create object for updating run info in the database.
- final RunSummaryDao runSummaryDao = factory.createRunSummaryDao();
-
- // Delete run from the database.
- runSummaryDao.deleteFullRun(run);
- }
-
- /**
- * Return <code>true</code> if the run exists in the database.
- *
- * @return <code>true</code> if the run exists in the database
- */
- public boolean runExists() {
- checkRunNumber();
- if (this.dataCache.runExists == null) {
- this.dataCache.runExists = factory.createRunSummaryDao().runSummaryExists(run);
- }
- return this.dataCache.runExists;
- }
-
- /**
- * Check if the run number has been set.
- */
- private void checkRunNumber() {
- if (this.run == null) {
- throw new IllegalStateException("The run number was not set.");
- }
- }
-
- /**
- * Return the database connection.
- *
- * @return the database connection
- */
- Connection getConnection() {
- return this.connection;
+ }
}
}
|