Print

Print


Author: [log in to unmask]
Date: Wed Apr 22 17:55:28 2015
New Revision: 2792

Log:
More miscellaneous changes to conditions dev branch.

Modified:
    java/branches/conditions-HPSJAVA-488/pom.xml
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/BaseConditionsObject.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/BaseConditionsObjectCollection.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/ConditionsObject.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/DatabaseObject.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/DatabaseObjectException.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/TagCommand.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/ConditionsRecordConverter.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/ecal/EcalChannel.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/AbstractSvtChannel.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/CalibrationHandler.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/DaqMapHandler.java
    java/branches/conditions-HPSJAVA-488/src/test/java/org/hps/conditions/dummy/DummyConditionsObjectConverterTest.java

Modified: java/branches/conditions-HPSJAVA-488/pom.xml
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/pom.xml	(original)
+++ java/branches/conditions-HPSJAVA-488/pom.xml	Wed Apr 22 17:55:28 2015
@@ -8,7 +8,7 @@
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
-        <version>3.3.0-SNAPSHOT</version>
+        <version>3.3.1-SNAPSHOT</version>
     </parent>
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/conditions/</url>

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/BaseConditionsObject.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/BaseConditionsObject.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/BaseConditionsObject.java	Wed Apr 22 17:55:28 2015
@@ -27,8 +27,14 @@
      */
     static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
 
+    /**
+     * Value that indicates collection ID is not set (no collection assigned).
+     */
     static final int UNSET_COLLECTION_ID = -1;
 
+    /**
+     * Value that indicates row ID is not assigned (new record).
+     */
     static final int UNSET_ROW_ID = -1;
 
     protected static String defaultToString(final BaseConditionsObject object) {
@@ -55,7 +61,7 @@
     /**
      * The row ID of the object in its table. This will be -1 for new objects that are not in the database.
      */
-    private int id = UNSET_ROW_ID;
+    private int rowId = UNSET_ROW_ID;
 
     /**
      * Flag to indicate object is locally changed and database update has not been executed.
@@ -67,6 +73,9 @@
      */
     private TableMetaData tableMetaData;
 
+    /**
+     *
+     */
     protected BaseConditionsObject() {
         this.fieldValues = new FieldValuesMap();
     }
@@ -89,7 +98,7 @@
     /**
      * Class constructor.
      * <p>
-     * This should be used when creating new objects with a list of field values.
+     * This should be used when creating new objects from a list of field values.
      *
      * @param connection
      * @param tableMetaData
@@ -99,31 +108,14 @@
         this.connection = connection;
         this.tableMetaData = tableMetaData;
         this.fieldValues = fields;
-    }
-
-    /**
-     * Class constructor.
-     * <p>
-     * This should be used when the object is already in the database and the row ID is known. A SQL SELECT operation
-     * will be performed to get data into this object from the database.
-     *
-     * @param connection
-     * @param rowId
-     * @param tableMetaData
-     * @throw ConditionsObjectException if getting data into this object fails
-     * @throw SQLException if there is an SQL error when executing the SELECT operation
-     */
-    public BaseConditionsObject(final Connection connection, final TableMetaData tableMetaData, final int rowId)
-            throws DatabaseObjectException, SQLException {
-        this.connection = connection;
-        this.tableMetaData = tableMetaData;
-        this.fieldValues = new FieldValuesMap(tableMetaData);
-        select(rowId);
-        // if (!selected) {
-        // throw new ConditionsObjectException("Failed to select data into object using row ID " + rowId);
-        // }
-    }
-
+
+        // Since a list of field values are being provided, this object is flagged as needing to be updated.
+        this.isDirty = true;
+    }
+
+    /**
+     *
+     */
     @Override
     public final void delete() throws DatabaseObjectException, SQLException {
         if (isNew()) {
@@ -134,7 +126,7 @@
         try {
             statement = this.connection.createStatement();
             statement.executeUpdate(sql);
-            this.setRowId(UNSET_ROW_ID);
+            this.rowId = UNSET_ROW_ID;
         } finally {
             if (statement != null) {
                 statement.close();
@@ -142,6 +134,9 @@
         }
     }
 
+    /**
+     *
+     */
     @Override
     @Field(names = {"collection_id"})
     public final Integer getCollectionId() {
@@ -152,26 +147,41 @@
         }
     }
 
+    /**
+     *
+     */
     @Override
     public FieldValues getFieldValues() {
         return this.fieldValues;
     }
 
+    /**
+     *
+     */
     @Override
     public final int getRowId() {
-        return this.id;
-    }
-
+        return this.rowId;
+    }
+
+    /**
+     *
+     */
     @Override
     public final TableMetaData getTableMetaData() {
         return this.tableMetaData;
     }
 
+    /**
+     *
+     */
     @Override
     public final <T> T getFieldValue(final Class<T> type, final String name) {
         return type.cast(this.fieldValues.getValue(type, name));
     }
 
+    /**
+     *
+     */
     @Override
     public final void insert() throws DatabaseObjectException, SQLException {
         if (!this.isNew()) {
@@ -205,7 +215,7 @@
             resultSet = statement.getGeneratedKeys();
             while (resultSet.next()) {
                 final int key = resultSet.getInt(1);
-                this.id = key;
+                this.rowId = key;
                 break;
             }
         } finally {
@@ -219,19 +229,28 @@
         this.isDirty = false;
     }
 
+    /**
+     *
+     */
     @Override
     public final boolean isDirty() {
         return this.isDirty;
     }
 
+    /**
+     *
+     */
     @Override
     public final boolean isNew() {
         return getRowId() == UNSET_ROW_ID;
     }
 
+    /**
+     *
+     */
     @Override
     public final boolean select(final int id) throws DatabaseObjectException, SQLException {
-        this.id = id;
+        this.rowId = id;
         if (id < 1) {
             throw new IllegalArgumentException("bad row ID value: " + id);
         }
@@ -268,6 +287,9 @@
         return selected;
     }
 
+    /**
+     *
+     */
     @Override
     public void setCollectionId(final int collectionId) throws ConditionsObjectException {
         if (this.getCollectionId() != UNSET_COLLECTION_ID) {
@@ -279,37 +301,51 @@
         this.setFieldValue(COLLECTION_ID_FIELD, collectionId);
     }
 
+    /**
+     *
+     */
     @Override
     public final void setConnection(final Connection connection) {
         this.connection = connection;
     }
 
+    /**
+     *
+     */
     @Override
     public void setFieldValues(final FieldValues fieldValues) {
         this.fieldValues = fieldValues;
-    }
-
-    @Override
-    public void setRowId(final int id) {
-        this.id = id;
-    }
-
+        this.isDirty = true;
+    }
+
+    /**
+     *
+     */
     @Override
     public final void setTableMetaData(final TableMetaData tableMetaData) {
         this.tableMetaData = tableMetaData;
     }
 
+    /**
+     *
+     */
     @Override
     public final void setFieldValue(final String name, final Object value) {
         this.fieldValues.setValue(name, value);
         this.isDirty = true;
     }
 
+    /**
+     *
+     */
     @Override
     public String toString() {
         return defaultToString(this);
     }
 
+    /**
+     *
+     */
     @Override
     public final boolean update() throws DatabaseObjectException, SQLException {
         int rowsUpdated = 0;
@@ -348,13 +384,23 @@
         return rowsUpdated != 0;
     }
 
+    /**
+     *
+     */
     @Override
     public <T> T getFieldValue(final String name) {
         return (T) this.fieldValues.getValue(name);
     }
 
+    /**
+     *
+     */
     @Override
     public boolean hasValidCollection() {
         return getCollectionId() != UNSET_COLLECTION_ID;
     }
+
+    void setRowId(final int rowId) {
+        this.rowId = rowId;
+    }
 }

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/BaseConditionsObjectCollection.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/BaseConditionsObjectCollection.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/BaseConditionsObjectCollection.java	Wed Apr 22 17:55:28 2015
@@ -39,18 +39,23 @@
     }
 
     @Override
-    public boolean add(final ObjectType object) {
+    public boolean add(final ObjectType object) throws ConditionsObjectException {
         if (object == null) {
             throw new IllegalArgumentException("The object argument is null.");
         }
+        // Does this collection have a valid ID yet?
         if (getCollectionId() != BaseConditionsObject.UNSET_COLLECTION_ID) {
-            if (object.getCollectionId() != BaseConditionsObject.UNSET_ROW_ID) {
+            // Does the object that is being added have a collection ID?
+            if (object.getCollectionId() != BaseConditionsObject.UNSET_COLLECTION_ID) {
+                // Does the object's collection ID not match?
                 if (object.getCollectionId() != this.collectionId) {
+                    // Cannot add an object from a different collection.
                     throw new IllegalArgumentException("Cannot add object with different collection ID: "
                             + object.getCollectionId());
                 }
             } else {
                 try {
+                    // Set the collection ID on the object.
                     object.setCollectionId(this.collectionId);
                 } catch (final ConditionsObjectException e) {
                     throw new RuntimeException("Error assigning collection ID " + this.collectionId + " to object.", e);
@@ -77,7 +82,6 @@
                     + getCollectionId() + "'";
             statement = this.connection.createStatement();
             statement.executeUpdate(sql);
-            this.connection.commit();
         } catch (final SQLException e) {
             e.printStackTrace();
         } finally {
@@ -134,6 +138,14 @@
                         + " table.", this);
             }
         }
+
+        // Set collection ID on objects.
+        try {
+            setConditionsObjectCollectionIds();
+        } catch (final ConditionsObjectException e) {
+            throw new DatabaseObjectException("Error setting collection IDs on objects.", e, this);
+        }
+
         PreparedStatement insertObjects = null;
         final StringBuffer sb = new StringBuffer();
         sb.append("INSERT INTO " + this.getTableMetaData().getTableName() + " (");
@@ -151,11 +163,6 @@
         try {
             insertObjects = this.connection.prepareStatement(updateStatement, Statement.RETURN_GENERATED_KEYS);
             for (final ObjectType object : this) {
-                try {
-                    object.setCollectionId(this.collectionId);
-                } catch (final ConditionsObjectException e) {
-                    throw new DatabaseObjectException("Error setting collection ID on object.", object);
-                }
                 for (int fieldIndex = 0; fieldIndex < this.getTableMetaData().getFieldNames().length; fieldIndex++) {
                     final String fieldName = this.getTableMetaData().getFieldNames()[fieldIndex];
                     insertObjects.setObject(fieldIndex + 1,
@@ -164,13 +171,12 @@
                 insertObjects.executeUpdate();
                 final ResultSet resultSet = insertObjects.getGeneratedKeys();
                 resultSet.next();
-                object.setRowId(resultSet.getInt(1));
-
-                // This will commit the insert statements for the collections info table and the records.
-                this.connection.commit();
-
+                ((BaseConditionsObject) object).setRowId(resultSet.getInt(1));
                 resultSet.close();
             }
+            // This will commit the insert statements for the collections info table and the records.
+            this.connection.commit();
+
         } catch (final SQLException e1) {
             e1.printStackTrace();
             if (this.connection != null) {
@@ -249,12 +255,16 @@
                     newObject.setConnection(this.connection);
                     newObject.setTableMetaData(this.tableMetaData);
                     final int id = resultSet.getInt(1);
-                    newObject.setRowId(id);
+                    ((BaseConditionsObject) newObject).setRowId(id);
                     for (int fieldIndex = 0; fieldIndex < this.tableMetaData.getFieldNames().length; fieldIndex++) {
                         final String fieldName = this.tableMetaData.getFieldNames()[fieldIndex];
                         newObject.setFieldValue(fieldName, resultSet.getObject(fieldIndex + 2));
                     }
-                    add(newObject);
+                    try {
+                        add(newObject);
+                    } catch (final ConditionsObjectException e) {
+                        throw new DatabaseObjectException("Error adding object to collection.", e, newObject);
+                    }
                     selected = true;
                 } catch (InstantiationException | IllegalAccessException e) {
                     throw new RuntimeException(e);
@@ -280,8 +290,15 @@
     }
 
     private final void setConditionsObjectCollectionIds() throws ConditionsObjectException {
-        for (final ConditionsObject object : this) {
-            object.setCollectionId(this.collectionId);
+        if (this.collectionId != BaseConditionsObject.UNSET_COLLECTION_ID) {
+            for (final ConditionsObject object : this) {
+                if (object.getCollectionId() != this.getCollectionId()) {
+                    throw new ConditionsObjectException("The collection ID on the object does not match.");
+                }
+                if (!object.hasValidCollection()) {
+                    object.setCollectionId(this.collectionId);
+                }
+            }
         }
     }
 
@@ -347,7 +364,11 @@
             throw new RuntimeException("Error creating new collection instance.", e);
         }
         for (final ObjectType object : list) {
-            collection.add(object);
+            try {
+                collection.add(object);
+            } catch (final ConditionsObjectException e) {
+                throw new RuntimeException("Error adding to new collection in sorted method.", e);
+            }
         }
         return collection;
     }

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/ConditionsObject.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/ConditionsObject.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/ConditionsObject.java	Wed Apr 22 17:55:28 2015
@@ -33,9 +33,6 @@
 
     void setFieldValues(FieldValues fieldValues);
 
-    // FIXME: Maybe this should not be in the interface.
-    void setRowId(int id);
-
     /**
      * @param name
      * @param value

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java	Wed Apr 22 17:55:28 2015
@@ -5,7 +5,7 @@
 public interface ConditionsObjectCollection<ObjectType extends ConditionsObject> extends Iterable<ObjectType>,
         DatabaseObject {
 
-    boolean add(final ObjectType object);
+    boolean add(final ObjectType object) throws ConditionsObjectException;
 
     ObjectType get(final int index);
 

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/DatabaseObject.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/DatabaseObject.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/DatabaseObject.java	Wed Apr 22 17:55:28 2015
@@ -3,6 +3,9 @@
 import java.sql.Connection;
 import java.sql.SQLException;
 
+/**
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
+ */
 public interface DatabaseObject {
 
     /**
@@ -12,6 +15,9 @@
      */
     TableMetaData getTableMetaData();
 
+    /**
+     * @param tableMetaData
+     */
     void setTableMetaData(TableMetaData tableMetaData);
 
     /**
@@ -58,5 +64,11 @@
      */
     void delete() throws DatabaseObjectException, SQLException;
 
+    /**
+     * @param id
+     * @return
+     * @throws DatabaseObjectException
+     * @throws SQLException
+     */
     boolean select(final int id) throws DatabaseObjectException, SQLException;
 }

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/DatabaseObjectException.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/DatabaseObjectException.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/api/DatabaseObjectException.java	Wed Apr 22 17:55:28 2015
@@ -1,14 +1,37 @@
 package org.hps.conditions.api;
 
+/**
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
+ */
 public final class DatabaseObjectException extends Exception {
 
+    /**
+     *
+     */
     private final DatabaseObject object;
 
+    /**
+     * @param message
+     * @param object
+     */
     public DatabaseObjectException(final String message, final DatabaseObject object) {
         super(message);
         this.object = object;
     }
 
+    /**
+     * @param message
+     * @param cause
+     * @param object
+     */
+    public DatabaseObjectException(final String message, final Throwable cause, final DatabaseObject object) {
+        super(message, cause);
+        this.object = object;
+    }
+
+    /**
+     * @return
+     */
     public DatabaseObject getDatabaseObject() {
         return this.object;
     }

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/TagCommand.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/TagCommand.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/TagCommand.java	Wed Apr 22 17:55:28 2015
@@ -10,6 +10,7 @@
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
+import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
 import org.hps.conditions.api.DatabaseObjectException;
@@ -131,7 +132,11 @@
                     newRecord.setFieldValue("tag", newTag);
 
                     // Add the record to the tag.
-                    tagRecords.add(newRecord);
+                    try {
+                        tagRecords.add(newRecord);
+                    } catch (final ConditionsObjectException e) {
+                        throw new RuntimeException(e);
+                    }
 
                     // Flag the record's ID as used so it is only added once.
                     addedIds.add(record.getRowId());

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/ConditionsRecordConverter.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/ConditionsRecordConverter.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/ConditionsRecordConverter.java	Wed Apr 22 17:55:28 2015
@@ -6,6 +6,7 @@
 import org.hps.conditions.api.AbstractConditionsObjectConverter;
 import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
+import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
 import org.hps.conditions.api.DatabaseObjectException;
@@ -64,9 +65,11 @@
                 conditionsRecord.setConnection(databaseConditionsManager.getConnection());
                 conditionsRecord.setTableMetaData(tableMetaData);
                 conditionsRecord.select(resultSet.getInt(1));
-                // AbstractConditionsObjectConverter.createConditionsObject(
-                // resultSet, tableMetaData);
-                collection.add(conditionsRecord);
+                try {
+                    collection.add(conditionsRecord);
+                } catch (final ConditionsObjectException e) {
+                    throw new RuntimeException(e);
+                }
             }
         } catch (final DatabaseObjectException | SQLException e) {
             throw new RuntimeException("Error creating new conditions record.", e);

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	Wed Apr 22 17:55:28 2015
@@ -389,7 +389,11 @@
         for (final ConditionsRecord record : runConditionsRecords) {
             if (record.getName().equals(name)) {
                 if (matchesTag(record)) {
-                    foundConditionsRecords.add(record);
+                    try {
+                        foundConditionsRecords.add(record);
+                    } catch (final ConditionsObjectException e) {
+                        throw new RuntimeException(e);
+                    }
                     logger.finer("found matching conditions record " + record.getRowId());
                 } else {
                     logger.finer("conditions record " + record.getRowId() + " rejected from non-matching tag "

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/ecal/EcalChannel.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/ecal/EcalChannel.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/ecal/EcalChannel.java	Wed Apr 22 17:55:28 2015
@@ -9,6 +9,7 @@
 import org.hps.conditions.api.BaseConditionsObject;
 import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.Field;
@@ -178,7 +179,7 @@
          * @return <code>true</code> if object was added successfully
          */
         @Override
-        public boolean add(final EcalChannel channel) {
+        public boolean add(final EcalChannel channel) throws ConditionsObjectException {
             super.add(channel);
             final DaqId daqId = channel.createDaqId();
             if (daqId.isValid()) {

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/AbstractSvtChannel.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/AbstractSvtChannel.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/AbstractSvtChannel.java	Wed Apr 22 17:55:28 2015
@@ -6,6 +6,7 @@
 
 import org.hps.conditions.api.BaseConditionsObject;
 import org.hps.conditions.api.BaseConditionsObjectCollection;
+import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.database.Field;
 import org.hps.util.Pair;
 
@@ -42,7 +43,7 @@
          * @param channel channel of a type extending {@link AbstractSvtChannel}
          */
         @Override
-        public final boolean add(final T channel) {
+        public final boolean add(final T channel) throws ConditionsObjectException {
 
             // If it doesn't exist, add the channel to the channel map
             if (this.channelMap.containsKey(channel.getChannelID())) {

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/CalibrationHandler.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/CalibrationHandler.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/CalibrationHandler.java	Wed Apr 22 17:55:28 2015
@@ -3,6 +3,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.svt.SvtCalibration.SvtCalibrationCollection;
 import org.hps.conditions.svt.SvtChannel.SvtChannelCollection;
@@ -13,27 +14,27 @@
 import org.xml.sax.helpers.DefaultHandler;
 
 /**
- *  Handler for calibration events.
+ * Handler for calibration events.
  *
- *  @author <a href="mailto:[log in to unmask]">Omar Moreno</a>
+ * @author <a href="mailto:[log in to unmask]">Omar Moreno</a>
  */
 class CalibrationHandler extends DefaultHandler {
 
     /**
      * Initialize the logger.
      */
-    private static Logger logger = LogUtil.create(SvtConditionsLoader.class.getSimpleName(),
-            new DefaultLogFormatter(), Level.INFO);
+    private static Logger logger = LogUtil.create(SvtConditionsLoader.class.getSimpleName(), new DefaultLogFormatter(),
+            Level.INFO);
 
     /**
      * List of SVT channels.
      */
-    private SvtChannelCollection svtChannels;
+    private final SvtChannelCollection svtChannels;
 
     /**
      * List of SVT calibrations.
      */
-    private SvtCalibrationCollection calibrations = new SvtCalibrationCollection();
+    private final SvtCalibrationCollection calibrations = new SvtCalibrationCollection();
 
     /**
      * An SVT calibration object encapsulating the baseline and noise values for a channel.
@@ -72,9 +73,8 @@
     private int noiseSampleID = 0;
 
     /**
-     * Flag denoting whether the calibrations of a given channel should be
-     * loaded into the conditions DB.  If a channel is found to be missing
-     * baseline or noise values, is will be marked invalid.
+     * Flag denoting whether the calibrations of a given channel should be loaded into the conditions DB. If a channel
+     * is found to be missing baseline or noise values, is will be marked invalid.
      */
     private boolean isValidChannel = false;
 
@@ -82,18 +82,18 @@
      * Default constructor.
      */
     public CalibrationHandler() {
-       svtChannels = (SvtChannelCollection) DatabaseConditionsManager.getInstance()
-               .getCachedConditions(SvtChannelCollection.class, "svt_channels").getCachedData();
+        this.svtChannels = DatabaseConditionsManager.getInstance()
+                .getCachedConditions(SvtChannelCollection.class, "svt_channels").getCachedData();
     }
 
     /**
-     *  Method that is triggered when the start tag is encountered.
+     * Method that is triggered when the start tag is encountered.
      *
-     *  @param uri the Namespace URI
-     *  @param locaName the local name (without prefix)
-     *  @param qName the qualified name (with prefix)
-     *  @param attributes the attributes attached to the element
-     *  @throws SAXException if there is an error processing the element
+     * @param uri the Namespace URI
+     * @param locaName the local name (without prefix)
+     * @param qName the qualified name (with prefix)
+     * @param attributes the attributes attached to the element
+     * @throws SAXException if there is an error processing the element
      */
     @Override
     public void startElement(final String uri, final String localName, final String qName, final Attributes attributes)
@@ -101,22 +101,23 @@
 
         switch (qName) {
             case "Feb":
-                febID = Integer.parseInt(attributes.getValue("id"));
+                this.febID = Integer.parseInt(attributes.getValue("id"));
                 break;
             case "Hybrid":
-                hybridID = Integer.parseInt(attributes.getValue("id"));
-                logger.info("Processing calibrations for FEB " + febID + " Hybrid " + hybridID);
+                this.hybridID = Integer.parseInt(attributes.getValue("id"));
+                logger.info("Processing calibrations for FEB " + this.febID + " Hybrid " + this.hybridID);
                 break;
             case "channel":
-                channel = Integer.parseInt(attributes.getValue("id"));
-                calibration = new SvtCalibration(svtChannels.findChannelID(febID, hybridID, channel));
-                isValidChannel = false;
+                this.channel = Integer.parseInt(attributes.getValue("id"));
+                this.calibration = new SvtCalibration(this.svtChannels.findChannelID(this.febID, this.hybridID,
+                        this.channel));
+                this.isValidChannel = false;
                 break;
             case "baseline":
-                baselineSampleID = Integer.parseInt(attributes.getValue("id"));
+                this.baselineSampleID = Integer.parseInt(attributes.getValue("id"));
                 break;
             case "noise":
-                noiseSampleID = Integer.parseInt(attributes.getValue("id"));
+                this.noiseSampleID = Integer.parseInt(attributes.getValue("id"));
                 break;
             default:
                 break;
@@ -132,41 +133,43 @@
      * @throws SAXException if there is an error processing the element
      */
     @Override
-    public void endElement(final String uri, final String localName, final String qName)
-            throws SAXException {
+    public void endElement(final String uri, final String localName, final String qName) throws SAXException {
 
         switch (qName) {
             case "channel":
-                if (isValidChannel) {
-                    calibrations.add(calibration);
+                if (this.isValidChannel) {
+                    try {
+                        this.calibrations.add(this.calibration);
+                    } catch (final ConditionsObjectException e) {
+                        throw new RuntimeException(e);
+                    }
                 }
                 break;
             case "baseline":
-                calibration.setPedestal(baselineSampleID, Double.parseDouble(content));
-                isValidChannel = true;
+                this.calibration.setPedestal(this.baselineSampleID, Double.parseDouble(this.content));
+                this.isValidChannel = true;
                 break;
             case "noise":
-                calibration.setNoise(baselineSampleID, Double.parseDouble(content));
-                isValidChannel = true;
+                this.calibration.setNoise(this.baselineSampleID, Double.parseDouble(this.content));
+                this.isValidChannel = true;
                 break;
             default:
                 break;
         }
     }
 
-   /**
-    * Method called to extract character data inside of an element.
-    *
-    * @param ch the characters
-    * @param start the start position in the character array
-    * @param length the number of characters to use from the character array
-    * @throws SAXException if there is an error processing the element (possibly wraps another exception type)
-    */
-   @Override
-   public void characters(final char[] ch, final int start, final int length)
-       throws SAXException {
-       content = String.copyValueOf(ch, start, length).trim();
-   }
+    /**
+     * Method called to extract character data inside of an element.
+     *
+     * @param ch the characters
+     * @param start the start position in the character array
+     * @param length the number of characters to use from the character array
+     * @throws SAXException if there is an error processing the element (possibly wraps another exception type)
+     */
+    @Override
+    public void characters(final char[] ch, final int start, final int length) throws SAXException {
+        this.content = String.copyValueOf(ch, start, length).trim();
+    }
 
     /**
      * Get the {@link SvtCalibrationCollection} created from parsing the XML input file.
@@ -174,6 +177,6 @@
      * @return the {@link SvtCalibrationCollection} created from parsing the XML
      */
     public SvtCalibrationCollection getCalibrations() {
-        return calibrations;
+        return this.calibrations;
     }
 }

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/DaqMapHandler.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/DaqMapHandler.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/svt/DaqMapHandler.java	Wed Apr 22 17:55:28 2015
@@ -1,5 +1,6 @@
 package org.hps.conditions.svt;
 
+import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.svt.SvtChannel.SvtChannelCollection;
 import org.hps.conditions.svt.SvtDaqMapping.SvtDaqMappingCollection;
 import org.xml.sax.Attributes;
@@ -69,7 +70,11 @@
      */
     public void addSvtChannels(final int febID, final int febHybridID) {
         for (int channel = 0; channel < CHANNELS_MAX; channel++) {
-            this.svtChannels.add(new SvtChannel(this.currentSvtChannelID, this.febID, this.hybridID, channel));
+            try {
+                this.svtChannels.add(new SvtChannel(this.currentSvtChannelID, this.febID, this.hybridID, channel));
+            } catch (final ConditionsObjectException e) {
+                throw new RuntimeException(e);
+            }
             this.currentSvtChannelID++;
         }
     }
@@ -99,24 +104,28 @@
     public void endElement(final String uri, final String localName, final String qName) throws SAXException {
 
         switch (qName) {
-        case "Hybrid":
-            this.daqMap.add(this.daqMapping);
-            this.addSvtChannels(this.febID, this.hybridID);
-            break;
-        case "Half":
-            this.daqMapping.setSvtHalf(this.content);
-            break;
-        case "Layer":
-            this.daqMapping.setLayerNumber(Integer.parseInt(this.content));
-            break;
-        case "Side":
-            this.daqMapping.setSide(this.content);
-            break;
-        case "Orientation":
-            this.daqMapping.setOrientation(this.content);
-            break;
-        default:
-            break;
+            case "Hybrid":
+                try {
+                    this.daqMap.add(this.daqMapping);
+                } catch (final ConditionsObjectException e) {
+                    throw new RuntimeException(e);
+                }
+                this.addSvtChannels(this.febID, this.hybridID);
+                break;
+            case "Half":
+                this.daqMapping.setSvtHalf(this.content);
+                break;
+            case "Layer":
+                this.daqMapping.setLayerNumber(Integer.parseInt(this.content));
+                break;
+            case "Side":
+                this.daqMapping.setSide(this.content);
+                break;
+            case "Orientation":
+                this.daqMapping.setOrientation(this.content);
+                break;
+            default:
+                break;
         }
     }
 
@@ -152,15 +161,15 @@
             throws SAXException {
 
         switch (qName) {
-        case "Feb":
-            this.febID = Integer.parseInt(attributes.getValue("id"));
-            break;
-        case "Hybrid":
-            this.hybridID = Integer.parseInt(attributes.getValue("id"));
-            this.daqMapping = new SvtDaqMapping(this.febID, this.hybridID);
-            break;
-        default:
-            break;
+            case "Feb":
+                this.febID = Integer.parseInt(attributes.getValue("id"));
+                break;
+            case "Hybrid":
+                this.hybridID = Integer.parseInt(attributes.getValue("id"));
+                this.daqMapping = new SvtDaqMapping(this.febID, this.hybridID);
+                break;
+            default:
+                break;
         }
     }
 

Modified: java/branches/conditions-HPSJAVA-488/src/test/java/org/hps/conditions/dummy/DummyConditionsObjectConverterTest.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/test/java/org/hps/conditions/dummy/DummyConditionsObjectConverterTest.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/test/java/org/hps/conditions/dummy/DummyConditionsObjectConverterTest.java	Wed Apr 22 17:55:28 2015
@@ -24,12 +24,12 @@
         final TableMetaData tableMetaData = TableRegistry.getTableRegistry().findByTableName("dummy");
 
         final DummyConditionsObjectCollection newCollection = new DummyConditionsObjectCollection();
+        newCollection.setCollectionId(42);
         newCollection.setTableMetaData(tableMetaData);
         newCollection.setConnection(manager.getConnection());
 
         final DummyConditionsObject object = new DummyConditionsObject(manager.getConnection(), tableMetaData);
         object.setFieldValue("dummy", 1.2345);
-        newCollection.setCollectionId(1001);
         newCollection.add(object);
 
         try {