LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  April 2015

HPS-SVN April 2015

Subject:

r2660 - in /java/trunk/conditions/src: main/java/org/hps/conditions/ main/java/org/hps/conditions/api/ main/java/org/hps/conditions/beam/ main/java/org/hps/conditions/cli/ main/java/org/hps/conditions/database/ main/java/org/hps/conditions/ecal/ main/java/org/hps/conditions/svt/ test/java/org/hps/conditions/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Fri, 3 Apr 2015 01:15:03 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (8246 lines)

Author: [log in to unmask]
Date: Thu Apr  2 18:14:47 2015
New Revision: 2660

Log:
Apply changes from CheckStyle warnings.

Added:
    java/trunk/conditions/src/main/java/org/hps/conditions/api/BaseConditionsObject.java
      - copied, changed from r2659, java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObject.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/BaseConditionsObjectCollection.java
      - copied, changed from r2653, java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObjectCollection.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/package-info.java
    java/trunk/conditions/src/main/java/org/hps/conditions/beam/package-info.java
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/package-info.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/AbstractConditionsObjectConverter.java
      - copied, changed from r2659, java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsObjectConverter.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/package-info.java
Removed:
    java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObject.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObjectCollection.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsObjectConverter.java
Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractIdentifier.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObject.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectException.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectUtilities.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsSeries.java
    java/trunk/conditions/src/main/java/org/hps/conditions/api/FieldValueMap.java
    java/trunk/conditions/src/main/java/org/hps/conditions/beam/BeamConditions.java
    java/trunk/conditions/src/main/java/org/hps/conditions/beam/BeamCurrent.java
    java/trunk/conditions/src/main/java/org/hps/conditions/beam/ImportBeamConditionsEngRun.java
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/AbstractCommand.java
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/AddCommand.java
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/LoadCommand.java
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/PrintCommand.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsRecordConverter.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsSeriesConverter.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/ConnectionParameters.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/Converter.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/ConverterRegistry.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseUtilities.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/Field.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/MultipleCollectionsAction.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/QueryBuilder.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/Table.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/TableRegistry.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalBadChannel.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCalibration.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannel.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannelConstants.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditions.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsUtil.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalGain.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalLed.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalLedCalibration.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalTimeShift.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/TestRunEcalConditionsConverter.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/package-info.java
    java/trunk/conditions/src/main/java/org/hps/conditions/package-info.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtChannel.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditions.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtDaqMapping.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtT0Shift.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtAlignmentConstant.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBadChannel.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtCalibration.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConditionsLoader.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConfiguration.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtGain.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtShapeFitParameters.java
    java/trunk/conditions/src/test/java/org/hps/conditions/EngRunConditionsTest.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java	Thu Apr  2 18:14:47 2015
@@ -6,13 +6,11 @@
 
 /**
  * <p>
- * This {@link org.lcsim.util.Driver} can be used to customize the behavior
- * of the {@link DatabaseConditionsManager}.  It allows the setting of a 
- * detector name and run number, as well as other parameters, if the user 
- * wishes to override the default behavior of the conditions system, which
- * is generally activated from LCSim events.  It is not necessary to run this 
- * Driver in order to activate the default database conditions system.  Only 
- * one instance of this Driver should ever be included in a steering file.
+ * This {@link org.lcsim.util.Driver} can be used to customize the behavior of the {@link DatabaseConditionsManager}. It
+ * allows the setting of a detector name and run number, as well as other parameters, if the user wishes to override the
+ * default behavior of the conditions system, which is generally activated from LCSim events. It is not necessary to run
+ * this Driver in order to activate the default database conditions system. Only one instance of this Driver should ever
+ * be included in a steering file.
  * <p>
  * This is an example of using the Driver in an XML steering file:
  * <pre>
@@ -25,89 +23,97 @@
  *     <freeze>true</freeze>
  * </driver>
  * }
- * </pre> 
+ * </pre>
  * <p>
- * This is a "special" Driver which must have its initialization occur at the right time.
- * It has a custom initialization method {@link #initialize()} which should be called after 
- * all Driver setup has occurred, but before the job actually begins.  This is so the conditions 
- * system functions properly, including the activation of registered listeners.  The setup is 
- * performed by in the class {@link org.hps.job.JobManager}, which is used in the 
- * default command line front end of the hps-distribution.  If that class is not being used, then
- * the method must be executed manually at the right time to achieve the proper behavior.
+ * This is a "special" Driver which must have its initialization occur at the right time. It has a custom initialization
+ * method {@link #initialize()} which should be called after all Driver setup has occurred, but before the job actually
+ * begins. This is so the conditions system functions properly, including the activation of registered listeners. The
+ * setup is performed by in the class {@link org.hps.job.JobManager}, which is used in the default command line front
+ * end of the hps-distribution. If that class is not being used, then the method must be executed manually at the right
+ * time to achieve the proper behavior.
  *
- * @author Jeremy McCormick <[log in to unmask]>
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public class ConditionsDriver extends Driver {
 
-    String detectorName = null;
-    String tag = null;
-    String xmlConfigResource = null;
-    int runNumber = 0;
-    boolean freeze;    
-    
+    /** The name of the detector model. */
+    private String detectorName;
+
+    /** The conditions system tag. */
+    private String tag;
+
+    /** The XML config resource. */
+    private String xmlConfigResource;
+
+    /** The user run number. */
+    private int runNumber = 0;
+
+    /**
+     * True to freeze the conditions system after activation (requires valid detector name and run number).
+     */
+    private boolean freeze;
+
     /**
      * Default constructor.
      */
     public ConditionsDriver() {
     }
-    
+
     /**
      * Set the name of the detector to use.
      * @param detectorName The name of the detector.
      */
-    public void setDetectorName(String detectorName) {
+    public final void setDetectorName(final String detectorName) {
         this.detectorName = detectorName;
     }
-        
+
     /**
-     * Set whether or not the conditions system should be "frozen" after the 
-     * detector name and run number are set.  When frozen, the conditions system
-     * will ignore subsequent calls to {@link org.lcsim.conditions.ConditionsManager#setDetector(String, int)}
-     * and instead use the user supplied detector and run for the whole job.
+     * Set whether or not the conditions system should be "frozen" after the detector name and run number are set. When
+     * frozen, the conditions system will ignore subsequent calls to
+     * {@link org.lcsim.conditions.ConditionsManager#setDetector(String, int)} and instead use the user supplied
+     * detector and run for the whole job.
      * @param freeze True to freeze the conditions system after it is setup.
      */
-    public void setFreeze(boolean freeze) {
+    public final void setFreeze(final boolean freeze) {
         this.freeze = freeze;
     }
-        
+
     /**
-     * Set a custom run number to setup the conditions system.
-     * In the case where the actual event stream has run numbers that differ from this one,
-     * most likely the Driver should be configured to be frozen after setup using
-     * {@link #setFreeze(boolean)}.  
-     * 
-     * The method {@link #setDetectorName(String)} needs to be called before this one
-     * or an exception will be thrown.
+     * Set a custom run number to setup the conditions system. In the case where the actual event stream has run numbers
+     * that differ from this one, most likely the Driver should be configured to be frozen after setup using
+     * {@link #setFreeze(boolean)}.
+     *
+     * The method {@link #setDetectorName(String)} needs to be called before this one or an exception will be thrown.
      * @param runNumber The user supplied run number for the job.
      */
-    public void setRunNumber(int runNumber) {
+    public final void setRunNumber(final int runNumber) {
         this.runNumber = runNumber;
-    }            
-    
+    }
+
     /**
      * Set a tag used to filter ConditionsRecords.
      * @param tag The tag value e.g. "eng_run" etc.
      */
-    public void setTag(String tag) {
+    public final void setTag(final String tag) {
         this.tag = tag;
     }
-    
+
     /**
      * Set an XML configuration resource.
      * @param xmlConfigResource The XML configuration resource.
      */
-    public void setXmlConfigResource(String xmlConfigResource) {
+    public final void setXmlConfigResource(final String xmlConfigResource) {
         this.xmlConfigResource = xmlConfigResource;
     }
-    
+
     /**
      * Setup the conditions system based on the Driver parameters.
      * @throws RuntimeException If there is a problem setting up the conditions system.
      */
-    public void initialize() {
-        
-        DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
-        
+    public final void initialize() {
+
+        final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+
         if (xmlConfigResource != null) {
             // Set a custom XML configuration resource.
             conditionsManager.setXmlConfig(xmlConfigResource);

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractIdentifier.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractIdentifier.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractIdentifier.java	Thu Apr  2 18:14:47 2015
@@ -3,20 +3,21 @@
 /**
  * This class is a simplistic representation of a packaged identifier for use in
  * the conditions system.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
- * 
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public abstract class AbstractIdentifier {
 
     /**
      * Encode the ID into a long.
+     *
      * @return The ID encoded into a long.
      */
     public abstract long encode();
 
     /**
      * Check if the ID is valid.
+     *
      * @return True if valid.
      */
     public abstract boolean isValid();

Copied: java/trunk/conditions/src/main/java/org/hps/conditions/api/BaseConditionsObject.java (from r2659, java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObject.java)
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObject.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/BaseConditionsObject.java	Thu Apr  2 18:14:47 2015
@@ -3,60 +3,138 @@
 import java.util.Map.Entry;
 
 /**
- * The abstract implementation of {@link ConditionsObject}.
- * @author Jeremy McCormick <[log in to unmask]>
+ * The basic implementation of {@link ConditionsObject}.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-public abstract class AbstractConditionsObject implements ConditionsObject {
+public class BaseConditionsObject implements ConditionsObject {
 
-    protected int rowId = -1;
-    protected FieldValueMap fieldValues;
+    /**
+     * The database row ID.
+     */
+    private int rowID = -1;
 
-    /** 
+    /**
+     * The map of field-value pairs.
+     */
+    private FieldValueMap fieldValues;
+
+    /**
      * Constructor for sub-classing.
      */
-    protected AbstractConditionsObject() {
+    protected BaseConditionsObject() {
         fieldValues = new FieldValueMap();
     }
 
-    public int getRowId() {
-        return rowId;
+    /**
+     * Get the row ID of this object.
+     * <p>
+     * Implements {@link ConditionsObject#getRowId()}.
+     *
+     * @return The row ID.
+     */
+    @Override
+    public final int getRowId() {
+        return rowID;
     }
 
-    public boolean isNew() {
-        return rowId == -1;
+    /**
+     * True if object is new e.g. not in the database.
+     * <p>
+     * Implements {@link ConditionsObject#isNew()}.
+     *
+     * @return True if object is new.
+     */
+    @Override
+    public final boolean isNew() {
+        return rowID == -1;
     }
 
-   
-    public void setFieldValue(String key, Object value) {
+    /**
+     * Set the value of a field.
+     * <p>
+     * Implements {@link ConditionsObject#setFieldValue(String, Object)}.
+     *
+     * @param key The name of the field.
+     * @param value The value of the field.
+     */
+    @Override
+    public final void setFieldValue(final String key, final Object value) {
         fieldValues.put(key, value);
     }
 
-    public void setFieldValues(FieldValueMap fieldValues) {
+    /**
+     * Set all field values using a {@link FieldValueMap}.
+     * <p>
+     * Implements {@link ConditionsObject#setFieldValues(FieldValueMap)}.
+     *
+     * @param fieldValues The list of key-value pairs.
+     */
+    @Override
+    public final void setFieldValues(final FieldValueMap fieldValues) {
         this.fieldValues = fieldValues;
     }
 
-    public <T> T getFieldValue(Class<T> klass, String field) {
+    /**
+     * Get the value of a field.
+     * <p>
+     * Implements {@link ConditionsObject#getFieldValue(Class, String)}.
+     *
+     * @param klass The inferred return type.
+     * @param field The name of the field.
+     * @param <T> The generic type for inferrence of return type.
+     * @return The value of the field.
+     */
+    @Override
+    public final <T> T getFieldValue(final Class<T> klass, final String field) {
         return klass.cast(fieldValues.get(field));
     }
-    
-    public FieldValueMap getFieldValues() {
+
+    /**
+     * Get the field-value map.
+     * <p>
+     * Implements {@link ConditionsObject#getFieldValues()}.
+     *
+     * @return The field-value map.
+     */
+    @Override
+    public final FieldValueMap getFieldValues() {
         return this.fieldValues;
     }
 
+    /**
+     * Get a field value.
+     *
+     * @param field The field name.
+     * @param <T> The type inferred from the assigned variable.
+     * @return The field value.
+     */
     @SuppressWarnings("unchecked")
-    public <T> T getFieldValue(String field) {
+    public final <T> T getFieldValue(final String field) {
         return (T) fieldValues.get(field);
     }
 
-    public void setRowId(int rowId) throws ConditionsObjectException {
+    /**
+     * Set the database row ID of the object.
+     *
+     * @param rowId The database row ID.
+     * @throws ConditionsObjectException If the object already has a row ID.
+     */
+    public final void setRowID(final int rowId) throws ConditionsObjectException {
         if (!isNew()) {
             throw new ConditionsObjectException("The row ID cannot be reassigned on an existing object.");
         }
-        this.rowId = rowId;
+        this.rowID = rowId;
     }
 
+    /**
+     * Convert this object to a string, which is a tab-separated row appropriate
+     * for display in a table for console output.
+     *
+     * @return The object converted to a string.
+     */
     public String toString() {
-        StringBuffer sb = new StringBuffer();
+        final StringBuffer sb = new StringBuffer();
         sb.append(this.getRowId());
         sb.append('\t');
         for (Entry<String, Object> entries : this.getFieldValues().entrySet()) {
@@ -65,4 +143,4 @@
         }
         return sb.toString();
     }
-}
+}

Copied: java/trunk/conditions/src/main/java/org/hps/conditions/api/BaseConditionsObjectCollection.java (from r2653, java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObjectCollection.java)
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObjectCollection.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/BaseConditionsObjectCollection.java	Thu Apr  2 18:14:47 2015
@@ -14,76 +14,98 @@
 
 /**
  * This class implements a collection API for ConditionsObjects, using a <code>LinkedHashSet</code>.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  * @param <ObjectType> The concrete type of the collection class.
  */
 @SuppressWarnings("serial")
-public abstract class AbstractConditionsObjectCollection<ObjectType extends ConditionsObject> extends LinkedHashSet<ObjectType> implements ConditionsObjectCollection<ObjectType> {
-
-    protected TableMetaData tableMetaData = null;
-    protected int collectionId = -1;
-    protected ConditionsRecord conditionsRecord = null;
-    
-    /**
-     * This is the no argument constructor that would be used when creating a new collection
-     * that is not in the database.
-     */
-    public AbstractConditionsObjectCollection() {
-    }
-    
-    /**
-     * This constructor uses the given conditions record and table meta data objects and will assign
-     * the collection ID from the conditions record.
-     * @param conditionsRecord
-     * @param tableMetaData
-     */
-    public AbstractConditionsObjectCollection(ConditionsRecord conditionsRecord, TableMetaData tableMetaData) {
+public class BaseConditionsObjectCollection<ObjectType extends ConditionsObject> extends LinkedHashSet<ObjectType>
+        implements ConditionsObjectCollection<ObjectType> {
+
+    /**
+     * The associated table meta data.
+     */
+    private TableMetaData tableMetaData = null;
+
+    /**
+     * The collection ID which is -1 if the collection is not in the database.
+     */
+    private int collectionID = -1;
+
+    /**
+     * The associated conditions record information including run validity.
+     */
+    private ConditionsRecord conditionsRecord = null;
+
+    /**
+     * This is the no argument constructor that would be used when creating a new collection that is not in the
+     * database.
+     */
+    public BaseConditionsObjectCollection() {
+    }
+
+    /**
+     * This constructor uses the given conditions record and table meta data objects and will assign the collection ID
+     * from the conditions record.
+     *
+     * @param tableMetaData The table meta data.
+     * @param conditionsRecord The conditions record.
+     */
+    public BaseConditionsObjectCollection(final ConditionsRecord conditionsRecord, final TableMetaData tableMetaData) {
         this.conditionsRecord = conditionsRecord;
         this.tableMetaData = tableMetaData;
-        this.collectionId = conditionsRecord.getCollectionId();
-    }
-    
+        this.collectionID = conditionsRecord.getCollectionId();
+    }
+
     /**
      * This constructor is used to explicitly assign all class variable values.
-     * @param conditionsRecord
-     * @param tableMetaData
-     * @param collectionID
-     */
-    public AbstractConditionsObjectCollection(ConditionsRecord conditionsRecord, TableMetaData tableMetaData, int collectionID) {
+     *
+     * @param conditionsRecord The conditions record.
+     * @param tableMetaData The table meta data.
+     * @param collectionID The new collection ID.
+     */
+    public BaseConditionsObjectCollection(final ConditionsRecord conditionsRecord, final TableMetaData tableMetaData,
+            final int collectionID) {
         this.conditionsRecord = conditionsRecord;
         this.tableMetaData = tableMetaData;
-        this.collectionId = collectionID;
-    }
-    
-    /**
-     * Set the associated table meta data for this collection.  
-     * Once set it cannot be reassigned, which will cause an exception to be thrown.
-     * @param tableMetaData
-     */
-    public void setTableMetaData(TableMetaData tableMetaData) {                              
+        this.collectionID = collectionID;
+    }
+
+    /**
+     * Set the associated table meta data for this collection. Once set it cannot be reassigned, which will cause an
+     * exception to be thrown.
+     *
+     * @param tableMetaData The table meta data for this collection.
+     */
+    public final void setTableMetaData(final TableMetaData tableMetaData) {
         if (this.tableMetaData != null) {
             throw new RuntimeException("The table meta data cannot be reset once assigned.");
         }
         this.tableMetaData = tableMetaData;
     }
-    
-    /**
-     * Set the associated conditions record this collection.
-     * Once set it cannot be reassigned, which will cause an exception to be thrown.
-     * @param conditionsRecord
-     */
-    public void setConditionsRecord(ConditionsRecord conditionsRecord) {
+
+    /**
+     * Set the associated conditions record this collection. Once set it cannot be reassigned, which will cause an
+     * exception to be thrown.
+     *
+     * @param conditionsRecord The conditions record for the collection.
+     */
+    public final void setConditionsRecord(final ConditionsRecord conditionsRecord) {
         if (this.conditionsRecord != null) {
             throw new RuntimeException("The conditions record cannot be reset once assigned.");
         }
         this.conditionsRecord = conditionsRecord;
     }
-    
+
     /**
      * Add an object to the collection.
-     */
-    public boolean add(ObjectType object) {
+     * <p>
+     * Implements {@link ConditionsObjectCollection#add(Object)}.
+     *
+     * @param object The object do add to the collection.
+     * @return True if the add operation succeeded.
+     */
+    public boolean add(final ObjectType object) {
         if (contains(object)) {
             throw new IllegalArgumentException("Cannot add duplicate object " + object + " to collection.");
         }
@@ -92,92 +114,136 @@
 
     /**
      * Get the table meta data.
-     * @return
-     */
-    public TableMetaData getTableMetaData() {
+     * <p>
+     * Implements {@link ConditionsObjectCollection#getTableMetaData()}.
+     *
+     * @return The table meta data for the collection.
+     */
+    @Override
+    public final TableMetaData getTableMetaData() {
         return tableMetaData;
     }
 
     /**
      * Get the collection ID.
-     * @return 
-     */
-    public int getCollectionId() {
+     * <p>
+     * Implements {@link ConditionsObjectCollection#getCollectionId()}.
+     *
+     * @return The collection ID.
+     */
+    @Override
+    public final int getCollectionId() {
         if (conditionsRecord != null) {
-            return conditionsRecord.getCollectionId(); 
+            return conditionsRecord.getCollectionId();
         } else {
-            return collectionId;
-        }
-    }
-    
+            return collectionID;
+        }
+    }
+
     /**
      * Get the conditions record.
-     * @return
-     */
-    public ConditionsRecord getConditionsRecord() {
+     * <p>
+     * Implements {@link ConditionsObjectCollection#getConditionsRecord()}.
+     *
+     * @return The conditions record for the collection.
+     */
+    @Override
+    public final ConditionsRecord getConditionsRecord() {
         return conditionsRecord;
     }
-        
-    /**
-     * Set the collection ID.  
-     * Once set it cannot be assign again, which will cause an exception.
-     * @param collectionId
-     * @throws ConditionsObjectException
-     */
-    public void setCollectionId(int collectionId) throws ConditionsObjectException {
-        if (this.collectionId != -1) {
-            throw new ConditionsObjectException("The collectionId already has the value " + collectionId + " and cannot be reset."); 
-        }
-        this.collectionId = collectionId;
-    }
-        
-    public void insert() throws ConditionsObjectException, SQLException {        
-        // TODO: First check here if conditions record and/or collection ID is assigned already, 
-        //       in which case an error should be thrown as this is not a new collection.        
+
+    /**
+     * Set the collection ID. Once set it cannot be assigned again.
+     * <p>
+     * Implements {@link ConditionsObjectCollection#setCollectionID(int)}.
+     *
+     * @param collectionId The new collection ID.
+     * @throws ConditionsObjectException If the ID was already assigned.
+     */
+    @Override
+    public final void setCollectionID(final int collectionId) throws ConditionsObjectException {
+        if (this.collectionID != -1) {
+            throw new ConditionsObjectException("The collectionId already has the value " + collectionId
+                    + " and cannot be reset.");
+        }
+        this.collectionID = collectionId;
+    }
+
+    /**
+     * Insert the collection into the database.
+     * <p>
+     * Implements {@link ConditionsObjectCollection#insert()}.
+     *
+     * @throws ConditionsObjectException If there was a problem inserting the object.
+     * @throws SQLException If there was a SQL syntax error while executing the operation.
+     */
+    @Override
+    public final void insert() throws ConditionsObjectException, SQLException {
         DatabaseConditionsManager.getInstance().insertCollection(this);
     }
-    
-    // Should select records into this collection by collection ID.
-    public int select() {
+
+    /**
+     * Select objects into this collection from the database.
+     * <p>
+     * Implements {@link ConditionsObjectCollection#select()}.
+     *
+     * @return The number of records selected.
+     */
+    @Override
+    public final int select() {
         throw new UnsupportedOperationException("The select operation is not implemented yet.");
     }
-    
-    // Should delete all records by collection ID in the database and then clear the local objects. 
+
+    /**
+     * Delete the collection's object's from the database.
+     * <p>
+     * Implements {@link ConditionsObjectCollection#delete()}.
+     *
+     * @return The number of objects deleted.
+     */
+    @Override
     public int delete() {
         throw new UnsupportedOperationException("The delete operation is not implemented yet.");
     }
-    
-    // Should update objects in the database with their values from this collection.
-    // All objects would need to have valid row IDs for this to work.
-    public int update() {
+
+    /**
+     * Update the collection's objects in the database.
+     * <p>
+     * Implements {@link ConditionsObjectCollection#update()}.
+     *
+     * @return The number of records updated.
+     */
+    @Override
+    public final int update() {
         throw new UnsupportedOperationException("The update operation is not implemented yet.");
     }
-    
-    /**
-     * Convert object to string.
+
+    /**
+     * Convert this object to a string.
+     * @return The object converted to a string.
      */
     public String toString() {
-        // TODO: Should print out column headers here if available from meta data.
-        StringBuffer buffer = new StringBuffer();
+        final StringBuffer buffer = new StringBuffer();
         for (ConditionsObject object : this) {
             buffer.append(object.toString());
             buffer.append('\n');
         }
         return buffer.toString();
-    }       
-    
+    }
+
     /**
      * Get an object by index.
+     *
      * @param index The index in the set.
      * @return The object at the index.
      * @throws IndexOutOfBoundsException If the index value is invalid.
      */
-    public ObjectType get(int index) {
+    public final ObjectType get(final int index) {
         if (index + 1 > this.size() || index < 0) {
             throw new IndexOutOfBoundsException("The index is out of bounds: " + index);
         }
         int current = 0;
-        Iterator<ObjectType> iterator = this.iterator();
+        final Iterator<ObjectType> iterator = this.iterator();
         ObjectType object = iterator.next();
         while (current != index && iterator.hasNext()) {
             object = iterator.next();
@@ -185,50 +251,61 @@
         }
         return object;
     }
-    
+
     /**
      * Sort the collection in place.
+     *
      * @param comparator The comparator to use for sorting.
      */
-    public void sort(Comparator<ObjectType> comparator) {
-        List<ObjectType> objects = new ArrayList<ObjectType>(this);
+    public void sort(final Comparator<ObjectType> comparator) {
+        final List<ObjectType> objects = new ArrayList<ObjectType>(this);
         Collections.sort(objects, comparator);
         clear();
         addAll(objects);
     }
-    
+
     /**
      * Get a sorted list of the objects, leaving original collection in place.
+     *
      * @param comparator The comparator to use for the sort.
      * @return A sorted list of the objects.
      */
     @SuppressWarnings("unchecked")
-    public AbstractConditionsObjectCollection<ObjectType> sorted(Comparator<ObjectType> comparator) {
-        List<ObjectType> objects = new ArrayList<ObjectType>(this);
+    public BaseConditionsObjectCollection<ObjectType> sorted(final Comparator<ObjectType> comparator) {
+        final List<ObjectType> objects = new ArrayList<ObjectType>(this);
         Collections.sort(objects, comparator);
-        AbstractConditionsObjectCollection<ObjectType> collection = null;
+        BaseConditionsObjectCollection<ObjectType> collection = null;
         try {
-            collection = (AbstractConditionsObjectCollection<ObjectType>) getClass().newInstance();
+            collection = (BaseConditionsObjectCollection<ObjectType>) getClass().newInstance();
         } catch (InstantiationException | IllegalAccessException e) {
             throw new RuntimeException(e);
         }
         collection.addAll(objects);
         return collection;
     }
-    
+
+    /**
+     * Sort this collection in place.
+     */
+    @Override
     public void sort() {
-        AbstractConditionsObjectCollection<ObjectType> sortedCollection = sorted();
+        final BaseConditionsObjectCollection<ObjectType> sortedCollection = sorted();
         this.clear();
         this.addAll(sortedCollection);
     }
-    
-    public AbstractConditionsObjectCollection<ObjectType> sorted() {
-        List<ObjectType> objects = new ArrayList<ObjectType>(this);
+
+    /**
+     * Create and return a sorted collection, leaving the original collection unsorted.
+     * @return The sorted collection.
+     */
+    @SuppressWarnings("unchecked")
+    @Override
+    public BaseConditionsObjectCollection<ObjectType> sorted() {
+        final List<ObjectType> objects = new ArrayList<ObjectType>(this);
         Collections.sort(objects, new DefaultConditionsObjectComparator());
-        AbstractConditionsObjectCollection<ObjectType> collection = null;
+        BaseConditionsObjectCollection<ObjectType> collection = null;
         try {
-            // FIXME: This is kind of ugly.
-            collection = (AbstractConditionsObjectCollection<ObjectType>) getClass().newInstance();
+            collection = ((BaseConditionsObjectCollection<ObjectType>) getClass().newInstance());
         } catch (InstantiationException | IllegalAccessException e) {
             throw new RuntimeException(e);
         }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObject.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObject.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObject.java	Thu Apr  2 18:14:47 2015
@@ -3,71 +3,89 @@
 import java.util.Comparator;
 
 /**
- * This is an ORM interface for accessing conditions database information by
- * row. It can handle new or existing records. The row ID values for new records are
- * -1 which indicates they are not in the database yet.
- * @author Jeremy McCormick <[log in to unmask]>
+ * This is an ORM interface for accessing conditions information by row from a database table.
+ *
+ * @author <a href="mailto:[log in to unmask]>Jeremy McCormick</a>
  */
 public interface ConditionsObject {
 
     /**
-     * Get the row ID of this object.
+     * Get the row ID of this object, which will be -1 for records not in the database.
+     *
      * @return The database row ID.
      */
     int getRowId();
 
     /**
-     * Generic set method for field values. This will set the object to the
-     * 'dirty' state.
-     * @param fieldName The name of the field.
-     * @param fieldValue The field value.
+     * Set the value of a field.
+     *
+     * @param field The name of the field.
+     * @param value The field value.
      */
     void setFieldValue(String field, Object value);
 
     /**
      * Set all of the field values on this object.
-     * @param fieldValues The FieldValueMap containing pairs of names and
-     *            values.
+     *
+     * @param fieldValues The map containing pairs of field names and values.
      */
     void setFieldValues(FieldValueMap fieldValues);
-    
+
     /**
      * Get the map of field values.
+     *
      * @return The <code>FieldValueMap</code>.
      */
     FieldValueMap getFieldValues();
 
     /**
      * Get a field value, cast to the given class.
+     *
      * @param field The field value.
+     * @param type The class of the field.
+     * @param <T> The inferred type of the field.
      * @return The field value casted to type T.
      */
-    public <T> T getFieldValue(Class<T> type, String field);
+    <T> T getFieldValue(Class<T> type, String field);
 
     /**
      * Get a field value with implicit return type.
+     *
      * @param field The field's name.
+     * @param <T> The inferred type of the field.
      * @return The field value cast to type.
      */
-    public <T> T getFieldValue(String field);
+    <T> T getFieldValue(String field);
 
     /**
-     * Set the row ID of this object. This cannot be reset once set to a valid
-     * ID (e.g. not -1).
+     * Set the row ID of this object. This cannot be reset once set to a valid ID (e.g. not -1).
+     *
      * @param rowId The object's row ID.
      * @throws ConditionsObjectException if already set
      */
-    public void setRowId(int rowId) throws ConditionsObjectException;
-    
+    void setRowID(int rowId) throws ConditionsObjectException;
+
     /**
-     * Return true if this object is new, e.g. it does not have a valid row ID.
-     * This means that it does not have a database record in its table.
+     * Return true if this object is new, e.g. it does not have a valid row ID. This means that it does not have a
+     * database record in its table.
+     *
      * @return True if record is new.
      */
-    public boolean isNew();
-    
+    boolean isNew();
+
+    /**
+     * Default comparator for this interface which uses row ID.
+     */
     static class DefaultConditionsObjectComparator implements Comparator<ConditionsObject> {
-        public int compare(ConditionsObject o1, ConditionsObject o2) {
+
+        /**
+         * Compare objects according to standard Java conventions.
+         *
+         * @param o1 The first object.
+         * @param o2 The second object.
+         * @return The result of comparison operation.
+         */
+        public int compare(final ConditionsObject o1, final ConditionsObject o2) {
             if (o1.getRowId() < o2.getRowId()) {
                 return -1;
             } else if (o1.getRowId() > o2.getRowId()) {
@@ -75,6 +93,6 @@
             } else {
                 return 0;
             }
-        }        
+        }
     }
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java	Thu Apr  2 18:14:47 2015
@@ -1,6 +1,3 @@
-/**
- * 
- */
 package org.hps.conditions.api;
 
 import java.sql.SQLException;
@@ -10,66 +7,105 @@
 import org.hps.conditions.database.TableMetaData;
 
 /**
- * @author Jeremy McCormick <[log in to unmask]>
+ * An interface representing a collection of conditions objects.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
+ * @param <ObjectType> The type of the conditions object contained in the collection.
  */
+// TODO: Rename to ConditionsObjectSet.
 public interface ConditionsObjectCollection<ObjectType extends ConditionsObject> extends Set<ObjectType> {
 
     /**
      * Get the table meta data.
-     * @return
+     *
+     * @return The table meta data.
      */
-    public TableMetaData getTableMetaData();
+    TableMetaData getTableMetaData();
 
     /**
      * Get the collection ID.
-     * @return
+     *
+     * @return The collection ID.
      */
-    public int getCollectionId();
-    
+    int getCollectionId();
+
     /**
      * Get the conditions record.
-     * @return
+     *
+     * @return The conditions record.
      */
-    public ConditionsRecord getConditionsRecord();
-        
+    ConditionsRecord getConditionsRecord();
+
     /**
-     * Set the collection ID.  
-     * Once set it cannot be assign again, which will cause an exception.
-     * @param collectionId
-     * @throws ConditionsObjectException
+     * Set the collection ID. Once set it cannot be assigned again, which will cause an exception.
+     *
+     * @param collectionId The collection ID.
+     * @throws ConditionsObjectException If reassignment is attempted.
      */
-    public void setCollectionId(int collectionId) throws ConditionsObjectException;
-        
-    public void insert() throws ConditionsObjectException, SQLException;
-    
-    public int select();
-    
-    public int delete();
-    
-    public int update();
-    
+    void setCollectionID(int collectionId) throws ConditionsObjectException;
+
     /**
-     * Get an object by index.
+     * Insert all objects from the collection into the database.
+     *
+     * @throws ConditionsObjectException If there is a conditions object error.
+     * @throws SQLException If there is a SQL syntax or execution error.
+     */
+    void insert() throws ConditionsObjectException, SQLException;
+
+    /**
+     * Select objects into this collection by collection ID.
+     *
+     * @return The number of rows selected.
+     */
+    int select();
+
+    /**
+     * Delete objects in this from the database.
+     *
+     * @return The number of rows deleted.
+     */
+    int delete();
+
+    /**
+     * Update rows in the database from these objects.
+     *
+     * @return The number of rows updated.
+     */
+    int update();
+
+    /**
+     * Get an object by its index.
+     *
      * @param index The index in the set.
      * @return The object at the index.
      * @throws IndexOutOfBoundsException If the index value is invalid.
      */
-    public ObjectType get(int index);
-    
+    ObjectType get(int index);
+
     /**
      * Sort the collection in place.
+     *
      * @param comparator The comparator to use for sorting.
      */
-    public void sort(Comparator<ObjectType> comparator);
-    
+    void sort(Comparator<ObjectType> comparator);
+
     /**
      * Get a sorted list of the objects, leaving original collection in place.
+     *
      * @param comparator The comparator to use for the sort.
      * @return A sorted list of the objects.
      */
-    public AbstractConditionsObjectCollection<ObjectType> sorted(Comparator<ObjectType> comparator);
-    
-    public void sort();
-    
-    public AbstractConditionsObjectCollection<ObjectType> sorted();
+    BaseConditionsObjectCollection<ObjectType> sorted(Comparator<ObjectType> comparator);
+
+    /**
+     * Sort the collection in place.
+     */
+    void sort();
+
+    /**
+     * Get a new sorted collection.
+     *
+     * @return The new sorted collection.
+     */
+    BaseConditionsObjectCollection<ObjectType> sorted();
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectException.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectException.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectException.java	Thu Apr  2 18:14:47 2015
@@ -2,28 +2,52 @@
 
 
 /**
- * Generic Exception type throw by methods of {@link ConditionsObject} or other
- * associated classes such as converters and collections.
+ * Thrown by methods of {@link ConditionsObject} or other associated classes
+ * such as converters and collections.
  */
 @SuppressWarnings("serial")
 public final class ConditionsObjectException extends Exception {
 
-    ConditionsObject object;
+    /**
+     * The associated conditions object to the error.
+     */
+    private ConditionsObject object;
 
-    public ConditionsObjectException(String message) {
+    /**
+     * Error with a message.
+     *
+     * @param message The error message.
+     */
+    public ConditionsObjectException(final String message) {
         super(message);
     }
-    
-    public ConditionsObjectException(String message, Throwable cause) {
+
+    /**
+     * Error with an associated throwable.
+     *
+     * @param message The error message.
+     * @param cause The error's cause.
+     */
+    public ConditionsObjectException(final String message, final Throwable cause) {
         super(message, cause);
     }
 
-    public ConditionsObjectException(String message, ConditionsObject object) {
+    /**
+     * Error with a message and object.
+     *
+     * @param message The error message.
+     * @param object The associated conditions object.
+     */
+    public ConditionsObjectException(final String message, final ConditionsObject object) {
         super(message);
         this.object = object;
     }
 
+    /**
+     * Get the associated conditions object to the error.
+     * @return The object associated with the error.
+     */
     public ConditionsObject getConditionsObject() {
         return object;
     }
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectUtilities.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectUtilities.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectUtilities.java	Thu Apr  2 18:14:47 2015
@@ -13,44 +13,51 @@
 
 /**
  * This is a collection of utility methods for {@link ConditionsObject}.
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public final class ConditionsObjectUtilities {
-    
-    private ConditionsObjectUtilities() {       
+
+    /**
+     * Do not allow class to be instantiated.
+     */
+    private ConditionsObjectUtilities() {
     }
-    
+
     /**
      * Get the list of table names for the class.
+     *
      * @param type The class.
      * @return The list of table names.
      */
-    public static String[] getTableNames(Class<? extends ConditionsObject> type) {
-        Table tableAnnotation = type.getAnnotation(Table.class);
+    public static String[] getTableNames(final Class<? extends ConditionsObject> type) {
+        final Table tableAnnotation = type.getAnnotation(Table.class);
         if (tableAnnotation != null) {
-            return tableAnnotation.names(); 
+            return tableAnnotation.names();
         } else {
-            return new String[]{};
+            return new String[] {};
         }
     }
-    
+
     /**
      * Get the list of database field names for the class.
+     *
      * @param type The class.
      * @return The list of field names.
      */
-    public static Set<String> getFieldNames(Class<? extends ConditionsObject> type) {
-        Set<String> fieldNames = new HashSet<String>();
+    public static Set<String> getFieldNames(final Class<? extends ConditionsObject> type) {
+        final Set<String> fieldNames = new HashSet<String>();
         for (Method method : type.getMethods()) {
             if (!method.getReturnType().equals(Void.TYPE)) {
                 for (Annotation annotation : method.getAnnotations()) {
                     if (annotation.annotationType().equals(Field.class)) {
                         if (!Modifier.isPublic(method.getModifiers())) {
-                            throw new RuntimeException("The method " + type.getName() + "." + method.getName() + " has a Field annotation but is not public.");
+                            throw new RuntimeException("The method " + type.getName() + "." + method.getName()
+                                    + " has a Field annotation but is not public.");
                         }
-                        Field field = (Field) annotation;
+                        final Field field = (Field) annotation;
                         for (String fieldName : field.names()) {
-                            if (fieldName != null && !fieldName.equals("")) {
+                            if (fieldName != null && !("".equals(fieldName))) {
                                 fieldNames.add(fieldName);
                             }
                         }
@@ -60,33 +67,38 @@
         }
         return fieldNames;
     }
-    
+
     /**
      * Get the class for the collection of the ConditionsObject type.
+     *
      * @param type The class of the ConditionsObject.
      * @return The class of the collection.
      */
     @SuppressWarnings("unchecked")
-    public static Class<? extends AbstractConditionsObjectCollection<? extends ConditionsObject>> getCollectionType(Class<? extends ConditionsObject> type) {
-        String collectionClassName = type.getCanonicalName() + "$" + type.getSimpleName() + "Collection";
+    public static Class<? extends BaseConditionsObjectCollection<? extends ConditionsObject>> getCollectionType(
+            final Class<? extends ConditionsObject> type) {
+        final String collectionClassName = type.getCanonicalName() + "$" + type.getSimpleName() + "Collection";
         Class<?> rawCollectionClass;
         try {
             rawCollectionClass = Class.forName(collectionClassName);
         } catch (ClassNotFoundException e) {
             throw new RuntimeException("The type does not define a nested collection class.", e);
         }
-        if (!AbstractConditionsObjectCollection.class.isAssignableFrom(rawCollectionClass))
-            throw new RuntimeException("The class " + rawCollectionClass.getSimpleName() + " does not extend ConditionsObjectCollection.");
-        return (Class<? extends AbstractConditionsObjectCollection<? extends ConditionsObject>>) rawCollectionClass;
+        if (!BaseConditionsObjectCollection.class.isAssignableFrom(rawCollectionClass)) {
+            throw new RuntimeException("The class " + rawCollectionClass.getSimpleName()
+                    + " does not extend ConditionsObjectCollection.");
+        }
+        return (Class<? extends BaseConditionsObjectCollection<? extends ConditionsObject>>) rawCollectionClass;
     }
-    
+
     /**
      * Find all available classes that extend ConditionsObject.
+     *
      * @return The set of all available classes that extend ConditionsObject.
      */
     public static Set<Class<? extends ConditionsObject>> findConditionsObjectTypes() {
-        Reflections reflections = new Reflections("org.hps.conditions");    
-        Set<Class<? extends ConditionsObject>> objectTypes = new HashSet<Class<? extends ConditionsObject>>();
+        final Reflections reflections = new Reflections("org.hps.conditions");
+        final Set<Class<? extends ConditionsObject>> objectTypes = new HashSet<Class<? extends ConditionsObject>>();
         for (Class<? extends ConditionsObject> objectType : reflections.getSubTypesOf(ConditionsObject.class)) {
             if (Modifier.isAbstract(objectType.getModifiers())) {
                 continue;

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java	Thu Apr  2 18:14:47 2015
@@ -17,134 +17,222 @@
 import org.hps.conditions.database.TableMetaData;
 
 /**
- * This class represents a single record from the primary conditions data table,
- * which defines the validity range for a specific collection of conditions
- * objects.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * This class represents a single record from the primary conditions data table, which defines the validity range for a
+ * specific collection of conditions objects.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-@Table(names = {"conditions"})
+@Table(names = { "conditions" })
 @Converter(converter = ConditionsRecordConverter.class)
-public final class ConditionsRecord extends AbstractConditionsObject {
-    
+public final class ConditionsRecord extends BaseConditionsObject {
+
     /**
      * The concrete collection implementation, including sorting utilities.
      */
-    public static class ConditionsRecordCollection extends AbstractConditionsObjectCollection<ConditionsRecord> {
-        
+    @SuppressWarnings("serial")
+    public static class ConditionsRecordCollection extends BaseConditionsObjectCollection<ConditionsRecord> {
+
         /**
          * Sort using a comparator and leave the original collection unchanged.
-         * @param comparator
-         * @return
-         */
-        public ConditionsRecordCollection sorted(Comparator<ConditionsRecord> comparator) {
-            List<ConditionsRecord> list = new ArrayList<ConditionsRecord>(this);
+         *
+         * @param comparator The comparison to use for sorting.
+         * @return The sorted collection.
+         */
+        public final ConditionsRecordCollection sorted(final Comparator<ConditionsRecord> comparator) {
+            final List<ConditionsRecord> list = new ArrayList<ConditionsRecord>(this);
             Collections.sort(list, comparator);
-            ConditionsRecordCollection collection = new ConditionsRecordCollection();
+            final ConditionsRecordCollection collection = new ConditionsRecordCollection();
             collection.addAll(list);
             return collection;
         }
-        
-        public ConditionsRecordCollection sortedByUpdated() {
+
+        /**
+         * Sort and return collection by updated date.
+         *
+         * @return The sorted collection.
+         */
+        public final ConditionsRecordCollection sortedByUpdated() {
             return sorted(new UpdatedComparator());
         }
-        
-        public ConditionsRecordCollection sortedByCreated() {
+
+        /**
+         * Sort and return collection by creation date.
+         *
+         * @return The sorted collection.
+         */
+        public final ConditionsRecordCollection sortedByCreated() {
             return sorted(new CreatedComparator());
         }
-        
-        public ConditionsRecordCollection sortedByRunStart() {
+
+        /**
+         * Sort and return by run start number.
+         *
+         * @return The sorted collection.
+         */
+        public final ConditionsRecordCollection sortedByRunStart() {
             return sorted(new RunStartComparator());
         }
-        
-        public ConditionsRecordCollection sortedByKey() {
+
+        /**
+         * Sort and return by key (table name).
+         *
+         * @return The sorted collection.
+         */
+        public final ConditionsRecordCollection sortedByKey() {
             return sorted(new KeyComparator());
         }
-        
+
         /**
          * Sort the collection in place.
-         * @param comparator
-         */
-        public void sort(Comparator<ConditionsRecord> comparator) {
-            List<ConditionsRecord> list = new ArrayList<ConditionsRecord>(this);
+         *
+         * @param comparator The comparison to use for sorting.
+         */
+        public final void sort(final Comparator<ConditionsRecord> comparator) {
+            final List<ConditionsRecord> list = new ArrayList<ConditionsRecord>(this);
             Collections.sort(list, comparator);
             this.clear();
             this.addAll(list);
         }
-        
-        public void sortByUpdated() {
+
+        /**
+         * Sort in place by updated date.
+         */
+        public final void sortByUpdated() {
             this.sort(new UpdatedComparator());
         }
-        
-        public void sortByCreated() {
+
+        /**
+         * Sort in place by creation date.
+         */
+        public final void sortByCreated() {
             sort(new CreatedComparator());
         }
-        
-        public void sortByRunStart() {
+
+        /**
+         * Sort in place by run start.
+         */
+        public final void sortByRunStart() {
             sort(new RunStartComparator());
         }
-        
-        public void sortByKey() {
+
+        /**
+         * Sort in place by key.
+         */
+        public final void sortByKey() {
             sort(new KeyComparator());
-        }               
-        
-        public Set<String> getConditionsKeys() {
-            Set<String> conditionsKeys = new HashSet<String>();
+        }
+
+        /**
+         * Get the unique conditions keys from the records in this collection.
+         *
+         * @return The set of unique conditions keys.
+         */
+        public final Set<String> getConditionsKeys() {
+            final Set<String> conditionsKeys = new HashSet<String>();
             for (ConditionsRecord record : this) {
                 conditionsKeys.add(record.getName());
             }
             return conditionsKeys;
         }
-        
+
+        /**
+         * Compare conditions records by run start.
+         */
         private static class RunStartComparator implements Comparator<ConditionsRecord> {
+            /**
+             * Compare the run start numbers of two conditions records.
+             * @param c1 The first conditions record.
+             * @param c2 The second conditions record.
+             * @return -1, 0, or 1 if first run number is less than, equal to, or greater than the second.
+             */
             @Override
-            public int compare(ConditionsRecord c1, ConditionsRecord c2) {
+            public int compare(final ConditionsRecord c1, final ConditionsRecord c2) {
                 if (c1.getRunStart() < c2.getRunStart()) {
                     return -1;
                 } else if (c1.getRunStart() > c2.getRunStart()) {
                     return 1;
-                } 
+                }
                 return 0;
             }
         }
-        
+
+        /**
+         * Compare conditions records by updated date.
+         */
         private static class UpdatedComparator implements Comparator<ConditionsRecord> {
+            /**
+             * Compare the updated dates of two conditions records.
+             * @param c1 The first conditions record.
+             * @param c2 The second conditions record.
+             * @return -1, 0, or 1 if first date is less than, equal to, or greater than the second date.
+             */
             @Override
-            public int compare(ConditionsRecord c1, ConditionsRecord c2) {
-                Date date1 = c1.getUpdated();
-                Date date2 = c2.getUpdated();                
+            public int compare(final ConditionsRecord c1, final ConditionsRecord c2) {
+                final Date date1 = c1.getUpdated();
+                final Date date2 = c2.getUpdated();
                 if (date1.before(date2)) {
                     return -1;
                 } else if (date1.after(date2)) {
                     return 1;
                 }
-                return 0;                
-            }            
-        }
-        
+                return 0;
+            }
+        }
+
+        /**
+         * Compare conditions records by creation date.
+         */
         private static class CreatedComparator implements Comparator<ConditionsRecord> {
+            /**
+             * Compare the creation dates of two conditions records.
+             * @param c1 The first conditions record.
+             * @param c2 The second conditions record.
+             * @return -1, 0, or 1 if first date is less than, equal to, or greater than the second date.
+             */
             @Override
-            public int compare(ConditionsRecord c1, ConditionsRecord c2) {
-                Date date1 = c1.getCreated();
-                Date date2 = c2.getCreated();                
+            public int compare(final ConditionsRecord c1, final ConditionsRecord c2) {
+                final Date date1 = c1.getCreated();
+                final Date date2 = c2.getCreated();
                 if (date1.before(date2)) {
                     return -1;
                 } else if (date1.after(date2)) {
                     return 1;
                 }
-                return 0;                
-            }            
-        }
-        
+                return 0;
+            }
+        }
+
+        /**
+         * Compare conditions records by their key (table name).
+         */
         private static class KeyComparator implements Comparator<ConditionsRecord> {
+            /**
+             * Compare the keys (names) of two conditions records.
+             * @param c1 The first conditions record.
+             * @param c2 The second conditions record.
+             * @return -1, 0, or 1 if first name is less than, equal to, or greater than the second 
+             *         (using alphabetic comparison).
+             */
             @Override
-            public int compare(ConditionsRecord c1, ConditionsRecord c2) {
+            public int compare(final ConditionsRecord c1, final ConditionsRecord c2) {
                 return c1.getName().compareTo(c2.getName());
             }
         }
     }
-    
-    public ConditionsRecord(int collectionId, int runStart, int runEnd, String name, String tableName, String notes, String tag) {
+
+    /**
+     * Create a conditions record with fully qualified constructor.
+     *
+     * @param collectionId The ID of the associated conditions collection.
+     * @param runStart The starting run number.
+     * @param runEnd The ending run number.
+     * @param name The name of the conditions set (usually same as table name).
+     * @param tableName The name of the conditions data table.
+     * @param notes Text notes about this record.
+     * @param tag The conditions tag for grouping this record with others.
+     */
+    public ConditionsRecord(final int collectionId, final int runStart, final int runEnd, final String name,
+            final String tableName, final String notes, final String tag) {
         this.setFieldValue("collection_id", collectionId);
         this.setFieldValue("run_start", runStart);
         this.setFieldValue("run_end", runEnd);
@@ -156,135 +244,153 @@
         this.setFieldValue("created_by", System.getProperty("user.name"));
     }
 
+    /**
+     * Create a "blank" conditions record.
+     */
     public ConditionsRecord() {
     }
-    
-    // TODO: This should eventually be replaced by the generic insert method from the manager (if possible).
+
+    /**
+     * Insert the conditions record into the database.
+     * @throws ConditionsObjectException If there are errors inserting the record.
+     */
     public void insert() throws ConditionsObjectException {
-        if (fieldValues.size() == 0)
+        if (getFieldValues().size() == 0) {
             throw new ConditionsObjectException("There are no field values to insert.");
-        TableMetaData tableMetaData = DatabaseConditionsManager.getInstance().findTableMetaData(ConditionsRecordCollection.class).get(0);
+        }
+        final TableMetaData tableMetaData = DatabaseConditionsManager.getInstance()
+                .findTableMetaData(ConditionsRecordCollection.class).get(0);
         if (tableMetaData == null) {
             throw new ConditionsObjectException("Failed to get meta data for ConditionsRecord.");
         }
-        String query = QueryBuilder.buildInsert(tableMetaData.getTableName(), this.getFieldValues());
-        //System.out.println(query);
-        List<Integer> keys = DatabaseConditionsManager.getInstance().updateQuery(query);
+        final String query = QueryBuilder.buildInsert(tableMetaData.getTableName(), this.getFieldValues());
+        // System.out.println(query);
+        final List<Integer> keys = DatabaseConditionsManager.getInstance().updateQuery(query);
         if (keys.size() != 1) {
             throw new ConditionsObjectException("SQL insert returned wrong number of keys: " + keys.size());
         }
-        rowId = keys.get(0);
+        setRowID(keys.get(0));
     }
 
     /**
      * Get the starting run number.
+     *
      * @return The starting run number.
      */
-    @Field(names = {"run_start"})
+    @Field(names = { "run_start" })
     public int getRunStart() {
         return getFieldValue("run_start");
     }
 
     /**
      * Get the ending run number.
+     *
      * @return The ending run number.
      */
-    @Field(names = {"run_end"})
+    @Field(names = { "run_end" })
     public int getRunEnd() {
         return getFieldValue("run_end");
     }
 
     /**
      * Get the date this record was last updated.
+     *
      * @return The date this record was updated.
      */
-    @Field(names = {"updated"})
+    @Field(names = { "updated" })
     public Date getUpdated() {
         return getFieldValue("updated");
     }
 
     /**
      * Get the date this record was created.
+     *
      * @return The date this record was created.
      */
-    @Field(names = {"created"})
+    @Field(names = { "created" })
     public Date getCreated() {
         return getFieldValue("created");
     }
 
     /**
      * Get the name of the user who created this record.
+     *
      * @return The name of the person who created the record.
      */
-    @Field(names = {"created_by"})
+    @Field(names = { "created_by" })
     public String getCreatedBy() {
         return getFieldValue("created_by");
     }
 
     /**
      * Get the notes.
+     *
      * @return The notes about this condition.
      */
-    @Field(names = {"notes"})
+    @Field(names = { "notes" })
     public String getNotes() {
         return getFieldValue("notes");
     }
 
     /**
-     * Get the name of these conditions, which should be unique by run number.
-     * This is called the "key" in the table meta data to distinguish it from
-     * "table name".
+     * Get the name of these conditions, which should be unique by run number. This is called the "key" in the table
+     * meta data to distinguish it from "table name".
+     *
      * @return The name of the conditions.
      */
-    @Field(names = {"name"})
+    @Field(names = { "name" })
     public String getName() {
         return getFieldValue("name");
     }
 
     /**
      * Get the name of the table containing the actual raw conditions data.
+     *
      * @return The name of the table with the conditions data.
      */
-    @Field(names = {"table_name"})
+    @Field(names = { "table_name" })
     public String getTableName() {
         return getFieldValue("table_name");
     }
 
     /**
      * Get the collection ID, overriding this method from the parent class.
+     *
      * @return The collection ID.
      */
-    @Field(names = {"collection_id"})
+    @Field(names = { "collection_id" })
     public int getCollectionId() {
         return getFieldValue("collection_id");
     }
 
     /**
      * Get the string tag associated with these conditions.
+     *
      * @return The string tag.
      */
-    @Field(names = {"tag"})
+    @Field(names = { "tag" })
     public String getTag() {
         return getFieldValue("tag");
     }
 
     /**
      * Convert this record to a human readable string, one field per line.
+     *
      * @return This object represented as a string.
      */
     public String toString() {
-        StringBuffer buff = new StringBuffer();
-        buff.append("id: " + getRowId() + '\n');
-        buff.append("name: " + getName() + '\n');
-        buff.append("runStart: " + getRunStart() + '\n');
-        buff.append("runEnd: " + getRunEnd() + '\n');
-        buff.append("tableName: " + getTableName() + '\n');
-        buff.append("collectionId: " + getCollectionId() + '\n');
-        buff.append("updated: " + getUpdated() + '\n');
-        buff.append("created: " + getCreated() + '\n');
-        buff.append("tag: " + getTag() + '\n');
-        buff.append("createdBy: " + getCreatedBy() + '\n');
-        buff.append("notes: " + getNotes() + '\n');
-        return buff.toString();
-    }
-}
+        final StringBuffer sb = new StringBuffer();
+        sb.append("id: " + getRowId() + '\n');
+        sb.append("name: " + getName() + '\n');
+        sb.append("runStart: " + getRunStart() + '\n');
+        sb.append("runEnd: " + getRunEnd() + '\n');
+        sb.append("tableName: " + getTableName() + '\n');
+        sb.append("collectionId: " + getCollectionId() + '\n');
+        sb.append("updated: " + getUpdated() + '\n');
+        sb.append("created: " + getCreated() + '\n');
+        sb.append("tag: " + getTag() + '\n');
+        sb.append("createdBy: " + getCreatedBy() + '\n');
+        sb.append("notes: " + getNotes() + '\n');
+        return sb.toString();
+    }
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsSeries.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsSeries.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsSeries.java	Thu Apr  2 18:14:47 2015
@@ -2,22 +2,15 @@
 
 import java.util.ArrayList;
 
-
 /**
- * This class represents a series of collections containing
- * <tt>ConditionsObjects</tt>. It is used to conditions collections when there
- * are multiple ones with the same key that are valid for the current run.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * This class represents a series of collections containing <tt>ConditionsObjects</tt>. It is used to conditions
+ * collections when there are multiple ones with the same key that are valid for the current run.
+ *
+ * @param <ObjectType> The type of the conditions object.
+ * @param <CollectionType> The type of the conditions collection.
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @SuppressWarnings({ "serial" })
-public class ConditionsSeries<ObjectType extends ConditionsObject, CollectionType extends ConditionsObjectCollection<ObjectType>> extends ArrayList<ConditionsObjectCollection<ObjectType>> {
-
-    Class<CollectionType> collectionType;
-    Class<ObjectType> objectType;
-    
-    public ConditionsSeries(Class<ObjectType> objectType, Class<CollectionType> collectionType) {
-        this.collectionType = collectionType;
-        this.objectType = objectType;
-    }
-}
+public class ConditionsSeries<ObjectType extends ConditionsObject, CollectionType extends ConditionsObjectCollection<ObjectType>>
+        extends ArrayList<ConditionsObjectCollection<ObjectType>> {
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/FieldValueMap.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/FieldValueMap.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/FieldValueMap.java	Thu Apr  2 18:14:47 2015
@@ -4,7 +4,8 @@
 
 /**
  * Simple class extending <code>java.lang.Map</code> that maps field names
- * to values.
+ * to values for conditions objects.
  */
+@SuppressWarnings("serial")
 public final class FieldValueMap extends LinkedHashMap<String, Object> {
 }

Added: java/trunk/conditions/src/main/java/org/hps/conditions/api/package-info.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/package-info.java	(added)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/package-info.java	Thu Apr  2 18:14:47 2015
@@ -0,0 +1,13 @@
+/**
+ * This package contains interfaces and abstract classes, along with some
+ * implementations, of the database conditions API for HPS.  These classes
+ * include simple ORM between conditions objects and the database.
+ *
+ * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @see ConditionsObject
+ * @see ConditionsObjectCollection
+ * @see ConditionsSeries
+ * @see ConditionsRecord
+ */
+package org.hps.conditions.api;

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/beam/BeamConditions.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/beam/BeamConditions.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/beam/BeamConditions.java	Thu Apr  2 18:14:47 2015
@@ -1,35 +1,38 @@
 package org.hps.conditions.beam;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
 import org.hps.conditions.database.Table;
 
 /**
- * <p>
  * Beam-related detector conditions, including current, position
  * in X and Y, and energy.
- * <p>  
- * Unless otherwise stated, these are assumed to be average values 
+ * <p>
+ * Unless otherwise stated, these are assumed to be average values
  * for an entire run.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @Table(names = {"beam"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.ERROR)
-public final class BeamConditions extends AbstractConditionsObject {
-    
+public final class BeamConditions extends BaseConditionsObject {
+
     /**
      * Collection implementation for this class.
      */
-    public final static class BeamConditionsCollection extends AbstractConditionsObjectCollection<BeamConditions> {
+    @SuppressWarnings("serial")
+    public static final class BeamConditionsCollection extends BaseConditionsObjectCollection<BeamConditions> {
     }
-    
+
+    /**
+     * No arg constructor.
+     */
     public BeamConditions() {
     }
-    
+
     /**
      * Get the average beam current (nA).
      * A value of 0 indicates there was no beam.
@@ -40,7 +43,7 @@
     public Double getCurrent() {
         return getFieldValue("current");
     }
-    
+
     /**
      * Get the average beam position in X (mm).
      * @return The beam position (mm).
@@ -49,7 +52,7 @@
     public Double getPositionX() {
         return getFieldValue("position_x");
     }
-    
+
     /**
      * Get the average beam position in Y (mm).
      * @return The beam position (mm).
@@ -58,7 +61,7 @@
     public Double getPositionY() {
         return getFieldValue("position_y");
     }
-    
+
     /**
      * Get the beam energy (GeV).
      * A value of 0 indicates there was no beam.
@@ -68,5 +71,5 @@
     @Field(names = {"energy"})
     public Double getEnergy() {
         return getFieldValue("energy");
-    }        
+    }
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/beam/BeamCurrent.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/beam/BeamCurrent.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/beam/BeamCurrent.java	Thu Apr  2 18:14:47 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.beam;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -9,13 +9,18 @@
 
 /**
  * This class is a conditions object for integrated beam current values.
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @Table(names = {"beam_current"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public final class BeamCurrent extends AbstractConditionsObject {
+public final class BeamCurrent extends BaseConditionsObject {
 
-    public static class BeamCurrentCollection extends AbstractConditionsObjectCollection<BeamCurrent> {
+    /**
+     * Collection implementation for this class.
+     */
+    @SuppressWarnings("serial")
+    public static class BeamCurrentCollection extends BaseConditionsObjectCollection<BeamCurrent> {
     }
 
     /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/beam/ImportBeamConditionsEngRun.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/beam/ImportBeamConditionsEngRun.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/beam/ImportBeamConditionsEngRun.java	Thu Apr  2 18:14:47 2015
@@ -17,93 +17,114 @@
  * <p>
  * Import beam measurements into the database from a text file.
  * <p>
- * This has the format:<br/> 
+ * This has the format:<br/>
  * run current x y
  * <p>
  * The beam energy is hard-coded to 1.92 GeV for now, pending updates with better information.
- *  
+ *
  * @author Jeremy McCormick <[log in to unmask]>
  */
 public final class ImportBeamConditionsEngRun {
 
-    static double beamEnergy = 1.92;
-    static double nullValue = -999.0;
-    
+    /**
+     * Nominal beam energy for Eng Run.
+     */
+    private static final double BEAM_ENERGY = 1.92;
+
+    /**
+     * Null value from the input text file.
+     */
+    private static final double NULL_VALUE = -999.0;
+
+    /**
+     * Class should not be instantiated.
+     */
     private ImportBeamConditionsEngRun() {
     }
-    
-    public static void main(String[] args) throws Exception {
-        
+
+    /**
+     * Import the Eng Run beam conditions from a text file.
+     * @param args The argument list.
+     * @throws Exception If there is an error importing the text file.
+     */
+    public static void main(final String[] args) throws Exception {
+
         if (args.length == 0) {
             throw new RuntimeException("missing file list argument");
         }
-        
-        String fileName = args[0];
+
+        final String fileName = args[0];
         if (!new File(fileName).exists()) {
             throw new IOException("The file " + fileName + " does not exist.");
         }
-        
-        Map<Integer, BeamConditions> beamMap = new LinkedHashMap<Integer, BeamConditions>();
-                
-        BufferedReader reader = new BufferedReader(new FileReader(fileName));
+
+        final Map<Integer, BeamConditions> beamMap = new LinkedHashMap<Integer, BeamConditions>();
+
+        final BufferedReader reader = new BufferedReader(new FileReader(fileName));
         String line;
         while ((line = reader.readLine()) != null) {
-            
-            String[] values = line.split(" "); 
-            
-            BeamConditions beam = new BeamConditions();
-            
+
+            final String[] values = line.split(" ");
+
+            final BeamConditions beam = new BeamConditions();
+
             setValue(beam, "current", values[1]);
             setValue(beam, "position_x", values[2]);
             setValue(beam, "position_y", values[3]);
-                        
+
             if (beam.getFieldValue("current") == null) {
                 // Use null value to indicate beam was not measured.
                 beam.setFieldValue("energy", null);
-            } else if (((Double)beam.getFieldValue("current")) == 0) {
+            } else if (((Double) beam.getFieldValue("current")) == 0) {
                 // Use zero for no beam.
                 beam.setFieldValue("energy", 0);
             } else {
                 // Use nominal beam energy from ECAL commissioning.
-                beam.setFieldValue("energy", beamEnergy);
+                beam.setFieldValue("energy", BEAM_ENERGY);
             }
-                       
+
             beamMap.put(Integer.parseInt(values[0]), beam);
         }
         reader.close();
-        
+
         System.out.println("printing beam conditions parsed from " + fileName + " ...");
         System.out.println("run id current x y energy");
         for (Entry<Integer, BeamConditions> entry : beamMap.entrySet()) {
             System.out.print(entry.getKey() + " ");
             System.out.println(entry.getValue() + " ");
         }
-        
-        DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
+
+        final DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
         manager.setLogLevel(Level.ALL);
-        
+
         for (Entry<Integer, BeamConditions> entry : beamMap.entrySet()) {
-            int run = entry.getKey();
-            BeamConditions beam = entry.getValue();
-            int collectionId = manager.getNextCollectionID("beam");
-            ConditionsRecord record = 
+            final int run = entry.getKey();
+            final BeamConditions beam = entry.getValue();
+            final int collectionId = manager.getNextCollectionID("beam");
+            final ConditionsRecord record = 
                     new ConditionsRecord(collectionId, run, run, "beam", "beam", "imported from HPS_Runs.pdf", "eng_run");
             System.out.println(record);
             System.out.println(beam);
-            BeamConditionsCollection collection = new BeamConditionsCollection();
+            final BeamConditionsCollection collection = new BeamConditionsCollection();
             collection.add(beam);
             manager.insertCollection(collection);
             record.insert();
-        }        
+        }
         manager.closeConnection();
-    }    
-    
-    static void setValue(BeamConditions beam, String fieldName, String rawValue) {
-        double value = Double.parseDouble(rawValue);
-        if (value != nullValue) {                
+    }
+
+    /**
+     * Set the value of the beam current.
+     * @param beam The beam conditions object.
+     * @param fieldName The name of the field.
+     * @param rawValue The raw value from the text file.
+     */
+    static void setValue(final BeamConditions beam, final String fieldName, final String rawValue) {
+        final double value = Double.parseDouble(rawValue);
+        if (value != NULL_VALUE) {
             beam.setFieldValue(fieldName, value);
         } else {
             beam.setFieldValue(fieldName, null);
         }
-    }    
-}
+    }
+}

Added: java/trunk/conditions/src/main/java/org/hps/conditions/beam/package-info.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/beam/package-info.java	(added)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/beam/package-info.java	Thu Apr  2 18:14:47 2015
@@ -0,0 +1,6 @@
+/**
+ * Provides access to beam parameters through the conditions system.
+ *
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+package org.hps.conditions.beam;

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/AbstractCommand.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/cli/AbstractCommand.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/AbstractCommand.java	Thu Apr  2 18:14:47 2015
@@ -8,36 +8,55 @@
 import org.apache.commons.cli.PosixParser;
 
 /**
- * This is the API that sub-commands must implement in the conditions command
- * line interface.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * This is the API that sub-commands such as 'load' or 'print' must implement
+ * in the conditions command line interface.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 abstract class AbstractCommand {
 
-    String name;
-    String description;
-    Options options = new Options();
-    Parser parser = new PosixParser();
-    CommandLine commandLine;
-    boolean verbose = false;
+    /**
+     * The name of the (sub)command.
+     */
+    private String name;
+
+    /**
+     * The description of the command.
+     */
+    private String description;
+
+    /**
+     * The options this command takes on the command line (Apache CLI).
+     */
+    private final Options options;
+
+    /**
+     * The parser for the options.
+     */
+    private final Parser parser = new PosixParser();
+
+    /**
+     * Verbose setting.
+     */
+    private boolean verbose = false;
 
     /**
      * Class constructor.
      * @param name The string that invokes this command.
      * @param description The description of this command.
+     * @param options The command's options (Apache CLI).
      */
-    AbstractCommand(String name, String description) {
+    AbstractCommand(final String name, final String description, final Options options) {
         this.name = name;
         this.description = description;
-        options.addOption("h", false, "Print help for this command");
+        this.options = options;
     }
 
     /**
      * Get the name of this command.
      * @return A String of the name of this command.
      */
-    String getName() {
+    final String getName() {
         return this.name;
     }
 
@@ -45,7 +64,7 @@
      * Get the description of this command.
      * @return A String of the description of this command.
      */
-    String getDescription() {
+    protected final String getDescription() {
         return this.description;
     }
 
@@ -53,16 +72,15 @@
      * Options for this command.
      * @return Options object for this command.
      */
-    Options getOptions() {
+    protected final Options getOptions() {
         return options;
     }
 
     /**
      * Print the usage of this sub-command.
-     * @param doExit Whether or not to exit after printing usage.
      */
-    void printUsage() {
-        HelpFormatter help = new HelpFormatter();
+    protected final void printUsage() {
+        final HelpFormatter help = new HelpFormatter();
         help.printHelp(getName(), getOptions());
     }
 
@@ -70,16 +88,25 @@
      * Set whether verbose output is enabled.
      * @param verbose True to enable verbose output.
      */
-    void setVerbose(boolean verbose) {
+    final void setVerbose(final boolean verbose) {
         this.verbose = verbose;
     }
 
     /**
-     * Execute the command with the arguments. This is the only method that
-     * sub-classes must implement.
+     * Get verbose flag.
+     * @return The verbose flag.
+     */
+    protected boolean getVerbose() {
+        return verbose;
+    }
+
+    /**
+     * Parse the sub-command's options.
      * @param arguments The sub-command's arguments.
+     * @return The parsed command line.
      */
-    void execute(String[] arguments) {
+    protected final CommandLine parse(final String[] arguments) {
+        CommandLine commandLine = null;
         try {
             commandLine = parser.parse(options, arguments);
         } catch (ParseException e) {
@@ -89,5 +116,12 @@
             this.printUsage();
             System.exit(0);
         }
+        return commandLine;
     }
+
+    /**
+     * The sub-command execution method that should be implemented by sub-classes.
+     * @param arguments The command's argument list.
+     */
+    abstract void execute(final String[] arguments);
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/AddCommand.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/cli/AddCommand.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/AddCommand.java	Thu Apr  2 18:14:47 2015
@@ -3,39 +3,61 @@
 import java.io.PrintStream;
 import java.util.Date;
 
+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.FieldValueMap;
 import org.hps.conditions.database.DatabaseConditionsManager;
 
 /**
- * This is a command for the conditions CLI that will add a conditions record,
- * making a conditions set with a particular collection ID available by 
- * run number via the {@link org.hps.conditions.database.DatabaseConditionsManager}.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * This is a command for the conditions CLI that will add a conditions record, making a conditions set with a particular
+ * collection ID available by run number via the {@link org.hps.conditions.database.DatabaseConditionsManager}.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public class AddCommand extends AbstractCommand {
-    
-    PrintStream ps = System.out;
-    
+
+    /**
+     * For printing out messages.
+     */
+    private final PrintStream ps = System.out;
+
+    /**
+     * Define command line options.
+     */
+    private static final Options OPTIONS = new Options();
+    static {
+        OPTIONS.addOption(new Option("h", false, "Show help for add command"));
+        OPTIONS.addOption("r", true, "The starting run number (required)");
+        OPTIONS.getOption("r").setRequired(true);
+        OPTIONS.addOption("e", true, "The ending run number (default is starting run number)");
+        OPTIONS.addOption("t", true, "The table name (required)");
+        OPTIONS.getOption("t").setRequired(true);
+        OPTIONS.addOption("c", true, "The collection ID (required)");
+        OPTIONS.getOption("c").setRequired(true);
+        OPTIONS.addOption("T", true, "A tag value (optional)");
+        OPTIONS.addOption("u", true, "Your user name (optional)");
+        OPTIONS.addOption("m", true, "The notes about this conditions set (optional)");
+    }
+
+    /**
+     * Class constructor.
+     */
     AddCommand() {
-        super("add", "Add a conditions record to associate a collection to a run range");
-        options.addOption("r", true, "The starting run number (required)");
-        options.getOption("r").setRequired(true);
-        options.addOption("e", true, "The ending run number (default is starting run number)");
-        options.addOption("t", true, "The table name (required)");
-        options.getOption("t").setRequired(true);
-        options.addOption("c", true, "The collection ID (required)");
-        options.getOption("c").setRequired(true);
-        options.addOption("T", true, "A tag value (optional)");
-        options.addOption("u", true, "Your user name (optional)");
-        options.addOption("m", true, "The notes about this conditions set (optional)");
+        super("add", "Add a conditions record to associate a collection to a run range", OPTIONS);
     }
-       
-    void execute(String[] arguments) {
-        super.execute(arguments);
-        
+
+    /**
+     * Execute the command with the given arguments.
+     *
+     * @param arguments The command line arguments.
+     */
+    final void execute(final String[] arguments) {
+
+        final CommandLine commandLine = parse(arguments);
+
         // This command has 3 required options.
         if (commandLine.getOptions().length == 0) {
             this.printUsage();
@@ -43,13 +65,13 @@
         }
 
         // Run start (required).
-        int runStart;        
+        final int runStart;
         if (commandLine.hasOption("r")) {
             runStart = Integer.parseInt(commandLine.getOptionValue("r"));
         } else {
             throw new RuntimeException("Missing required -r option with run number.");
         }
-        
+
         // Run end.
         int runEnd = runStart;
         if (commandLine.hasOption("e")) {
@@ -62,8 +84,8 @@
             tableName = commandLine.getOptionValue("t");
         } else {
             throw new RuntimeException("Missing required -t argument with table name");
-        }        
-        String name = tableName;
+        }
+        final String name = tableName;
 
         // Collection ID (required).
         int collectionId;
@@ -72,38 +94,31 @@
         } else {
             throw new RuntimeException("Missing required -c argument with collection ID");
         }
-        
+
         // User name.
         String createdBy = System.getProperty("user.name");
         if (commandLine.hasOption("u")) {
             createdBy = commandLine.getOptionValue("u");
         }
-        
+
         // Tag to assign (optional).
         String tag = null;
         if (commandLine.hasOption("T")) {
             tag = commandLine.getOptionValue("T");
         }
-        
+
         // Notes (optional).
         String notes = null;
         if (commandLine.hasOption("m")) {
             notes = commandLine.getOptionValue("m");
         }
-        
+
         // Create the conditions record to insert.
-        ConditionsRecord conditionsRecord = createConditionsRecord(
-                runStart, 
-                runEnd, 
-                tableName, 
-                name, 
-                collectionId, 
-                createdBy, 
-                tag, 
-                notes);       
+        final ConditionsRecord conditionsRecord = createConditionsRecord(runStart, runEnd, tableName, name,
+                collectionId, createdBy, tag, notes);
         try {
             boolean createdConnection = false;
-            DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
+            final DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
             if (!DatabaseConditionsManager.getInstance().isConnected()) {
                 createdConnection = manager.openConnection();
             }
@@ -117,19 +132,23 @@
     }
 
     /**
-     * @param runStart
-     * @param runEnd
-     * @param tableName
-     * @param name
-     * @param collectionId
-     * @param createdBy
-     * @param tag
-     * @param notes
-     * @return
+     * Create a conditions record.
+     *
+     * @param runStart The run start.
+     * @param runEnd The run end.
+     * @param tableName The table name.
+     * @param name The key name.
+     * @param collectionId The collection ID.
+     * @param createdBy The user name.
+     * @param tag The conditions tag.
+     * @param notes The text notes.
+     * @return The new conditions record.
      */
-    private ConditionsRecord createConditionsRecord(int runStart, int runEnd, String tableName, String name, int collectionId, String createdBy, String tag, String notes) {
-        ConditionsRecord conditionsRecord = new ConditionsRecord();
-        FieldValueMap fieldValues = new FieldValueMap();
+    // FIXME: Too many method parameters (max 7 is recommended).
+    private ConditionsRecord createConditionsRecord(final int runStart, final int runEnd, final String tableName,
+            final String name, final int collectionId, final String createdBy, final String tag, final String notes) {
+        final ConditionsRecord conditionsRecord = new ConditionsRecord();
+        final FieldValueMap fieldValues = new FieldValueMap();
         fieldValues.put("run_start", runStart);
         fieldValues.put("run_end", runEnd);
         fieldValues.put("table_name", tableName);
@@ -146,4 +165,4 @@
         fieldValues.put("created", new Date());
         return conditionsRecord;
     }
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java	Thu Apr  2 18:14:47 2015
@@ -18,41 +18,74 @@
 import org.lcsim.util.log.LogUtil;
 
 /**
+ * This class is a command-line tool for performing commands on the conditions database using sub-commands for
+ * operations such as 'add' and 'print'.
  * <p>
- * This class is a command-line tool for performing commands on the conditions
- * database. It has sub-commands much like the cvs or svn clients. 
- * <p>
- * Command line options allow a custom connection properties file or XML
- * configuration to be supplied by the user which will override the default.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * Command line options can be used to supply a custom connection properties file or XML which will override the
+ * default.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
+// FIXME: Print outs should use conditions manager's log settings and not boolean verbose flag.
 public class CommandLineTool {
-    
-    static Logger logger = LogUtil.create(CommandLineTool.class.getSimpleName(), new DefaultLogFormatter(), Level.WARNING);
-
-    Options options = new Options();
-    Map<String, AbstractCommand> commands = new HashMap<String, AbstractCommand>();
-    PosixParser parser = new PosixParser();
-    DatabaseConditionsManager conditionsManager;
-    boolean verbose = false;
-
-    public static void main(String[] arguments) {
+
+    /**
+     * Setup logging.
+     */
+    private static final Logger LOGGER = 
+            LogUtil.create(CommandLineTool.class.getSimpleName(), new DefaultLogFormatter(), Level.WARNING);
+
+    /**
+     * The top level options (does not include sub-command options).
+     */
+    private Options options = new Options();
+
+    /**
+     * The map of named command handlers.
+     */
+    private Map<String, AbstractCommand> commands = new HashMap<String, AbstractCommand>();
+
+    /**
+     * The options parser.
+     */
+    private PosixParser parser = new PosixParser();
+
+    /**
+     * The database conditions system manager.
+     */
+    private DatabaseConditionsManager conditionsManager;
+
+    /**
+     * The verbose setting.
+     */
+    private boolean verbose = false;
+
+    /**
+     * The main method for the class.
+     *
+     * @param arguments The command line arguments.
+     */
+    public static void main(final String[] arguments) {
         CommandLineTool.create().run(arguments);
     }
 
-    void run(String[] arguments) {
+    /**
+     * Run the command line tool, parsing the command line and sending arguments to sub-command handlers.
+     *
+     * @param arguments The command line arguments passed directly from {@link #main(String[])}.
+     */
+    private void run(final String[] arguments) {
         try {
             if (arguments.length == 0) {
                 printUsage();
                 exit(0);
             }
-            
+
             CommandLine commandLine = null;
             try {
                 commandLine = parser.parse(options, arguments, true);
             } catch (ParseException e) {
-                logger.log(Level.SEVERE, "error parsing the options", e);
+                LOGGER.log(Level.SEVERE, "error parsing the options", e);
                 printUsage();
                 exit(1);
             }
@@ -64,24 +97,24 @@
 
             // Set verbosity.
             if (commandLine.hasOption("v")) {
-                logger.setLevel(Level.ALL);
-                logger.getHandlers()[0].setLevel(Level.ALL);
+                LOGGER.setLevel(Level.ALL);
+                LOGGER.getHandlers()[0].setLevel(Level.ALL);
                 verbose = true;
-                logger.config("verbose mode enabled");
+                LOGGER.config("verbose mode enabled");
             }
 
             // Setup conditions manager from command line options.
             setupConditionsManager(commandLine);
 
             // Get the sub-command to use.
-            String commandName = commandLine.getArgs()[0];
-            AbstractCommand command = commands.get(commandName);
+            final String commandName = commandLine.getArgs()[0];
+            final AbstractCommand command = commands.get(commandName);
             if (command == null) {
                 throw new IllegalArgumentException("Unknown command " + commandName);
             }
 
             // Copy remaining arguments for sub-command.
-            String[] commandArguments = new String[commandLine.getArgs().length - 1];
+            final String[] commandArguments = new String[commandLine.getArgs().length - 1];
             System.arraycopy(commandLine.getArgs(), 1, commandArguments, 0, commandArguments.length);
 
             // Excecute the sub-command.
@@ -95,89 +128,110 @@
         }
     }
 
-    void setupConditionsManager(CommandLine commandLine) {
-
-        logger.info("setting up conditions manager");
-        
+    /**
+     * Setup the conditions system based on command line arguments.
+     *
+     * @param commandLine The parsed command line arguments.
+     */
+    private void setupConditionsManager(final CommandLine commandLine) {
+
+        LOGGER.info("setting up conditions manager");
+
         // Create new manager.
         conditionsManager = DatabaseConditionsManager.getInstance();
 
         // Set log level.
-        conditionsManager.setLogLevel(logger.getLevel());
+        conditionsManager.setLogLevel(LOGGER.getLevel());
 
         // Connection properties.
         if (commandLine.hasOption("p")) {
-            File connectionPropertiesFile = new File(commandLine.getOptionValue("p"));
+            final File connectionPropertiesFile = new File(commandLine.getOptionValue("p"));
             conditionsManager.setConnectionProperties(connectionPropertiesFile);
-            logger.config("connection properties -p " + connectionPropertiesFile);
-        } 
-        
+            LOGGER.config("connection properties -p " + connectionPropertiesFile);
+        }
+
         // XML config.
         if (commandLine.hasOption("x")) {
-            File xmlConfigFile = new File(commandLine.getOptionValue("x"));
+            final File xmlConfigFile = new File(commandLine.getOptionValue("x"));
             conditionsManager.setXmlConfig(xmlConfigFile);
-            logger.config("XML config -x " + xmlConfigFile);
-        }
-        
+            LOGGER.config("XML config -x " + xmlConfigFile);
+        }
+
         // If there is a run number or detector number then attempt to initialize the conditions system.
         if (commandLine.hasOption("r") || commandLine.hasOption("d")) {
-            
-            logger.config("detector name or run number supplied so manager will be initialized");
+
+            LOGGER.config("detector name or run number supplied so manager will be initialized");
 
             // Set detector name.
             String detectorName = null;
             if (commandLine.hasOption("d")) {
                 detectorName = commandLine.getOptionValue("d");
-                logger.config("detector -d " + detectorName);
+                LOGGER.config("detector -d " + detectorName);
             } else {
                 detectorName = "HPS-ECalCommissioning-v2";
-                logger.config("default detector " + detectorName + " is being used");
+                LOGGER.config("default detector " + detectorName + " is being used");
             }
 
             // Get run number.
             Integer run = null;
             if (commandLine.hasOption("r")) {
                 run = Integer.parseInt(commandLine.getOptionValue("r"));
-                logger.config("run -r " + run);
+                LOGGER.config("run -r " + run);
             } else {
                 run = 0;
-                logger.config("default run number " + run + " is being used");
+                LOGGER.config("default run number " + run + " is being used");
             }
 
             // Setup the conditions manager with user detector name and run number.
             try {
-                logger.config("initializing conditions manager with detector " + detectorName + " and run " + run);
+                LOGGER.config("initializing conditions manager with detector " + detectorName + " and run " + run);
                 DatabaseConditionsManager.getInstance().setDetector(detectorName, run);
-                logger.config("conditions manager initialized successfully");
-                logger.getHandlers()[0].flush();
+                LOGGER.config("conditions manager initialized successfully");
+                LOGGER.getHandlers()[0].flush();
             } catch (ConditionsNotFoundException e) {
                 throw new RuntimeException(e);
             }
         }
     }
 
-    void printUsage() {
-        HelpFormatter help = new HelpFormatter();
-        StringBuffer s = new StringBuffer();
+    /**
+     * Print the usage statement for this tool to the console.
+     */
+    final void printUsage() {
+        final HelpFormatter help = new HelpFormatter();
+        final StringBuffer s = new StringBuffer();
         for (String command : commands.keySet()) {
             s.append(command + '\n');
         }
         help.printHelp("CommandLineTool", "Commands:\n" + s.toString(), options, "");
     }
 
-    void exit(int status) {
+    /**
+     * Exit with the given status.
+     *
+     * @param status The exit status.
+     */
+    private void exit(final int status) {
         System.exit(status);
     }
 
-    void registerCommand(AbstractCommand command) {
+    /**
+     * Register a sub-command handler.
+     * @param command The sub-command handler.
+     */
+    private void registerCommand(final AbstractCommand command) {
         if (commands.containsKey(command.getName())) {
             throw new IllegalArgumentException("There is already a command called " + command.getName());
         }
         commands.put(command.getName(), command);
     }
 
-    static CommandLineTool create() {
-        CommandLineTool cli = new CommandLineTool();
+    /**
+     * Create a basic instance of this class.
+     * @return The instance of this class.
+     */
+    private static CommandLineTool create() {
+        final CommandLineTool cli = new CommandLineTool();
         cli.options.addOption(new Option("h", false, "Print help and exit"));
         cli.options.addOption(new Option("d", true, "Set the detector name"));
         cli.options.addOption(new Option("r", true, "Set the run number"));
@@ -189,4 +243,4 @@
         cli.registerCommand(new AddCommand());
         return cli;
     }
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/LoadCommand.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/cli/LoadCommand.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/LoadCommand.java	Thu Apr  2 18:14:47 2015
@@ -8,42 +8,57 @@
 import java.util.List;
 import java.util.StringTokenizer;
 
+import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.QueryBuilder;
 
 /**
+ * This is a sub-command to add conditions data using an input text file. The file should be ASCII text that is tab or
+ * space delimited and includes headers with the names of the database columns. (These must match exactly!) The user
+ * must supply a table name as the target for the SQL insert. An optional collection ID can be supplied, which may not
+ * exist already in the table. Otherwise, the command will fail. By default, the next collection ID will be found by the
+ * conditions manager.
  * <p>
- * This is a sub-command to add conditions data using an input text file. The
- * file should be ASCII text that is tab or space delimited and includes headers
- * with the names of the database columns. (These must match exactly!) The user
- * must supply a table name as the target for the SQL insert. An optional
- * collection ID can be supplied, which may not exist already in the table.
- * Otherwise, the command will fail. By default, the next collection ID will be
- * found by the conditions manager.
- * <p>
- * 
  * <pre>
- * java -cp hps-distribution-bin.jar org.hps.conditions.cli.CommandLineTool -p conditions_dev_local.properties \
- *     load -t scratch_svt_gains -f ./scratch_svt_gains.txt -c 1
+ * java -cp hps-distribution-bin.jar org.hps.conditions.cli.CommandLineTool \
+ *     -p conditions_dev_local.properties load -t scratch_svt_gains -f ./scratch_svt_gains.txt -c 1
  * </pre>
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 class LoadCommand extends AbstractCommand {
 
-    LoadCommand() {
-        super("load", "Load a set of conditions into the database from a text file");
-        this.options.addOption(new Option("t", true, "Set the name of the target table in the database"));
-        this.options.addOption(new Option("c", true, "Set the collection ID of this conditions set"));
-        this.options.addOption(new Option("f", true, "Set the input data file"));
+    /**
+     * Define command options.
+     */
+    private static final Options OPTIONS = new Options();
+    static {
+        OPTIONS.addOption(new Option("h", false, "Show help for load command"));
+        OPTIONS.addOption(new Option("t", true, "Set the name of the target table in the database"));
+        OPTIONS.addOption(new Option("c", true, "Set the collection ID of this conditions set"));
+        OPTIONS.addOption(new Option("f", true, "Set the input data file"));
     }
 
+    /**
+     * Class constructor.
+     */
+    LoadCommand() {
+        super("load", "Load a set of conditions into the database from a text file", OPTIONS);
+    }
+
+    /**
+     * Execute the 'load' command with the given arguments.
+     *
+     * @param arguments The command arguments.
+     */
     @Override
-    public void execute(String[] arguments) {
-        super.execute(arguments);
-               
-        String fileName = commandLine.getOptionValue("f");
+    public void execute(final String[] arguments) {
+
+        final CommandLine commandLine = parse(arguments);
+
+        final String fileName = commandLine.getOptionValue("f");
         if (fileName == null) {
             throw new IllegalArgumentException("Missing file argument.");
         }
@@ -51,47 +66,58 @@
             throw new IllegalArgumentException("Input file does not exist: " + fileName);
         }
 
-        String tableName = commandLine.getOptionValue("t");
+        final String tableName = commandLine.getOptionValue("t");
         if (tableName == null) {
             throw new IllegalArgumentException("Missing table name.");
         }
 
-        DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+        final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
 
         boolean openedConnection = false;
         if (!conditionsManager.isConnected()) {
             openedConnection = conditionsManager.openConnection();
         }
-        
+
         int collectionID;
         if (commandLine.getOptionValue("c") != null) {
             collectionID = Integer.parseInt(commandLine.getOptionValue("c"));
             if (conditionsManager.collectionExists(tableName, collectionID)) {
-                throw new IllegalArgumentException("The user supplied collection ID " + collectionID + " already exists in this table.");
+                throw new IllegalArgumentException("The user supplied collection ID " + collectionID
+                        + " already exists in this table.");
             }
         } else {
             collectionID = conditionsManager.getNextCollectionID(tableName);
         }
 
-        List<String> columnNames = new ArrayList<String>();
-        List<List<String>> rows = new ArrayList<List<String>>();
+        final List<String> columnNames = new ArrayList<String>();
+        final List<List<String>> rows = new ArrayList<List<String>>();
         parseFile(fileName, columnNames, rows);
 
-        String insertSql = QueryBuilder.buildInsert(tableName, collectionID, columnNames, rows);
-        if (verbose)
+        final String insertSql = QueryBuilder.buildInsert(tableName, collectionID, columnNames, rows);
+        if (getVerbose()) {
             System.out.println(insertSql);
-        // FIXME: This call should go through an object API like ConditionsObjectCollection.insert rather than the manager directly.
-        List<Integer> IDs = conditionsManager.updateQuery(insertSql);
-        System.out.println("Inserted " + IDs.size() + " new rows into table " + tableName + " with collection_id " + collectionID);
+        }
+        // FIXME: This call should go through an object API like ConditionsObjectCollection.insert rather than the
+        // manager directly.
+        final List<Integer> ids = conditionsManager.updateQuery(insertSql);
+        System.out.println("Inserted " + ids.size() + " new rows into table " + tableName + " with collection_id "
+                + collectionID);
         conditionsManager.closeConnection(openedConnection);
     }
 
-    void parseFile(String fileName, List<String> columnNames, List<List<String>> rows) {
-        File inputFile = new File(fileName);
+    /**
+     * Parse an input text file and add column names and row data to the input lists.
+     * @param fileName The name of the text file.
+     * @param columnNames The list of columns (modified by this method).
+     * @param rows The list of rows (modified by this method).
+     */
+    private final void parseFile(final String fileName, final List<String> columnNames, 
+            final List<List<String>> rows) {
+        final File inputFile = new File(fileName);
         BufferedReader reader = null;
         try {
             reader = new BufferedReader(new FileReader(inputFile));
-            String headerLine = reader.readLine();
+            final String headerLine = reader.readLine();
             if (headerLine == null) {
                 throw new IllegalArgumentException("The file is empty.");
             }
@@ -102,7 +128,7 @@
             String line = null;
             while ((line = reader.readLine()) != null) {
                 tokenizer = new StringTokenizer(line, " \t");
-                List<String> row = new ArrayList<String>();
+                final List<String> row = new ArrayList<String>();
                 while (tokenizer.hasMoreTokens()) {
                     row.add(tokenizer.nextToken().trim());
                 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/PrintCommand.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/cli/PrintCommand.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/PrintCommand.java	Thu Apr  2 18:14:47 2015
@@ -9,7 +9,9 @@
 import java.util.List;
 import java.util.Set;
 
+import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
 import org.hps.conditions.api.ConditionsObject;
 import org.hps.conditions.api.ConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
@@ -17,69 +19,91 @@
 import org.hps.conditions.database.TableMetaData;
 
 /**
- * This sub-command of the conditions CLI prints conditions conditions table data by run number
- * to the console or optionally writes it to an output file.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * This sub-command of the conditions CLI prints conditions conditions table data by run number to the console or
+ * optionally writes it to an output file.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 class PrintCommand extends AbstractCommand {
+
+    /**
+     * Print stream for output.
+     */
+    private PrintStream ps = System.out;
+
+    /**
+     * Flag to print row IDs.
+     */
+    private boolean printIDs = false;
+
+    /**
+     * Flag to print out column headers.
+     */
+    private boolean printHeaders = true;
+
+    /**
+     * The field delimiter for print output.
+     */
+    private char fieldDelimiter = ' ';
+
+    /**
+     * Output file if printing to a file.
+     */
+    private File outputFile;
     
-    // By default print to the console.
-    PrintStream ps = System.out;
-    
-    // Print IDs along with field values. 
-    boolean printIDs = false;
-    
-    // Print conditions record and table info (default is yes).
-    boolean printHeaders = true;
-
-    // Field delimited for print out.
-    char fieldDelimiter = ' ';
-    
-    // Output file.
-    File outputFile;
-    
-    DatabaseConditionsManager conditionsManager;
-    
+    /**
+     * Defines command options.
+     */
+    static Options options = new Options();
+    static {
+        options.addOption(new Option("h", false, "Show help for print command"));
+        options.addOption(new Option("t", true, "Set the table name"));
+        options.addOption(new Option("i", false, "Print the ID for the records (off by default)"));
+        options.addOption(new Option("f", true, "Write print output to a file (must be used with -t option)"));
+        options.addOption(new Option("H", false, "Suppress printing of conditions record and table info"));
+        options.addOption(new Option("d", false, "Use tabs for field delimiter instead of spaces"));
+        options.addOption(new Option("T", true, "Specify a conditions tag to use for filtering records"));
+    }
+
+    /**
+     * Class constructor.
+     */
     PrintCommand() {
-        super("print", "Print the table data for a conditions set");
-        this.options.addOption(new Option("t", true, "Set the table name"));
-        this.options.addOption(new Option("i", false, "Print the ID for the records (off by default)"));
-        this.options.addOption(new Option("f", true, "Write print output to a file (must be used with -t option)"));
-        this.options.addOption(new Option("H", false, "Suppress printing of conditions record and table info"));
-        this.options.addOption(new Option("d", false, "Use tabs for field delimiter instead of spaces"));
-        this.options.addOption(new Option("T", true, "Specify a conditions tag to use for filtering records"));
-    }
-    
+        super("print", "Print the table data for a conditions set", options);
+    }
+
     /**
      * Print out the conditions sets selected by the user's command line arguments.
-     */
-    void execute(String[] arguments) {
-        super.execute(arguments);
-        
-        conditionsManager = DatabaseConditionsManager.getInstance();
-        
+     *
+     * @param arguments The command line arguments.
+     */
+    final void execute(final String[] arguments) {
+
+        final CommandLine commandLine = parse(arguments);
+
+        final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+
         if (!conditionsManager.isInitialized()) {
             throw new RuntimeException("conditions system is not initialized");
         }
-        
+
         // User specified tag of conditions records.
-        if (this.commandLine.hasOption("T")) {            
+        if (commandLine.hasOption("T")) {
             conditionsManager.setTag(commandLine.getOptionValue("T"));
         }
-               
+
         // Print conditions sets matching a specific conditions key.
         String userConditionsKey = null;
-        if (this.commandLine.hasOption("t")) {
-            userConditionsKey = this.commandLine.getOptionValue("t");
-        }                
-        
+        if (commandLine.hasOption("t")) {
+            userConditionsKey = commandLine.getOptionValue("t");
+        }
+
         // Setup an output file for the print out if requested.
-        if (this.commandLine.hasOption("f")) {
-            if (!this.commandLine.hasOption("t")) {
+        if (commandLine.hasOption("f")) {
+            if (!commandLine.hasOption("t")) {
                 throw new IllegalArgumentException("An output file may only be specified when using the -t option.");
             }
-            String path = commandLine.getOptionValue("f");
+            final String path = commandLine.getOptionValue("f");
             if (new File(path).exists()) {
                 throw new IllegalArgumentException("File already exists: " + path);
             }
@@ -89,54 +113,62 @@
             } catch (FileNotFoundException e) {
                 throw new IllegalArgumentException(e);
             }
-        }              
-        
+        }
+
         // Print IDs in the output.
-        if (this.commandLine.hasOption("i")) {
+        if (commandLine.hasOption("i")) {
             printIDs = true;
         }
 
-        // Print header info.  Option turns this off.
-        if (this.commandLine.hasOption("h")) {
+        // Print header info. Option turns this off.
+        if (commandLine.hasOption("h")) {
             printHeaders = false;
         }
 
         // Use tabs instead of spaces for field delimiter.
-        if (this.commandLine.hasOption("d")) {
+        if (commandLine.hasOption("d")) {
             fieldDelimiter = '\t';
         }
-                         
-        // List of conditions records to print. 
-        ConditionsRecordCollection conditionsRecords = new ConditionsRecordCollection();
-        
+
+        // List of conditions records to print.
+        final ConditionsRecordCollection conditionsRecords = new ConditionsRecordCollection();
+
         // Did the user specify a table to use?
         if (userConditionsKey == null) {
             System.out.println("printing all conditions");
             // Use all table names if there was not one specified.
             conditionsRecords.addAll(conditionsManager.getConditionsRecords());
-        } else {            
+        } else {
             System.out.println("printing conditions with name: " + userConditionsKey);
             // Get records only for the user specified table name.
             conditionsRecords.addAll(conditionsManager.findConditionsRecords(userConditionsKey));
         }
-        
+
         // Sort the records by key (table name).
         conditionsRecords.sortByKey();
-        
+
         // Get a unique list of keys from the returned conditions records.
-        Set<String> conditionsKeys = conditionsRecords.getConditionsKeys();
-            
+        final Set<String> conditionsKeys = conditionsRecords.getConditionsKeys();
+
         // Print the records and the data.
-        printConditionsRecords(conditionsKeys);   
-        ps.flush();           
+        printConditionsRecords(conditionsKeys);
+        ps.flush();
         ps.close();
-        
+
         if (outputFile != null) {
             System.out.println("wrote collection data to file " + outputFile.getPath());
         }
     }
 
-    private void printConditionsRecords(Set<String> conditionsKeys) {
+    /**
+     * Print out the conditions records either to the console or a file (if that option is enabled).
+     *
+     * @param conditionsKeys The list of conditions keys (usually same as table names).
+     */
+    private void printConditionsRecords(final Set<String> conditionsKeys) {
+
+        final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+
         System.out.print("printing conditions sets: ");
         for (String conditionsKey : conditionsKeys) {
             System.out.print(conditionsKey + " ");
@@ -144,31 +176,35 @@
         System.out.println();
         // Loop over the conditions keys from the conditions records.
         for (String conditionsKey : conditionsKeys) {
-                                   
+
             // The list of collections to print.
-            List<ConditionsObjectCollection<?>> collectionList = new ArrayList<ConditionsObjectCollection<?>>();
-        
+            final List<ConditionsObjectCollection<?>> collectionList = new ArrayList<ConditionsObjectCollection<?>>();
+
             // Get the table meta data for the conditions key.
-            TableMetaData tableMetaData = conditionsManager.findTableMetaData(conditionsKey);
-            
+            final TableMetaData tableMetaData = conditionsManager.findTableMetaData(conditionsKey);
+
             // This shouldn't ever happen but check anyways.
-            if (tableMetaData == null) {            
-                throw new RuntimeException("The table meta data for " + conditionsKey + " does not exist.  The key might be invalid.");
-            }
-                               
+            if (tableMetaData == null) {
+                throw new RuntimeException("The table meta data for " + conditionsKey
+                        + " does not exist.  The key might be invalid.");
+            }
+
             // Use only the single collection which would be seen by a user job for this run number and key.
-            ConditionsObjectCollection<?> collection = conditionsManager.getCachedConditions(
-                    tableMetaData.getCollectionClass(), 
-                    tableMetaData.getTableName()).getCachedData();
-             
+            final ConditionsObjectCollection<?> collection = conditionsManager.getCachedConditions(
+                    tableMetaData.getCollectionClass(), tableMetaData.getTableName()).getCachedData();
+
             collectionList.add(collection);
-        
+
             // Print out all the collection data to console or file.
             printCollections(collectionList);
         }
     }
 
-    private void printCollections(List<ConditionsObjectCollection<?>> collectionList) {
+    /**
+     * Print the list of collections.
+     * @param collectionList The list of collections.
+     */
+    private void printCollections(final List<ConditionsObjectCollection<?>> collectionList) {
         // Loop over all the collections and print them.
         for (ConditionsObjectCollection<?> collection : collectionList) {
             if (printHeaders) {
@@ -177,15 +213,19 @@
             printColumnNames(collection.getTableMetaData());
             printCollection(collection);
             System.out.println();
-        }        
+        }
         ps.flush();
     }
 
-    private void printCollection(ConditionsObjectCollection<?> collection) {
-        StringBuffer buffer = new StringBuffer();
+    /**
+     * Print a single collection.
+     * @param collection The collection.
+     */
+    private void printCollection(final ConditionsObjectCollection<?> collection) {
+        final StringBuffer buffer = new StringBuffer();
         for (Object object : collection) {
             for (String columnName : collection.getTableMetaData().getFieldNames()) {
-                buffer.append(((ConditionsObject)object).getFieldValue(columnName));
+                buffer.append(((ConditionsObject) object).getFieldValue(columnName));
                 buffer.append(fieldDelimiter);
             }
             buffer.setLength(buffer.length() - 1);
@@ -196,7 +236,11 @@
         ps.flush();
     }
 
-    private void printCollectionHeader(ConditionsObjectCollection<?> collection) {        
+    /**
+     * Print the header for a collection.
+     * @param collection The collection.
+     */
+    private void printCollectionHeader(final ConditionsObjectCollection<?> collection) {
         System.out.println("--------------------------------------");
         System.out.print(collection.getConditionsRecord());
         System.out.println("--------------------------------------");
@@ -204,11 +248,15 @@
         System.out.flush();
     }
 
-    private void printColumnNames(TableMetaData tableMetaData) {
+    /**
+     * Print the column names.
+     * @param tableMetaData The table meta data.
+     */
+    private void printColumnNames(final TableMetaData tableMetaData) {
         if (printIDs) {
             ps.print("id");
             ps.print(fieldDelimiter);
-        }                    
+        }
         for (String columnName : tableMetaData.getFieldNames()) {
             ps.print(columnName);
             ps.print(fieldDelimiter);

Added: java/trunk/conditions/src/main/java/org/hps/conditions/cli/package-info.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/cli/package-info.java	(added)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/package-info.java	Thu Apr  2 18:14:47 2015
@@ -0,0 +1,6 @@
+/**
+ * Command line interface to the conditions system.
+ *
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+package org.hps.conditions.cli;

Copied: java/trunk/conditions/src/main/java/org/hps/conditions/database/AbstractConditionsObjectConverter.java (from r2659, java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsObjectConverter.java)
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsObjectConverter.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/AbstractConditionsObjectConverter.java	Thu Apr  2 18:14:47 2015
@@ -4,7 +4,7 @@
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
 import org.hps.conditions.api.ConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObjectException;
@@ -16,56 +16,66 @@
 
 /**
  * <p>
- * Implementation of default conversion from database tables to a
- * {@link ConditionsObject} class.
+ * Implementation of default conversion from database tables to a {@link ConditionsObject} class.
  * <p>
  * This class actually returns collections and not individual objects.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
- * 
- * @param <T> The type of the returned data which should be a class extending {@link AbstractConditionsObjectCollection}.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
+ * @param <T> The type of the returned data which should be a class extending {@link BaseConditionsObjectCollection}.
  */
-public abstract class ConditionsObjectConverter<T> implements ConditionsConverter<T> {
-
-    MultipleCollectionsAction multipleCollections;
-    
-    public ConditionsObjectConverter() {
-    }
-    
-    /**
-     * Set the action that the converter will use to disambiguate when multiple 
-     * conditions sets are found.
+public abstract class AbstractConditionsObjectConverter<T> implements ConditionsConverter<T> {
+
+    /**
+     * The action to take if multiple overlapping conditions sets are found.
+     * The default is using the most recently updated one.
+     */
+    private MultipleCollectionsAction multipleCollections = MultipleCollectionsAction.LAST_UPDATED;
+
+    /**
+     * Class constructor.
+     */
+    public AbstractConditionsObjectConverter() {
+    }
+
+    /**
+     * Set the action that the converter will use to disambiguate when multiple conditions sets are found.
+     * 
      * @param multipleCollections The multiple collections action.
      */
-    void setMultipleCollectionsAction(MultipleCollectionsAction multipleCollections) {
+    final void setMultipleCollectionsAction(MultipleCollectionsAction multipleCollections) {
         this.multipleCollections = multipleCollections;
     }
-    
-    /** 
+
+    /**
      * Get the multiple collections action.
+     * 
      * @return The multiple collections action.
      */
-    public MultipleCollectionsAction getMultipleCollectionsAction() {
+    public final MultipleCollectionsAction getMultipleCollectionsAction() {
         return this.multipleCollections;
     }
-    
+
     /**
      * Get the specific type converted by this class.
+     * 
      * @return The class that this converter handles.
      */
     public abstract Class<T> getType();
 
     /**
-     * Get the conditions data based on the name, e.g. "ecal_channels".
-     * The table information is found using the type handled by the Converter.
+     * Get the conditions data based on the name, e.g. "ecal_channels". The table information is found using the type
+     * handled by the Converter.
+     * 
+     * @param conditionsManager The current conditions manager.
+     * @param name The name of the conditions set (maps to table name).
      * @return The conditions data.
      */
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    public T getData(ConditionsManager conditionsManager, String name) {
-                
+    public T getData(final ConditionsManager conditionsManager, final String name) {
+
         // Get the DatabaseConditionsManager which is required for using this converter.
-        DatabaseConditionsManager databaseConditionsManager = (DatabaseConditionsManager) conditionsManager;
-        
+        final DatabaseConditionsManager databaseConditionsManager = (DatabaseConditionsManager) conditionsManager;
+
         // Setup connection if necessary.
         boolean reopenedConnection = false;
         if (!databaseConditionsManager.isConnected()) {
@@ -73,21 +83,21 @@
             databaseConditionsManager.openConnection();
             reopenedConnection = true;
         }
-        
+
         // Get the TableMetaData from the table name.
-        TableMetaData tableMetaData = databaseConditionsManager.findTableMetaData(name);    
-        
+        final TableMetaData tableMetaData = databaseConditionsManager.findTableMetaData(name);
+
         // Throw an exception if the table name does not map to a known type.
         if (tableMetaData == null) {
             throw new RuntimeException(new ConditionsObjectException("No table information found for name: " + name));
         }
-        
+
         // Get the ConditionsRecordCollection with the run number assignments.
-        ConditionsRecordCollection conditionsRecords = databaseConditionsManager.findConditionsRecords(name);
-                        
+        final ConditionsRecordCollection conditionsRecords = databaseConditionsManager.findConditionsRecords(name);
+
         // The record with the collection information.
         ConditionsRecord conditionsRecord = null;
-        
+
         // Now we need to determine which ConditionsRecord object to use.
         if (conditionsRecords.size() == 0) {
             // No conditions records were found for the key.
@@ -96,22 +106,22 @@
         } else if (conditionsRecords.size() == 1) {
             // Use the single conditions set that was found.
             conditionsRecord = conditionsRecords.get(0);
-        } else if (conditionsRecords.size() > 1) {           
+        } else if (conditionsRecords.size() > 1) {
             if (multipleCollections.equals(MultipleCollectionsAction.LAST_UPDATED)) {
                 // Use the conditions set with the latest updated date.
                 conditionsRecord = conditionsRecords.sortedByUpdated().get(conditionsRecords.size() - 1);
-            } else if (multipleCollections.equals(MultipleCollectionsAction.LAST_CREATED)){
+            } else if (multipleCollections.equals(MultipleCollectionsAction.LAST_CREATED)) {
                 // Use the conditions set with the latest created date.
                 conditionsRecord = conditionsRecords.sortedByCreated().get(conditionsRecords.size() - 1);
             } else if (multipleCollections.equals(MultipleCollectionsAction.LATEST_RUN_START)) {
                 // Use the conditions set with the greatest run start value.
                 conditionsRecord = conditionsRecords.sortedByRunStart().get(conditionsRecords.size() - 1);
-            } else if (multipleCollections.equals(MultipleCollectionsAction.ERROR)) {            
+            } else if (multipleCollections.equals(MultipleCollectionsAction.ERROR)) {
                 // The converter has been configured to throw an error.
                 throw new RuntimeException("Multiple ConditionsRecord object found for conditions key " + name);
-            }           
-        } 
-                
+            }
+        }
+
         // Create a collection of objects to return.
         ConditionsObjectCollection collection = null;
         try {
@@ -121,24 +131,24 @@
         }
 
         DatabaseConditionsManager.getLogger().info("loading conditions set..." + '\n' + conditionsRecord);
-                               
+
         // Get the table name.
-        String tableName = conditionsRecord.getTableName();
+        final String tableName = conditionsRecord.getTableName();
 
         // Get the collection ID.
-        int collectionId = conditionsRecord.getCollectionId();
+        final int collectionId = conditionsRecord.getCollectionId();
 
         // Build a select query.
-        String query = QueryBuilder.buildSelect(tableName, collectionId, tableMetaData.getFieldNames(), "id ASC");
+        final String query = QueryBuilder.buildSelect(tableName, collectionId, tableMetaData.getFieldNames(), "id ASC");
 
         // Query the database to get the collection's rows.
-        ResultSet resultSet = databaseConditionsManager.selectQuery(query);
+        final ResultSet resultSet = databaseConditionsManager.selectQuery(query);
 
         try {
             // Loop over the rows.
             while (resultSet.next()) {
                 // Create a new ConditionsObject from this row.
-                ConditionsObject newObject = createConditionsObject(resultSet, tableMetaData);
+                final ConditionsObject newObject = createConditionsObject(resultSet, tableMetaData);
 
                 // Add the object to the collection.
                 collection.add(newObject);
@@ -150,28 +160,30 @@
 
         // Close the Statement and the ResultSet.
         DatabaseUtilities.cleanup(resultSet);
-        
+
         if (reopenedConnection) {
             // Close connection if one was opened.
             databaseConditionsManager.closeConnection();
         }
-        
+
         return (T) collection;
     }
-    
+
     /**
      * Create a conditions object.
+     * 
      * @param resultSet The database record.
      * @param tableMetaData The table data for the object.
      * @return The conditions object.
      * @throws SQLException If there is a problem using the database.
      */
-    static final ConditionsObject createConditionsObject(ResultSet resultSet, TableMetaData tableMetaData) throws SQLException {
-        ResultSetMetaData metaData = resultSet.getMetaData();
-        int rowId = resultSet.getInt(1);
-        int ncols = metaData.getColumnCount();
+    static final ConditionsObject createConditionsObject(final ResultSet resultSet, final TableMetaData tableMetaData)
+            throws SQLException {
+        final ResultSetMetaData metaData = resultSet.getMetaData();
+        final int rowId = resultSet.getInt(1);
+        final int nCols = metaData.getColumnCount();
         FieldValueMap fieldValues = new FieldValueMap();
-        for (int i = 2; i <= ncols; i++) {
+        for (int i = 2; i <= nCols; i++) {
             fieldValues.put(metaData.getColumnName(i), resultSet.getObject(i));
         }
         ConditionsObject newObject = null;
@@ -181,38 +193,44 @@
             throw new RuntimeException(e);
         }
         try {
-            newObject.setRowId(rowId);
+            newObject.setRowID(rowId);
         } catch (ConditionsObjectException e) {
             throw new RuntimeException(e);
         }
         newObject.setFieldValues(fieldValues);
         return newObject;
     }
-    
+
     /**
      * Create a conditions object collection.
-     * @param conditionsRecord The conditions record. 
+     * 
+     * @param conditionsRecord The conditions record.
      * @param tableMetaData The table data.
      * @return The conditions object collection.
      * @throws ConditionsObjectException If there is a problem creating the collection.
      */
-    static final AbstractConditionsObjectCollection<?> createCollection(ConditionsRecord conditionsRecord, TableMetaData tableMetaData) throws ConditionsObjectException {
-        AbstractConditionsObjectCollection<?> collection;
+    static final BaseConditionsObjectCollection<?> createCollection(final ConditionsRecord conditionsRecord,
+            final TableMetaData tableMetaData) throws ConditionsObjectException {
+        BaseConditionsObjectCollection<?> collection;
         try {
             collection = tableMetaData.getCollectionClass().newInstance();
             if (conditionsRecord != null) {
                 collection.setConditionsRecord(conditionsRecord);
                 collection.setTableMetaData(tableMetaData);
-                collection.setCollectionId(conditionsRecord.getCollectionId());
+                collection.setCollectionID(conditionsRecord.getCollectionId());
             }
         } catch (InstantiationException | IllegalAccessException e) {
             throw new ConditionsObjectException("Error creating conditions object collection.", e);
         }
         return collection;
-    }  
-    
+    }
+
+    /**
+     * Convert to string.
+     * @return The string.
+     */
     public String toString() {
-        return "ConditionsObjectConverter: type = " + this.getType() + 
-                ", multipleCollectionsAction = " + this.getMultipleCollectionsAction().toString();
+        return "ConditionsObjectConverter: type = " + this.getType() + ", multipleCollectionsAction = "
+                + this.getMultipleCollectionsAction().toString();
     }
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsRecordConverter.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsRecordConverter.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsRecordConverter.java	Thu Apr  2 18:14:47 2015
@@ -3,47 +3,50 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
 import org.lcsim.conditions.ConditionsManager;
 
 /**
- * Read ConditionsRecord objects from the conditions database and cache the conditions set.
- * @author Jeremy McCormick <[log in to unmask]>
+ * Read {@link org.hps.conditions.api.ConditionsRecord} objects from the conditions database.
+ * 
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-public class ConditionsRecordConverter extends ConditionsObjectConverter<ConditionsRecordCollection> {
+public final class ConditionsRecordConverter extends AbstractConditionsObjectConverter<ConditionsRecordCollection> {
 
     /**
-     * Get the ConditionsRecords for a run based on current configuration of the
-     * <code>DatabaseConditionsManager</code>.
+     * Get the ConditionsRecords for a run based on current configuration of the conditions system.
+     * 
      * @param manager The current conditions manager.
      * @param name The name of the conditions set.
      * @return The matching ConditionsRecords.
      */
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    public ConditionsRecordCollection getData(ConditionsManager manager, String name) {
+    public ConditionsRecordCollection getData(final ConditionsManager manager, final String name) {
 
-        DatabaseConditionsManager databaseConditionsManager = DatabaseConditionsManager.getInstance();
-        
+        final DatabaseConditionsManager databaseConditionsManager = DatabaseConditionsManager.getInstance();
+
         // Setup connection if necessary.
         boolean reopenedConnection = false;
         if (!databaseConditionsManager.isConnected()) {
             databaseConditionsManager.openConnection();
             reopenedConnection = true;
         }
-        
-        TableMetaData tableMetaData = databaseConditionsManager.findTableMetaData(name);
 
-        if (tableMetaData == null)
+        final TableMetaData tableMetaData = databaseConditionsManager.findTableMetaData(name);
+
+        if (tableMetaData == null) {
             throw new RuntimeException("Failed to find meta data with key " + name);
+        }
 
-        String query = "SELECT * from " + tableMetaData.getTableName() + " WHERE " + "run_start <= " + manager.getRun() + " AND run_end >= " + manager.getRun();
+        final String query = "SELECT * from " + tableMetaData.getTableName() + " WHERE " + "run_start <= "
+                + manager.getRun() + " AND run_end >= " + manager.getRun();
 
-        ResultSet resultSet = databaseConditionsManager.selectQuery(query);
+        final ResultSet resultSet = databaseConditionsManager.selectQuery(query);
 
         // Create a collection to return.
-        AbstractConditionsObjectCollection collection;
+        BaseConditionsObjectCollection collection;
         try {
             collection = tableMetaData.getCollectionClass().newInstance();
         } catch (InstantiationException | IllegalAccessException e) {
@@ -52,29 +55,30 @@
 
         try {
             while (resultSet.next()) {
-                ConditionsObject conditionsRecord = ConditionsObjectConverter.createConditionsObject(resultSet, tableMetaData);
+                final ConditionsObject conditionsRecord = AbstractConditionsObjectConverter.createConditionsObject(resultSet,
+                        tableMetaData);
                 collection.add(conditionsRecord);
             }
         } catch (SQLException x) {
             throw new RuntimeException("Database error", x);
         }
-        
+
         // Close the ResultSet and Statement.
         DatabaseUtilities.cleanup(resultSet);
-        
+
         if (reopenedConnection) {
             databaseConditionsManager.closeConnection();
         }
-        
+
         return getType().cast(collection);
     }
 
     /**
      * Get the type handled by this converter.
-     * @return The type handled by this converter, which is
-     *         <code>ConditionsRecordCollection</code>.
+     * 
+     * @return The type handled by this converter, which is <code>ConditionsRecordCollection</code>.
      */
     public Class<ConditionsRecordCollection> getType() {
         return ConditionsRecordCollection.class;
     }
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsSeriesConverter.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsSeriesConverter.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsSeriesConverter.java	Thu Apr  2 18:14:47 2015
@@ -12,27 +12,39 @@
 
 /**
  * This converter creates a {@link org.hps.conditions.api.ConditionsSeries} which is a list of
- * {@link org.hps.conditions.api.ConditionsObjectCollection} objects having the same type. 
+ * {@link org.hps.conditions.api.ConditionsObjectCollection} objects having the same type.
  * This can be used to retrieve sets of conditions that may overlap in time validity.  The user
  * may then use whichever collections are of interest to them.
- * 
+ *
  * @see org.hps.conditions.api.ConditionsSeries
  * @see org.hps.conditions.api.ConditionsObjectCollection
  * @see org.hps.conditions.api.ConditionsObject
  * @see DatabaseConditionsManager
- * 
+ *
  * @param <ObjectType> The type of the ConditionsObject.
  * @param <CollectionType> The type of the collection.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-// FIXME: The ObjectType and CollectionType should probably not extend in order to simplify the types.
-class ConditionsSeriesConverter<ObjectType extends ConditionsObject, CollectionType extends ConditionsObjectCollection<ObjectType>> {
+final class ConditionsSeriesConverter<ObjectType extends ConditionsObject, 
+    CollectionType extends ConditionsObjectCollection<ObjectType>> {
 
-    Class<ObjectType> objectType;
-    Class<CollectionType> collectionType;
-     
-    ConditionsSeriesConverter(Class<ObjectType> objectType, Class<CollectionType> collectionType) {
+    /**
+     * The type of the object.
+     */
+    final Class<ObjectType> objectType;
+
+    /**
+     * The type of the collection.
+     */
+    final Class<CollectionType> collectionType;
+
+    /**
+     * Class constructor.
+     * @param objectType The type of the object.
+     * @param collectionType The type of the collection.
+     */
+    ConditionsSeriesConverter(final Class<ObjectType> objectType, final Class<CollectionType> collectionType) {
         this.collectionType = collectionType;
         this.objectType = objectType;
     }
@@ -41,59 +53,62 @@
      * Create a new conditions series.
      * @param tableName The name of the data table.
      * @return The conditions series.
-     */ 
+     */
     @SuppressWarnings({ "unchecked" })
-    ConditionsSeries<ObjectType, CollectionType> createSeries(String tableName) {
+    final ConditionsSeries<ObjectType, CollectionType> createSeries(final String tableName) {
 
         if (tableName == null) {
             throw new IllegalArgumentException("The tableName argument is null.");
         }
-        
-        DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
-        
+
+        final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+
         // Setup connection if necessary.
         boolean reopenedConnection = false;
         if (!conditionsManager.isConnected()) {
             conditionsManager.openConnection();
             reopenedConnection = true;
         }
-        
+
         // Get the table meta data for the collection type.
-        TableMetaData tableMetaData = conditionsManager.findTableMetaData(tableName);
+        final TableMetaData tableMetaData = conditionsManager.findTableMetaData(tableName);
         if (tableMetaData == null) {
             throw new RuntimeException("Table meta data for " + collectionType + " was not found.");
         }
 
         // Create a new conditions series.
-        ConditionsSeries<ObjectType, CollectionType> series = new ConditionsSeries<ObjectType, CollectionType>(objectType, collectionType);
-        
+        final ConditionsSeries<ObjectType, CollectionType> series = 
+                new ConditionsSeries<ObjectType, CollectionType>();
+
         // Get the ConditionsRecord with the meta-data, which will use the current run number from the manager.
-        ConditionsRecordCollection conditionsRecords = conditionsManager.findConditionsRecords(tableName);
+        final ConditionsRecordCollection conditionsRecords = conditionsManager.findConditionsRecords(tableName);
 
         for (ConditionsRecord conditionsRecord : conditionsRecords) {
 
             ConditionsObjectCollection<ObjectType> collection;
             try {
-                collection = (ConditionsObjectCollection<ObjectType>) 
+                collection = (ConditionsObjectCollection<ObjectType>)
                         ConditionsRecordConverter.createCollection(conditionsRecord, tableMetaData);
             } catch (ConditionsObjectException e) {
                 throw new RuntimeException(e);
             }
 
             // Get the collection ID.
-            int collectionId = conditionsRecord.getCollectionId();
+            final int collectionId = conditionsRecord.getCollectionId();
 
             // Build a select query.
-            String query = QueryBuilder.buildSelect(tableName, collectionId, tableMetaData.getFieldNames(), "id ASC");
+            final String query = QueryBuilder.buildSelect(tableName, collectionId,
+                    tableMetaData.getFieldNames(), "id ASC");
 
             // Query the database.
-            ResultSet resultSet = conditionsManager.selectQuery(query);
+            final ResultSet resultSet = conditionsManager.selectQuery(query);
 
             try {
                 // Loop over rows.
                 while (resultSet.next()) {
                     // Create new ConditionsObject.
-                    ConditionsObject newObject = ConditionsRecordConverter.createConditionsObject(resultSet, tableMetaData);
+                    final ConditionsObject newObject = 
+                            ConditionsRecordConverter.createConditionsObject(resultSet, tableMetaData);
 
                     // Add new object to collection.
                     collection.add((ObjectType) newObject);
@@ -103,14 +118,14 @@
             }
 
             DatabaseUtilities.cleanup(resultSet);
-            
+
             series.add((CollectionType) collection);
         }
-        
+
         if (reopenedConnection) {
             conditionsManager.closeConnection();
         }
-        
+
         // Return new collection.
         return series;
     }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/ConnectionParameters.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/ConnectionParameters.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/ConnectionParameters.java	Thu Apr  2 18:14:47 2015
@@ -11,20 +11,41 @@
 import java.util.Properties;
 
 /**
- * This class encapsulates the parameters for connecting to a database,
- * including hostname, port, user and password. It can also create and return a
- * Connection object based on these parameters.
- * @author Jeremy McCormick <[log in to unmask]>
+ * This class encapsulates the parameters for connecting to a database, including host name, port, user and password.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-public class ConnectionParameters {
-
+public final class ConnectionParameters {
+
+    /**
+     * The default port number.
+     */
     public static final int DEFAULT_PORT = 3306;
-    
-    protected String user;
-    protected String password;
-    protected int port;
-    protected String hostname;
-    protected String database;
+
+    /**
+     * The user name.
+     */
+    private String user;
+
+    /**
+     * The user's password.
+     */
+    private String password;
+
+    /**
+     * The port.
+     */
+    private int port;
+
+    /**
+     * The host name.
+     */
+    private String hostname;
+
+    /**
+     * The database name.
+     */
+    private String database;
 
     /**
      * Protected constructor for sub-classes.
@@ -34,13 +55,15 @@
 
     /**
      * Fully qualified constructor.
+     *
      * @param user The user name.
      * @param password The password.
      * @param hostname The hostname.
      * @param port The port number.
      * @param conditionsTable The table containing conditions validity data.
      */
-    public ConnectionParameters(String user, String password, String database, String hostname, int port) {
+    public ConnectionParameters(final String user, final String password, final String database, final String hostname,
+            final int port) {
         this.user = user;
         this.password = password;
         this.database = database;
@@ -50,10 +73,11 @@
 
     /**
      * Get Properties object for this connection.
+     *
      * @return The Properties for this connection.
      */
     public Properties getConnectionProperties() {
-        Properties p = new Properties();
+        final Properties p = new Properties();
         p.put("user", user);
         p.put("password", password);
         return p;
@@ -61,14 +85,16 @@
 
     /**
      * Get the hostname.
+     *
      * @return The hostname.
      */
-    String getHostname() {
+    final String getHostname() {
         return hostname;
     }
 
     /**
      * Get the port number.
+     *
      * @return The port number.
      */
     int getPort() {
@@ -77,6 +103,7 @@
 
     /**
      * Get the name of the database.
+     *
      * @return The name of the database.
      */
     String getDatabase() {
@@ -85,6 +112,8 @@
 
     /**
      * Get the user name.
+     * 
+     * @return The user name.
      */
     String getUser() {
         return user;
@@ -92,6 +121,8 @@
 
     /**
      * Get the password.
+     * 
+     * @return The password.
      */
     String getPassword() {
         return password;
@@ -99,19 +130,21 @@
 
     /**
      * Get the connection string for these parameters.
+     * 
      * @return The connection string.
      */
-    public String getConnectionString() {
+    String getConnectionString() {
         return "jdbc:mysql://" + hostname + ":" + port + "/";
     }
 
     /**
-     * Create a database connection from these parameters. The caller becomes
-     * the "owner" and is responsible for closing it when finished.
+     * Create a database connection from these parameters. The caller becomes the "owner" and is responsible for closing
+     * it when finished.
+     * 
      * @return The Connection object.
      */
     public Connection createConnection() {
-        Properties connectionProperties = getConnectionProperties();
+        final Properties connectionProperties = getConnectionProperties();
         Connection connection = null;
         try {
             connection = DriverManager.getConnection(getConnectionString(), connectionProperties);
@@ -124,10 +157,11 @@
 
     /**
      * Configure the connection parameters from a properties file.
+     *
      * @param file The properties file.
      * @return The connection parameters.
      */
-    public static final ConnectionParameters fromProperties(File file) {
+    public static final ConnectionParameters fromProperties(final File file) {
         FileInputStream fin = null;
         try {
             fin = new FileInputStream(file);
@@ -138,33 +172,33 @@
     }
 
     /**
-     * Configure the connection parameters from an embedded classpath resource
-     * which should be a properties file.
-     * @param String The resource path.
+     * Configure the connection parameters from an embedded classpath resource which should be a properties file.
+     *
+     * @param resource The resource path.
      * @return The connection parameters.
      */
-    public static final ConnectionParameters fromResource(String resource) {
+    public static ConnectionParameters fromResource(final String resource) {
         return fromProperties(ConnectionParameters.class.getResourceAsStream(resource));
     }
 
     /**
-     * Configure the connection parameters from an <code>InputStream</code> of
-     * properties.
+     * Configure the connection parameters from an <code>InputStream</code> of properties.
+     *
      * @param in The InputStream of the properties.
      * @return The connection parameters.
      * @throws RuntimeException if the InputStream is invalid
      */
-    private static final ConnectionParameters fromProperties(InputStream in) {
-        Properties properties = new Properties();
+    private static ConnectionParameters fromProperties(final InputStream in) {
+        final Properties properties = new Properties();
         try {
             properties.load(in);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        String user = properties.getProperty("user");
-        String password = properties.getProperty("password");
-        String database = properties.getProperty("database");
-        String hostname = properties.getProperty("hostname");
+        final String user = properties.getProperty("user");
+        final String password = properties.getProperty("password");
+        final String database = properties.getProperty("database");
+        final String hostname = properties.getProperty("hostname");
         int port = DEFAULT_PORT;
         if (properties.containsKey("port")) {
             port = Integer.parseInt(properties.getProperty("port"));

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/Converter.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/Converter.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/Converter.java	Thu Apr  2 18:14:47 2015
@@ -6,25 +6,27 @@
 import java.lang.annotation.Target;
 
 /**
- * Annotation for providing converter configuration for {@link org.hps.conditions.api.ConditionsObject} classes.
- * 
- * @see ConditionsObjectConverter
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * This is an annotation for providing converter configuration for {@link org.hps.conditions.api.ConditionsObject}
+ * classes.
+ *
+ * @see AbstractConditionsObjectConverter
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE) 
+@Target(ElementType.TYPE)
 public @interface Converter {
     /**
-     * Get the action to perform in the converter when multiple conditions are found for the current configuration
-     * of run number, detector and tag in the manager.
+     * Get the action to perform in the converter when multiple conditions are found for the current configuration of
+     * run number, detector and tag in the manager.
+     *
      * @return The multiple collections action.
      */
     MultipleCollectionsAction multipleCollectionsAction() default MultipleCollectionsAction.ERROR;
-    
+
     /**
-     * Get a custom converter class for the type.  (Optional)
+     * Get a custom converter class for the type. (Optional)
+     *
      * @return The custom converter for the type.
      */
-    Class<?> converter() default ConditionsObjectConverter.class;
+    Class<?> converter() default AbstractConditionsObjectConverter.class;
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/ConverterRegistry.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/ConverterRegistry.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/ConverterRegistry.java	Thu Apr  2 18:14:47 2015
@@ -1,42 +1,45 @@
 package org.hps.conditions.database;
 
 import java.util.HashMap;
+import java.util.Map.Entry;
 import java.util.Set;
-import java.util.Map.Entry;
 
 import javassist.Modifier;
 
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
 import org.hps.conditions.api.ConditionsObjectUtilities;
 import org.reflections.Reflections;
 
 /**
- * This is a registry of all available conditions converters.
- * These classes are found using reflection.  An anonymous converter
- * is created on the fly for {@link org.hps.conditions.api.ConditionsObject} 
- * classes with a {@link Table}, and the class itself must not be abstract.
- * If the {@link Converter} annotation is set on the class, then this
- * is used to instantiate the specific converter class instead.
- * 
- * @see ConditionsObjectConverter
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * This is a registry of all available conditions converters. These classes are found using reflection. An anonymous
+ * converter is created on the fly for {@link org.hps.conditions.api.ConditionsObject} classes with a {@link Table}, and
+ * the class itself must not be abstract. If the {@link Converter} annotation is set on the class, then this is used to
+ * instantiate the specific converter class instead.
+ *
+ * @see AbstractConditionsObjectConverter
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-public class ConverterRegistry extends HashMap<Class<? extends ConditionsObject>, ConditionsObjectConverter> {
-    
+@SuppressWarnings("serial")
+public final class ConverterRegistry extends HashMap<Class<? extends ConditionsObject>, AbstractConditionsObjectConverter> {
+
+    /**
+     * Class should not be instantiated by users.
+     * The {@link #create()} method should be used instead.
+     */
     private ConverterRegistry() {
     }
-    
+
     /**
-     * Automatically create converters for all conditions object classes.
+     * Automatically create converters for all {@link org.hps.conditions.api.ConditionsObject} classes.
+     * 
      * @return The registry of converters.
      */
     @SuppressWarnings({ "unchecked", "rawtypes" })
     static ConverterRegistry create() {
-        ConverterRegistry registry = new ConverterRegistry();
-        Reflections reflections = new Reflections("org.hps.conditions");
-        Set<Class<? extends ConditionsObject>> objectTypes = reflections.getSubTypesOf(ConditionsObject.class);
+        final ConverterRegistry registry = new ConverterRegistry();
+        final Reflections reflections = new Reflections("org.hps.conditions");
+        final Set<Class<? extends ConditionsObject>> objectTypes = reflections.getSubTypesOf(ConditionsObject.class);
         for (Class<? extends ConditionsObject> objectType : objectTypes) {
             if (Modifier.isAbstract(objectType.getModifiers())) {
                 continue;
@@ -46,20 +49,20 @@
             }
             MultipleCollectionsAction multipleCollectionsAction = MultipleCollectionsAction.ERROR;
             Class<?> converterClass = null;
-            Converter converterAnnotation = objectType.getAnnotation(Converter.class);
+            final Converter converterAnnotation = objectType.getAnnotation(Converter.class);
             if (converterAnnotation != null) {
                 multipleCollectionsAction = converterAnnotation.multipleCollectionsAction();
-                if (!converterAnnotation.converter().equals(ConditionsObjectConverter.class)) {
+                if (!converterAnnotation.converter().equals(AbstractConditionsObjectConverter.class)) {
                     converterClass = converterAnnotation.converter();
                 }
             }
-            
-            final Class<? extends AbstractConditionsObjectCollection<? extends ConditionsObject>> collectionType = 
-                    ConditionsObjectUtilities.getCollectionType(objectType);
-            
-            ConditionsObjectConverter converter = null;
+
+            final Class<? extends BaseConditionsObjectCollection<? extends ConditionsObject>> 
+                collectionType = ConditionsObjectUtilities.getCollectionType(objectType);
+
+            AbstractConditionsObjectConverter converter = null;
             if (converterClass == null) {
-                converter = new ConditionsObjectConverter() {
+                converter = new AbstractConditionsObjectConverter() {
                     @Override
                     public Class getType() {
                         return collectionType;
@@ -68,23 +71,29 @@
             } else {
                 try {
                     Object object = converterClass.newInstance();
-                    if (!(object instanceof ConditionsObjectConverter)) {
-                        throw new RuntimeException("The Converter has the wrong type: " + object.getClass().getCanonicalName());
+                    if (!(object instanceof AbstractConditionsObjectConverter)) {
+                        throw new RuntimeException("The Converter has the wrong type: "
+                                + object.getClass().getCanonicalName());
                     }
-                    converter = (ConditionsObjectConverter) object;
+                    converter = (AbstractConditionsObjectConverter) object;
                 } catch (InstantiationException | IllegalAccessException e) {
                     throw new RuntimeException(e);
                 }
             }
             converter.setMultipleCollectionsAction(multipleCollectionsAction);
             registry.put(converter.getType(), converter);
-        }        
+        }
         return registry;
     }
-    
-    public String toString() {
-        StringBuffer buff = new StringBuffer();
-        for (Entry<Class<? extends ConditionsObject>, ConditionsObjectConverter> entry : entrySet()) {
+
+    /**
+     * Convert the object to a string.
+     * @return The object converted to a string.
+     */
+    @SuppressWarnings("rawtypes")
+    public final String toString() {
+        final StringBuffer buff = new StringBuffer();
+        for (Entry<Class<? extends ConditionsObject>, AbstractConditionsObjectConverter> entry : entrySet()) {
             buff.append(entry.getValue().toString());
         }
         return buff.toString();

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	Thu Apr  2 18:14:47 2015
@@ -47,142 +47,232 @@
 
 /**
  * <p>
- * This class provides the top-level API for accessing database conditions,
- * as well as configuring the database connection, initializing all
- * required components, and loading required converters and table meta data.
- * It is registered as the global <code>ConditionsManager</code> in the 
- * constructor.
+ * This class provides the top-level API for accessing database conditions, as well as configuring the database
+ * connection, initializing all required components, and loading required converters and table meta data. It is
+ * registered as the global <code>ConditionsManager</code> in the constructor.
  * <p>
- * Differences between Test Run and Engineering Run configurations are handled
- * automatically.
- * 
+ * Differences between Test Run and Engineering Run configurations are handled automatically.
+ *
  * @see org.lcsim.conditions.ConditionsManager
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @SuppressWarnings("rawtypes")
 public final class DatabaseConditionsManager extends ConditionsManagerImplementation {
 
-    // Initialize logger.
-    private static Logger logger = LogUtil.create(DatabaseConditionsManager.class.getName(), new DefaultLogFormatter(), Level.FINE);
-
-    // Global registry of conditions converters.
+    /**
+     * Initialize the logger.
+     */
+    private static Logger logger = LogUtil.create(DatabaseConditionsManager.class.getName(), new DefaultLogFormatter(),
+            Level.FINE);
+
+    /**
+     * Create the global registry of conditions object converters.
+     */
     private ConverterRegistry converters = ConverterRegistry.create();
-    
-    // Global registry of table meta data.
+
+    /**
+     * Create the global registry of table meta data.
+     */
     private TableRegistry tableRegistry = TableRegistry.create();
-    
-    // Connection configuration.
+
+    /**
+     * Name of system property that can be used to specify custom database connection parameters.
+     */
     private static final String CONNECTION_PROPERTY = "org.hps.conditions.connection.file";
+
+    /**
+     * The connection properties file, if one is being used from the command line.
+     */
     private File connectionPropertiesFile;
+
+    /**
+     * The current connection parameters.
+     */
     private ConnectionParameters connectionParameters;
+
+    /**
+     * The current database connection.
+     */
     private Connection connection;
+
+    /**
+     * True if manager is connected to the database.
+     */
     private boolean isConnected = false;
+
+    /**
+     * Flag used to print connection parameters one time.
+     */
     private boolean loggedConnectionParameters = false;
-    
-    // Default configuration resources.
+
+    /**
+     * The default XML config.
+     */
     private static final String DEFAULT_CONFIG = "/org/hps/conditions/config/conditions_database_prod.xml";
+
+    /**
+     * The Test Run XML config.
+     */
     private static final String TEST_RUN_CONFIG = "/org/hps/conditions/config/conditions_database_testrun_2012.xml";
+
+    /**
+     * The Eng Run XML config.
+     */
     private static final String ENGRUN_CONFIG = "/org/hps/conditions/config/conditions_database_engrun.xml";
-    
-    // Default connection properties resource.
+
+    /**
+     * The connection properties resource for connecting to the default JLAB database.
+     */
     private static final String DEFAULT_CONNECTION_PROPERTIES_RESOURCE = "/org/hps/conditions/config/jlab_connection.prop";
-    
-    // Max run number for the Test Run.
+
+    /**
+     * The max value for a run to be considered Test Run.
+     */
     private static final int TEST_RUN_MAX_RUN = 1365;
-        
-    // Detector setup.
+
+    /**
+     * The default ECAL detector name in the detector geometry.
+     */
     private String ecalName = "Ecal";
+
+    /**
+     * The default SVT name in the detector geometry.
+     */
     private String svtName = "Tracker";
+
+    /**
+     * The converter for creating the combined SVT conditions object.
+     */
     private ConditionsConverter svtConverter;
+
+    /**
+     * The converter for creating the combined ECAL conditions object.
+     */
     private ConditionsConverter ecalConverter;
+
+    /**
+     * The helper for setting up the SVT detector with its conditions information.
+     */
     private SvtDetectorSetup svtSetup = new SvtDetectorSetup(svtName);
-    
-    // Active conditions tag.
+
+    /**
+     * The currently active conditions tag.
+     */
     private String tag = null;
 
-    // State of manager.
+    /**
+     * True if the manager has been initialized, e.g. the {@link #setDetector(String, int)} method was called.
+     */
     private boolean isInitialized = false;
+
+    /**
+     * True if the conditions system has been frozen and will ignore updates after it is initialized.
+     */
     private boolean isFrozen = false;
+
+    /**
+     * True if the conditions manager was configured from an XML configuration resource or file.
+     */
     private boolean isConfigured = false;
-    
-    // Configuration from XML settings.  These are the defaults.
+
+    /**
+     * True to setup the SVT detector model with conditions.
+     */
     private boolean setupSvtDetector = true;
+
+    /**
+     * True to freeze the system after initialization.
+     */
     private boolean freezeAfterInitialize = false;
+
+    /**
+     * True to close the connection after initialization.
+     */
     private boolean closeConnectionAfterInitialize = true;
+
+    /**
+     * True to cache all known conditions sets (from keys) during initialization.
+     */
     private boolean cacheAllConditions = false;
+
+    /**
+     * True if current run number is from Test Run.
+     */
     private boolean isTestRun = false;
-    
+
     static {
-        // Default login timeout of 5 seconds.
+        // Set default login timeout of 5 seconds.
         DriverManager.setLoginTimeout(5);
     }
-    
-    /**
-     * Class constructor.
-     * Calling this will automatically register this
-     * manager as the global default.
+
+    /**
+     * Class constructor. Calling this will automatically register this manager as the global default.
      */
     private DatabaseConditionsManager() {
         registerConditionsConverter(new DetectorConditionsConverter());
         setupConnectionFromSystemProperty();
         ConditionsManager.setDefaultConditionsManager(this);
         setRun(-1);
-        for (ConditionsObjectConverter converter : converters.values()) {
-            //logger.fine("registering converter for " + converter.getType());
+        for (AbstractConditionsObjectConverter converter : converters.values()) {
+            // logger.fine("registering converter for " + converter.getType());
             registerConditionsConverter(converter);
         }
         addConditionsListener(svtSetup);
-    }    
-       
+    }
+
     /**
      * Get the static instance of this class.
+     *
      * @return The static instance of the manager.
      */
-    public synchronized static DatabaseConditionsManager getInstance() {
+    public static synchronized DatabaseConditionsManager getInstance() {
 
         logger.finest("getting conditions manager instance");
-        
+
         // Is there no manager installed yet?
-        if (!ConditionsManager.isSetup() || !(ConditionsManager.defaultInstance() instanceof DatabaseConditionsManager)) {
+        if (!ConditionsManager.isSetup() ||
+                !(ConditionsManager.defaultInstance() instanceof DatabaseConditionsManager)) {
             logger.finest("creating new DatabaseConditionsManager");
             // Create a new instance if necessary, which will install it globally as the default.
             new DatabaseConditionsManager();
         }
 
         // Get the instance back from the default conditions system and check that the type is correct now.
-        ConditionsManager manager = ConditionsManager.defaultInstance();
+        final ConditionsManager manager = ConditionsManager.defaultInstance();
         if (!(manager instanceof DatabaseConditionsManager)) {
             logger.severe("default conditions manager has wrong type");
-            throw new RuntimeException("Default conditions manager has the wrong type: " + ConditionsManager.defaultInstance().getClass().getName());
-        }
-        
+            throw new RuntimeException("Default conditions manager has the wrong type: "
+                    + ConditionsManager.defaultInstance().getClass().getName());
+        }
+
         logger.finest("returning conditions manager instance");
 
         return (DatabaseConditionsManager) manager;
     }
-    
+
     /**
      * Reset the global static instance of the conditions manager to a new object.
      */
-    public synchronized static void resetInstance() {
+    public static synchronized void resetInstance() {
         logger.finest("DatabaseConditionsManager instance is being reset");
         new DatabaseConditionsManager();
     }
-    
+
     /**
      * Set the log level.
+     *
      * @param level The log level.
      */
-    public void setLogLevel(Level level) {        
-        logger.config("setting log level to " + level); 
+    public void setLogLevel(final Level level) {
+        logger.config("setting log level to " + level);
         logger.setLevel(level);
         logger.getHandlers()[0].setLevel(level);
         svtSetup.setLogLevel(level);
     }
-    
+
     /**
      * Open the database connection.
+     *
      * @return True if a connection was opened; false if using an existing connection.
      */
     public synchronized boolean openConnection() {
@@ -193,25 +283,24 @@
                 // Setup the default read-only connection, which will choose a SLAC or JLab database.
                 connectionParameters = ConnectionParameters.fromResource(DEFAULT_CONNECTION_PROPERTIES_RESOURCE);
             }
-            
+
             if (!loggedConnectionParameters) {
                 // Print out detailed info to the log on first connection within the job.
-                logger.info("opening connection ... " + '\n' 
-                        + "connection: " + connectionParameters.getConnectionString() + '\n'
-                        + "host: " + connectionParameters.getHostname() + '\n'
-                        + "port: " + connectionParameters.getPort() + '\n'
-                        + "user: " + connectionParameters.getUser() + '\n'
-                        + "database: " + connectionParameters.getDatabase());
+                logger.info("opening connection ... " + '\n' + "connection: "
+                        + connectionParameters.getConnectionString() + '\n' + "host: "
+                        + connectionParameters.getHostname() + '\n' + "port: " + connectionParameters.getPort() + '\n'
+                        + "user: " + connectionParameters.getUser() + '\n' + "database: "
+                        + connectionParameters.getDatabase());
                 loggedConnectionParameters = true;
             }
 
             // Create the connection using the parameters.
             connection = connectionParameters.createConnection();
-            isConnected = true;                        
+            isConnected = true;
             openedConnection = true;
-        } 
+        }
         logger.info("connection opened successfully");
-        
+
         // Flag to indicate whether an existing connection was used or not.
         return openedConnection;
     }
@@ -225,7 +314,7 @@
             try {
                 if (!connection.isClosed()) {
                     connection.close();
-                } 
+                }
             } catch (SQLException e) {
                 throw new RuntimeException(e);
             }
@@ -234,13 +323,14 @@
         isConnected = false;
         logger.info("connection closed");
     }
-    
-    /**
-     * Close the database connection but only if there was a connection opened
-     * based on the flag.  Otherwise, it should be left open.
+
+    /**
+     * Close the database connection but only if there was a connection opened based on the flag. Otherwise, it should
+     * be left open.
+     *
      * @param connectionOpened True to close the connection; false to leave it open.
      */
-    public synchronized void closeConnection(boolean connectionOpened) {
+    public synchronized void closeConnection(final boolean connectionOpened) {
         if (connectionOpened) {
             closeConnection();
         }
@@ -248,43 +338,47 @@
 
     /**
      * Get a conditions series with one or more collections.
+     *
      * @param collectionType The type of the collection.
      * @param tableName The name of the data table.
+     * @param <ObjectType> The type of the conditions object.
+     * @param <CollectionType> The type of the conditions collection.
      * @return The conditions series.
      */
-    public 
+    @SuppressWarnings("unchecked")
+    public
     <ObjectType extends ConditionsObject, CollectionType extends ConditionsObjectCollection<ObjectType>> 
-    ConditionsSeries<ObjectType, CollectionType> 
-    getConditionsSeries(Class<CollectionType> collectionType, String tableName) {
-        
-        TableMetaData metaData = tableRegistry.get(tableName);
+        ConditionsSeries<ObjectType, CollectionType> getConditionsSeries(
+                final Class<CollectionType> collectionType, final String tableName) {
+
+        final TableMetaData metaData = tableRegistry.get(tableName);
         if (metaData == null) {
             throw new IllegalArgumentException("No table metadata found for type " + collectionType.getName());
         }
         if (!metaData.getCollectionClass().equals(collectionType)) {
-            throw new IllegalArgumentException("The type " + collectionType.getName() 
-                    + " does not match the class " + metaData.getCollectionClass().getName() + " from the meta data");
-        }               
-        Class<? extends ConditionsObject> objectType = metaData.getObjectClass();        
-        ConditionsSeriesConverter<ObjectType, CollectionType> converter = new ConditionsSeriesConverter(objectType, collectionType);
+            throw new IllegalArgumentException("The type " + collectionType.getName() + " does not match the class "
+                    + metaData.getCollectionClass().getName() + " from the meta data");
+        }
+        final Class<? extends ConditionsObject> objectType = metaData.getObjectClass();
+        final ConditionsSeriesConverter<ObjectType, CollectionType> converter =
+                new ConditionsSeriesConverter(objectType, collectionType);
         return converter.createSeries(tableName);
     }
-                
-    /**
-     * This method handles changes to the detector name and run number.
-     * It is called every time an LCSim event is created, and so it has 
-     * internal logic to figure out if the conditions system actually
-     * needs to be updated.
+
+    /**
+     * This method handles changes to the detector name and run number. It is called every time an LCSim event is
+     * created, and so it has internal logic to figure out if the conditions system actually needs to be updated.
      */
     @Override
-    public synchronized void setDetector(String detectorName, int runNumber) throws ConditionsNotFoundException {
+    public synchronized void setDetector(final String detectorName, final int runNumber) 
+            throws ConditionsNotFoundException {
 
         logger.finest("setDetector " + detectorName + " with run number " + runNumber);
-        
+
         if (detectorName == null) {
             throw new IllegalArgumentException("The detectorName argument is null.");
         }
-                
+
         if (!isInitialized || !detectorName.equals(getDetector()) || runNumber != getRun()) {
             if (!isFrozen) {
                 logger.info("new detector " + detectorName + " and run #" + runNumber);
@@ -294,26 +388,29 @@
             }
         }
     }
-    
+
     /**
      * Utility method to determine if a run number is from the 2012 Test Run.
+     *
      * @param runNumber The run number.
      * @return True if run number is from the Test Run.
      */
-    public static boolean isTestRun(int runNumber) {
+    public static boolean isTestRun(final int runNumber) {
         return runNumber > 0 && runNumber <= TEST_RUN_MAX_RUN;
     }
-    
+
     /**
      * True if Test Run configuration is selected.
+     *
      * @return True if current run is from the Test Run.
      */
     public boolean isTestRun() {
         return isTestRun;
     }
-    
+
     /**
      * Get the current LCSim compact <code>Detector</code> object.
+     *
      * @return The detector object.
      */
     public Detector getDetectorObject() {
@@ -322,15 +419,16 @@
 
     /**
      * Configure this object from an XML file.
+     *
      * @param file The XML file.
      */
-    public void setXmlConfig(File fileConfig) {       
-        logger.config("setting XML config from file " + fileConfig.getPath());
-        if (!fileConfig.exists()) {
-            throw new IllegalArgumentException("The config file does not exist: " + fileConfig.getPath());
+    public void setXmlConfig(final File file) {
+        logger.config("setting XML config from file " + file.getPath());
+        if (!file.exists()) {
+            throw new IllegalArgumentException("The config file does not exist: " + file.getPath());
         }
         try {
-            configure(new FileInputStream(fileConfig));
+            configure(new FileInputStream(file));
         } catch (FileNotFoundException e) {
             throw new RuntimeException(e);
         }
@@ -338,50 +436,57 @@
 
     /**
      * Configure this object from an embedded XML resource.
+     *
      * @param resource The embedded XML resource.
      */
-    public void setXmlConfig(String resourceConfig) {
-        logger.config("setting XML config from resource " + resourceConfig);
-        InputStream is = getClass().getResourceAsStream(resourceConfig);
+    public void setXmlConfig(final String resource) {
+        logger.config("setting XML config from resource " + resource);
+        final InputStream is = getClass().getResourceAsStream(resource);
         configure(is);
     }
 
     /**
      * Set the path to a properties file containing connection settings.
+     *
      * @param file The properties file
      */
-    public void setConnectionProperties(File file) {
+    public void setConnectionProperties(final File file) {
         logger.config("setting connection properties file " + file.getPath());
-        if (!file.exists())
-            throw new IllegalArgumentException("The connection properties file does not exist: " + connectionPropertiesFile.getPath());
+        if (!file.exists()) {
+            throw new IllegalArgumentException("The connection properties file does not exist: "
+                    + connectionPropertiesFile.getPath());
+        }
         connectionParameters = ConnectionParameters.fromProperties(file);
     }
-    
+
     /**
      * Set the connection parameters of the conditions database.
+     *
      * @param connectionParameters The connection parameters.
      */
-    public void setConnectionParameters(ConnectionParameters connectionParameters) {
+    public void setConnectionParameters(final ConnectionParameters connectionParameters) {
         this.connectionParameters = connectionParameters;
     }
 
     /**
      * Set the connection parameters from an embedded resource location.
+     *
      * @param resource The classpath resource location.
      */
-    public void setConnectionResource(String resource) {
+    public void setConnectionResource(final String resource) {
         logger.config("setting connection resource " + resource);
         connectionParameters = ConnectionParameters.fromResource(resource);
     }
 
     /**
      * Get the next collection ID for a database conditions table.
+     *
      * @param tableName The name of the table.
      * @return The next collection ID.
      */
-    public synchronized int getNextCollectionID(String tableName) {
-        boolean openedConnection = openConnection();
-        ResultSet resultSet = selectQuery("SELECT MAX(collection_id)+1 FROM " + tableName);
+    public synchronized int getNextCollectionID(final String tableName) {
+        final boolean openedConnection = openConnection();
+        final ResultSet resultSet = selectQuery("SELECT MAX(collection_id)+1 FROM " + tableName);
         int collectionId = 1;
         try {
             resultSet.next();
@@ -396,15 +501,15 @@
     }
 
     /**
-     * This method will return true if the given collection ID already exists in
-     * the table.
+     * This method will return true if the given collection ID already exists in the table.
+     *
      * @param tableName The name of the table.
      * @param collectionID The collection ID value.
      * @return True if collection exists.
      */
-    public boolean collectionExists(String tableName, int collectionID) {
-        String sql = "SELECT * FROM " + tableName + " where collection_id = " + collectionID;
-        ResultSet resultSet = selectQuery(sql);
+    public boolean collectionExists(final String tableName, final int collectionID) {
+        final String sql = "SELECT * FROM " + tableName + " where collection_id = " + collectionID;
+        final ResultSet resultSet = selectQuery(sql);
         try {
             resultSet.last();
         } catch (SQLException e) {
@@ -416,19 +521,16 @@
         } catch (SQLException e) {
             e.printStackTrace();
         }
-        if (rowCount != 0) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-   
+        return rowCount != 0;
+    }
+
     /**
      * This method can be used to perform a database SELECT query.
+     *
      * @param query The SQL query string.
      * @return The ResultSet from the query or null.
      */
-    ResultSet selectQuery(String query) {
+    ResultSet selectQuery(final String query) {
         logger.fine("executing SQL select query ..." + '\n' + query);
         ResultSet result = null;
         Statement statement = null;
@@ -443,13 +545,14 @@
 
     /**
      * Perform a SQL query with an update command like INSERT, DELETE or UPDATE.
+     *
      * @param query The SQL query string.
      * @return The keys of the rows affected.
      */
-    public List<Integer> updateQuery(String query) {
-        boolean openedConnection = openConnection();
+    public List<Integer> updateQuery(final String query) {
+        final boolean openedConnection = openConnection();
         logger.fine("executing SQL update query ..." + '\n' + query);
-        List<Integer> keys = new ArrayList<Integer>();
+        final List<Integer> keys = new ArrayList<Integer>();
         Statement statement = null;
         ResultSet resultSet = null;
         try {
@@ -457,93 +560,101 @@
             statement.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
             resultSet = statement.getGeneratedKeys();
             while (resultSet.next()) {
-                int key = resultSet.getInt(1);
+                final int key = resultSet.getInt(1);
                 keys.add(key);
             }
         } catch (SQLException x) {
             throw new RuntimeException("Error in SQL query: " + query, x);
-        } 
+        }
         DatabaseUtilities.cleanup(resultSet);
-        closeConnection(openedConnection);        
+        closeConnection(openedConnection);
         return keys;
     }
-  
-    /**
-     * Find a collection of conditions validity records by key name. The key
-     * name is distinct from the table name, but they are usually set to the
-     * same value.
+
+    /**
+     * Find a collection of conditions validity records by key name. The key name is distinct from the table name, but
+     * they are usually set to the same value.
+     *
      * @param name The conditions key name.
      * @return The set of matching conditions records.
      */
-    public ConditionsRecordCollection findConditionsRecords(String name) {
-        ConditionsRecordCollection runConditionsRecords = getCachedConditions(ConditionsRecordCollection.class, "conditions").getCachedData();
+    public ConditionsRecordCollection findConditionsRecords(final String name) {
+        final ConditionsRecordCollection runConditionsRecords = getCachedConditions(ConditionsRecordCollection.class,
+                "conditions").getCachedData();
         logger.fine("searching for conditions with name " + name + " in " + runConditionsRecords.size() + " records");
-        ConditionsRecordCollection foundConditionsRecords = new ConditionsRecordCollection();        
+        final ConditionsRecordCollection foundConditionsRecords = new ConditionsRecordCollection();
         for (ConditionsRecord record : runConditionsRecords) {
             if (record.getName().equals(name)) {
                 if (matchesTag(record)) {
                     foundConditionsRecords.add(record);
                     logger.finer("found matching conditions record " + record.getRowId());
                 } else {
-                    logger.finer("conditions record " + record.getRowId() + " rejected from non-matching tag " + record.getTag());
+                    logger.finer("conditions record " + record.getRowId() + " rejected from non-matching tag "
+                            + record.getTag());
                 }
             }
         }
         logger.fine("found " + foundConditionsRecords.size() + " conditions records matching tag " + tag);
         return foundConditionsRecords;
     }
-           
+
     /**
      * True if there is a conditions record with the given name.
+     *
      * @param name The conditions name.
      * @return True if a conditions record exists with the given name.
      */
-    public boolean hasConditionsRecord(String name) {
+    public boolean hasConditionsRecord(final String name) {
         return !findConditionsRecords(name).isEmpty();
     }
 
     /**
      * Get a list of all the ConditionsRecord objects.
+     *
      * @return The list of all the ConditionsRecord objects.
      */
     // FIXME: This should use a cache that is created during initialization, rather than look these up every time.
     public ConditionsRecordCollection getConditionsRecords() {
         logger.finer("getting conditions records ...");
-        ConditionsRecordCollection conditionsRecords = new ConditionsRecordCollection();
+        final ConditionsRecordCollection conditionsRecords = new ConditionsRecordCollection();
         for (TableMetaData tableMetaData : tableRegistry.values()) {
             try {
-                ConditionsRecordCollection foundConditionsRecords = findConditionsRecords(tableMetaData.getKey());
-                logger.finer("found " + foundConditionsRecords.size() + " collections with name " + tableMetaData.getKey());
-                conditionsRecords.addAll(foundConditionsRecords); 
+                final ConditionsRecordCollection foundConditionsRecords =
+                        findConditionsRecords(tableMetaData.getKey());
+                logger.finer("found " + foundConditionsRecords.size() + " collections with name "
+                        + tableMetaData.getKey());
+                conditionsRecords.addAll(foundConditionsRecords);
             } catch (Exception e) {
                 e.printStackTrace();
                 logger.warning(e.getMessage());
             }
-        }        
+        }
         logger.finer("found " + conditionsRecords + " conditions records");
         logger.getHandlers()[0].flush();
         return conditionsRecords;
     }
-    
+
     /**
      * Get the combined ECAL conditions for this run.
+     *
      * @return The combined ECAL conditions.
      */
     public EcalConditions getEcalConditions() {
         return this.getCachedConditions(EcalConditions.class, "ecal_conditions").getCachedData();
     }
-    
+
     /**
      * Get the combined SVT conditions for this run.
+     *
      * @return The combined SVT conditions.
      */
     public SvtConditions getSvtConditions() {
         return this.getCachedConditions(SvtConditions.class, "svt_conditions").getCachedData();
     }
-    
-    /**
-     * This method can be called to "freeze" the conditions system so that
-     * any subsequent updates to run number or detector name will be ignored.
+
+    /**
+     * This method can be called to "freeze" the conditions system so that any subsequent updates to run number or
+     * detector name will be ignored.
      */
     public synchronized void freeze() {
         if (getDetector() != null && getRun() != -1) {
@@ -553,7 +664,7 @@
             logger.warning("conditions system cannot be frozen because it is not initialized yet");
         }
     }
-    
+
     /**
      * Un-freeze the conditions system so that updates will be received again.
      */
@@ -561,33 +672,38 @@
         isFrozen = false;
         logger.info("conditions system unfrozen");
     }
-    
+
     /**
      * True if conditions system is frozen.
+     *
      * @return True if conditions system is frozen.
      */
     public boolean isFrozen() {
         return isFrozen;
     }
-            
+
     /**
      * Set a tag used to filter ConditionsRecords.
+     *
      * @param tag The tag value used to filter ConditionsRecords.
      */
-    public void setTag(String tag) {
+    public void setTag(final String tag) {
         this.tag = tag;
         logger.info("using conditions tag: " + tag);
     }
 
     /**
      * Insert a collection of ConditionsObjects into the database.
+     *
      * @param collection The collection to insert.
+     * @param <ObjectType> The type of the conditions object.
      * @throws SQLException If there is a database error.
      * @throws ConditionsObjectException If there is a problem with the ConditionsObjects.
      */
-    public <ObjectType extends ConditionsObject> 
-    void insertCollection(ConditionsObjectCollection<ObjectType> collection) throws SQLException, ConditionsObjectException {
-                
+    public <ObjectType extends ConditionsObject> void insertCollection(
+            final ConditionsObjectCollection<ObjectType> collection)
+            throws SQLException, ConditionsObjectException {
+
         if (collection == null) {
             throw new IllegalArgumentException("The collection is null.");
         }
@@ -595,42 +711,42 @@
             throw new IllegalArgumentException("The collection is empty.");
         }
 
-        TableMetaData tableMetaData = collection.getTableMetaData();
+        final TableMetaData tableMetaData = collection.getTableMetaData();
         if (tableMetaData == null) {
-            List<TableMetaData> metaDataList = tableRegistry.findByCollectionType(collection.getClass());             
+            final List<TableMetaData> metaDataList = tableRegistry.findByCollectionType(collection.getClass());
             if (metaDataList == null) {
                 // This is a fatal error because no meta data is available for the type.
                 throw new ConditionsObjectException("Failed to find meta data for type: " + collection.getClass());
-            }
-            logger.fine("using default table meta data " + tableMetaData.getTableName() + " for type " + collection.getClass());            
+            } 
         }
         if (collection.getCollectionId() == -1) {
             try {
-                collection.setCollectionId(getNextCollectionID(tableMetaData.getTableName()));
+                collection.setCollectionID(getNextCollectionID(tableMetaData.getTableName()));
             } catch (ConditionsObjectException e) {
                 throw new RuntimeException(e);
             }
         }
         // FIXME: If collection ID is already set this should be an error!
-        
-        logger.info("inserting collection with ID " + collection.getCollectionId() 
-                + " and key " + tableMetaData.getKey() + " into table " + tableMetaData.getTableName());
-
-        boolean openedConnection = openConnection();
-        
+
+        logger.info("inserting collection with ID " + collection.getCollectionId() + " and key "
+                + tableMetaData.getKey() + " into table " + tableMetaData.getTableName());
+
+        final boolean openedConnection = openConnection();
+
         PreparedStatement preparedStatement = null;
-        
+
         try {
             connection.setAutoCommit(false);
             logger.fine("starting insert transaction");
-            String sql = QueryBuilder.buildPreparedInsert(tableMetaData.getTableName(), collection.iterator().next());
+            final String sql = QueryBuilder.buildPreparedInsert(
+                    tableMetaData.getTableName(), collection.iterator().next());
             preparedStatement = connection.prepareStatement(sql);
             logger.fine("using prepared statement: " + sql);
-            int collectionId = collection.getCollectionId();
+            final int collectionId = collection.getCollectionId();
             for (ConditionsObject object : collection) {
                 preparedStatement.setObject(1, collectionId);
                 int parameterIndex = 2;
-                for (Entry<String,Object> entry : object.getFieldValues().entrySet()) {
+                for (Entry<String, Object> entry : object.getFieldValues().entrySet()) {
                     preparedStatement.setObject(parameterIndex, entry.getValue());
                     ++parameterIndex;
                 }
@@ -647,82 +763,90 @@
         } finally {
             connection.setAutoCommit(true);
         }
-        
+
         try {
             preparedStatement.close();
         } catch (Exception e) {
         }
-               
+
         closeConnection(openedConnection);
     }
-    
+
     /**
      * Check if connected to the database.
+     *
      * @return true if connected
      */
     public boolean isConnected() {
         return isConnected;
     }
-              
-    /**
-     * Get the Logger for this class, which can be used by related sub-classes
-     * if they do not have their own logger.
+
+    /**
+     * Get the Logger for this class, which can be used by related sub-classes if they do not have their own logger.
+     *
      * @return The Logger for this class.
      */
     public static Logger getLogger() {
         return logger;
     }
-    
+
     /**
      * Find table information from the name.
+     *
      * @param name The name of the table.
      * @return The table information or null if does not exist.
      */
-    public TableMetaData findTableMetaData(String name) {
+    public TableMetaData findTableMetaData(final String name) {
         return tableRegistry.findByTableName(name);
     }
-    
+
     /**
      * Find table information from the collection type.
+     *
      * @param type The collection type.
      * @return The table information or null if does not exist.
      */
-    public List<TableMetaData> findTableMetaData(Class<?> type) {
+    public List<TableMetaData> findTableMetaData(final Class<?> type) {
         return tableRegistry.findByCollectionType(type);
     }
-    
+
     /**
      * Get the name of the ECAL in the detector geometry.
+     *
      * @return The name of the ECAL.
      */
     public String getEcalName() {
         return ecalName;
     }
-    
+
     /**
      * Get the subdetector object of the ECAL.
+     *
      * @return The ECAL subdetector.
      */
     public Subdetector getEcalSubdetector() {
         return this.getDetectorObject().getSubdetector(ecalName);
     }
-    
+
     /**
      * True if conditions manager is properly initialized.
+     *
+     * @return True if the manager is initialized.
      */
     public boolean isInitialized() {
         return isInitialized;
     }
-    
+
     /**
      * Get the set of unique conditions tags from the conditions table.
+     *
      * @return The list of unique conditions tags.
      */
     public Set<String> getTags() {
         logger.fine("getting list of available conditions tags");
-        boolean openedConnection = openConnection();
-        Set<String> tags = new LinkedHashSet<String>();
-        ResultSet rs = selectQuery("select distinct(tag) from conditions where tag is not null order by tag");
+        final boolean openedConnection = openConnection();
+        final Set<String> tags = new LinkedHashSet<String>();
+        final ResultSet rs = selectQuery("select distinct(tag) from conditions where tag is not null order by tag");
         try {
             while (rs.next()) {
                 tags.add(rs.getString(1));
@@ -735,32 +859,29 @@
         } catch (SQLException e) {
             logger.log(Level.WARNING, "error closing ResultSet", e);
         }
-        StringBuffer buffer = new StringBuffer();
-        buffer.append("found unique conditions tags: ");
+        final StringBuffer sb = new StringBuffer();
+        sb.append("found unique conditions tags: ");
         for (String tag : tags) {
-            buffer.append(tag + " ");
-        }
-        buffer.setLength(buffer.length() - 1);
-        buffer.append('\n');
-        logger.fine(buffer.toString());        
+            sb.append(tag + " ");
+        }
+        sb.setLength(sb.length() - 1);
+        logger.fine(sb.toString());
         closeConnection(openedConnection);
         return tags;
     }
 
-    /*
-     *******************************
-     * Private methods below here. *
-     *******************************
-     */
-    
-    /**
-     * Perform all necessary initialization, including setup of the XML
-     * configuration and loading of conditions onto the Detector.
-     */
-    private void initialize(String detectorName, int runNumber) throws ConditionsNotFoundException {
-                
+    /**
+     * Perform all necessary initialization, including setup of the XML configuration and loading of conditions
+     * onto the Detector.
+     *
+     * @param detectorName The name of the detector model.
+     * @param runNumber The run number.
+     * @throws ConditionsNotFoundException If there is a conditions system error.
+     */
+    private void initialize(final String detectorName, final int runNumber) throws ConditionsNotFoundException {
+
         logger.config("initializing with detector " + detectorName + " and run " + runNumber);
-        
+
         // Is not configured yet?
         if (!isConfigured) {
             if (isTestRun(runNumber)) {
@@ -778,42 +899,42 @@
         // Register the converters for this initialization.
         logger.fine("registering converters");
         registerConverters();
-    
+
         // Enable or disable the setup of the SVT detector.
         logger.fine("enabling SVT setup: " + setupSvtDetector);
         svtSetup.setEnabled(setupSvtDetector);
 
         // Open the database connection.
         openConnection();
-        
+
         // Call the super class's setDetector method to construct the detector object and activate conditions listeners.
         logger.fine("activating default conditions manager");
         super.setDetector(detectorName, runNumber);
-                        
+
         // Should all conditions sets be cached?
         if (cacheAllConditions) {
             // Cache the conditions sets of all registered converters.
             logger.fine("caching all conditions sets ...");
             cacheConditionsSets();
         }
-                
+
         if (closeConnectionAfterInitialize) {
             logger.fine("closing connection after initialization");
-            // Close the connection. 
+            // Close the connection.
             closeConnection();
         }
-        
+
         // Should the conditions system be frozen now?
         if (freezeAfterInitialize) {
             // Freeze the conditions system so subsequent updates will be ignored.
             freeze();
             logger.config("system was frozen after initialization");
         }
-        
+
         isInitialized = true;
-        
+
         logger.info("conditions system initialized successfully");
-        
+
         // Flush logger after initialization.
         logger.getHandlers()[0].flush();
     }
@@ -826,12 +947,12 @@
             // Remove old SVT converter.
             removeConditionsConverter(svtConverter);
         }
-        
+
         if (ecalConverter != null) {
             // Remove old ECAL converter.
             registerConditionsConverter(ecalConverter);
         }
-        
+
         // Is configured for TestRun?
         if (isTestRun()) {
             // Load Test Run specific converters.
@@ -847,76 +968,74 @@
         registerConditionsConverter(svtConverter);
         registerConditionsConverter(ecalConverter);
     }
-    
+
     /**
      * Set the name of the ECAL sub-detector.
+     *
      * @param ecalName The name of the ECAL.
      */
-    private void setEcalName(String ecalName) {
+    private void setEcalName(final String ecalName) {
         if (ecalName == null) {
             throw new IllegalArgumentException("The ecalName is null");
         }
         this.ecalName = ecalName;
         logger.info("ECAL name set to " + ecalName);
     }
-    
+
     /**
      * Set the name of the SVT sub-detector.
+     *
      * @param svtName The name of the SVT.
      */
-    private void setSvtName(String svtName) {
+    private void setSvtName(final String svtName) {
         if (svtName == null) {
             throw new IllegalArgumentException("The svtName is null");
         }
         this.svtName = svtName;
         logger.info("SVT name set to " + ecalName);
     }
-    
+
     /**
      * True if the conditions record matches the current tag.
+     *
      * @param record The conditions record.
      * @return True if conditions record matches the currently used tag.
      */
-    private boolean matchesTag(ConditionsRecord record) {
+    private boolean matchesTag(final ConditionsRecord record) {
         if (this.tag == null) {
             // If there is no tag set then all records pass.
             return true;
         }
-        String recordTag = record.getTag();
+        final String recordTag = record.getTag();
         if (recordTag == null) {
             // If there is a tag set but the record has no tag, it is rejected.
             return false;
         }
-        if (tag.equals(recordTag)) {
-            // If the tags match, the record is accepted.
-            return true;
-        } else {
-            // Tags do not match so record is rejected.
-            return false;
-        }
-    }
-                              
+        return tag.equals(recordTag);
+    }
+
     /**
      * Cache conditions sets for all known tables.
      */
     private void cacheConditionsSets() {
         for (TableMetaData meta : tableRegistry.values()) {
             try {
-                logger.fine("caching conditions " + meta.key + " with type "+ meta.collectionClass.getCanonicalName());
+                logger.fine("caching conditions " + meta.key + " with type " + meta.collectionClass.getCanonicalName());
                 getCachedConditions(meta.collectionClass, meta.key);
             } catch (Exception e) {
                 logger.warning("could not cache conditions " + meta.key);
             }
         }
-     }
-           
+    }
+
     /**
      * Configure this class from an <code>InputStream</code> which should point to an XML document.
+     *
      * @param in the InputStream which should be in XML format
      */
-    private void configure(InputStream in) {
+    private void configure(final InputStream in) {
         if (!isConfigured) {
-            SAXBuilder builder = new SAXBuilder();
+            final SAXBuilder builder = new SAXBuilder();
             Document config = null;
             try {
                 config = builder.build(in);
@@ -934,83 +1053,86 @@
             logger.warning("System is already configured, so call to configure is ignored!");
         }
     }
-    
-    /**
-     * Setup the database connection from a file specified by a Java system
-     * property setting. This could be overridden by subsequent API calls to
-     * {@link #setConnectionProperties(File)} or {@link #setConnectionResource(String)}.
+
+    /**
+     * Setup the database connection from a file specified by a Java system property setting. This could be overridden
+     * by subsequent API calls to {@link #setConnectionProperties(File)} or {@link #setConnectionResource(String)}.
      */
     private void setupConnectionFromSystemProperty() {
-        String systemPropertiesConnectionPath = (String) System.getProperties().get(CONNECTION_PROPERTY);
+        final String systemPropertiesConnectionPath = (String) System.getProperties().get(CONNECTION_PROPERTY);
         if (systemPropertiesConnectionPath != null) {
-            File f = new File(systemPropertiesConnectionPath);
+            final File f = new File(systemPropertiesConnectionPath);
             if (!f.exists()) {
-                throw new RuntimeException("Connection properties file from " + CONNECTION_PROPERTY + " does not exist.");
+                throw new RuntimeException("Connection properties file from " + CONNECTION_PROPERTY
+                        + " does not exist.");
             }
             setConnectionProperties(f);
-            logger.info("connection setup from system property " + CONNECTION_PROPERTY + " = " + systemPropertiesConnectionPath);
-        }        
+            logger.info("connection setup from system property " + CONNECTION_PROPERTY + " = "
+                    + systemPropertiesConnectionPath);
+        }
     }
 
     /**
      * Load configuration information from an XML document.
+     *
      * @param document The XML document.
      */
-    private void loadConfiguration(Document document) {
-        
-        Element node = document.getRootElement().getChild("configuration");
-        
-        if (node == null)
+    private void loadConfiguration(final Document document) {
+
+        final Element node = document.getRootElement().getChild("configuration");
+
+        if (node == null) {
             return;
-        
+        }
+
         Element element = node.getChild("setupSvtDetector");
         if (element != null) {
             setupSvtDetector = Boolean.parseBoolean(element.getText());
             logger.config("setupSvtDetector = " + setupSvtDetector);
         }
-                
+
         element = node.getChild("ecalName");
         if (element != null) {
             setEcalName(element.getText());
         }
-        
+
         element = node.getChild("svtName");
         if (element != null) {
             setSvtName(element.getText());
         }
-        
+
         element = node.getChild("freezeAfterInitialize");
         if (element != null) {
             freezeAfterInitialize = Boolean.parseBoolean(element.getText());
             logger.config("freezeAfterInitialize = " + freezeAfterInitialize);
         }
-        
+
         element = node.getChild("cacheAllCondition");
         if (element != null) {
             cacheAllConditions = Boolean.parseBoolean(element.getText());
             logger.config("cacheAllConditions = " + cacheAllConditions);
         }
-        
+
         element = node.getChild("isTestRun");
         if (element != null) {
             isTestRun = Boolean.parseBoolean(element.getText());
             logger.config("isTestRun = " + isTestRun);
         }
-        
+
         element = node.getChild("logLevel");
         if (element != null) {
             setLogLevel(Level.parse(element.getText()));
         }
-        
+
         element = node.getChild("closeConnectionAfterInitialize");
         if (element != null) {
             closeConnectionAfterInitialize = Boolean.parseBoolean(element.getText());
             logger.config("closeConnectionAfterInitialize = " + closeConnectionAfterInitialize);
         }
-        
+
         element = node.getChild("loginTimeout");
         if (element != null) {
-            Integer timeout = Integer.parseInt(element.getText());
+            final Integer timeout = Integer.parseInt(element.getText());
             DriverManager.setLoginTimeout(timeout);
             logger.config("loginTimeout = " + timeout);
         }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseUtilities.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseUtilities.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseUtilities.java	Thu Apr  2 18:14:47 2015
@@ -5,19 +5,24 @@
 
 /**
  * Database utility methods.
- * @author Jeremy McCormick <[log in to unmask]>
  *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
+// TODO: Merge this single method into the manager class or a connection utilities class.
 public final class DatabaseUtilities {
-    
-    private DatabaseUtilities() {        
+
+    /**
+     * Do not allow instantiation.
+     */
+    private DatabaseUtilities() {
     }
-        
+
     /**
      * Cleanup a JDBC <code>ResultSet</code> by closing it and its <code>Statement</code>
+     *
      * @param resultSet The database ResultSet.
      */
-    static void cleanup(ResultSet resultSet) {
+    static void cleanup(final ResultSet resultSet) {
         Statement statement = null;
         try {
             statement = resultSet.getStatement();
@@ -28,13 +33,15 @@
                 resultSet.close();
             }
         } catch (Exception e) {
+            e.printStackTrace();
         }
         try {
             if (statement != null) {
                 statement.close();
-            } 
+            }
         } catch (Exception e) {
-        }        
+            e.printStackTrace();
+        }
     }
 
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/Field.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/Field.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/Field.java	Thu Apr  2 18:14:47 2015
@@ -6,16 +6,17 @@
 import java.lang.annotation.Target;
 
 /**
- * This is a java <code>Annotation</code> for assigning a "get" method 
+ * This is a java <code>Annotation</code> for assigning a "get" method
  * to one or more database table columns.
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.METHOD) 
 public @interface Field {
-    
+
     /**
      * The names of the table columns associated with this method.
+     * 
      * @return The names of the table column associated with this method.
      */
     String[] names() default "";
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/MultipleCollectionsAction.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/MultipleCollectionsAction.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/MultipleCollectionsAction.java	Thu Apr  2 18:14:47 2015
@@ -1,13 +1,27 @@
 package org.hps.conditions.database;
 
 /**
- * This is the action that should be taken if there are multiple conditions sets
- * returned from a query on type and name.
- * @author Jeremy McCormick <[log in to unmask]>
+ * This is the action that should be used to pick a conditions set
+ * if there are multiple conditions sets returned from a query on
+ * type and name.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public enum MultipleCollectionsAction {
+    /**
+     * Use the updated date.
+     */
     LAST_UPDATED,
+    /**
+     * Use the creation date.
+     */
     LAST_CREATED,
+    /**
+     * Use the largest run start number.
+     */
     LATEST_RUN_START,
+    /**
+     * Throw an error.
+     */
     ERROR
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/QueryBuilder.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/QueryBuilder.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/QueryBuilder.java	Thu Apr  2 18:14:47 2015
@@ -9,16 +9,27 @@
 
 /**
  * This is a static utility class for building SQL queries for the conditions system.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-// TODO: Most methods should be converted to use prepared statements, which is more flexible.
 public final class QueryBuilder {
 
+    /**
+     * Dot not allow instantiation.
+     */
     private QueryBuilder() {
     }
-        
-    static String buildSelect(String tableName, int collectionId, String[] fields, String order) {
+
+    /**
+     * Build a SQL select query string.
+     * @param tableName The name of the table.
+     * @param collectionId The collection ID.
+     * @param fields The list of fields.
+     * @param orderBy The field to order by.
+     * @return The SQL query string.
+     */
+    static String buildSelect(final String tableName, final int collectionId, final String[] fields,
+            final String orderBy) {
         StringBuffer buff = new StringBuffer();
         buff.append("SELECT ");
         if (fields == null) {
@@ -32,10 +43,11 @@
             buff.delete(buff.length() - 2, buff.length() - 1);
         }
         buff.append(" FROM " + tableName);
-        if (collectionId != -1)
+        if (collectionId != -1) {
             buff.append(" WHERE collection_id = " + collectionId);
-        if (order != null) {
-            buff.append(" ORDER BY " + order);
+        }
+        if (orderBy != null) {
+            buff.append(" ORDER BY " + orderBy);
         }
         return buff.toString();
     }
@@ -70,14 +82,20 @@
         return buff.toString();
     }
     */
-    
-    static String buildPreparedInsert(String tableName, ConditionsObject object) {
+
+    /**
+     * Build a prepared insert statement for a conditions object.
+     * @param tableName The name of the table.
+     * @param object The conditions object.
+     * @return The prepared insert statement.
+     */
+    static String buildPreparedInsert(final String tableName, final ConditionsObject object) {
         if (object.getFieldValues().size() == 0) {
             throw new IllegalArgumentException("The ConditionsObject has no values set.");
         }
-        StringBuffer buffer = new StringBuffer();
+        final StringBuffer buffer = new StringBuffer();
         buffer.append("INSERT INTO " + tableName + "( collection_id, ");
-        for (String fieldName : object.getFieldValues().keySet()) {            
+        for (String fieldName : object.getFieldValues().keySet()) {
             buffer.append(" " + fieldName + ",");
         }
         buffer.setLength(buffer.length() - 1);
@@ -90,34 +108,52 @@
         return buffer.toString();
     }
 
-    static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
-    
-    public static String buildInsert(String tableName, FieldValueMap fieldValues) {
+    /**
+     * Date formatting for insert statement.
+     */
+    final static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
+
+    /**
+     * Build an insert statement.
+     * @param tableName The table name.
+     * @param fieldValues The field values.
+     * @return The insert statement.
+     */
+    public static String buildInsert(final String tableName, final FieldValueMap fieldValues) {
         if (fieldValues.size() == 0) {
             throw new IllegalArgumentException("The FieldValueMap has no values.");
         }
-        StringBuffer buff = new StringBuffer();
-        buff.append("INSERT INTO " + tableName + " (");
+        final StringBuffer sb = new StringBuffer();
+        sb.append("INSERT INTO " + tableName + " (");
         for (String fieldName : fieldValues.keySet()) {
-            buff.append(" " + fieldName + ",");
+            sb.append(" " + fieldName + ",");
         }
-        buff.setLength(buff.length() - 1);
-        buff.append(" ) VALUES (");
+        sb.setLength(sb.length() - 1);
+        sb.append(" ) VALUES (");
         for (Object value : fieldValues.values()) {
-            String insertValue = value.toString();
+            final String insertValue = value.toString();
             if (value instanceof Date) {
-                buff.append(" STR_TO_DATE( '" + dateFormat.format((Date) value) + "', '%Y-%m-%d %H:%i:%S' ),");
+                sb.append(" STR_TO_DATE( '" + DATE_FORMAT.format((Date) value) + "', '%Y-%m-%d %H:%i:%S' ),");
             } else {
-                buff.append(" '" + insertValue + "',");
+                sb.append(" '" + insertValue + "',");
             }
         }
-        buff.setLength(buff.length() - 1);
-        buff.append(")");
-        return buff.toString();
+        sb.setLength(sb.length() - 1);
+        sb.append(")");
+        return sb.toString();
     }
 
-    public static String buildInsert(String tableName, int collectionID, List<String> columnNames, List<List<String>> rows) {
-        StringBuffer buff = new StringBuffer();
+    /**
+     * Build a SQL insert statement.
+     * @param tableName The table name.
+     * @param collectionID The collection ID.
+     * @param columnNames The column names.
+     * @param rows The row data.
+     * @return The SQL insert statement.
+     */
+    public static String buildInsert(final String tableName, final int collectionID,
+            final List<String> columnNames, final List<List<String>> rows) {
+        final StringBuffer buff = new StringBuffer();
         buff.append("INSERT INTO " + tableName + " ( collection_id");
         for (String column : columnNames) {
             buff.append(", " + column);
@@ -143,8 +179,13 @@
         return query;
     }
     */
-    
-    static String formatDate(Date date) {
-        return dateFormat.format(date);
+
+    /**
+     * Format the date for insert statement.
+     * @param date The input date.
+     * @return The formatted date string.
+     */
+    static String formatDate(final Date date) {
+        return DATE_FORMAT.format(date);
     }
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/Table.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/Table.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/Table.java	Thu Apr  2 18:14:47 2015
@@ -8,16 +8,16 @@
 /**
  * This annotation can be used to assign a class to one
  * or more database tables.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.TYPE) 
 public @interface Table {
-    
+
     /**
      * Get the names of the tables.
      * @return The names of the tables.
      */
-    public String[] names() default "";
+    String[] names() default "";
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.java	Thu Apr  2 18:14:47 2015
@@ -7,7 +7,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
 import org.hps.conditions.api.ConditionsObjectCollection;
 
@@ -19,51 +19,59 @@
  * <p>
  * It also has references to the implementation classes which are used for the ORM
  * onto {@link ConditionsObject} and {@link ConditionsObjectCollection}.
- * 
+ *
  * @see org.hps.conditions.api.ConditionsObject
- * @see org.hps.conditions.api.AbstractConditionsObjectCollection
- * 
- * @author Jeremy McCormick <[log in to unmask]>
- * 
+ * @see org.hps.conditions.api.BaseConditionsObjectCollection
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public final class TableMetaData {
 
+    /**
+     * The table name.
+     */
     protected String tableName;
+    
+    /**
+     * The conditions key named (unused???).
+     */
     protected String key;
+    
+    /**
+     * The object class.
+     */
     protected Class<? extends ConditionsObject> objectClass;
-    protected Class<? extends AbstractConditionsObjectCollection<?>> collectionClass;
+    
+    /**
+     * The collection class.
+     */
+    protected Class<? extends BaseConditionsObjectCollection<?>> collectionClass;
+    
+    /**
+     * The set of field names.
+     */
     protected Set<String> fieldNames = new LinkedHashSet<String>();
+    
+    /**
+     * The map of field names to their types.
+     */
     protected Map<String, Class<?>> fieldTypes;
 
     /**
-     * The fully qualified constructor.
-     * @param tableName The name of the table in the conditions database.
-     * @param objectClass The type of object for the data mapping.
-     * @param collectionClass The type of collection for the data mapping.
+     * Fully qualified constructor. 
+     * @param key The conditions key.
+     * @param tableName The table name.
+     * @param objectClass The object class.
+     * @param collectionClass The collection class.
+     * @param fieldNames The field names.
+     * @param fieldTypes The field types.
      */
-    /*
     public TableMetaData(
-            String key, 
-            String tableName, 
-            Class<? extends ConditionsObject> objectClass, 
-            Class<? extends AbstractConditionsObjectCollection<?>> collectionClass,
-            Map<String, Class<?>> fieldTypes) {
-       
-        this.key = key;
-        this.tableName = tableName;
-        this.objectClass = objectClass;
-        this.collectionClass = collectionClass;
-        this.fieldTypes = fieldTypes;
-    }
-    */
-    
-    public TableMetaData(
-            String key, 
-            String tableName, 
-            Class<? extends ConditionsObject> objectClass, 
-            Class<? extends AbstractConditionsObjectCollection<?>> collectionClass, 
-            Set<String> fieldNames,
-            Map<String, Class<?>> fieldTypes) {
+            final String key, 
+            final String tableName, 
+            final Class<? extends ConditionsObject> objectClass, 
+            final Class<? extends BaseConditionsObjectCollection<?>> collectionClass, 
+            final Set<String> fieldNames,
+            final Map<String, Class<?>> fieldTypes) {
         if (key == null) {
             throw new IllegalArgumentException("key is null");
         }
@@ -89,7 +97,7 @@
         this.fieldNames = fieldNames;
         this.fieldTypes = fieldTypes;
     }
-    
+
     /**
      * Get the type of object this table maps onto.
      * @return The type of object.
@@ -100,9 +108,9 @@
 
     /**
      * Get the type of collection this table maps onto.
-     * @return
+     * @return The collection class.
      */
-    public Class<? extends AbstractConditionsObjectCollection<?>> getCollectionClass() {
+    public Class<? extends BaseConditionsObjectCollection<?>> getCollectionClass() {
         return collectionClass;
     }
 
@@ -118,7 +126,7 @@
      * Get the type of the field called <code>fieldName</code>.
      * @return The type of the field.
      */
-    public Class<?> getFieldType(String fieldName) {
+    public Class<?> getFieldType(final String fieldName) {
         return fieldTypes.get(fieldName);
     }
 
@@ -129,7 +137,7 @@
     public String getTableName() {
         return tableName;
     }
-    
+
     /**
      * Get the key of this conditions type. May be different from table name but
      * is usually the same.
@@ -138,8 +146,14 @@
     public String getKey() {
         return key;
     }
-    
-    static public List<TableMetaData> findByObjectType(List<TableMetaData> tableMetaDataList, Class<? extends ConditionsObject> objectType) {
+
+    /**
+     * Find table meta data by object type.
+     * @param tableMetaDataList The list of table meta data e.g. from the registry.
+     * @param objectType The type of the object.
+     * @return The list of table meta data that have that object type.
+     */
+    public static List<TableMetaData> findByObjectType(List<TableMetaData> tableMetaDataList, Class<? extends ConditionsObject> objectType) {
         List<TableMetaData> list = new ArrayList<TableMetaData>();
         for (TableMetaData tableMetaData : tableMetaDataList) {
             if (tableMetaData.getObjectClass().equals(objectType)) {
@@ -150,6 +164,10 @@
         return list;
     }
     
+    /**
+     * Convert to a string.
+     * @return This object converted to a string.
+     */
     public String toString() {
         StringBuffer buff = new StringBuffer();
         buff.append("tableMetaData: tableName = " + this.getTableName());  

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/TableRegistry.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/TableRegistry.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/TableRegistry.java	Thu Apr  2 18:14:47 2015
@@ -8,17 +8,25 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
 import org.hps.conditions.api.ConditionsObjectUtilities;
 
 /**
  * This is a registry providing a map between tables and their meta-data.
- * @author Jeremy McCormick <[log in to unmask]>
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public final class TableRegistry extends HashMap<String, TableMetaData> {
-    
+
+    /**
+     * Maps types to table meta data.     
+     */
     static class ObjectTypeMap extends HashMap<Class<? extends ConditionsObject>, List<TableMetaData>> {
+        /**
+         * Add a connection between an object type and table meta data.
+         * @param type The object type.
+         * @param metaData The table meta data.
+         */
         void add(Class<? extends ConditionsObject> type, TableMetaData metaData) {
             if (this.get(type) == null) {
                 this.put(type, new ArrayList<TableMetaData>());
@@ -26,39 +34,63 @@
             this.get(type).add(metaData);
         }
     }
-    
-    static class CollectionTypeMap extends HashMap<Class<? extends AbstractConditionsObjectCollection<?>>, List<TableMetaData>> {
-        void add(Class<? extends AbstractConditionsObjectCollection<?>> type, TableMetaData metaData) {
+
+    /**
+     * Maps collection types to table meta data.
+     */    
+    static class CollectionTypeMap extends HashMap<Class<? extends BaseConditionsObjectCollection<?>>, List<TableMetaData>> {
+        /**
+         * Add a connection between a collection type and table meta data.
+         * @param type The collection type.
+         * @param metaData The table meta data.
+         */
+        void add(Class<? extends BaseConditionsObjectCollection<?>> type, TableMetaData metaData) {
             if (this.get(type) == null) {
                 this.put(type, new ArrayList<TableMetaData>());                                    
             }
             this.get(type).add(metaData);
-        }        
+        }
     }
+
+    /**
+     * Map between object types and meta data.
+     */
+    private ObjectTypeMap objectTypeMap = new ObjectTypeMap();
     
-    ObjectTypeMap objectTypeMap = new ObjectTypeMap();
-    CollectionTypeMap collectionTypeMap = new CollectionTypeMap();
-        
+    /**
+     * Map between collection types and meta data.
+     */
+    private CollectionTypeMap collectionTypeMap = new CollectionTypeMap();
+
+    /**
+     * Class should not be directly instantiated.
+     * <p>
+     * Use the {@link #create()} method instead.
+     */
     private TableRegistry() {
     }
-    
+
+    /**
+     * Create a new table meta data registry.
+     * @return The meta data registry.
+     */
     static TableRegistry create() {
         TableRegistry registry = new TableRegistry();
         for (Class<? extends ConditionsObject> objectType : ConditionsObjectUtilities.findConditionsObjectTypes()) {
-            
+
             // Get the collection type.
-            Class<? extends AbstractConditionsObjectCollection<?>> collectionType = 
+            Class<? extends BaseConditionsObjectCollection<?>> collectionType =
                     ConditionsObjectUtilities.getCollectionType(objectType);
-            
+
             // Get the list of field names.
-            Set<String> fieldNames = ConditionsObjectUtilities.getFieldNames(objectType);            
-            
+            Set<String> fieldNames = ConditionsObjectUtilities.getFieldNames(objectType);
+
             // Create map of fields to their types.
             Map<String, Class<?>> fieldTypes = new HashMap<String, Class<?>>();
             for (Method method : objectType.getMethods()) {
                 if (!method.getReturnType().equals(Void.TYPE)) {
                     for (Annotation annotation : method.getAnnotations()) {
-                        if (annotation.annotationType().equals(Field.class)) {                            
+                        if (annotation.annotationType().equals(Field.class)) {
                             Field field = (Field) annotation;
                             for (String fieldName : field.names()) {
                                 fieldTypes.put(fieldName, method.getReturnType());
@@ -67,30 +99,49 @@
                     }
                 }
             }
-                        
-            for (String name : ConditionsObjectUtilities.getTableNames(objectType)) {                    
+
+            for (String name : ConditionsObjectUtilities.getTableNames(objectType)) {
                 // Create a meta data mapping for each table name in the class description.
                 TableMetaData data = new TableMetaData(name, name, objectType, collectionType, fieldNames, fieldTypes);
-                registry.put(name, data);                               
+                registry.put(name, data);
                 registry.objectTypeMap.add(objectType, data);
-                registry.collectionTypeMap.add(collectionType, data);                  
+                registry.collectionTypeMap.add(collectionType, data);
             }            
         }
         return registry;
     }
-          
+
+    /**
+     * Find meta data by object type.
+     * @param objectType The object type.
+     * @return The meta data or null if none exists.
+     */
     List<TableMetaData> findByObjectType(Class<? extends ConditionsObject> objectType) {
         return objectTypeMap.get(objectType);
     }
-    
+
+    /**
+     * Find meta data by collection type.
+     * @param collectionType The collection type.
+     * @return The meta data or null if none exists.
+     */
     List<TableMetaData> findByCollectionType(Class<?> collectionType) {
         return collectionTypeMap.get(collectionType);
     }
-    
+
+    /**
+     * Find meta data by table name.
+     * @param name The table name.
+     * @return The meta data or null if none exists.
+     */
     TableMetaData findByTableName(String name) {
         return this.get(name);
     }
-    
+
+    /**
+     * Convert this object to a string.
+     * @return This object converted to a string.
+     */
     public String toString() {  
         StringBuffer buff = new StringBuffer();
         for (TableMetaData tableMetaData : this.values()) {

Added: java/trunk/conditions/src/main/java/org/hps/conditions/database/package-info.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/package-info.java	(added)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/package-info.java	Thu Apr  2 18:14:47 2015
@@ -0,0 +1,12 @@
+/**
+ * This package contains classes for converting database information
+ * into conditions classes as well as updating the records from the
+ * objects.
+ * 
+ * @see DatabaseConditionsManager
+ * @see TableMetaData
+ * @see AbstractConditionsObjectConverter
+ * @see ConditionsSeriesConverter
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+package org.hps.conditions.database;

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalBadChannel.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalBadChannel.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalBadChannel.java	Thu Apr  2 18:14:47 2015
@@ -2,8 +2,8 @@
 
 import java.util.Comparator;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -15,15 +15,32 @@
  */
 @Table(names = {"ecal_bad_channels", "test_run_ecal_bad_channels"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_UPDATED)
-public final class EcalBadChannel extends AbstractConditionsObject {
+public final class EcalBadChannel extends BaseConditionsObject {
 
-    public static class EcalBadChannelCollection extends AbstractConditionsObjectCollection<EcalBadChannel> {
+    /**
+     * The collection class for this object.
+     */
+    @SuppressWarnings("serial")
+    public static class EcalBadChannelCollection extends BaseConditionsObjectCollection<EcalBadChannel> {
         
-        public AbstractConditionsObjectCollection<EcalBadChannel> sorted() {
+        /**
+         * Sort and return the collection without modifying in place.
+         * @return The sorted collection.
+         */
+        public BaseConditionsObjectCollection<EcalBadChannel> sorted() {
             return sorted(new ChannelIdComparator());
         }
                 
+        /**
+         * Comparison class for ECAL bad channels, which uses channel ID.
+         */
         class ChannelIdComparator implements Comparator<EcalBadChannel> {
+            /**
+             * Compare two ECAL bad channel objects.
+             * @param o1 The first object.
+             * @param o2 The second object.
+             * @return -1, 0, 1 if first channel ID is less than, equal to, or greater than the second.
+             */
             public int compare(EcalBadChannel o1, EcalBadChannel o2) {
                 if (o1.getChannelId() < o2.getChannelId()) {
                     return -1;
@@ -33,15 +50,15 @@
                     return 0;
                 }
             }
-        }        
+        }
     }
-    
+
     /**
      * Get the ECAL channel ID.
      * @return The ECAL channel ID.
      */
     @Field(names = {"ecal_channel_id"})
     public int getChannelId() {
-        return getFieldValue("ecal_channel_id");    
+        return getFieldValue("ecal_channel_id");
     }
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCalibration.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCalibration.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCalibration.java	Thu Apr  2 18:14:47 2015
@@ -2,8 +2,8 @@
 
 import java.util.Comparator;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -12,24 +12,41 @@
 /**
  * This class is a simplistic representation of ECal pedestal and noise values
  * from the conditions database.
- * 
+ *
  * The pedestal and noise are in units of ADC counts. They are the mean and the
  * standard deviation of the digitized pre-amp output.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @Table(names = {"ecal_calibrations", "test_run_ecal_calibrations", "ecal_hardware_calibrations"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public final class EcalCalibration extends AbstractConditionsObject {
+public final class EcalCalibration extends BaseConditionsObject {
 
-    public static class EcalCalibrationCollection extends AbstractConditionsObjectCollection<EcalCalibration> {
-        
-        public AbstractConditionsObjectCollection<EcalCalibration> sorted() {
+    /**
+     * The collection implementation for the object class.
+     */
+    @SuppressWarnings("serial")
+    public static class EcalCalibrationCollection extends BaseConditionsObjectCollection<EcalCalibration> {
+
+        /**
+         * Sort and return the collection but do no modify in place.
+         * @return The sorted collection.
+         */
+        public BaseConditionsObjectCollection<EcalCalibration> sorted() {
             return sorted(new ChannelIdComparator());
         }
-                
+
+        /**
+         * Comparison using channel ID.
+         */
         class ChannelIdComparator implements Comparator<EcalCalibration> {
-            public int compare(EcalCalibration o1, EcalCalibration o2) {
+            /**
+             * Compare two ECAL calibration objects.
+             * @param o1 The first object.
+             * @param o2 The second object.
+             * @return -1, 0, 1 if first channel ID is less than, equal to, or greater than the second.
+             */
+            public int compare(final EcalCalibration o1, final EcalCalibration o2) {
                 if (o1.getChannelId() < o2.getChannelId()) {
                     return -1;
                 } else if (o1.getChannelId() > o2.getChannelId()) {
@@ -40,11 +57,20 @@
             }
         }
     }
-               
+
+    /**
+     * No argument constructor.
+     */
     public EcalCalibration() {
     }
-    
-    public EcalCalibration(int channelId, double pedestal, double noise) {
+
+    /**
+     * Full qualified constructor.
+     * @param channelId The channel ID.
+     * @param pedestal The pedestal measurement (ADC counts).
+     * @param noise The noise measured as RMS.
+     */
+    public EcalCalibration(final int channelId, final double pedestal, final double noise) {
         this.setFieldValue("ecal_channel_id", channelId);
         this.setFieldValue("pedestal", pedestal);
         this.setFieldValue("noise", noise);
@@ -56,12 +82,12 @@
      */
     @Field(names = {"ecal_channel_id"})
     public int getChannelId() {
-        return getFieldValue("ecal_channel_id");    
+        return getFieldValue("ecal_channel_id");
     }
 
     /**
      * Get the pedestal value in units of ADC counts, which is the mean of the
-     * digitized pre-amp output.
+     * digitized preamplifier output.
      * @return The gain value.
      */
     @Field(names = {"pedestal"})
@@ -71,7 +97,7 @@
 
     /**
      * Get the noise value in units of ADC counts, which is the standard
-     * deviation of the digitized pre-amp output.
+     * deviation of the digitized preamplifier output.
      * @return The noise value.
      */
     @Field(names = {"noise"})

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannel.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannel.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannel.java	Thu Apr  2 18:14:47 2015
@@ -4,10 +4,10 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.conditions.api.AbstractIdentifier;
-import org.hps.conditions.database.ConditionsObjectConverter;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
+import org.hps.conditions.database.AbstractConditionsObjectConverter;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.Field;
@@ -22,27 +22,40 @@
 /**
  * This class encapsulates all the information about a single ECal channel,
  * corresponding to one physical crystal in the detector.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @Table(names = {"ecal_channels", "test_run_ecal_channels"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED, converter = EcalChannel.EcalChannelConverter.class)
-public final class EcalChannel extends AbstractConditionsObject {
-    
-    public static final class EcalChannelConverter extends ConditionsObjectConverter<EcalChannelCollection> {
-               
+public final class EcalChannel extends BaseConditionsObject {
+
+    /**
+     * Customized converter for this object.
+     */
+    public static final class EcalChannelConverter extends AbstractConditionsObjectConverter<EcalChannelCollection> {
+
+        /**
+         * Create an {@link EcalChannel} collection.
+         * @param conditionsManager The conditions manager.
+         * @param name The name of the conditions data table.
+         * @return The collection of ECAL channel objects.
+         */
         @Override
         public EcalChannelCollection getData(ConditionsManager conditionsManager, String name) {
-            EcalChannelCollection collection = super.getData(conditionsManager, name);
-            Subdetector ecal = DatabaseConditionsManager.getInstance().getEcalSubdetector();
+            final EcalChannelCollection collection = super.getData(conditionsManager, name);
+            final Subdetector ecal = DatabaseConditionsManager.getInstance().getEcalSubdetector();
             collection.buildGeometryMap(ecal.getDetectorElement().getIdentifierHelper(), ecal.getSystemID());
             return collection;
         }
 
+        /**
+         * Get the type this converter handles.
+         * @return The type this converter handles.
+         */
         @Override
         public Class<EcalChannelCollection> getType() {
             return EcalChannelCollection.class;
-        }        
+        }
     }
     
     /**
@@ -51,22 +64,45 @@
      */
     public static final class DaqId extends AbstractIdentifier {
 
+        /**
+         * The DAQ crate number.
+         */
         private int crate = -1;
+        
+        /**
+         * The DAQ slot number. 
+         */
         private int slot = -1;
+        
+        /**
+         * The DAQ channel number.
+         */
         private int channel = -1;
 
-        public DaqId(int values[]) {
+        /**
+         * Create a DAQ ID from an array of values.
+         * @param values The list of values (crate, slot, channel).
+         */
+        public DaqId(final int values[]) {
             crate = values[0];
             slot = values[1];
             channel = values[2];
         }
 
+        /**
+         * Encode this ID into a long value.
+         * @return The encoded long value.
+         */
         @Override
         public long encode() {
             // from Sho's code
             return (((long) crate) << 32) | ((long) slot << 16) | (long) channel;
         }
 
+        /**
+         * Check if the values look valid.
+         * @return True if ID's values are valid.
+         */
         @Override
         public boolean isValid() {
             return crate != -1 && slot != -1 && channel != -1;
@@ -79,19 +115,42 @@
      */
     public static final class GeometryId extends AbstractIdentifier {
 
+        /**
+         * The subdetector system ID.
+         */
         private int system = -1;
+        
+        /**
+         * The crystal's X index.
+         */
         private int x = Integer.MAX_VALUE;
+        
+        /**
+         * The crystal's Y index.
+         */
         private int y = Integer.MAX_VALUE;
 
+        /**
+         * The helper for using identifiers.
+         */
         private IIdentifierHelper helper;
 
-        public GeometryId(IIdentifierHelper helper, int[] values) {
+        /**
+         * Create a geometry ID.
+         * @param helper The ID helper.
+         * @param values The list of values (system, x, y).
+         */
+        public GeometryId(final IIdentifierHelper helper, final int[] values) {
             this.helper = helper;
             system = values[0];
             x = values[1];
             y = values[2];
         }
 
+        /**
+         * Encode this ID as a long using the ID helper.
+         * @return The encoded long value.
+         */
         @Override
         public long encode() {
             IExpandedIdentifier expId = new ExpandedIdentifier(helper.getIdentifierDictionary().getNumberOfFields());
@@ -101,6 +160,10 @@
             return helper.pack(expId).getValue();
         }
 
+        /**
+         * True if ID's values look valid.
+         * @return True if ID is valid.
+         */
         @Override
         public boolean isValid() {
             return system != -1 && x != Integer.MAX_VALUE && y != Integer.MAX_VALUE;
@@ -117,31 +180,60 @@
      */
     public static final class ChannelId extends AbstractIdentifier {
 
+        /**
+         * The channel ID value.
+         */
         private int id = -1;
 
+        /**
+         * Create a channel ID.
+         * @param values The values (size 0 with single int value).
+         */
         public ChannelId(int[] values) {
             id = values[0];
         }
 
+        /**
+         * Encode as long value (just returns the int value).
+         * @return The ID's value.
+         */
         @Override
         public long encode() {
             return id;
         }
 
+        /**
+         * True if ID looks valid.
+         * @return True if ID looks valid.
+         */
         @Override
         public boolean isValid() {
             return id != -1;
         }
     }
-    
+
+    /**
+     * Create a {@link DaqId} for this ECAL channel. 
+     * @return The DAQ Id for this ECAL channel.
+     */
     DaqId createDaqId() {
         return new DaqId(new int[] { getCrate(), getSlot(), getChannel() });
     }
 
+    /**
+     * Create a {@link GeometryId} for this ECAL channel.
+     * @param helper The ID helper.
+     * @param system The subdetector system ID.
+     * @return The geometry ID.
+     */
     GeometryId createGeometryId(IIdentifierHelper helper, int system) {
         return new GeometryId(helper, new int[] { system, getX(), getY() });
     }
 
+    /**
+     * Create a channel ID for this ECAL channel.
+     * @return The channel ID.
+     */
     ChannelId createChannelId() {
         return new ChannelId(new int[] { this.getChannelId() });
     }
@@ -149,36 +241,51 @@
     /**
      * A collection of {@link EcalChannel} objects.
      */
-    public static class EcalChannelCollection extends AbstractConditionsObjectCollection<EcalChannel> {
-
-        // Identifier maps for fast lookup.
-        Map<Long, EcalChannel> daqMap = new HashMap<Long, EcalChannel>();
-        Map<Long, EcalChannel> geometryMap = new HashMap<Long, EcalChannel>();
+    public static class EcalChannelCollection extends BaseConditionsObjectCollection<EcalChannel> {
+
+        /**
+         * Map of {@link DaqId} to channel object.
+         */
+        private Map<Long, EcalChannel> daqMap = new HashMap<Long, EcalChannel>();
+        
+        /**
+         * Map of {@link GeometryId} to channel object.
+         */
+        private Map<Long, EcalChannel> geometryMap = new HashMap<Long, EcalChannel>();
+        
+        /**
+         * Map of {@link ChannelId} to channel object.
+         */
         Map<Long, EcalChannel> channelMap = new HashMap<Long, EcalChannel>();
 
         /**
          * Add an <code>EcalChannel</code> to the collection and cache its ID
          * information. The GeometryId must be created later as it requires
          * access to the Detector API.
-         */
-        @Override
-        public boolean add(EcalChannel channel)  {
+         * 
+         * @param channel The ECAL channel object.
+         * @return True if object was added successfully.
+         */
+        @Override
+        public boolean add(final EcalChannel channel)  {
             super.add(channel);
-            DaqId daqId = channel.createDaqId();
-            if (daqId.isValid())
+            final DaqId daqId = channel.createDaqId();
+            if (daqId.isValid()) {
                 daqMap.put(daqId.encode(), channel);
-            ChannelId channelId = channel.createChannelId();
-            if (channelId.isValid())
+            }
+            final ChannelId channelId = channel.createChannelId();
+            if (channelId.isValid()) {
                 channelMap.put(channelId.encode(), channel);
+            }
             return true;
         }
 
         /**
-         * Build the map of geometry IDs.
+         * Build the map of {@link GeometryId} objects.
          * @param helper The identifier helper of the subdetector.
          * @param system The system ID of the subdetector.
          */
-        void buildGeometryMap(IIdentifierHelper helper, int system) {
+        void buildGeometryMap(final IIdentifierHelper helper, final int system) {
             for (EcalChannel channel : this) {
                 GeometryId geometryId = channel.createGeometryId(helper, system);
                 geometryMap.put(geometryId.encode(), channel);
@@ -190,7 +297,7 @@
          * @param daqId The DAQ ID object.
          * @return The matching channel or null if does not exist.
          */
-        public EcalChannel findChannel(DaqId daqId) {
+        public EcalChannel findChannel(final DaqId daqId) {
             return daqMap.get(daqId.encode());
         }
 
@@ -199,7 +306,7 @@
          * @param geometryId The geometric ID object.
          * @return The matching channel or null if does not exist.
          */
-        public EcalChannel findChannel(GeometryId geometryId) {
+        public EcalChannel findChannel(final GeometryId geometryId) {
             return geometryMap.get(geometryId.encode());
         }
 
@@ -208,7 +315,7 @@
          * @param channelId The channel ID object.
          * @return The matching channel or null if does not exist.
          */
-        public EcalChannel findChannel(ChannelId channelId) {
+        public EcalChannel findChannel(final ChannelId channelId) {
             return channelMap.get(channelId.encode());
         }
 
@@ -217,7 +324,7 @@
          * @param id The encoded geometric ID.
          * @return The matching channel or null if does not exist.
          */
-        public EcalChannel findGeometric(long id) {
+        public EcalChannel findGeometric(final long id) {
             return geometryMap.get(id);
         }
 
@@ -226,7 +333,7 @@
          * @param id The encoded channel ID.
          * @return The matching channel or null if does not exist.
          */
-        public EcalChannel findChannel(long id) {
+        public EcalChannel findChannel(final long id) {
             return channelMap.get(id);
         }
 
@@ -235,15 +342,28 @@
          * @param id The encoded DAQ ID.
          * @return The matching channel or null if does not exist.
          */
-        public EcalChannel findDaq(long id) {
+        public EcalChannel findDaq(final long id) {
             return daqMap.get(id);
         }        
-                   
-        public AbstractConditionsObjectCollection<EcalChannel> sorted() {
+
+        /**
+         * Sort collection and return but do not sort in place.
+         * @return The sorted copy of the collection.
+         */
+        public BaseConditionsObjectCollection<EcalChannel> sorted() {
             return sorted(new ChannelIdComparator());
         }
-            
-        class ChannelIdComparator implements Comparator<EcalChannel> {        
+
+        /**
+         * Comparison of ECAL channel objects.
+         */
+        class ChannelIdComparator implements Comparator<EcalChannel> {
+            /**
+             * Compare two ECAL channel objects using their channel ID.
+             * @param c1 The first object.
+             * @param c2 The second object.
+             * @return -1, 0, or 1 if first channel is less than, equal to or greater than second.
+             */
             public int compare(EcalChannel c1, EcalChannel c2) {
                 if (c1.getChannelId() < c2.getChannelId()) {
                     return -1;
@@ -252,14 +372,14 @@
                 } else {
                     return 0;
                 }
-            }            
+            }
         }
     }
 
     /**
      * Get the crate number of the channel.
      * @return The crate number.
-     * 
+     *
      */
     @Field(names = {"crate"})
     public int getCrate() {
@@ -313,9 +433,10 @@
 
     /**
      * Implementation of equals.
+     * @param o The object to compare equality to.
      * @return True if objects are equal.
      */
-    public boolean equals(Object o) {
+    public boolean equals(final Object o) {
         if (o == null) {
             return false;
         }
@@ -325,7 +446,8 @@
         if (o == this) {
             return true;
         }
-        EcalChannel c = (EcalChannel) o;
-        return c.getChannelId() == getChannelId() && c.getCrate() == getCrate() && c.getSlot() == getSlot() && c.getChannel() == getChannel() && c.getX() == getX() && c.getY() == getY();
-    }
-}
+        final EcalChannel c = (EcalChannel) o;
+        return c.getChannelId() == getChannelId() && c.getCrate() == getCrate() && c.getSlot() == getSlot() 
+                && c.getChannel() == getChannel() && c.getX() == getX() && c.getY() == getY();
+    }
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannelConstants.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannelConstants.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalChannelConstants.java	Thu Apr  2 18:14:47 2015
@@ -2,14 +2,38 @@
 
 /**
  * This class represents ECAL conditions per channel.
- * @author Jeremy McCormick <[log in to unmask]>
+ * <p>
+ * It is an aggregation of various ECAL conditions objects 
+ * that are associated to a single channel.
+ * 
+ * @see EcalGain
+ * @see EcalCalibration
+ * @see EcalTimeShift
+ * @see EcalBadChannel
+ * 
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public final class EcalChannelConstants {
 
-    EcalGain gain = null;
-    EcalCalibration calibration = null;
-    EcalTimeShift timeShift = null;
-    boolean badChannel = false;
+    /**
+     * The channel {@link EcalGain} conditions.
+     */
+    private EcalGain gain = null;
+    
+    /**
+     * The channel {@link EcalCalibration} conditions.
+     */
+    private EcalCalibration calibration = null;
+    
+    /**
+     * The channel {@link EcalTimeShift} conditions.
+     */
+    private EcalTimeShift timeShift = null;
+    
+    /**
+     * True if channel is bad and should not be used for reconstruction.
+     */
+    private boolean badChannel = false;
 
     /**
      * Class constructor, which is package protected.
@@ -21,7 +45,7 @@
      * Set the gain.
      * @param gain The gain object.
      */
-    void setGain(EcalGain gain) {
+    void setGain(final EcalGain gain) {
         this.gain = gain;
     }
 
@@ -29,7 +53,7 @@
      * Set the calibration.
      * @param calibration The calibration object.
      */
-    void setCalibration(EcalCalibration calibration) {
+    void setCalibration(final EcalCalibration calibration) {
         this.calibration = calibration;
     }
 
@@ -37,7 +61,7 @@
      * Set the time shift.
      * @param timeShift the time shift
      */
-    void setTimeShift(EcalTimeShift timeShift) {
+    void setTimeShift(final EcalTimeShift timeShift) {
         this.timeShift = timeShift;
     }
 
@@ -45,7 +69,7 @@
      * Set whether this is a bad channel.
      * @param badChannel set to true to flag channel as bad
      */
-    void setBadChannel(boolean badChannel) {
+    void setBadChannel(final boolean badChannel) {
         this.badChannel = badChannel;
     }
 
@@ -67,18 +91,17 @@
 
     /**
      * Get the time shift.
-     * @return the time shift
+     * @return The time shift.
      */
     public EcalTimeShift getTimeShift() {
         return timeShift;
     }
 
     /**
-     * Get whether this channel is bad or not.
-     * @return True if channel is bad; false if not.
+     * True if this is a bad channel.
+     * @return True if channel is bad.
      */
     public boolean isBadChannel() {
         return badChannel;
     }
-
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditions.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditions.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditions.java	Thu Apr  2 18:14:47 2015
@@ -11,47 +11,57 @@
 /**
  * This class provides access to all ECAL conditions from the database,
  * including gain, pedestal and bad channel settings, per crystal.
- * 
+ * <p>
  * Unlike most conditions data types, it does not extend
  * {@link org.hps.conditions.api.ConditionsObject}, because it is a composite object
- * containing data assembled from many other
- * {@link org.hps.conditions.ConditionsObjects}.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * containing data assembled from many other {@link org.hps.conditions.ConditionsObjects}
+ * and has a special data converter {@link EcalConditionsConverter}.
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public final class EcalConditions {
 
-    // Channel collection.
-    EcalChannelCollection channelCollection = new EcalChannelCollection();
+    /**
+     * The collection of {@link EcalChannel} objects.
+     */
+    private EcalChannelCollection channelCollection = new EcalChannelCollection();
 
-    // Map between channels and their conditions data.
-    Map<EcalChannel, EcalChannelConstants> channelConstants = new HashMap<EcalChannel, EcalChannelConstants>();
+    /**
+     * Map between channels and their conditions constants.
+     */
+    private final Map<EcalChannel, EcalChannelConstants> channelConstants = 
+            new HashMap<EcalChannel, EcalChannelConstants>();
 
-    // Map between geometry stations and channel.
-    EcalCrystalChannelMap crystalMap;
-    
-    // Reference to the current ECAL subdetector in the geometry.
-    Subdetector subdetector;
-    
     /**
-     * Class constructor, which is package protected.
+     * Map between channels and geometric crystals.
      */
-    EcalConditions(Subdetector subdetector) {
+    private EcalCrystalChannelMap crystalMap;
+
+    /**
+     * The current ECAL subdetector in the geometry.
+     */
+    private final Subdetector subdetector;
+
+    /**
+     * Class constructor.
+     * @param subdetector The ECAL subdetector object.
+     */
+    EcalConditions(final Subdetector subdetector) {
         if (subdetector == null) {
             throw new IllegalArgumentException("The subdetector argument is null.");
         }
-        this.subdetector = subdetector;        
+        this.subdetector = subdetector;
     }
 
     /**
      * Set the channel map.
-     * @param channels The channel map.
+     * @param channelCollection The channel map.
      */
-    void setChannelCollection(EcalChannelCollection channelCollection) {
+    void setChannelCollection(final EcalChannelCollection channelCollection) {
         this.channelCollection = channelCollection;
-        
+
         // Build the map between crystals and channels.
-        crystalMap = new EcalCrystalChannelMap((HPSEcalAPI)subdetector.getDetectorElement(), channelCollection);
+        crystalMap = new EcalCrystalChannelMap((HPSEcalAPI) subdetector.getDetectorElement(), channelCollection);
     }
 
     /**
@@ -61,99 +71,106 @@
     public EcalChannelCollection getChannelCollection() {
         return channelCollection;
     }
-    
+
     /**
      * Get the channel information for a geometric crystal.
      * @param crystal The geometric crystal.
      * @return The channel information or null if does not exist.
      */
-    public EcalChannel getChannel(EcalCrystal crystal) {
+    public EcalChannel getChannel(final EcalCrystal crystal) {
         return crystalMap.getEcalChannel(crystal);
     }
-        
+
     /**
      * Get the conditions constants for a specific channel. These will be
      * created if they do not exist for the given channel, BUT only channels in
      * the channel map are accepted as an argument.
      * @param channel The ECAL channel.
      * @return The conditions constants for the channel.
-     * @throws IllegalArgumentException if channel does not exist in the channel
-     *             map.
+     * @throws IllegalArgumentException if channel does not exist in the channel map.
      */
-    public EcalChannelConstants getChannelConstants(EcalChannel channel) {
+    public EcalChannelConstants getChannelConstants(final EcalChannel channel) {
         // This channel must come from the map.
         if (!channelCollection.contains(channel)) {
             System.err.println("Channel not found in map: " + channel);
             throw new IllegalArgumentException("Channel was not found in map.");
         }
         // If channel has no data yet, then add it.
-        if (!channelConstants.containsKey(channel))
+        if (!channelConstants.containsKey(channel)) {
             channelConstants.put(channel, new EcalChannelConstants());
+        }
         return channelConstants.get(channel);
     }
 
     /**
+     * This is just used for a divider length in print output.
+     */
+    private static final int DIVIDER_SIZE = 91;
+    
+    /**
      * Convert this object to a string.
      * @return A string representation of this object.
      */
+    // FIXME: The print out from this method looks like a mess.
     public String toString() {
-        StringBuffer buff = new StringBuffer();
+        final StringBuffer sb = new StringBuffer();
 
-        buff.append('\n');
-        buff.append("Printing ECAL conditions ...");
-        buff.append('\n');
-        buff.append('\n');
+        sb.append('\n');
+        sb.append("Printing ECAL conditions ...");
+        sb.append('\n');
+        sb.append('\n');
 
         // Table header:
-        buff.append("id");
-        buff.append("    ");
-        buff.append("crate");
-        buff.append("  ");
-        buff.append("slot");
-        buff.append("   ");
-        buff.append("channel");
-        buff.append("  ");
-        buff.append("x");
-        buff.append("      ");
-        buff.append("y");
-        buff.append("     ");
-        buff.append("gain");
-        buff.append("       ");
-        buff.append("pedestal");
-        buff.append("   ");
-        buff.append("noise");
-        buff.append("      ");
-        buff.append("time_shift");
-        buff.append(" ");
-        buff.append("bad");
-        buff.append('\n');
-        for (int i = 0; i < 91; i++) {
-            buff.append("-");
+        sb.append("id");
+        sb.append("    ");
+        sb.append("crate");
+        sb.append("  ");
+        sb.append("slot");
+        sb.append("   ");
+        sb.append("channel");
+        sb.append("  ");
+        sb.append("x");
+        sb.append("      ");
+        sb.append("y");
+        sb.append("     ");
+        sb.append("gain");
+        sb.append("       ");
+        sb.append("pedestal");
+        sb.append("   ");
+        sb.append("noise");
+        sb.append("      ");
+        sb.append("time_shift");
+        sb.append(" ");
+        sb.append("bad");
+        sb.append('\n');
+        for (int i = 0; i < DIVIDER_SIZE; i++) {
+            sb.append("-");
         }
-        buff.append('\n');
+        sb.append('\n');
 
         // Loop over all channels.
         for (EcalChannel channel : channelCollection) {
 
-            EcalChannelConstants constants = getChannelConstants(channel);
+            final EcalChannelConstants constants = getChannelConstants(channel);
 
-            double gain = constants.getGain().getGain();
-            double pedestal = constants.getCalibration().getPedestal();
-            double noise = constants.getCalibration().getNoise();
-            double timeShift = constants.getTimeShift().getTimeShift();
-            boolean bad = constants.isBadChannel();
+            final double gain = constants.getGain().getGain();
+            final double pedestal = constants.getCalibration().getPedestal();
+            final double noise = constants.getCalibration().getNoise();
+            final double timeShift = constants.getTimeShift().getTimeShift();
+            final boolean bad = constants.isBadChannel();
 
             // Channel data.
-            buff.append(String.format("%-5d %-6d %-6d %-8d %-6d %-6d", channel.getChannelId(), channel.getCrate(), channel.getSlot(), channel.getChannel(), channel.getX(), channel.getY()));
+            sb.append(String.format("%-5d %-6d %-6d %-8d %-6d %-6d", channel.getChannelId(), channel.getCrate(),
+                    channel.getSlot(), channel.getChannel(), channel.getX(), channel.getY()));
 
             // Constants.
-            buff.append(String.format("%-10.4f %-10.4f %-10.4f %-11.4f", gain, pedestal, noise, timeShift));
+            sb.append(String.format("%-10.4f %-10.4f %-10.4f %-11.4f", gain, pedestal, noise, timeShift));
 
             // Bad channel.
-            buff.append(bad);
+            sb.append(bad);
 
-            buff.append('\n');
+            sb.append('\n');
         }
-        return buff.toString();
+        return sb.toString();
     }
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java	Thu Apr  2 18:14:47 2015
@@ -1,6 +1,4 @@
 package org.hps.conditions.ecal;
-
-import java.util.logging.Logger;
 
 import org.hps.conditions.api.ConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsSeries;
@@ -11,89 +9,118 @@
 import org.hps.conditions.ecal.EcalChannel.EcalChannelCollection;
 import org.hps.conditions.ecal.EcalGain.EcalGainCollection;
 import org.hps.conditions.ecal.EcalTimeShift.EcalTimeShiftCollection;
-import org.hps.conditions.svt.AbstractSvtConditionsConverter;
 import org.lcsim.conditions.ConditionsConverter;
 import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.geometry.Detector;
-import org.lcsim.util.log.LogUtil;
 
 /**
- * This class loads all ECal conditions into an {@link EcalConditions} object
+ * This class loads all ECAL conditions into an {@link EcalConditions} object
  * from the database, based on the current run number known by the conditions
  * manager.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
- * @author Omar Moreno <[log in to unmask]>
+ *
+ * @see EcalConditions
+ * @see EcalChannel
+ * @see EcalGain
+ * @see EcalCalibration
+ * @see EcalBadChannel
+ * @see EcalTimeShift
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
+ * @author <a href="mailto:[log in to unmask]">Omar Moreno</a>
  */
 public class EcalConditionsConverter implements ConditionsConverter<EcalConditions> {
 
-    static Logger logger = LogUtil.create(AbstractSvtConditionsConverter.class);
-    
-    protected EcalChannelCollection getEcalChannelCollection(DatabaseConditionsManager manager) {
+    /**
+     * Get the default {@link EcalChannel} collection.
+     * @param manager The conditions manager.
+     * @return The default ECAL channel object collection.
+     */
+    protected EcalChannelCollection getEcalChannelCollection(final DatabaseConditionsManager manager) {
         return manager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData();
     }
-    
-    protected EcalGainCollection getEcalGainCollection(DatabaseConditionsManager manager) {
+
+    /**
+     * Get the default {@link EcalGain} collection.
+     * @param manager The conditions manager.
+     * @return The ECAL channel gain collection.
+     */
+    protected EcalGainCollection getEcalGainCollection(final DatabaseConditionsManager manager) {
         return manager.getCachedConditions(EcalGainCollection.class, "ecal_gains").getCachedData();
     }
-        
-    protected ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> getEcalBadChannelSeries(DatabaseConditionsManager manager) {
+
+    /**
+     * Get the default collections of {@link EcalBadChannel} objects.
+     * @param manager The conditions manager.
+     * @return The collections of ECAL bad channel objects.
+     */
+    protected ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> getEcalBadChannelSeries(final DatabaseConditionsManager manager) {
         return manager.getConditionsSeries(EcalBadChannelCollection.class, "ecal_bad_channels");
     }
-    
+
+    /**
+     * Get the default {@link EcalCalibration} collection.
+     * @param manager The conditions manager.
+     * @return The collection of ECAL channel calibration objects.
+     */
     protected EcalCalibrationCollection getEcalCalibrationCollection(DatabaseConditionsManager manager) {
         return manager.getCachedConditions(EcalCalibrationCollection.class, "ecal_calibrations").getCachedData();
     }
     
+    /**
+     * Get the default {@link EcalTimeShift} collection.
+     * @param manager The conditions manager.
+     * @return The collection of ECAL time shift objects.
+     */
     protected EcalTimeShiftCollection getEcalTimeShiftCollection(DatabaseConditionsManager manager) {
         return manager.getCachedConditions(EcalTimeShiftCollection.class, "ecal_time_shifts").getCachedData();
     }
         
     /**
-     * Create ECAL conditions object containing all data for the current run.
+     * Create combined ECAL conditions object containing all data for the current run.
+     * @param manager The conditions manager.
+     * @param name The conditions set name (unused but must satisfy conditions API).
      */
-    public EcalConditions getData(ConditionsManager manager, String name) {
+    public final EcalConditions getData(ConditionsManager manager, String name) {
 
-        DatabaseConditionsManager databaseConditionsManager = (DatabaseConditionsManager) manager;
+        final DatabaseConditionsManager databaseConditionsManager = (DatabaseConditionsManager) manager;
 
         // Get the ECal channel map from the conditions database
-        EcalChannelCollection channels = getEcalChannelCollection(databaseConditionsManager);
+        final EcalChannelCollection channels = getEcalChannelCollection(databaseConditionsManager);
 
         // Create the ECal conditions object that will be used to encapsulate
         // ECal conditions collections
-        Detector detector = databaseConditionsManager.getDetectorObject();
-        EcalConditions conditions = new EcalConditions(detector.getSubdetector(databaseConditionsManager.getEcalName()));
+        final Detector detector = databaseConditionsManager.getDetectorObject();
+        final EcalConditions conditions = new EcalConditions(detector.getSubdetector(databaseConditionsManager.getEcalName()));
 
         // Set the channel map.
         conditions.setChannelCollection(channels);
 
         // Get the ECal gains from the conditions database and add them to the
         // conditions set
-        EcalGainCollection gains = getEcalGainCollection(databaseConditionsManager);
+        final EcalGainCollection gains = getEcalGainCollection(databaseConditionsManager);
         for (EcalGain gain : gains) {
-            ChannelId channelId = new ChannelId(new int[] { gain.getChannelId() });
-            EcalChannel channel = channels.findChannel(channelId);
+            final ChannelId channelId = new ChannelId(new int[] { gain.getChannelId() });
+            final EcalChannel channel = channels.findChannel(channelId);
             conditions.getChannelConstants(channel).setGain(gain);
         }
 
-        ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> badChannelSeries = 
+        final ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> badChannelSeries = 
                 getEcalBadChannelSeries(databaseConditionsManager);
         // FIXME: How to get EcalBadChannelCollection here instead for the collection type?
         //        API of ConditionsSeries and ConditionsSeriesConverter needs to be changed!
         for (ConditionsObjectCollection<EcalBadChannel> badChannels : badChannelSeries) {
             for (EcalBadChannel badChannel : badChannels) {
-                ChannelId channelId = new ChannelId(new int[] { badChannel.getChannelId() });
-                EcalChannel channel = channels.findChannel(channelId);
+                final ChannelId channelId = new ChannelId(new int[] { badChannel.getChannelId() });
+                final EcalChannel channel = channels.findChannel(channelId);
                 conditions.getChannelConstants(channel).setBadChannel(true);
             }
         }
 
         // Get the ECal calibrations from the conditions database and add them
         // to the conditions set.
-        EcalCalibrationCollection calibrations = getEcalCalibrationCollection(databaseConditionsManager);
+        final EcalCalibrationCollection calibrations = getEcalCalibrationCollection(databaseConditionsManager);
         for (EcalCalibration calibration : calibrations) {
-            ChannelId channelId = new ChannelId(new int[] { calibration.getChannelId() });
-            EcalChannel channel = channels.findChannel(channelId);
+            final ChannelId channelId = new ChannelId(new int[] { calibration.getChannelId() });
+            final EcalChannel channel = channels.findChannel(channelId);
             conditions.getChannelConstants(channel).setCalibration(calibration);
         }
 
@@ -102,10 +129,10 @@
         if (databaseConditionsManager.hasConditionsRecord("ecal_time_shifts")) {
             EcalTimeShiftCollection timeShifts = getEcalTimeShiftCollection(databaseConditionsManager);
             for (EcalTimeShift timeShift : timeShifts) {
-                ChannelId channelId = new ChannelId(new int[] {timeShift.getChannelId()});
-                EcalChannel channel = channels.findChannel(channelId);
+                final ChannelId channelId = new ChannelId(new int[] {timeShift.getChannelId()});
+                final EcalChannel channel = channels.findChannel(channelId);
                 conditions.getChannelConstants(channel).setTimeShift(timeShift);
-            }   
+            }
         } else {
             DatabaseConditionsManager.getLogger().warning("no ecal_time_shifts collection found");
         }
@@ -118,7 +145,7 @@
      * Get the type handled by this converter.
      * @return The type handled by this converter.
      */
-    public Class<EcalConditions> getType() {
+    public final Class<EcalConditions> getType() {
         return EcalConditions.class;
     }
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsUtil.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsUtil.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsUtil.java	Thu Apr  2 18:14:47 2015
@@ -9,18 +9,21 @@
 /**
  * This is a set of utility methods for the ECAL that use the database
  * conditions system.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 public final class EcalConditionsUtil {
 
+    /**
+     * The combined ECAL conditions object.
+     */
     private EcalConditions conditions;
 
     /**
      * Constructor which uses external reference to conditions object.
      * @param conditions The ECAL conditions object.
      */
-    public EcalConditionsUtil(EcalConditions conditions) {
+    public EcalConditionsUtil(final EcalConditions conditions) {
         this.conditions = conditions;
     }
 
@@ -36,21 +39,20 @@
      * Find a channel object from a cell ID, e.g. from Monte Carlo data.
      * @param helper The identifier helper of the hit.
      * @param cellId The cell ID of the hit.
-     * @return The corresponding ECAL channel found from the physical ID
-     *         information.
+     * @return The corresponding ECAL channel found from the physical ID information.
      */
-    public EcalChannel findChannel(IIdentifierHelper helper, long cellId) {
+    public EcalChannel findChannel(final IIdentifierHelper helper, final long cellId) {
 
         // Make an ID object from hit ID.
-        IIdentifier id = new Identifier(cellId);
+        final IIdentifier id = new Identifier(cellId);
 
         // Get physical field values.
-        int system = helper.getValue(id, "system");
-        int x = helper.getValue(id, "ix");
-        int y = helper.getValue(id, "iy");
+        final int system = helper.getValue(id, "system");
+        final int x = helper.getValue(id, "ix");
+        final int y = helper.getValue(id, "iy");
 
         // Create an ID to search for in channel collection.
-        GeometryId geometryId = new GeometryId(helper, new int[] { system, x, y });
+        final GeometryId geometryId = new GeometryId(helper, new int[] { system, x, y });
 
         // Find the ECAL channel and return the crate number.
         return conditions.getChannelCollection().findChannel(geometryId);
@@ -62,7 +64,7 @@
      * @param cellId The cell ID of the hit.
      * @return The crate number of the channel.
      */
-    public int getCrate(IIdentifierHelper helper, long cellId) {
+    public int getCrate(final IIdentifierHelper helper, final long cellId) {
         return findChannel(helper, cellId).getCrate();
     }
 
@@ -72,7 +74,7 @@
      * @param cellId The cell ID of the hit.
      * @return The slot number of the channel.
      */
-    public int getSlot(IIdentifierHelper helper, long cellId) {
+    public int getSlot(final IIdentifierHelper helper, final long cellId) {
         return findChannel(helper, cellId).getSlot();
     }
 

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalCrystalChannelMap.java	Thu Apr  2 18:14:47 2015
@@ -10,56 +10,64 @@
 
 /**
  * This is a convenience utility for associating the geometric crystal
- * objects with the conditions system channel information and vice versa.  
+ * objects with the conditions system channel information and vice versa. 
  * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 final class EcalCrystalChannelMap {
+
+    /**
+     * Map of crystal to channel.
+     */
+    Map<EcalCrystal, EcalChannel> crystalMap = new HashMap<EcalCrystal, EcalChannel>();
     
-    Map<EcalCrystal, EcalChannel> crystalMap = new HashMap<EcalCrystal, EcalChannel>();
+    /**
+     * Map of channel to crystal.
+     */
     Map<EcalChannel, EcalCrystal> channelMap = new HashMap<EcalChannel, EcalCrystal>();
-    
+
     /**
      * Creates the map between crystals and channels.
      * @param api The ECAL API.
      * @param channels The list of channels.
      */
-    EcalCrystalChannelMap(HPSEcalAPI api, EcalChannelCollection channels) {
-                        
+    EcalCrystalChannelMap(final HPSEcalAPI api, final EcalChannelCollection channels) {
+
         // Map crystals to channels.
         for (EcalCrystal crystal : api.getCrystals()) {
-            EcalChannel channel = channels.findGeometric(crystal.getIdentifier().getValue());
+            final EcalChannel channel = channels.findGeometric(crystal.getIdentifier().getValue());
             if (channel == null) {
                 throw new RuntimeException("ECAL channel was not found for ID: " + crystal.getExpandedIdentifier());
             }
             crystalMap.put(crystal, channel);
         }
-        
+
         // Map channels to crystals.
         for (EcalChannel channel : channels) {
-            EcalCrystal crystal = api.getCrystal(channel.getX(), channel.getY());
+            final EcalCrystal crystal = api.getCrystal(channel.getX(), channel.getY());
             if (crystal == null) {
-                throw new RuntimeException("ECAl crystal was not found for channel X Y: " + channel.getX() + " " + channel.getY());
+                throw new RuntimeException("ECAl crystal was not found for channel X Y: " 
+                        + channel.getX() + " " + channel.getY());
             }
             channelMap.put(channel, crystal);
         }
     }
-    
+
     /**
      * Get a channel from a crystal.
      * @param crystal The geometry object.
      * @return The channel information or null if does not exist.
      */
-    EcalChannel getEcalChannel(EcalCrystal crystal) {
+    EcalChannel getEcalChannel(final EcalCrystal crystal) {
         return crystalMap.get(crystal);
     }    
-    
+
     /**
      * Get a channel from a crystal.
      * @param crystal The geometry object.
      * @return The channel information or null if does not exist.
      */
-    EcalCrystal getEcalCrystal(EcalChannel channel) {
+    EcalCrystal getEcalCrystal(final EcalChannel channel) {
         return channelMap.get(channel);
     } 
 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalGain.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalGain.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalGain.java	Thu Apr  2 18:14:47 2015
@@ -2,30 +2,47 @@
 
 import java.util.Comparator;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
 import org.hps.conditions.database.Table;
 
 /**
- * A simplistic representation of gain values from the ECal conditions database.
+ * A per channel ECAL gain value.
  * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-@Table(names = {"ecal_gains", "test_run_ecal_gains", "ecal_hardware_gains"})
+@Table(names = { "ecal_gains", "test_run_ecal_gains", "ecal_hardware_gains" })
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public final class EcalGain extends AbstractConditionsObject {
+public final class EcalGain extends BaseConditionsObject {
 
-    public static class EcalGainCollection extends AbstractConditionsObjectCollection<EcalGain> {
-        
-        public AbstractConditionsObjectCollection<EcalGain> sorted() {
+    /**
+     * The collection implementation for this class.
+     */
+    @SuppressWarnings("serial")
+    public static final class EcalGainCollection extends BaseConditionsObjectCollection<EcalGain> {
+
+        /**
+         * Sort and return a copy of the collection.
+         * @return A sorted copy of the collection.
+         */
+        public BaseConditionsObjectCollection<EcalGain> sorted() {
             return sorted(new ChannelIdComparator());
         }
-                
+
+        /**
+         * Comparison implementation by channel ID.
+         */
         class ChannelIdComparator implements Comparator<EcalGain> {
-            public int compare(EcalGain o1, EcalGain o2) {
+            /**
+             * Compare two objects by their channel ID.
+             * @param o1 The first object.
+             * @param o2 The second object.
+             * @return -1, 0 or 1 if first channel ID is less than, equal to, or greater than second.
+             */
+            public int compare(final EcalGain o1, final EcalGain o2) {
                 if (o1.getChannelId() < o2.getChannelId()) {
                     return -1;
                 } else if (o1.getChannelId() > o2.getChannelId()) {
@@ -34,26 +51,27 @@
                     return 0;
                 }
             }
-            
+
         }
     }
-    
-    
+
     /**
      * Get the gain value in units of MeV/ADC count.
+     *
      * @return The gain value.
      */
-    @Field(names = {"gain"})
+    @Field(names = { "gain" })
     public double getGain() {
         return getFieldValue("gain");
     }
 
     /**
      * Get the ECal channel ID.
+     *
      * @return The ECal channel ID.
      */
-    @Field(names = {"ecal_channel_id"})
+    @Field(names = { "ecal_channel_id" })
     public int getChannelId() {
         return getFieldValue("ecal_channel_id");
     }
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalLed.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalLed.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalLed.java	Thu Apr  2 18:14:47 2015
@@ -2,8 +2,8 @@
 
 import java.util.Comparator;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -13,21 +13,33 @@
 /**
  * A conditions class for representing the setup of the LED system in the ECAL
  * for one channel.
- * @author Jeremy McCormick <[log in to unmask]>
+ * 
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @Table(names = "ecal_leds")
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public class EcalLed extends AbstractConditionsObject {
+public final class EcalLed extends BaseConditionsObject {
 
     /**
      * Generic collection class for these objects.
      */
-    public static class EcalLedCollection extends AbstractConditionsObjectCollection<EcalLed> {
-        public AbstractConditionsObjectCollection<EcalLed> sorted() {
+    public static class EcalLedCollection extends BaseConditionsObjectCollection<EcalLed> {
+        
+        /**
+         * Sort and return a copy of this collection.
+         * @return The sorted copy.
+         */
+        public BaseConditionsObjectCollection<EcalLed> sorted() {
             return sorted(new ChannelIdComparator());
         }
                 
+        /**
+         * Comparison implementation by channel ID.
+         */
         class ChannelIdComparator implements Comparator<EcalLed> {
+            /**
+             * Compare two objects by channel ID.
+             */
             public int compare(EcalLed o1, EcalLed o2) {
                 if (o1.getEcalChannelId() < o2.getEcalChannelId()) {
                     return -1;

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalLedCalibration.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalLedCalibration.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalLedCalibration.java	Thu Apr  2 18:14:47 2015
@@ -1,28 +1,43 @@
 package org.hps.conditions.ecal;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
 import org.hps.conditions.database.Table;
 
+/**
+ * ECAL LED calibration information per channel.
+ * 
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
+ */
 @Table(names = "ecal_led_calibrations")
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public class EcalLedCalibration extends AbstractConditionsObject {
-    
+public final class EcalLedCalibration extends BaseConditionsObject {
+
     /**
      * Generic collection class for these objects.
      */
-    public static class EcalLedCalibrationCollection extends AbstractConditionsObjectCollection<EcalLedCalibration> {
+    @SuppressWarnings("serial")
+    public static class EcalLedCalibrationCollection extends BaseConditionsObjectCollection<EcalLedCalibration> {
     }
-    
-    public EcalLedCalibration() {        
+
+    /**
+     * Class constructor.
+     */
+    public EcalLedCalibration() {
     }
-    
-    public EcalLedCalibration(int channelId, double mean, double rms) {
+
+    /**
+     * Fully qualified constructor.
+     * @param channelId The ECAL channel ID (not the LED channel ID).
+     * @param ledResponse The mean of the LED response.
+     * @param rms The RMS of the LED response.
+     */
+    public EcalLedCalibration(int channelId, double ledResponse, double rms) {
         this.setFieldValue("ecal_channel_id", channelId);
-        this.setFieldValue("led_response", mean);
+        this.setFieldValue("led_response", ledResponse);
         this.setFieldValue("rms", rms);
     }
     /**
@@ -44,11 +59,11 @@
     }
 
     /**
-     * Get the RMS of the LED response
+     * Get the RMS of the LED response.
      * @return The RMS of the LED response.
      */
     @Field(names = {"rms"})
     public int getRms() {
         return getFieldValue("rms");
     }
-}
+}

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalTimeShift.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalTimeShift.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalTimeShift.java	Thu Apr  2 18:14:47 2015
@@ -2,31 +2,45 @@
 
 import java.util.Comparator;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
 import org.hps.conditions.database.Table;
-import org.hps.conditions.ecal.EcalCalibration.EcalCalibrationCollection.ChannelIdComparator;
 
 /**
  * This class represents a time shift calibration value for an ECAL channel.
- * @author Jeremy McCormick <[log in to unmask]>
+ * 
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 @Table(names = {"ecal_time_shifts", "test_run_ecal_time_shifts"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public final class EcalTimeShift extends AbstractConditionsObject {
+public final class EcalTimeShift extends BaseConditionsObject {
 
     /**
      * A collection of {@link EcalTimeShift} objects.
      */
-    public static class EcalTimeShiftCollection extends AbstractConditionsObjectCollection<EcalTimeShift> {
-        public AbstractConditionsObjectCollection<EcalTimeShift> sorted() {
+    public static class EcalTimeShiftCollection extends BaseConditionsObjectCollection<EcalTimeShift> {
+        
+        /**
+         * Sort and return a copy of the collection.
+         * @return The sorted copy of the collection.
+         */
+        public BaseConditionsObjectCollection<EcalTimeShift> sorted() {
             return sorted(new ChannelIdComparator());
         }
-                
+
+        /**
+         * Compare two objects by their channel ID.
+         */
         class ChannelIdComparator implements Comparator<EcalTimeShift> {
+            /**
+             * Compare two objects by channel ID.
+             * @param o1 The first object.
+             * @param o2 The second object.
+             * @return -1, 0 or 1 if first channel ID is less than, equal to, or greater than second.
+             */
             public int compare(EcalTimeShift o1, EcalTimeShift o2) {
                 if (o1.getChannelId() < o2.getChannelId()) {
                     return -1;

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/TestRunEcalConditionsConverter.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/TestRunEcalConditionsConverter.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/TestRunEcalConditionsConverter.java	Thu Apr  2 18:14:47 2015
@@ -11,28 +11,49 @@
 /**
  * This class loads all Test Run ECAL conditions into an {@link EcalConditions} object
  * from the database.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
- * @author Omar Moreno <[log in to unmask]>
+ * <p>
+ * The default names are overridden to use tables that contain Test Run data, only. 
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
+ * @author <a href="mailto:[log in to unmask]">Omar Moreno</a>
  */
 public final class TestRunEcalConditionsConverter extends EcalConditionsConverter {
-    
+
+    /**
+     * Get the {@link EcalChannel} collection for Test Run.
+     * @return The Test Run ECAL channel collection.
+     */
     protected EcalChannelCollection getEcalChannelCollection(DatabaseConditionsManager manager) {
         return manager.getCachedConditions(EcalChannelCollection.class, "test_run_ecal_channels").getCachedData();
     }
-    
+    /**
+     * Get the {@link EcalGain} collection for Test Run.
+     * @return The Test Run ECAL gain collection.
+     */     
     protected EcalGainCollection getEcalGainCollection(DatabaseConditionsManager manager) {
         return manager.getCachedConditions(EcalGainCollection.class, "test_run_ecal_gains").getCachedData();
     }
     
+    /**
+     * Get the collections of {@link EcalBadChannel} objects for Test Run.
+     * @return The Test Run bad channel collections.
+     */
     protected ConditionsSeries<EcalBadChannel, EcalBadChannelCollection> getEcalBadChannelSeries(DatabaseConditionsManager manager) {
         return manager.getConditionsSeries(EcalBadChannelCollection.class, "test_run_ecal_bad_channels");
     }
-    
+
+    /**
+     * Get the {@link EcalCalibration} collection for Test Run.
+     * @return The Test Run ECAL calibration collection. 
+     */
     protected EcalCalibrationCollection getEcalCalibrationCollection(DatabaseConditionsManager manager) {
         return manager.getCachedConditions(EcalCalibrationCollection.class, "test_run_ecal_calibrations").getCachedData();
     }
-    
+
+    /**
+     * Get the {@link EcalTimeShift} collection for Test Run.
+     * @return The Test Run ECAL time shift collection.
+     */
     protected EcalTimeShiftCollection getEcalTimeShiftCollection(DatabaseConditionsManager manager) {
         return manager.getCachedConditions(EcalTimeShiftCollection.class, "test_run_ecal_time_shifts").getCachedData();
     }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ecal/package-info.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ecal/package-info.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ecal/package-info.java	Thu Apr  2 18:14:47 2015
@@ -9,13 +9,18 @@
  * these channels.
  * <p>
  * The {@link EcalCalibration} contains the pedestal and noise values for a channel, 
- * which are the mean and the standard deviation of the digitized pre-amp output.
+ * which are the mean and the standard deviation of the digitized preamplifier output.
  * <p>
  * The {@link EcalGain} is the channel gain in units of MeV/ADC counts.
  * <p>
+ * The {@link EcalTimeShift} is a time shift in the electronics response.
+ * <p>
+ * The {@link EcalLedCalibration} is calibration information for the LED attached to
+ * an ECAL channel.
+ * <p>
  * The energy of a hit is reconstructed by multiplying the gain by the pedestal-subtracted
- * ADC integral (e.g. in Test Run 2012 data). 
+ * ADC integral (e.g. in Test Run 2012 data).
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
-package org.hps.conditions.ecal;
+package org.hps.conditions.ecal;

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/package-info.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/package-info.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/package-info.java	Thu Apr  2 18:14:47 2015
@@ -1,9 +1,11 @@
 /**
- * The HPS conditions module provides facilities for accessing time dependent conditions
- * for a detector at runtime using a framework built on the LCSim conditions system.
- * The {@link DatabaseConditionsReader} has a set of converters for reading data from
- * tables using SQL queries and creating appropriate, typed objects for them.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
+ * The HPS conditions module provides facilities for accessing time dependent conditions for a detector at runtime
+ * using a framework built on the LCSim conditions system.  The {@link DatabaseConditionsReader} has a set of
+ * converters for reading data from tables using SQL queries and creating appropriate, typed objects for them.
+ *
+ * @see org.hps.conditions.api
+ * @see org.hps.conditions.database
+ *
+ * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-package org.hps.conditions;
+package org.hps.conditions;

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtChannel.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtChannel.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtChannel.java	Thu Apr  2 18:14:47 2015
@@ -4,8 +4,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Field;
 import org.hps.util.Pair;
 
@@ -14,12 +14,12 @@
  * 
  * @author Omar Moreno <[log in to unmask]>
  */
-public class AbstractSvtChannel extends AbstractConditionsObject {
+public class AbstractSvtChannel extends BaseConditionsObject {
 
     // TODO: Put constants into their own class
     public static final int MAX_NUMBER_OF_SAMPLES = 6;
 
-    public static abstract class AbstractSvtChannelCollection<T extends AbstractSvtChannel> extends AbstractConditionsObjectCollection<T> {
+    public static abstract class AbstractSvtChannelCollection<T extends AbstractSvtChannel> extends BaseConditionsObjectCollection<T> {
 
         Map<Integer, T> channelMap = new HashMap<Integer, T>();
 

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditions.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditions.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditions.java	Thu Apr  2 18:14:47 2015
@@ -10,7 +10,7 @@
 /**
  * Abstract class providing some of the common functionality used to define an
  * SVT conditions object
- * 
+ *
  * @author Omar Moreno <[log in to unmask]>
  *
  */

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtDaqMapping.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtDaqMapping.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtDaqMapping.java	Thu Apr  2 18:14:47 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Field;
 import org.hps.util.Pair;
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
@@ -12,7 +12,7 @@
  * 
  * @author Omar Moreno <[log in to unmask]>
  */
-public abstract class AbstractSvtDaqMapping extends AbstractConditionsObject {
+public abstract class AbstractSvtDaqMapping extends BaseConditionsObject {
 
         /**
          * Flag values for top or bottom half.
@@ -26,7 +26,7 @@
         public static final String AXIAL = "A";
         public static final String STEREO = "S";
 
-        public static abstract class AbstractSvtDaqMappingCollection<T extends AbstractSvtDaqMapping> extends AbstractConditionsObjectCollection<T> {
+        public static abstract class AbstractSvtDaqMappingCollection<T extends AbstractSvtDaqMapping> extends BaseConditionsObjectCollection<T> {
 
 
         /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtT0Shift.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtT0Shift.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtT0Shift.java	Thu Apr  2 18:14:47 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Field;
 import org.hps.util.Pair;
 
@@ -11,9 +11,9 @@
  * 
  * @author Omar Moreno <[log in to unmask]>
  */
-public class AbstractSvtT0Shift extends AbstractConditionsObject {
+public class AbstractSvtT0Shift extends BaseConditionsObject {
 
-    public static abstract class AbstractSvtT0ShiftCollection<T extends AbstractSvtT0Shift> extends AbstractConditionsObjectCollection<T> {
+    public static abstract class AbstractSvtT0ShiftCollection<T extends AbstractSvtT0Shift> extends BaseConditionsObjectCollection<T> {
 
         /**
          * Get the t0 shift associated with a given DAQ pair

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtAlignmentConstant.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtAlignmentConstant.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtAlignmentConstant.java	Thu Apr  2 18:14:47 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -22,9 +22,9 @@
  */
 @Table(names = "svt_alignments")
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_UPDATED)
-public final class SvtAlignmentConstant extends AbstractConditionsObject {
+public final class SvtAlignmentConstant extends BaseConditionsObject {
 
-    public static class SvtAlignmentConstantCollection extends AbstractConditionsObjectCollection<SvtAlignmentConstant> {
+    public static class SvtAlignmentConstantCollection extends BaseConditionsObjectCollection<SvtAlignmentConstant> {
     }
 
     /** Top or bottom half. */

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBadChannel.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBadChannel.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBadChannel.java	Thu Apr  2 18:14:47 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -9,9 +9,9 @@
 
 @Table(names = {/*"svt_bad_channels",*/ "test_run_svt_bad_channels"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public final class SvtBadChannel extends AbstractConditionsObject {
+public final class SvtBadChannel extends BaseConditionsObject {
 
-    public static class SvtBadChannelCollection extends AbstractConditionsObjectCollection<SvtBadChannel> {
+    public static class SvtBadChannelCollection extends BaseConditionsObjectCollection<SvtBadChannel> {
     }
 
     @Field(names = {"svt_channel_id"})

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtCalibration.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtCalibration.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtCalibration.java	Thu Apr  2 18:14:47 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -17,9 +17,9 @@
  */
 @Table(names = {"svt_calibrations", "test_run_svt_calibrations"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_UPDATED)
-public final class SvtCalibration extends AbstractConditionsObject {
+public final class SvtCalibration extends BaseConditionsObject {
 
-    public static class SvtCalibrationCollection extends AbstractConditionsObjectCollection<SvtCalibration> {
+    public static class SvtCalibrationCollection extends BaseConditionsObjectCollection<SvtCalibration> {
     }
 
     /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConditionsLoader.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConditionsLoader.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConditionsLoader.java	Thu Apr  2 18:14:47 2015
@@ -114,7 +114,7 @@
 	           
 	           // Set the collection ID 
 	           int collectionID = DatabaseConditionsManager.getInstance().getNextCollectionID(SvtConditionsLoader.CALIBRATIONS_TABLE_NAME);
-	           calibrations.setCollectionId(collectionID);
+	           calibrations.setCollectionID(collectionID);
 	           logger.info("Using collection ID " + collectionID);
 	          
 	           // Load the calibrations
@@ -155,7 +155,7 @@
 	          
 	           // Set the collection ID
 	           int collectionID = DatabaseConditionsManager.getInstance().getNextCollectionID(SvtConditionsLoader.DAQ_MAP_TABLE_NAME);
-	           daqMapping.setCollectionId(collectionID);
+	           daqMapping.setCollectionID(collectionID);
 	           logger.info("Using collection ID " + collectionID);
 	           
 	           // Load the DAQ map
@@ -184,7 +184,7 @@
 
 	           // Set the collection ID
 	           collectionID = DatabaseConditionsManager.getInstance().getNextCollectionID(SvtConditionsLoader.SVT_CHANNELS_TABLE_NAME);
-	           svtChannels.setCollectionId(collectionID);
+	           svtChannels.setCollectionID(collectionID);
 	           logger.info("Using collection ID " + collectionID);
 	           
 	           svtChannels.insert();

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConfiguration.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConfiguration.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConfiguration.java	Thu Apr  2 18:14:47 2015
@@ -5,8 +5,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -22,9 +22,9 @@
  */
 @Table(names = {"svt_configurations"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_UPDATED)
-public class SvtConfiguration extends AbstractConditionsObject {
+public class SvtConfiguration extends BaseConditionsObject {
 
-    public static class SvtConfigurationCollection extends AbstractConditionsObjectCollection<SvtConfiguration> {
+    public static class SvtConfigurationCollection extends BaseConditionsObjectCollection<SvtConfiguration> {
     }
 
     /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtGain.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtGain.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtGain.java	Thu Apr  2 18:14:47 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -13,9 +13,9 @@
  */
 @Table(names = {"svt_gains", "test_run_svt_gains"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public final class SvtGain extends AbstractConditionsObject {
+public final class SvtGain extends BaseConditionsObject {
 
-    public static class SvtGainCollection extends AbstractConditionsObjectCollection<SvtGain> {
+    public static class SvtGainCollection extends BaseConditionsObjectCollection<SvtGain> {
     }
 
     /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtShapeFitParameters.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtShapeFitParameters.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtShapeFitParameters.java	Thu Apr  2 18:14:47 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
-import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObject;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.Converter;
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
@@ -15,9 +15,9 @@
  */
 @Table(names = {"svt_shape_fit_parameters", "test_run_svt_shape_fit_parameters"})
 @Converter(multipleCollectionsAction = MultipleCollectionsAction.LAST_CREATED)
-public final class SvtShapeFitParameters extends AbstractConditionsObject {
+public final class SvtShapeFitParameters extends BaseConditionsObject {
 
-    public static class SvtShapeFitParametersCollection extends AbstractConditionsObjectCollection<SvtShapeFitParameters> {
+    public static class SvtShapeFitParametersCollection extends BaseConditionsObjectCollection<SvtShapeFitParameters> {
     }
 
     /**

Modified: java/trunk/conditions/src/test/java/org/hps/conditions/EngRunConditionsTest.java
 =============================================================================
--- java/trunk/conditions/src/test/java/org/hps/conditions/EngRunConditionsTest.java	(original)
+++ java/trunk/conditions/src/test/java/org/hps/conditions/EngRunConditionsTest.java	Thu Apr  2 18:14:47 2015
@@ -9,7 +9,7 @@
 
 import junit.framework.TestCase;
 
-import org.hps.conditions.api.AbstractConditionsObjectCollection;
+import org.hps.conditions.api.BaseConditionsObjectCollection;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.ecal.EcalCalibration.EcalCalibrationCollection;
 import org.hps.conditions.ecal.EcalChannel;
@@ -63,7 +63,7 @@
         loop.loop(100);
     }
     
-    static void checkRunNumbers(AbstractConditionsObjectCollection<?> collection) {
+    static void checkRunNumbers(BaseConditionsObjectCollection<?> collection) {
         assertTrue("Run start out of range.", collection.getConditionsRecord().getRunStart() >= runStart);
         assertTrue("Run end out of range.", collection.getConditionsRecord().getRunEnd() <= runEnd);
     }

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use