Author: [log in to unmask]
Date: Wed Sep 23 12:57:18 2015
New Revision: 3683
Log:
Simplify run database API so data is directly available from run manager.
Modified:
java/trunk/crawler/src/main/java/org/hps/crawler/Crawler.java
java/trunk/run-database/src/main/java/org/hps/run/database/EpicsDataDao.java
java/trunk/run-database/src/main/java/org/hps/run/database/EpicsVariableDao.java
java/trunk/run-database/src/main/java/org/hps/run/database/RunDatabaseDaoFactory.java
java/trunk/run-database/src/main/java/org/hps/run/database/RunManager.java
java/trunk/run-database/src/main/java/org/hps/run/database/RunSummaryDao.java
java/trunk/run-database/src/main/java/org/hps/run/database/RunSummaryDaoImpl.java
java/trunk/run-database/src/main/java/org/hps/run/database/ScalerDataDao.java
java/trunk/run-database/src/main/java/org/hps/run/database/TriggerConfigDao.java
java/trunk/run-database/src/test/java/org/hps/run/database/TiTriggerOffsetTest.java
Modified: java/trunk/crawler/src/main/java/org/hps/crawler/Crawler.java
=============================================================================
--- java/trunk/crawler/src/main/java/org/hps/crawler/Crawler.java (original)
+++ java/trunk/crawler/src/main/java/org/hps/crawler/Crawler.java Wed Sep 23 12:57:18 2015
@@ -23,11 +23,9 @@
import org.hps.datacat.client.DatacatClient;
import org.hps.datacat.client.DatacatClientFactory;
import org.hps.datacat.client.DatasetFileFormat;
-import org.hps.run.database.RunDatabaseDaoFactory;
import org.hps.run.database.RunManager;
import org.hps.run.database.RunProcessor;
import org.hps.run.database.RunSummary;
-import org.hps.run.database.RunSummaryDao;
import org.hps.run.database.RunSummaryImpl;
import org.lcsim.util.log.DefaultLogFormatter;
import org.lcsim.util.log.LogUtil;
@@ -558,29 +556,21 @@
final Connection connection = config.connectionParameters().createConnection();
// Create factory for interfacing to run database.
- final RunManager runManager = new RunManager();
- runManager.setConnection(connection);
- final RunDatabaseDaoFactory dbFactory = runManager.createDaoFactory();
-
- // Create object for updating run info in the database.
- final RunSummaryDao runSummaryDao = dbFactory.createRunSummaryDao();
+ final RunManager runManager = new RunManager(connection);
+ runManager.setRun(runSummary.getRun());
// Delete existing run summary if necessary.
- if (runSummaryDao.runSummaryExists(runSummary.getRun())) {
+ if (runManager.runExists()) {
if (this.config.features.contains(CrawlerFeature.RUNDB_UPDATE)) {
LOGGER.info("deleting existing information for run " + runSummary.getRun());
- runSummaryDao.deleteFullRunSummary(runSummary);
- } else {
- throw new RuntimeException("Run " + runSummary.getRun()
- + " exists in database and deletion is not enabled.");
- }
- }
-
- // Insert run summary into database.
- runSummaryDao.insertFullRunSummary(runSummary);
-
- // Close the DB connection.
- connection.close();
+ runManager.deleteRun();
+ }
+ } else {
+ throw new RuntimeException("Run " + runSummary.getRun()
+ + " exists in database and deletion is not enabled.");
+ }
+
+ runManager.closeConnection();
LOGGER.info("done updating run database");
Modified: java/trunk/run-database/src/main/java/org/hps/run/database/EpicsDataDao.java
=============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/EpicsDataDao.java (original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/EpicsDataDao.java Wed Sep 23 12:57:18 2015
@@ -9,7 +9,7 @@
*
* @author Jeremy McCormick, SLAC
*/
-public interface EpicsDataDao {
+interface EpicsDataDao {
/**
* Delete all EPICS data for a run from the database.
Modified: java/trunk/run-database/src/main/java/org/hps/run/database/EpicsVariableDao.java
=============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/EpicsVariableDao.java (original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/EpicsVariableDao.java Wed Sep 23 12:57:18 2015
@@ -7,7 +7,7 @@
*
* @author Jeremy McCormick, SLAC
*/
-public interface EpicsVariableDao {
+interface EpicsVariableDao {
/**
* Get the full list of EPICs variables.
Modified: java/trunk/run-database/src/main/java/org/hps/run/database/RunDatabaseDaoFactory.java
=============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/RunDatabaseDaoFactory.java (original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/RunDatabaseDaoFactory.java Wed Sep 23 12:57:18 2015
@@ -12,7 +12,7 @@
* @see EpicsDataDao
* @see EpicsVariableDao
*/
-public final class RunDatabaseDaoFactory {
+final class RunDatabaseDaoFactory {
/**
* The database connection.
@@ -43,7 +43,7 @@
*
* @return the EPICS DAO
*/
- public EpicsDataDao createEpicsDataDao() {
+ EpicsDataDao createEpicsDataDao() {
return new EpicsDataDaoImpl(connection);
}
@@ -52,7 +52,7 @@
*
* @return the EPICS variable DAO
*/
- public EpicsVariableDao createEpicsVariableDao() {
+ EpicsVariableDao createEpicsVariableDao() {
return new EpicsVariableDaoImpl(connection);
}
@@ -61,7 +61,7 @@
*
* @return the run summary DAO
*/
- public RunSummaryDao createRunSummaryDao() {
+ RunSummaryDao createRunSummaryDao() {
return new RunSummaryDaoImpl(connection);
}
@@ -70,7 +70,7 @@
*
* @return the scaler data DAO
*/
- public ScalerDataDao createScalerDataDao() {
+ ScalerDataDao createScalerDataDao() {
return new ScalerDataDaoImpl(connection);
}
@@ -79,7 +79,7 @@
*
* @return the trigger config DAO
*/
- public TriggerConfigDao createTriggerConfigDao() {
+ TriggerConfigDao createTriggerConfigDao() {
return new TriggerConfigDaoImpl(connection);
}
}
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 Wed Sep 23 12:57:18 2015
@@ -7,6 +7,9 @@
import java.util.logging.Logger;
import org.hps.conditions.database.ConnectionParameters;
+import org.hps.record.epics.EpicsData;
+import org.hps.record.scalers.ScalerData;
+import org.hps.record.triggerbank.TriggerConfig;
import org.lcsim.conditions.ConditionsEvent;
import org.lcsim.conditions.ConditionsListener;
import org.lcsim.util.log.DefaultLogFormatter;
@@ -18,7 +21,7 @@
* @author Jeremy McCormick, SLAC
*/
public final class RunManager implements ConditionsListener {
-
+
/**
* The default connection parameters for read-only access to the run database.
*/
@@ -60,12 +63,12 @@
/**
* The run number; the -1 value indicates that this has not been set externally yet.
*/
- private int run = -1;
-
- /**
- * The {@link RunSummary} for the current run.
- */
- private RunSummary runSummary = null;
+ private Integer run = null;
+
+ /**
+ * Factory for creating database API objects.
+ */
+ private RunDatabaseDaoFactory factory;
/**
* Class constructor.
@@ -74,31 +77,36 @@
*/
public RunManager(Connection connection) {
this.connection = connection;
- }
-
- /**
- * Class constructor.
+ openConnection();
+ factory = new RunDatabaseDaoFactory(this.connection);
+ }
+
+ /**
+ * Class constructor using default connection parameters.
*/
public RunManager() {
+ this.connection = DEFAULT_CONNECTION_PARAMETERS.createConnection();
+ openConnection();
+ factory = new RunDatabaseDaoFactory(this.connection);
}
/**
* Close the database connection.
*/
public void closeConnection() {
- if (!(this.connection == null)) {
- try {
- if (!this.connection.isClosed()) {
- this.connection.close();
- }
- } catch (final SQLException e) {
- e.printStackTrace();
+ try {
+ if (!this.connection.isClosed()) {
+ this.connection.close();
}
- }
+ } catch (final SQLException e) {
+ e.printStackTrace();
+ }
}
/**
* Load new run information when conditions have changed.
+ *
+ * @param conditionsEvent the event with new conditions information
*/
@Override
public synchronized void conditionsChanged(final ConditionsEvent conditionsEvent) {
@@ -119,18 +127,9 @@
*
* @return the complete list of run numbers
*/
- List<Integer> getRuns() {
+ public List<Integer> getRuns() {
openConnection();
return new RunSummaryDaoImpl(this.connection).getRuns();
- }
-
- /**
- * Get the current {@link RunSummary}.
- *
- * @return the current {@link RunSummary} or <code>null</code> if it is not set
- */
- public RunSummary getRunSummary() {
- return this.runSummary;
}
/**
@@ -138,10 +137,10 @@
* <p>
* This method does nothing if the connection is already open.
*/
- private void openConnection() {
+ public void openConnection() {
try {
- if (this.connection == null || this.connection.isClosed()) {
- LOGGER.info("creating database connection");
+ if (this.connection.isClosed()) {
+ LOGGER.info("creating new database connection");
this.connection = connectionParameters.createConnection();
} else {
LOGGER.warning("connection already open");
@@ -152,66 +151,116 @@
}
/**
- * Set the connection externally if using a database other than the default one at JLAB.
- *
- * @param connection the database connection
- */
- public void setConnection(final Connection connection) {
- this.connection = connection;
- }
-
- /**
* Set the run number and then load the applicable {@link RunSummary} from the database.
*
* @param run the run number
*/
- public synchronized void setRun(final int run) {
+ public void setRun(final int run) {
+ this.run = run;
+ }
+
+ /**
+ * 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();
+ return factory.createRunSummaryDao().getRunSummary(this.run);
+ }
+
+ /**
+ * 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();
+ return factory.createRunSummaryDao().readFullRunSummary(this.run);
+ }
+
+ /**
+ * Get the trigger config for the current run.
+ *
+ * @return the trigger config for the current run
+ */
+ public TriggerConfig getTriggerConfig() {
+ checkRunNumber();
+ return factory.createTriggerConfigDao().getTriggerConfig(run);
+ }
+
+ /**
+ * 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();
+ return factory.createEpicsDataDao().getEpicsData(epicsType, this.run);
+ }
+
+ /**
+ * Get the scaler data for the current run.
+ *
+ * @return the scaler data for the current run
+ */
+ public List<ScalerData> getScalerData() {
+ checkRunNumber();
+ return factory.createScalerDataDao().getScalerData(run);
+ }
+
+ /**
+ * 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 {
// Don't do anything if the run number has already been set.
if (run == this.run) {
return;
}
- // Check if run number is valid.
- if (run < 0) {
- throw new IllegalArgumentException("invalid run number: " + run);
- }
-
- // Setup the database connection.
- this.openConnection();
-
- // Initialize database interface.
- final RunSummaryDao runSummaryDao = new RunSummaryDaoImpl(this.connection);
-
- // Set the current run number.
- this.run = run;
-
- // Does the current run exist in the database?
- if (runSummaryDao.runSummaryExists(this.getRun())) {
- LOGGER.info("run " + run + " found in database");
- try {
- // Read the records from the database and convert into complex Java object.
- this.runSummary = runSummaryDao.readFullRunSummary(this.getRun());
- } catch (final Exception e) {
- // There was some unknown error when reading in the run records.
- LOGGER.log(Level.SEVERE, "Error reading from run database.", e);
- throw new RuntimeException(e);
- }
- } else {
- // Run is not in the database.
- LOGGER.warning("run database record does not exist for run " + run);
- }
-
- // Close the database connection.
- this.closeConnection();
- }
-
- /**
- * Get the database connection.
- *
- * @return the database connection
- */
- public RunDatabaseDaoFactory createDaoFactory() {
- openConnection();
- return new RunDatabaseDaoFactory(this.connection);
- }
+ 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() {
+ return factory.createRunSummaryDao().runSummaryExists(this.run);
+ }
+
+ /**
+ * Check if the run number has been set.
+ */
+ private void checkRunNumber() {
+ if (this.run == null) {
+ throw new IllegalStateException("The run number was not set.");
+ }
+ }
}
Modified: java/trunk/run-database/src/main/java/org/hps/run/database/RunSummaryDao.java
=============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/RunSummaryDao.java (original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/RunSummaryDao.java Wed Sep 23 12:57:18 2015
@@ -7,14 +7,14 @@
*
* @author Jeremy McCormick, SLAC
*/
-public interface RunSummaryDao {
+interface RunSummaryDao {
/**
* Delete a run summary from the database including its referenced objects such as EPICS data.
*
* @param runSummary the run summary to delete
*/
- void deleteFullRunSummary(RunSummary runSummary);
+ void deleteFullRun(int run);
/**
* Delete a run summary by run number.
Modified: java/trunk/run-database/src/main/java/org/hps/run/database/RunSummaryDaoImpl.java
=============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/RunSummaryDaoImpl.java (original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/RunSummaryDaoImpl.java Wed Sep 23 12:57:18 2015
@@ -85,7 +85,7 @@
*
* @param connection the database connection
*/
- public RunSummaryDaoImpl(final Connection connection) {
+ RunSummaryDaoImpl(final Connection connection) {
// Set the connection.
if (connection == null) {
throw new IllegalArgumentException("The connection is null.");
@@ -99,14 +99,12 @@
}
/**
- * Delete a run summary from the database including its referenced objects such as EPICS data.
+ * Delete a run from the database including its referenced objects such as EPICS data.
*
* @param runSummary the run summary to delete
*/
@Override
- public void deleteFullRunSummary(final RunSummary runSummary) {
-
- final int run = runSummary.getRun();
+ public void deleteFullRun(int run) {
// Delete EPICS log.
this.epicsDataDao.deleteEpicsData(EpicsType.EPICS_1S, run);
@@ -320,7 +318,7 @@
if (deleteExisting) {
LOGGER.info("deleting existing run summary");
// Delete the existing rows.
- this.deleteFullRunSummary(runSummary);
+ this.deleteFullRun(runSummary.getRun());
} else {
// Rows exist but updating is disallowed which is a fatal error.
throw new IllegalStateException("Run " + runSummary.getRun()
Modified: java/trunk/run-database/src/main/java/org/hps/run/database/ScalerDataDao.java
=============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/ScalerDataDao.java (original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/ScalerDataDao.java Wed Sep 23 12:57:18 2015
@@ -9,7 +9,7 @@
*
* @author Jeremy McCormick, SLAC
*/
-public interface ScalerDataDao {
+interface ScalerDataDao {
/**
* Delete scaler data for the run.
Modified: java/trunk/run-database/src/main/java/org/hps/run/database/TriggerConfigDao.java
=============================================================================
--- java/trunk/run-database/src/main/java/org/hps/run/database/TriggerConfigDao.java (original)
+++ java/trunk/run-database/src/main/java/org/hps/run/database/TriggerConfigDao.java Wed Sep 23 12:57:18 2015
@@ -7,7 +7,7 @@
*
* @author Jeremy McCormick, SLAC
*/
-public interface TriggerConfigDao {
+interface TriggerConfigDao {
/**
* Get the trigger config by run.
Modified: java/trunk/run-database/src/test/java/org/hps/run/database/TiTriggerOffsetTest.java
=============================================================================
--- java/trunk/run-database/src/test/java/org/hps/run/database/TiTriggerOffsetTest.java (original)
+++ java/trunk/run-database/src/test/java/org/hps/run/database/TiTriggerOffsetTest.java Wed Sep 23 12:57:18 2015
@@ -18,10 +18,10 @@
*/
public void testAllRuns() {
RunManager runManager = new RunManager();
- List<Integer> runs = runManager.getRuns();
- TriggerConfigDao triggerConfigDao = runManager.createDaoFactory().createTriggerConfigDao();
+ List<Integer> runs = runManager.getRuns();
for (Integer run : runs) {
- TriggerConfig triggerConfig = triggerConfigDao.getTriggerConfig(run);
+ runManager.setRun(run);
+ TriggerConfig triggerConfig = runManager.getTriggerConfig();
Long tiTimeOffset = triggerConfig.getTiTimeOffset();
System.out.println("run " + run + " tiTriggerOffset = " + tiTimeOffset);
}
@@ -33,8 +33,8 @@
public void testSingleRun() {
int run = 5772;
RunManager runManager = new RunManager();
- TriggerConfigDao triggerConfigDao = runManager.createDaoFactory().createTriggerConfigDao();
- TriggerConfig triggerConfig = triggerConfigDao.getTriggerConfig(run);
+ runManager.setRun(run);
+ TriggerConfig triggerConfig = runManager.getTriggerConfig();
Long tiTimeOffset = triggerConfig.getTiTimeOffset();
System.out.println("run " + run + " tiTriggerOffset = " + tiTimeOffset);
}
|