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  December 2014

HPS-SVN December 2014

Subject:

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

From:

[log in to unmask]

Reply-To:

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

Date:

Thu, 11 Dec 2014 03:18:46 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (1786 lines)

Author: [log in to unmask]
Date: Wed Dec 10 19:18:35 2014
New Revision: 1685

Log:
Modify the conditions API by adding a better base type for object collections.  (This required touching a lot of code that used the objects from these collections.)

Added:
    java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObjectCollection.java
      - copied, changed from r1678, java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java
Removed:
    java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java
Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectException.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/beam/BeamCurrent.java
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/PrintCommand.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/ConditionsObjectConverter.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/DatabaseConditionsManager.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.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/EcalConditions.java
    java/trunk/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.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/EcalTimeShift.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/AbstractSvtConditionsConverter.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/SvtChannel.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConditions.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConfiguration.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtDetectorSetup.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/main/java/org/hps/conditions/svt/SvtT0Shift.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtChannel.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditions.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDaqMapping.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDetectorSetup.java
    java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtT0Shift.java
    java/trunk/conditions/src/test/java/org/hps/conditions/ConditionsObjectTest.java
    java/trunk/conditions/src/test/java/org/hps/conditions/beam/BeamCurrentTest.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java

Copied: java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObjectCollection.java (from r1678, 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/AbstractConditionsObjectCollection.java	Wed Dec 10 19:18:35 2014
@@ -1,65 +1,57 @@
 package org.hps.conditions.api;
 
 import java.sql.SQLException;
-import java.util.Collections;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
-import java.util.Set;
 
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.TableMetaData;
 
-public class ConditionsObjectCollection<ObjectType extends ConditionsObject> implements Iterable<ObjectType> {
+public class AbstractConditionsObjectCollection<ObjectType extends ConditionsObject> extends LinkedHashSet<ObjectType> {
 
-    protected Set<ObjectType> objects = new LinkedHashSet<ObjectType>();
-    protected TableMetaData tableMetaData;
+    protected TableMetaData tableMetaData = null;
     protected int collectionId = -1;
-    protected ConditionsRecord conditionsRecord;
-
-    protected ConditionsObjectCollection() {
+    protected ConditionsRecord conditionsRecord = null;
+    
+    public AbstractConditionsObjectCollection() {
     }
-
-    public ConditionsObjectCollection(TableMetaData tableMetaData, int collectionId) {
+    
+    public AbstractConditionsObjectCollection(ConditionsRecord conditionsRecord, TableMetaData tableMetaData) {
+        this.conditionsRecord = conditionsRecord;
         this.tableMetaData = tableMetaData;
-        this.collectionId = collectionId;
+        this.collectionId = conditionsRecord.getCollectionId();
     }
-
-    public ObjectType get(int index) {
-        Iterator<ObjectType> iterator = objects.iterator();
-        ObjectType current = iterator.next();
-        for (int i = 0; i < index; i++) {
-            current = iterator.next();
+    
+    public AbstractConditionsObjectCollection(ConditionsRecord conditionsRecord, TableMetaData tableMetaData, int collectionID) {
+        this.conditionsRecord = conditionsRecord;
+        this.tableMetaData = tableMetaData;
+        this.collectionId = collectionID;
+    }
+    
+    public void setTableMetaData(TableMetaData tableMetaData) {
+        /**
+         * Setting this more than once is disallowed.
+         */
+        if (this.tableMetaData != null) {
+            throw new RuntimeException("The table meta data cannot be reset.");
         }
-        return current;
+        this.tableMetaData = tableMetaData;
     }
-
-    public Set<ObjectType> getObjects() {
-        return Collections.unmodifiableSet(objects);
+    
+    public void setConditionsRecord(ConditionsRecord conditionsRecord) {
+        /**
+         * Setting this more than once is disallowed.
+         */
+        if (this.conditionsRecord != null) {
+            throw new RuntimeException("The table meta data cannot be reset.");
+        }
+        this.conditionsRecord = conditionsRecord;
     }
-
-    public boolean contains(Object object) {
-        return getObjects().contains(object);
-    }
-
-    // TODO: Should check here if object has an existing collection ID that is
-    // different from this collection's, in which case this collection becomes "mixed" and
-    // it should be flagged as read only.
-    public void add(ObjectType object) throws ConditionsObjectException {
-        if (objects.contains(object)) {
-            throw new IllegalArgumentException("Collection already contains this object.");
+    
+    public boolean add(ObjectType object) {
+        if (contains(object)) {
+            throw new IllegalArgumentException("Cannot add duplicate object " + object);
         }
-        try {
-            // Only assign a collection ID to the object if this collection has a valid ID
-            // and the object does not have one already.
-            if (getCollectionId() != -1)
-                object.setCollectionId(getCollectionId());
-        } catch (ConditionsObjectException x) {
-            throw new IllegalArgumentException("Error assigning collection ID to object.", x);
-        }
-        // Set the table meta data on the object if it does not have any.
-        if (object.getTableMetaData() == null && tableMetaData != null)
-            object.setTableMetaData(tableMetaData);
-        objects.add(object);
+        return super.add(object);
     }
 
     public TableMetaData getTableMetaData() {
@@ -69,60 +61,46 @@
     public int getCollectionId() {
         return collectionId;
     }
-
-    // TODO: Should this also insert new records that do not exist?
-    // TODO: This operation should lock the table.
-    public void update() throws ConditionsObjectException {
-        for (ConditionsObject object : objects) {
-            object.update();
+    
+    public ConditionsRecord getConditionsRecord() {
+        return conditionsRecord;
+    }
+        
+    public void setCollectionId(int collectionId) throws ConditionsObjectException {
+        if (collectionId != -1) {
+            throw new ConditionsObjectException("The collectionId already has the value " + collectionId + " and cannot be reset."); 
         }
+        this.collectionId = collectionId;
     }
-
-    // TODO: This does not need to loop. It should just call delete on the collection ID value.
-    public void delete() throws ConditionsObjectException {
-        // TODO: Replace with call to a deleteCollection DatabaseConditionsManager method.
-        for (ConditionsObject object : objects) {
-            object.delete();
-        }
-    }
-
-    // TODO: This should not loop. It should select all the objects with a matching collection ID 
-    //       from the database replacing the current contents of the collection (if any).
-    public void select() throws ConditionsObjectException, SQLException {
-        // TODO: Replace with call to a selectCollection DatabaseConditionsManager method.
-        for (ConditionsObject object : objects) {
-            object.select();
-        }
-    }
-
+    
     public void insert() throws ConditionsObjectException, SQLException {
         DatabaseConditionsManager.getInstance().insertCollection(this);
     }
-
-    public void setCollectionId(int collectionId) throws ConditionsObjectException {
-        if (this.collectionId != -1)
-            throw new ConditionsObjectException("The collection ID is already set.");
-        this.collectionId = collectionId;
-        for (ConditionsObject object : this.objects) {
-            object.setCollectionId(this.collectionId);
-        }
+    
+    // Should select all records into the collection by collection ID.
+    public int select() {
+        System.out.println("implement me");
+        return -1;
     }
-
-    public void setTableMetaData(TableMetaData tableMetaData) {
-        this.tableMetaData = tableMetaData;
+    
+    // Should delete all records by collection ID in the database and clear the local objects.
+    public int delete() {
+        System.out.println("implement me");
+        return -1;
     }
-
-    @Override
-    public Iterator<ObjectType> iterator() {
-        return objects.iterator();
-    }       
+    
+    // Should update objects in the database with their values in the set.
+    public int update() {
+        System.out.println("implement me");
+        return -1;
+    }
     
     public String toString() {
         StringBuffer buffer = new StringBuffer();
-        for (ConditionsObject object : this.getObjects()) {
+        for (ConditionsObject object : this) {
             buffer.append(object.toString());
             buffer.append('\n');
         }
         return buffer.toString();
-    }
+    }       
 }

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	Wed Dec 10 19:18:35 2014
@@ -13,6 +13,10 @@
     public ConditionsObjectException(String message) {
         super(message);
     }
+    
+    public ConditionsObjectException(String message, Throwable cause) {
+        super(message, cause);
+    }
 
     public ConditionsObjectException(String message, ConditionsObject object) {
         super(message);

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	Wed Dec 10 19:18:35 2014
@@ -1,5 +1,8 @@
 package org.hps.conditions.api;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 
@@ -18,14 +21,64 @@
     /**
      * Collection type.
      */
-    public static class ConditionsRecordCollection extends ConditionsObjectCollection<ConditionsRecord> {
-        /**
-         * Since ConditionsRecord collections are always "mixed", meaning the
-         * collection ID values are usually all going to be different, the
-         * default behavior of the super class is overridden.
-         */
-        public void add(ConditionsRecord record) {
-            objects.add(record);
+    public static class ConditionsRecordCollection extends AbstractConditionsObjectCollection<ConditionsRecord> {
+        
+        public List<ConditionsRecord> sortedByUpdated() {
+            List<ConditionsRecord> list = new ArrayList<ConditionsRecord>(this);
+            Collections.sort(list, new UpdatedComparator());
+            return list;
+        }
+        
+        public List<ConditionsRecord> sortedByCreated() {
+            List<ConditionsRecord> list = new ArrayList<ConditionsRecord>(this);
+            Collections.sort(list, new CreatedComparator());
+            return list;
+        }
+        
+        public List<ConditionsRecord> sortedByRunStart() {
+            List<ConditionsRecord> list = new ArrayList<ConditionsRecord>(this);
+            Collections.sort(list, new RunStartComparator());
+            return list;
+        }
+        
+        private static class RunStartComparator implements Comparator<ConditionsRecord> {
+            @Override
+            public int compare(ConditionsRecord c1, ConditionsRecord c2) {
+                if (c1.getRunStart() < c2.getRunStart()) {
+                    return -1;
+                } else if (c1.getRunStart() > c2.getRunStart()) {
+                    return 1;
+                } 
+                return 0;
+            }
+        }
+        
+        private static class UpdatedComparator implements Comparator<ConditionsRecord> {
+            @Override
+            public int compare(ConditionsRecord c1, ConditionsRecord c2) {
+                Date date1 = c1.getUpdated();
+                Date date2 = c2.getUpdated();                
+                if (date1.before(date2)) {
+                    return -1;
+                } else if (date1.after(date2)) {
+                    return 1;
+                }
+                return 0;                
+            }            
+        }
+        
+        private static class CreatedComparator implements Comparator<ConditionsRecord> {
+            @Override
+            public int compare(ConditionsRecord c1, ConditionsRecord c2) {
+                Date date1 = c1.getCreated();
+                Date date2 = c2.getCreated();                
+                if (date1.before(date2)) {
+                    return -1;
+                } else if (date1.after(date2)) {
+                    return 1;
+                }
+                return 0;                
+            }            
         }
     }
     

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	Wed Dec 10 19:18:35 2014
@@ -13,13 +13,13 @@
 @SuppressWarnings("rawtypes")
 public class ConditionsSeries {
 
-    List<ConditionsObjectCollection> collections = new ArrayList<ConditionsObjectCollection>();
+    List<AbstractConditionsObjectCollection> collections = new ArrayList<AbstractConditionsObjectCollection>();
 
-    public ConditionsObjectCollection getCollection(int series) {
+    public AbstractConditionsObjectCollection getCollection(int series) {
         return collections.get(series);
     }
 
-    public int addCollection(ConditionsObjectCollection collection) {
+    public int addCollection(AbstractConditionsObjectCollection collection) {
         if (collections.contains(collection))
             throw new IllegalArgumentException("The collection is already registered with this object.");
         collections.add(collection);
@@ -30,15 +30,15 @@
         return collections.size();
     }
 
-    public ConditionsObjectCollection findCollection(ConditionsRecord record) {
-        for (ConditionsObjectCollection collection : collections) {
+    public AbstractConditionsObjectCollection findCollection(ConditionsRecord record) {
+        for (AbstractConditionsObjectCollection collection : collections) {
             if (collection.conditionsRecord == record)
                 return collection;
         }
         return null;
     }
     
-    public List<ConditionsObjectCollection> getCollections() {
+    public List<AbstractConditionsObjectCollection> getCollections() {
         return collections;
     }
 }

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.beam;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * This class is a simple data holder for the integrated beam current condition.
@@ -9,7 +9,7 @@
  */
 public final class BeamCurrent extends AbstractConditionsObject {
 
-    public static class BeamCurrentCollection extends ConditionsObjectCollection<BeamCurrent> {
+    public static class BeamCurrentCollection extends AbstractConditionsObjectCollection<BeamCurrent> {
     }
 
     /**

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	Wed Dec 10 19:18:35 2014
@@ -23,6 +23,7 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
+// TODO: Add detector name and run number as arguments on the basic tool rather than sub-commands.
 public class CommandLineTool {
 
     Options options = new Options();
@@ -99,7 +100,7 @@
             conditionsManager.setXmlConfig(xmlConfigFile);
             if (verbose)
                 System.out.println("using XML config file " + xmlConfigFile.getPath());
-        } 
+        }         
         conditionsManager.openConnection();
     }
 

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	Wed Dec 10 19:18:35 2014
@@ -7,7 +7,7 @@
 import java.io.PrintStream;
 
 import org.apache.commons.cli.Option;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.ConditionsSeries;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
@@ -99,8 +99,8 @@
         }
         ps.println();
         
-        for (ConditionsObjectCollection collection : series.getCollections()) {
-            for (Object object : collection.getObjects()) {
+        for (AbstractConditionsObjectCollection collection : series.getCollections()) {
+            for (Object object : collection) {
                 ps.print(object.toString());
                 ps.println();
             }

Modified: 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/ConditionsObjectConverter.java	Wed Dec 10 19:18:35 2014
@@ -1,11 +1,15 @@
 package org.hps.conditions.database;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
-
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
@@ -17,36 +21,41 @@
  * <p>
  * Implementation of default conversion from database tables to a
  * {@link ConditionsObject} class.
- * </p>
  * <p>
  * This class actually returns collections and not individual objects.
- * </p>
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  * 
- * @param <T> The type of the returned data which should be a class extending
- *            {@link ConditionsObjectCollection}.
+ * @param <T> The type of the returned data which should be a class extending {@link AbstractConditionsObjectCollection}.
  */
-// FIXME: This class should only allow one collection to be returned and not mix
-// the database records together.
-// TODO: This class can probably be removed in favor of using the
-// ConditionsSeriesConverter in all cases.
 public abstract class ConditionsObjectConverter<T> implements ConditionsConverter<T> {
 
+    // This is the strategy used for disambiguating multiple overlapping conditions sets.
+    enum MultipleRecordsStrategy {
+        LAST_UPDATED,
+        LAST_CREATED,
+        LATEST_RUN_START,
+        COMBINE,
+        ERROR
+    }
+    
+    MultipleRecordsStrategy multiStrat = MultipleRecordsStrategy.LAST_UPDATED;
+    
     public ConditionsObjectConverter() {
     }
+    
+    public void setMultipleRecordsStrategy(MultipleRecordsStrategy multiStrat) {
+        this.multiStrat = multiStrat;
+    }
 
     /**
-     * Classes that extend this must define this method to specify what type the
-     * converter is able to handle.
+     * Child classes must extend this method to specify what type the converter handles.
      * @return The Class that this converter handles.
      */
-    public abstract Class getType();
+    public abstract Class<T> getType();
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
     public T getData(ConditionsManager conditionsManager, String name) {
-
-        // System.out.println("finding conditions for key " + name + " ...");
 
         // Get the DatabaseConditionsManager which is required for using this converter.
         DatabaseConditionsManager databaseConditionsManager = DatabaseConditionsManager.getInstance();
@@ -56,39 +65,52 @@
         if (tableMetaData == null)
             throw new RuntimeException("Table meta data for " + name + " was not found.");
 
-        // Create a collection to return.
-        ConditionsObjectCollection collection = createCollection(tableMetaData);
-
-        // Get the ConditionsRecord with the meta-data, which will use the
-        // current run
-        // number from the manager.
+        // Get the ConditionsRecordCollection with the run number assignments.
         ConditionsRecordCollection conditionsRecords = databaseConditionsManager.findConditionsRecords(name);
-
-        if (conditionsRecords.getObjects().size() == 0) {
-            // There were no records returned, which is a fatal error.
-            throw new RuntimeException("No conditions found with key: " + name);
-        } else if (conditionsRecords.getObjects().size() > 1) {
-            // There were multiple records returned.
-            if (!allowMultipleCollections())
-                // If there are multiple records returned but this is not
-                // allowed by the
-                // converter, then this is a fatal error.
-                throw new RuntimeException("Multiple conditions records returned but this is not allowed.");
+        
+        // By default use all conditions records, which works if there is a single one, or if the COMBINE strategy is being used.
+        List<ConditionsRecord> filteredList = new ArrayList<ConditionsRecord>(conditionsRecords); 
+        
+        // Now we need to determine which ConditionsRecord objects to use according to configuration.
+        if (conditionsRecords.size() == 0) {
+            // No conditions records were found, and this is an error.
+            throw new RuntimeException("No conditions were found with key " + name);
         } else {
-            // There was a single conditions record so the collection
-            // information can be
-            // set meaningfully.
-            try {
-                collection.setCollectionId(conditionsRecords.get(0).getCollectionId());
-                collection.setTableMetaData(tableMetaData);
-            } catch (ConditionsObjectException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        // Loop over conditions records. This will usually just be one record.
-        for (ConditionsRecord conditionsRecord : conditionsRecords.getObjects()) {
-
+            /*
+             * Figure out which disambiguation strategy to use.
+             */
+            if (multiStrat.equals(MultipleRecordsStrategy.LAST_UPDATED)) {
+                // Use the conditions set with the latest updated date.
+                filteredList = conditionsRecords.sortedByUpdated();
+            } else if (multiStrat.equals(MultipleRecordsStrategy.LAST_CREATED)){
+                // Use the conditions set with the latest created date.
+                filteredList = conditionsRecords.sortedByCreated();                
+            } else if (multiStrat.equals(MultipleRecordsStrategy.LATEST_RUN_START)) {
+                // Use the conditions set with the greatest run start value.
+                filteredList = conditionsRecords.sortedByRunStart();
+            } else if (multiStrat.equals(MultipleRecordsStrategy.ERROR)) {            
+                // The converter has been configured to throw an error when this happens!
+                throw new RuntimeException("Multiple ConditionsRecord object found for conditions key " + name);
+            }           
+        }             
+        
+        // Create a collection of objects to to return.        
+        AbstractConditionsObjectCollection collection = null;
+        
+        try {
+            ConditionsRecord conditionsRecord = null;
+            if (filteredList.size() == 1) {
+                // If there is a single ConditionsRecord, then it can be assigned to the collection.
+                conditionsRecord = filteredList.get(0);
+            }
+            collection = createCollection(conditionsRecord, tableMetaData);
+        } catch (ConditionsObjectException e) {
+            throw new RuntimeException(e);
+        }
+   
+        // Loop over all records, which could just be a single one.
+        for (ConditionsRecord conditionsRecord : filteredList) {
+        
             // Get the table name.
             String tableName = conditionsRecord.getTableName();
 
@@ -98,30 +120,24 @@
             // Build a select query.
             String query = QueryBuilder.buildSelect(tableName, collectionId, tableMetaData.getFieldNames(), "id ASC");
 
-            // Query the database.
+            // Query the database to get the conditions collection's rows.
             ResultSet resultSet = databaseConditionsManager.selectQuery(query);
 
             try {
-                // Loop over rows.
+                // Loop over the rows.
                 while (resultSet.next()) {
-                    // Create new ConditionsObject.
+                    // Create a new ConditionsObject from this row.
                     ConditionsObject newObject = createConditionsObject(resultSet, tableMetaData);
 
-                    // Add new object to collection, which will also assign it a
-                    // collection ID if applicable.
+                    // Add the object to the collection.
                     collection.add(newObject);
                 }
-            } catch (SQLException | ConditionsObjectException e) {
+            } catch (SQLException e) {
                 throw new RuntimeException(e);
             }
         }
-
-        // Return new collection.
+        
         return (T) collection;
-    }
-
-    public boolean allowMultipleCollections() {
-        return true;
     }
     
     static final ConditionsObject createConditionsObject(ResultSet resultSet, TableMetaData tableMetaData) throws SQLException {
@@ -152,13 +168,38 @@
         return newObject;
     }
     
-    static final ConditionsObjectCollection<?> createCollection(TableMetaData tableMetaData) {
-        ConditionsObjectCollection<?> collection;
+    static final AbstractConditionsObjectCollection<?> createCollection(ConditionsRecord conditionsRecord, TableMetaData tableMetaData) throws ConditionsObjectException {
+        AbstractConditionsObjectCollection<?> collection;
         try {
             collection = tableMetaData.getCollectionClass().newInstance();
+            if (conditionsRecord != null) {
+                collection.setConditionsRecord(conditionsRecord);
+                collection.setTableMetaData(tableMetaData);
+            }
         } catch (InstantiationException | IllegalAccessException e) {
-            throw new RuntimeException(e);
+            throw new ConditionsObjectException("Error creating conditions object collection.", e);
         }
         return collection;
     }
+
+    // This would only work if every collection class had a constructor with the proper arguments.
+    /*
+    static final AbstractConditionsObjectCollection<?> createCollection(ConditionsRecord conditionsRecord, TableMetaData tableMetaData) throws ConditionsObjectException {
+        AbstractConditionsObjectCollection<?> collection;
+        try {
+            collection = tableMetaData.getCollectionClass().newInstance();
+            Class<?> collectionClass = tableMetaData.getCollectionClass();
+            try {
+                Constructor<?> constructor = collectionClass.getDeclaredConstructor(ConditionsRecord.class, TableMetaData.class);
+                collection = (AbstractConditionsObjectCollection) constructor.newInstance(new Object[] { conditionsRecord, tableMetaData } );
+            } catch (NoSuchMethodException | SecurityException | InvocationTargetException e) {
+                e.printStackTrace();
+                throw new ConditionsObjectException("Error creating conditions object collection.", e);
+            }
+        } catch (InstantiationException | IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+        return collection;
+    } 
+    */   
 }

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	Wed Dec 10 19:18:35 2014
@@ -3,17 +3,14 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
-import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
 import org.lcsim.conditions.ConditionsManager;
 
 /**
  * Read ConditionsRecord objects from the conditions database.
  * @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: ConditionsRecordConverter.java,v 1.5 2013/10/15 23:24:47 jeremy
- *          Exp $
  */
 class ConditionsRecordConverter extends ConditionsObjectConverter<ConditionsRecordCollection> {
 
@@ -38,7 +35,7 @@
         ResultSet resultSet = databaseConditionsManager.selectQuery(query);
 
         // Create a collection to return.
-        ConditionsObjectCollection collection;
+        AbstractConditionsObjectCollection collection;
         try {
             collection = tableMetaData.getCollectionClass().newInstance();
         } catch (InstantiationException | IllegalAccessException e) {
@@ -48,11 +45,7 @@
         try {
             while (resultSet.next()) {
                 ConditionsObject conditionsRecord = ConditionsObjectConverter.createConditionsObject(resultSet, tableMetaData);
-                try {
-                    collection.add(conditionsRecord);
-                } catch (ConditionsObjectException e) {
-                    throw new RuntimeException(e);
-                }
+                collection.add(conditionsRecord);
             }
         } catch (SQLException x) {
             throw new RuntimeException("Database error", x);
@@ -69,8 +62,4 @@
     public Class<ConditionsRecordCollection> getType() {
         return ConditionsRecordCollection.class;
     }
-
-    public boolean allowMultipleCollections() {
-        return true;
-    }
 }

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	Wed Dec 10 19:18:35 2014
@@ -4,7 +4,7 @@
 import java.sql.SQLException;
 
 import org.hps.conditions.api.ConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
@@ -59,21 +59,18 @@
         ConditionsSeries series = new ConditionsSeries();
 
         // Get the ConditionsRecord with the meta-data, which will use the
-        // current run
-        // number from the manager.
+        // current run number from the manager.
         ConditionsRecordCollection conditionsRecords = conditionsManager.findConditionsRecords(conditionsKey);
 
         // Loop over conditions records. This will usually just be one record.
-        for (ConditionsRecord conditionsRecord : conditionsRecords.getObjects()) {
+        for (ConditionsRecord conditionsRecord : conditionsRecords) {
 
-            ConditionsObjectCollection collection = ConditionsRecordConverter.createCollection(tableMetaData);
-
+            AbstractConditionsObjectCollection collection;
             try {
-                collection.setCollectionId(conditionsRecord.getCollectionId());
+                collection = ConditionsRecordConverter.createCollection(conditionsRecord, tableMetaData);
             } catch (ConditionsObjectException e) {
                 throw new RuntimeException(e);
             }
-            collection.setTableMetaData(tableMetaData);
 
             // Get the table name.
             String tableName = conditionsRecord.getTableName();
@@ -97,7 +94,7 @@
                     // collection ID if applicable.
                     collection.add(newObject);
                 }
-            } catch (SQLException | ConditionsObjectException e) {
+            } catch (SQLException e) {
                 throw new RuntimeException(e);
             }
 

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	Wed Dec 10 19:18:35 2014
@@ -22,8 +22,8 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObjectException;
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
@@ -133,7 +133,7 @@
      * Class constructor.
      */
     public DatabaseConditionsManager() {
-        logger.setLevel(Level.FINE);
+        logger.setLevel(Level.FINER);
         registerConditionsConverter(new DetectorConditionsConverter());
         setupConnectionFromSystemProperty();
         register();
@@ -179,7 +179,6 @@
         logger.config("host " + connectionParameters.getHostname());
         logger.config("port " + connectionParameters.getPort());
         logger.config("user " + connectionParameters.getUser());
-        //logger.config("password " + connectionParameters.getPassword());
         logger.config("database " + connectionParameters.getDatabase());
         connection = connectionParameters.createConnection();
         logger.config("successfuly created connection");
@@ -233,7 +232,7 @@
      */
     // TODO: This should distinguish among multiple conditions sets of the same type by using the one with the most recent date
     //       in its ConditionsRecord.
-    public <CollectionType extends ConditionsObjectCollection> CollectionType getCollection(Class<CollectionType> type) {
+    public <CollectionType extends AbstractConditionsObjectCollection> CollectionType getCollection(Class<CollectionType> type) {
         TableMetaData metaData = this.findTableMetaData(type).get(0);
         if (metaData == null) {
             throw new RuntimeException("Table name data for condition of type " + type.getSimpleName() + " was not found.");
@@ -264,12 +263,12 @@
             }
             if (!this.isFrozen) {
                 if (!detectorName.equals(this.getDetector())) {
-                    logger.fine("detector name is different");
+                    logger.finest("detector name is different");
                 }
                 if (runNumber != this.getRun()) {
-                    logger.fine("run number is different");
+                    logger.finest("run number is different");
                 }            
-                logger.fine("setDetector with new detector " + detectorName + " and run #" + runNumber);
+                logger.info("setDetector with new detector " + detectorName + " and run #" + runNumber);
                 logger.fine("old detector " + this.getDetector() + " and run #" + this.getRun());
                 initialize(detectorName, runNumber);
             } else {
@@ -292,7 +291,7 @@
      */
     protected void initialize(String detectorName, int runNumber) throws ConditionsNotFoundException {
 
-        logger.log(Level.CONFIG, "initializing " + getClass().getSimpleName() + " with detector " + detectorName + " and run number " + runNumber);
+        logger.config("initializing " + getClass().getSimpleName() + " with detector " + detectorName + " and run number " + runNumber);
 
         // Did the user not specify a config?
         if (resourceConfig == null && fileConfig == null) {
@@ -565,9 +564,9 @@
      */
     public ConditionsRecordCollection findConditionsRecords(String name) {
         ConditionsRecordCollection runConditionsRecords = getConditionsData(ConditionsRecordCollection.class, TableConstants.CONDITIONS_RECORD);
-        logger.fine("searching for condition " + name + " in " + runConditionsRecords.getObjects().size() + " records");
+        logger.fine("searching for condition " + name + " in " + runConditionsRecords.size() + " records");
         ConditionsRecordCollection foundConditionsRecords = new ConditionsRecordCollection();
-        for (ConditionsRecord record : runConditionsRecords.getObjects()) {
+        for (ConditionsRecord record : runConditionsRecords) {
             if (record.getName().equals(name)) {
                 if (tag == null || (tag != null && record.getTag().equals(tag))) {
                     foundConditionsRecords.add(record);
@@ -576,8 +575,8 @@
                 }
             }
         }
-        if (foundConditionsRecords.getObjects().size() > 0) {
-            for (ConditionsRecord record : foundConditionsRecords.getObjects()) {
+        if (foundConditionsRecords.size() > 0) {
+            for (ConditionsRecord record : foundConditionsRecords) {
                 logger.fine("found ConditionsRecord with key " + name + '\n' + record.toString());
             }
         }
@@ -613,11 +612,11 @@
         this.tag = tag;
     }
 
-    public <ObjectType extends ConditionsObject> void insertCollection(ConditionsObjectCollection<ObjectType> collection) throws SQLException {
+    public <ObjectType extends ConditionsObject> void insertCollection(AbstractConditionsObjectCollection<ObjectType> collection) throws SQLException {
         if (collection == null) {
             throw new IllegalArgumentException("The collection is null.");
         }
-        if (collection.getObjects().size() == 0) {
+        if (collection.size() == 0) {
             throw new IllegalArgumentException("The collection is empty.");
         }
         if (collection.getTableMetaData() == null) {
@@ -631,18 +630,18 @@
                 throw new RuntimeException(e);
             }
         }
-        logger.fine("inserting collection with ID " + collection.getCollectionId() 
+        logger.info("inserting collection with ID " + collection.getCollectionId() 
                 + " and key " + collection.getTableMetaData().getKey() + " into table " + tableMetaData.getTableName());
 
         try {
             connection.setAutoCommit(false);
             logger.finest("starting insert transaction");
-            String sql = QueryBuilder.buildPreparedInsert(collection.get(0));
+            String sql = QueryBuilder.buildPreparedInsert(collection.iterator().next());
             PreparedStatement preparedStatement = 
                 connection.prepareStatement(sql);
             logger.finest("using prepared statement: " + sql);
             logger.finest("preparing updates");
-            for (ConditionsObject object : collection.getObjects()) {
+            for (ConditionsObject object : collection) {
                 preparedStatement.setObject(1, object.getCollectionId());
                 int parameterIndex = 2;
                 for (Entry<String,Object> entry : object.getFieldValues().entrySet()) {
@@ -662,7 +661,7 @@
             connection.setAutoCommit(true);
         }
     }
-           
+                      
     private void setupEcal() {
         logger.config("setting up ECAL conditions on detector");
         EcalConditions conditions = getCachedConditions(EcalConditions.class, ECAL_CONDITIONS).getCachedData();
@@ -683,7 +682,6 @@
         logger.config("done loading SVT detector conditions");
     }
     
-
     /**
      * Check if connected to the database.
      * @return true if connected
@@ -816,13 +814,13 @@
                 throw new RuntimeException(e);
             }
 
-            Class<? extends ConditionsObjectCollection<?>> collectionClass;
+            Class<? extends AbstractConditionsObjectCollection<?>> collectionClass;
             Class<?> rawCollectionClass;
             try {
                 rawCollectionClass = Class.forName(collectionName);
-                if (!ConditionsObjectCollection.class.isAssignableFrom(rawCollectionClass))
+                if (!AbstractConditionsObjectCollection.class.isAssignableFrom(rawCollectionClass))
                     throw new RuntimeException("The class " + rawCollectionClass.getSimpleName() + " does not extend ConditionsObjectCollection.");
-                collectionClass = (Class<? extends ConditionsObjectCollection<?>>) rawCollectionClass;
+                collectionClass = (Class<? extends AbstractConditionsObjectCollection<?>>) rawCollectionClass;
             } catch (ClassNotFoundException e) {
                 throw new RuntimeException(e);
             }

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	Wed Dec 10 19:18:35 2014
@@ -4,7 +4,7 @@
 import java.util.Set;
 
 import org.hps.conditions.api.ConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * <p>
@@ -14,7 +14,7 @@
  * </p>
  * <p>
  * It also has references to the implementation classes which are used to map
- * the data onto {@link ConditionsObject} and {@link ConditionsObjectCollection}
+ * the data onto {@link ConditionsObject} and {@link AbstractConditionsObjectCollection}
  * s.
  * </p>
  * 
@@ -26,7 +26,7 @@
     String tableName;
     String key;
     Class<? extends ConditionsObject> objectClass;
-    Class<? extends ConditionsObjectCollection<?>> collectionClass;
+    Class<? extends AbstractConditionsObjectCollection<?>> collectionClass;
     Set<String> fieldNames = new LinkedHashSet<String>();
 
     /**
@@ -35,7 +35,7 @@
      * @param objectClass The type of object for the data mapping.
      * @param collectionClass The type of collection for the data mapping.
      */
-    TableMetaData(String key, String tableName, Class<? extends ConditionsObject> objectClass, Class<? extends ConditionsObjectCollection<?>> collectionClass) {
+    public TableMetaData(String key, String tableName, Class<? extends ConditionsObject> objectClass, Class<? extends AbstractConditionsObjectCollection<?>> collectionClass) {
         this.key = key;
         this.tableName = tableName;
         this.objectClass = objectClass;
@@ -54,7 +54,7 @@
      * Get the type of collection this table maps onto.
      * @return
      */
-    public Class<? extends ConditionsObjectCollection<?>> getCollectionClass() {
+    public Class<? extends AbstractConditionsObjectCollection<?>> getCollectionClass() {
         return collectionClass;
     }
 

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.ecal;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * This class represents an ECAL channel that is considered "bad" which means it
@@ -9,7 +9,7 @@
  */
 public final class EcalBadChannel extends AbstractConditionsObject {
 
-    public static class EcalBadChannelCollection extends ConditionsObjectCollection<EcalBadChannel> {
+    public static class EcalBadChannelCollection extends AbstractConditionsObjectCollection<EcalBadChannel> {
     }
 
     int getChannelId() {

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.ecal;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * This class is a simplistic representation of ECal pedestal and noise values
@@ -14,7 +14,7 @@
  */
 public final class EcalCalibration extends AbstractConditionsObject {
 
-    public static class EcalCalibrationCollection extends ConditionsObjectCollection<EcalCalibration> {
+    public static class EcalCalibrationCollection extends AbstractConditionsObjectCollection<EcalCalibration> {
     }
     
     public EcalCalibration() {

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	Wed Dec 10 19:18:35 2014
@@ -5,7 +5,7 @@
 
 import org.hps.conditions.api.AbstractConditionsObject;
 import org.hps.conditions.api.AbstractIdentifier;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.conditions.api.ConditionsObjectException;
 import org.lcsim.detector.identifier.ExpandedIdentifier;
 import org.lcsim.detector.identifier.IExpandedIdentifier;
@@ -123,7 +123,7 @@
     /**
      * A collection of {@link EcalChannel} objects.
      */
-    public static class EcalChannelCollection extends ConditionsObjectCollection<EcalChannel> {
+    public static class EcalChannelCollection extends AbstractConditionsObjectCollection<EcalChannel> {
 
         // Identifier maps for fast lookup.
         Map<Long, EcalChannel> daqMap = new HashMap<Long, EcalChannel>();
@@ -136,7 +136,7 @@
          * access to the Detector API.
          */
         @Override
-        public void add(EcalChannel channel) throws ConditionsObjectException {
+        public boolean add(EcalChannel channel)  {
             super.add(channel);
             DaqId daqId = channel.createDaqId();
             if (daqId.isValid())
@@ -144,6 +144,7 @@
             ChannelId channelId = channel.createChannelId();
             if (channelId.isValid())
                 channelMap.put(channelId.encode(), channel);
+            return true;
         }
 
         /**
@@ -152,7 +153,7 @@
          * @param system The system ID of the subdetector.
          */
         void buildGeometryMap(IIdentifierHelper helper, int system) {
-            for (EcalChannel channel : this.objects) {
+            for (EcalChannel channel : this) {
                 GeometryId geometryId = channel.createGeometryId(helper, system);
                 geometryMap.put(geometryId.encode(), channel);
             }

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	Wed Dec 10 19:18:35 2014
@@ -109,7 +109,7 @@
         buff.append('\n');
 
         // Loop over all channels.
-        for (EcalChannel channel : channelMap.getObjects()) {
+        for (EcalChannel channel : channelMap) {
 
             EcalChannelConstants constants = getChannelConstants(channel);
 

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	Wed Dec 10 19:18:35 2014
@@ -46,7 +46,7 @@
         // Get the ECal gains from the conditions database and add them to the
         // conditions set
         EcalGainCollection gains = dbConditionsManager.getCollection(EcalGainCollection.class);
-        for (EcalGain gain : gains.getObjects()) {
+        for (EcalGain gain : gains) {
             ChannelId channelId = new ChannelId(new int[] { gain.getChannelId() });
             EcalChannel channel = channels.findChannel(channelId);
             conditions.getChannelConstants(channel).setGain(gain);
@@ -55,7 +55,7 @@
         // Get the ECal bad channels and add them to the conditions set
         try {
             EcalBadChannelCollection badChannels = dbConditionsManager.getCollection(EcalBadChannelCollection.class);
-            for (EcalBadChannel badChannel : badChannels.getObjects()) {
+            for (EcalBadChannel badChannel : badChannels) {
                 ChannelId channelId = new ChannelId(new int[] { badChannel.getChannelId() });
                 EcalChannel channel = channels.findChannel(channelId);
                 conditions.getChannelConstants(channel).setBadChannel(true);
@@ -67,7 +67,7 @@
         // Get the ECal calibrations from the conditions database and add them
         // to the conditions set.
         EcalCalibrationCollection calibrations = dbConditionsManager.getCollection(EcalCalibrationCollection.class);
-        for (EcalCalibration calibration : calibrations.getObjects()) {
+        for (EcalCalibration calibration : calibrations) {
             ChannelId channelId = new ChannelId(new int[] { calibration.getChannelId() });
             EcalChannel channel = channels.findChannel(channelId);
             conditions.getChannelConstants(channel).setCalibration(calibration);
@@ -76,7 +76,7 @@
         // Get the ECal time shifts from the conditions database and add them to
         // the conditions set.
         EcalTimeShiftCollection timeShifts = dbConditionsManager.getCollection(EcalTimeShiftCollection.class);
-        for (EcalTimeShift timeShift : timeShifts.getObjects()) {
+        for (EcalTimeShift timeShift : timeShifts) {
             ChannelId channelId = new ChannelId(new int[] { timeShift.getChannelId() });
             EcalChannel channel = channels.findChannel(channelId);
             conditions.getChannelConstants(channel).setTimeShift(timeShift);

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.ecal;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * A simplistic representation of gain values from the ECal conditions database.
@@ -10,7 +10,7 @@
  */
 public final class EcalGain extends AbstractConditionsObject {
 
-    public static class EcalGainCollection extends ConditionsObjectCollection<EcalGain> {
+    public static class EcalGainCollection extends AbstractConditionsObjectCollection<EcalGain> {
     }
 
     /**

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.ecal;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * A conditions class for representing the setup of the LED system in the ECAL
@@ -13,7 +13,7 @@
     /**
      * Generic collection class for these objects.
      */
-    public static class EcalLedCollection extends ConditionsObjectCollection<EcalLed> {
+    public static class EcalLedCollection extends AbstractConditionsObjectCollection<EcalLed> {
     }
 
     /**

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.ecal;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * This class represents a time shift calibration value for an ECAL channel.
@@ -12,7 +12,7 @@
     /**
      * A collection of {@link EcalTimeShift} objects.
      */
-    public static class EcalTimeShiftCollection extends ConditionsObjectCollection<EcalTimeShift> {
+    public static class EcalTimeShiftCollection extends AbstractConditionsObjectCollection<EcalTimeShift> {
     }
 
     /**

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	Wed Dec 10 19:18:35 2014
@@ -5,13 +5,11 @@
 import java.util.Map;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
-import org.hps.conditions.api.ConditionsObjectException;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.util.Pair;
 
 /**
- * This abstract class provides basic setup information for an SVT sensor
- * channel.
+ * This abstract class provides basic setup information for an SVT sensor channel.
  * 
  * @author Omar Moreno <[log in to unmask]>
  */
@@ -20,7 +18,7 @@
     // 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 ConditionsObjectCollection<T> {
+    public static abstract class AbstractSvtChannelCollection<T extends AbstractSvtChannel> extends AbstractConditionsObjectCollection<T> {
 
         Map<Integer, T> channelMap = new HashMap<Integer, T>();
 
@@ -30,7 +28,7 @@
          * 
          * @param A channel of a type extending {@link AbstractSvtChannel}
          */
-        public void add(T channel) {
+        public boolean add(T channel) {
 
             // If it doesn't exist, add the channel to the channel map
             if (channelMap.containsKey(channel.getChannelID())) {
@@ -39,11 +37,7 @@
             channelMap.put(channel.getChannelID(), channel);
 
             // Add to the collection
-            try {
-                super.add(channel);
-            } catch (ConditionsObjectException e) {
-                throw new RuntimeException(e);
-            }
+            return super.add(channel);                                  
         }
 
         /**
@@ -73,7 +67,7 @@
          */
         public String toString() {
             StringBuffer buff = new StringBuffer();
-            for (T channel : this.getObjects()) {
+            for (T channel : this) {
                 buff.append(channel.toString() + '\n');
             }
             return buff.toString();

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	Wed Dec 10 19:18:35 2014
@@ -39,7 +39,7 @@
      */
     public ChannelConstants getChannelConstants(AbstractSvtChannel channel) {
         // This channel must come from the map.
-        if (!channelMap.getObjects().contains(channel)) {
+        if (!channelMap.contains(channel)) {
             System.err.println("[ " + this.getClass().getSimpleName() + " ]: Channel not found in map => " + channel);
             throw new IllegalArgumentException("Channel was not found in map.");
         }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditionsConverter.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditionsConverter.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/AbstractSvtConditionsConverter.java	Wed Dec 10 19:18:35 2014
@@ -36,14 +36,14 @@
         // Get the SVT calibrations (baseline, noise) from the conditions
         // database
         SvtCalibrationCollection calibrations = dbConditionsManager.getCollection(SvtCalibrationCollection.class);
-        for (SvtCalibration calibration : calibrations.getObjects()) {
+        for (SvtCalibration calibration : calibrations) {
             AbstractSvtChannel channel = conditions.getChannelMap().findChannel(calibration.getChannelID());
             conditions.getChannelConstants(channel).setCalibration(calibration);
         }
 
         // Get the Channel pulse fit parameters from the conditions database
         SvtShapeFitParametersCollection shapeFitParametersCollection = dbConditionsManager.getCollection(SvtShapeFitParametersCollection.class);
-        for (SvtShapeFitParameters shapeFitParameters : shapeFitParametersCollection.getObjects()) {
+        for (SvtShapeFitParameters shapeFitParameters : shapeFitParametersCollection) {
             AbstractSvtChannel channel = conditions.getChannelMap().findChannel(shapeFitParameters.getChannelID());
             conditions.getChannelConstants(channel).setShapeFitParameters(shapeFitParameters);
         }
@@ -53,7 +53,7 @@
         // notify the user and move on.
         try {
             SvtBadChannelCollection badChannels = dbConditionsManager.getCollection(SvtBadChannelCollection.class);
-            for (SvtBadChannel badChannel : badChannels.getObjects()) {
+            for (SvtBadChannel badChannel : badChannels) {
                 AbstractSvtChannel channel = conditions.getChannelMap().findChannel(badChannel.getChannelId());
                 conditions.getChannelConstants(channel).setBadChannel(true);
             }
@@ -63,7 +63,7 @@
 
         // Get the gains and offsets from the conditions database
         SvtGainCollection channelGains = dbConditionsManager.getCollection(SvtGainCollection.class);
-        for (SvtGain channelGain : channelGains.getObjects()) {
+        for (SvtGain channelGain : channelGains) {
             int channelId = channelGain.getChannelID();
             AbstractSvtChannel channel = conditions.getChannelMap().findChannel(channelId);
             conditions.getChannelConstants(channel).setGain(channelGain);

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	Wed Dec 10 19:18:35 2014
@@ -2,7 +2,7 @@
 
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.util.Pair;
 
 /**
@@ -13,7 +13,7 @@
  */
 public abstract class AbstractSvtDaqMapping extends AbstractConditionsObject {
 
-    public static abstract class AbstractSvtDaqMappingCollection<T extends AbstractSvtDaqMapping> extends ConditionsObjectCollection<T> {
+    public static abstract class AbstractSvtDaqMappingCollection<T extends AbstractSvtDaqMapping> extends AbstractConditionsObjectCollection<T> {
 
         /**
          * Flag values for top or bottom half.

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.hps.util.Pair;
 
 /**
@@ -12,7 +12,7 @@
  */
 public class AbstractSvtT0Shift extends AbstractConditionsObject {
 
-    public static abstract class AbstractSvtT0ShiftCollection<T extends AbstractSvtT0Shift> extends ConditionsObjectCollection<T> {
+    public static abstract class AbstractSvtT0ShiftCollection<T extends AbstractSvtT0Shift> extends AbstractConditionsObjectCollection<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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * <p>
@@ -20,7 +20,7 @@
  */
 public class SvtAlignmentConstant extends AbstractConditionsObject {
 
-    public static class SvtAlignmentCollection extends ConditionsObjectCollection<SvtAlignmentConstant> {
+    public static class SvtAlignmentCollection extends AbstractConditionsObjectCollection<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	Wed Dec 10 19:18:35 2014
@@ -1,11 +1,11 @@
 package org.hps.conditions.svt;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 public final class SvtBadChannel extends AbstractConditionsObject {
 
-    public static class SvtBadChannelCollection extends ConditionsObjectCollection<SvtBadChannel> {
+    public static class SvtBadChannelCollection extends AbstractConditionsObjectCollection<SvtBadChannel> {
     }
 
     public int getChannelId() {

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 import static org.hps.conditions.svt.SvtChannel.MAX_NUMBER_OF_SAMPLES;
 
@@ -13,7 +13,7 @@
  */
 public final class SvtCalibration extends AbstractConditionsObject {
 
-    public static class SvtCalibrationCollection extends ConditionsObjectCollection<SvtCalibration> {
+    public static class SvtCalibrationCollection extends AbstractConditionsObjectCollection<SvtCalibration> {
     }
 
     /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtChannel.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtChannel.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtChannel.java	Wed Dec 10 19:18:35 2014
@@ -27,7 +27,7 @@
             List<SvtChannel> channels = new ArrayList<SvtChannel>();
             int febID = pair.getFirstElement();
             int febHybridID = pair.getSecondElement();
-            for (SvtChannel channel : this.getObjects()) {
+            for (SvtChannel channel : this) {
                 if (channel.getFebID() == febID && channel.getFebHybridID() == febHybridID) {
                     channels.add(channel);
                 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConditions.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConditions.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtConditions.java	Wed Dec 10 19:18:35 2014
@@ -117,7 +117,7 @@
         }
         buff.append('\n');
         // Loop over channels.
-        for (SvtChannel channel : this.getChannelMap().getObjects()) {
+        for (SvtChannel channel : this.getChannelMap()) {
 
             // Get the conditions for the channel.
             ChannelConstants constants = getChannelConstants(channel);

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	Wed Dec 10 19:18:35 2014
@@ -6,7 +6,7 @@
 import java.io.InputStream;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 import org.jdom.Document;
 import org.jdom.JDOMException;
 import org.jdom.input.SAXBuilder;
@@ -18,7 +18,7 @@
  */
 public class SvtConfiguration extends AbstractConditionsObject {
 
-    public static class SvtConfigurationCollection extends ConditionsObjectCollection<SvtConfiguration> {
+    public static class SvtConfigurationCollection extends AbstractConditionsObjectCollection<SvtConfiguration> {
     }
 
     /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java	Wed Dec 10 19:18:35 2014
@@ -24,7 +24,7 @@
         public Pair<Integer, Integer> getDaqPair(HpsSiSensor sensor) {
 
             String svtHalf = sensor.isTopLayer() ? TOP_HALF : BOTTOM_HALF;
-            for (SvtDaqMapping object : this.getObjects()) {
+            for (SvtDaqMapping object : this) {
 
                 if (svtHalf.equals(object.getSvtHalf()) && object.getLayerNumber() == sensor.getLayerNumber() && object.getSide().equals(sensor.getSide())) {
 
@@ -46,7 +46,7 @@
          */
         public String getOrientation(Pair<Integer, Integer> daqPair) {
 
-            for (SvtDaqMapping daqMapping : this.getObjects()) {
+            for (SvtDaqMapping daqMapping : this) {
 
                 if (daqPair.getFirstElement() == daqMapping.getFebID() && daqPair.getSecondElement() == daqMapping.getFebHybridID()) {
                     return daqMapping.getOrientation();
@@ -76,7 +76,7 @@
             buff.append('\n');
             buff.append("----------------------");
             buff.append('\n');
-            for (SvtDaqMapping object : getObjects()) {
+            for (SvtDaqMapping object : this) {
                 buff.append(object.getFebID());
                 buff.append("    ");
                 buff.append(object.getFebHybridID());

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtDetectorSetup.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtDetectorSetup.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtDetectorSetup.java	Wed Dec 10 19:18:35 2014
@@ -43,7 +43,7 @@
         List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class);
         logger.info("setting up " + sensors.size() + " SVT sensors");
         SvtChannelCollection channelMap = conditions.getChannelMap();
-        logger.info("channel map has " + conditions.getChannelMap().getObjects().size() + " entries");
+        logger.info("channel map has " + conditions.getChannelMap().size() + " entries");
         SvtDaqMappingCollection daqMap = conditions.getDaqMap();
         SvtT0ShiftCollection t0Shifts = conditions.getT0Shifts();
 

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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * This class represents gain measurements for a single SVT channel.
@@ -9,7 +9,7 @@
  */
 public final class SvtGain extends AbstractConditionsObject {
 
-    public static class SvtGainCollection extends ConditionsObjectCollection<SvtGain> {
+    public static class SvtGainCollection extends AbstractConditionsObjectCollection<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	Wed Dec 10 19:18:35 2014
@@ -1,7 +1,7 @@
 package org.hps.conditions.svt;
 
 import org.hps.conditions.api.AbstractConditionsObject;
-import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.AbstractConditionsObjectCollection;
 
 /**
  * This class encapsulates the shape fit parameters for an SVT channel.
@@ -11,7 +11,7 @@
  */
 public final class SvtShapeFitParameters extends AbstractConditionsObject {
 
-    public static class SvtShapeFitParametersCollection extends ConditionsObjectCollection<SvtShapeFitParameters> {
+    public static class SvtShapeFitParametersCollection extends AbstractConditionsObjectCollection<SvtShapeFitParameters> {
     }
 
     /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtT0Shift.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtT0Shift.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtT0Shift.java	Wed Dec 10 19:18:35 2014
@@ -24,7 +24,7 @@
         public SvtT0Shift getT0Shift(Pair<Integer, Integer> pair) {
             int febID = pair.getFirstElement();
             int febHybridID = pair.getSecondElement();
-            for (SvtT0Shift t0Shift : this.getObjects()) {
+            for (SvtT0Shift t0Shift : this) {
                 if (t0Shift.getFebID() == febID && t0Shift.getFebHybridID() == febHybridID) {
                     return t0Shift;
                 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtChannel.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtChannel.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtChannel.java	Wed Dec 10 19:18:35 2014
@@ -15,7 +15,7 @@
             List<TestRunSvtChannel> channels = new ArrayList<TestRunSvtChannel>();
             int fpga = pair.getFirstElement();
             int hybrid = pair.getSecondElement();
-            for (TestRunSvtChannel channel : this.getObjects()) {
+            for (TestRunSvtChannel channel : this) {
                 if (channel.getFpgaID() == fpga && channel.getHybridID() == hybrid) {
                     channels.add(channel);
                 }

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditions.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditions.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtConditions.java	Wed Dec 10 19:18:35 2014
@@ -119,7 +119,7 @@
         }
         buff.append('\n');
         // Loop over channels.
-        for (TestRunSvtChannel channel : this.getChannelMap().getObjects()) {
+        for (TestRunSvtChannel channel : this.getChannelMap()) {
 
             System.out.println("Channel: " + channel.toString());
 

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDaqMapping.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDaqMapping.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDaqMapping.java	Wed Dec 10 19:18:35 2014
@@ -24,7 +24,7 @@
         public Pair<Integer, Integer> getDaqPair(HpsSiSensor sensor) {
 
             String svtHalf = sensor.isTopLayer() ? TOP_HALF : BOTTOM_HALF;
-            for (TestRunSvtDaqMapping daqMapping : this.getObjects()) {
+            for (TestRunSvtDaqMapping daqMapping : this) {
 
                 if (svtHalf.equals(daqMapping.getSvtHalf()) && daqMapping.getLayerNumber() == sensor.getLayerNumber()) {
 
@@ -45,7 +45,7 @@
          */
         public String getOrientation(Pair<Integer, Integer> daqPair) {
 
-            for (TestRunSvtDaqMapping daqMapping : this.getObjects()) {
+            for (TestRunSvtDaqMapping daqMapping : this) {
 
                 if (daqPair.getFirstElement() == ((TestRunSvtDaqMapping) daqMapping).getFpgaID() && daqPair.getSecondElement() == ((TestRunSvtDaqMapping) daqMapping).getHybridID()) {
                     return daqMapping.getOrientation();
@@ -73,7 +73,7 @@
             buffer.append('\n');
             buffer.append("----------------------");
             buffer.append('\n');
-            for (TestRunSvtDaqMapping daqMapping : getObjects()) {
+            for (TestRunSvtDaqMapping daqMapping : this) {
                 TestRunSvtDaqMapping testRunDaqMapping = (TestRunSvtDaqMapping) daqMapping;
                 buffer.append(testRunDaqMapping.getFpgaID());
                 buffer.append("    ");

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDetectorSetup.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDetectorSetup.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtDetectorSetup.java	Wed Dec 10 19:18:35 2014
@@ -44,7 +44,7 @@
         List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class);
         logger.info("setting up " + sensors.size() + " SVT sensors");
         TestRunSvtChannelCollection channelMap = conditions.getChannelMap();
-        logger.info("channel map has " + channelMap.getObjects().size() + " entries");
+        logger.info("channel map has " + channelMap.size() + " entries");
         TestRunSvtDaqMappingCollection daqMap = conditions.getDaqMap();
         TestRunSvtT0ShiftCollection t0Shifts = conditions.getT0Shifts();
 

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtT0Shift.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtT0Shift.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/TestRunSvtT0Shift.java	Wed Dec 10 19:18:35 2014
@@ -25,7 +25,7 @@
 
             int fpgaID = pair.getFirstElement();
             int hybridID = pair.getSecondElement();
-            for (TestRunSvtT0Shift t0Shift : this.getObjects()) {
+            for (TestRunSvtT0Shift t0Shift : this) {
                 if (t0Shift.getFpgaID() == fpgaID && t0Shift.getHybridID() == hybridID) {
                     return t0Shift;
                 }

Modified: java/trunk/conditions/src/test/java/org/hps/conditions/ConditionsObjectTest.java
 =============================================================================
--- java/trunk/conditions/src/test/java/org/hps/conditions/ConditionsObjectTest.java	(original)
+++ java/trunk/conditions/src/test/java/org/hps/conditions/ConditionsObjectTest.java	Wed Dec 10 19:18:35 2014
@@ -15,6 +15,7 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
+// FIXME: This test is berken.  It should probably be removed.
 public class ConditionsObjectTest extends TestCase {
 
     public void testBasicOperations() throws ConditionsObjectException {
@@ -25,7 +26,8 @@
         TableMetaData tableMetaData = conditionsManager.findTableMetaData(TableConstants.SVT_GAINS);
         int collectionId = conditionsManager.getNextCollectionID(tableMetaData.getTableName());
         SvtGainCollection collection = new SvtGainCollection();
-        collection.setTableMetaData(tableMetaData);
+        // FIXME: This can't be done through a setter anymore!
+        //collection.setTableMetaData(tableMetaData);
         try {
             collection.setCollectionId(collectionId);
         } catch (ConditionsObjectException e) {

Modified: java/trunk/conditions/src/test/java/org/hps/conditions/beam/BeamCurrentTest.java
 =============================================================================
--- java/trunk/conditions/src/test/java/org/hps/conditions/beam/BeamCurrentTest.java	(original)
+++ java/trunk/conditions/src/test/java/org/hps/conditions/beam/BeamCurrentTest.java	Wed Dec 10 19:18:35 2014
@@ -79,7 +79,7 @@
             if (currentRun != event.getRunNumber()) {
                 currentRun = event.getRunNumber();
                 BeamCurrentCollection collection = ConditionsManager.defaultInstance().getCachedConditions(BeamCurrentCollection.class, BEAM_CURRENT).getCachedData();
-                BeamCurrent beamCurrent = collection.get(0);
+                BeamCurrent beamCurrent = collection.iterator().next();
                 System.out.println("Run " + event.getRunNumber() + " has integrated beam current " + beamCurrent.getIntegratedBeamCurrent() + " nC.");
                 assertEquals("Wrong beam current for run.", beamCurrentAnswerKey.get(currentRun), beamCurrent.getIntegratedBeamCurrent());
             }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalCalibrationsDriver.java	Wed Dec 10 19:18:35 2014
@@ -127,7 +127,7 @@
         ecalConditions = conditionsManager.getCachedConditions(EcalConditions.class, TableConstants.ECAL_CONDITIONS).getCachedData();
         
         // Create a histogram for every ECAL channel.
-        for (EcalChannel channel : ecalConditions.getChannelCollection().getObjects()) {
+        for (EcalChannel channel : ecalConditions.getChannelCollection()) {
             aida.histogram1D("ECAL Channel " + channel.getChannelId(), 300, 0, 300.);
         }
     }
@@ -178,7 +178,7 @@
         calibrations.setTableMetaData(tableMetaData);
         
         // Loop over all ECAL channels.
-        for (EcalChannel channel : ecalConditions.getChannelCollection().getObjects()) {
+        for (EcalChannel channel : ecalConditions.getChannelCollection()) {
             
             // Get the histogram with ADC distribution for this channel. 
             IHistogram1D histogram = aida.histogram1D("ECAL Channel " + channel.getChannelId());
@@ -205,12 +205,7 @@
             
             // Create a new calibration object and add it to the collection, using mean for pedestal
             // and sigma for noise.
-            EcalCalibration calibration = new EcalCalibration(channelId, mean, sigma);
-            try {
-                calibrations.add(calibration);
-            } catch (ConditionsObjectException e) {
-                throw new RuntimeException(e);
-            }
+            calibrations.add(new EcalCalibration(channelId, mean, sigma));
         } 
         
         // Get the list of field names for the header.

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