Print

Print


Author: [log in to unmask]
Date: Fri Mar 13 09:03:34 2015
New Revision: 2429

Log:
Add additional sorting functionality to conditions classes.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObjectCollection.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/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/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/test/java/org/hps/conditions/EngRunConditionsTest.java

Modified: 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/AbstractConditionsObjectCollection.java	Fri Mar 13 09:03:34 2015
@@ -8,6 +8,7 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 
+import org.hps.conditions.api.ConditionsObject.DefaultConditionsObjectComparator;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.TableMetaData;
 
@@ -201,7 +202,37 @@
      * @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) {
-        throw new UnsupportedOperationException("This method is not implemented.");
+        List<ObjectType> objects = new ArrayList<ObjectType>(this);
+        Collections.sort(objects, comparator);
+        AbstractConditionsObjectCollection<ObjectType> collection = null;
+        try {
+            collection = (AbstractConditionsObjectCollection<ObjectType>) getClass().newInstance();
+        } catch (InstantiationException | IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+        collection.addAll(objects);
+        return collection;
+    }
+    
+    public void sort() {
+        AbstractConditionsObjectCollection<ObjectType> sortedCollection = sorted();
+        this.clear();
+        this.addAll(sortedCollection);
+    }
+    
+    public AbstractConditionsObjectCollection<ObjectType> sorted() {
+        List<ObjectType> objects = new ArrayList<ObjectType>(this);
+        Collections.sort(objects, new DefaultConditionsObjectComparator());
+        AbstractConditionsObjectCollection<ObjectType> collection = null;
+        try {
+            // FIXME: This is kind of ugly.
+            collection = (AbstractConditionsObjectCollection<ObjectType>) getClass().newInstance();
+        } catch (InstantiationException | IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+        collection.addAll(objects);
+        return collection;
     }
 }

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	Fri Mar 13 09:03:34 2015
@@ -1,4 +1,6 @@
 package org.hps.conditions.api;
+
+import java.util.Comparator;
 
 /**
  * This is an ORM interface for accessing conditions database information by
@@ -63,4 +65,16 @@
      * @return True if record is new.
      */
     public boolean isNew();
+    
+    static class DefaultConditionsObjectComparator implements Comparator<ConditionsObject> {
+        public int compare(ConditionsObject o1, ConditionsObject o2) {
+            if (o1.getRowId() < o2.getRowId()) {
+                return -1;
+            } else if (o1.getRowId() > o2.getRowId()) {
+                return 1;
+            } 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	Fri Mar 13 09:03:34 2015
@@ -68,4 +68,8 @@
      * @return A sorted list of the objects.
      */
     public AbstractConditionsObjectCollection<ObjectType> sorted(Comparator<ObjectType> comparator);
+    
+    public void sort();
+    
+    public AbstractConditionsObjectCollection<ObjectType> sorted();
 }

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	Fri Mar 13 09:03:34 2015
@@ -1,4 +1,6 @@
 package org.hps.conditions.ecal;
+
+import java.util.Comparator;
 
 import org.hps.conditions.api.AbstractConditionsObject;
 import org.hps.conditions.api.AbstractConditionsObjectCollection;
@@ -16,14 +18,30 @@
 public final class EcalBadChannel extends AbstractConditionsObject {
 
     public static class EcalBadChannelCollection extends AbstractConditionsObjectCollection<EcalBadChannel> {
+        
+        public AbstractConditionsObjectCollection<EcalBadChannel> sorted() {
+            return sorted(new ChannelIdComparator());
+        }
+                
+        class ChannelIdComparator implements Comparator<EcalBadChannel> {
+            public int compare(EcalBadChannel o1, EcalBadChannel o2) {
+                if (o1.getChannelId() < o2.getChannelId()) {
+                    return -1;
+                } else if (o1.getChannelId() > o2.getChannelId()) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }
+        }        
     }
-
+    
     /**
-     * Get the channel ID of the bad channel.
-     * @return The channel ID of the bad channel.
+     * 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	Fri Mar 13 09:03:34 2015
@@ -1,4 +1,6 @@
 package org.hps.conditions.ecal;
+
+import java.util.Comparator;
 
 import org.hps.conditions.api.AbstractConditionsObject;
 import org.hps.conditions.api.AbstractConditionsObjectCollection;
@@ -21,8 +23,24 @@
 public final class EcalCalibration extends AbstractConditionsObject {
 
     public static class EcalCalibrationCollection extends AbstractConditionsObjectCollection<EcalCalibration> {
+        
+        public AbstractConditionsObjectCollection<EcalCalibration> sorted() {
+            return sorted(new ChannelIdComparator());
+        }
+                
+        class ChannelIdComparator implements Comparator<EcalCalibration> {
+            public int compare(EcalCalibration o1, EcalCalibration o2) {
+                if (o1.getChannelId() < o2.getChannelId()) {
+                    return -1;
+                } else if (o1.getChannelId() > o2.getChannelId()) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }
+        }
     }
-    
+               
     public EcalCalibration() {
     }
     
@@ -33,12 +51,12 @@
     }
 
     /**
-     * Get the channel ID.
-     * @return The channel ID.
+     * 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/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	Fri Mar 13 09:03:34 2015
@@ -1,10 +1,7 @@
 package org.hps.conditions.ecal;
 
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import org.hps.conditions.api.AbstractConditionsObject;
@@ -137,20 +134,6 @@
         }
     }
     
-    private static final class ChannelIdComparator implements Comparator<EcalChannel> {
-        
-        public int compare(EcalChannel c1, EcalChannel c2) {
-            if (c1.getChannelId() < c2.getChannelId()) {
-                return -1;
-            } else if (c1.getChannelId() > c2.getChannelId()) {
-                return 1;
-            } else {
-                return 0;
-            }
-        }
-        
-    }
-
     DaqId createDaqId() {
         return new DaqId(new int[] { getCrate(), getSlot(), getChannel() });
     }
@@ -254,16 +237,22 @@
          */
         public EcalChannel findDaq(long id) {
             return daqMap.get(id);
-        }
-        
-        /**
-         * Get a list of channels sorted by channel ID.
-         * @return A list of channels sorted by channel ID.
-         */
-        public List<EcalChannel> sortedByChannelId() {
-            List<EcalChannel> channelList = new ArrayList<EcalChannel>(this);
-            Collections.sort(channelList, new ChannelIdComparator());
-            return channelList;
+        }        
+                   
+        public AbstractConditionsObjectCollection<EcalChannel> sorted() {
+            return sorted(new ChannelIdComparator());
+        }
+            
+        class ChannelIdComparator implements Comparator<EcalChannel> {        
+            public int compare(EcalChannel c1, EcalChannel c2) {
+                if (c1.getChannelId() < c2.getChannelId()) {
+                    return -1;
+                } else if (c1.getChannelId() > c2.getChannelId()) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }            
         }
     }
 

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	Fri Mar 13 09:03:34 2015
@@ -1,4 +1,6 @@
 package org.hps.conditions.ecal;
+
+import java.util.Comparator;
 
 import org.hps.conditions.api.AbstractConditionsObject;
 import org.hps.conditions.api.AbstractConditionsObjectCollection;
@@ -17,8 +19,26 @@
 public final class EcalGain extends AbstractConditionsObject {
 
     public static class EcalGainCollection extends AbstractConditionsObjectCollection<EcalGain> {
+        
+        public AbstractConditionsObjectCollection<EcalGain> sorted() {
+            return sorted(new ChannelIdComparator());
+        }
+                
+        class ChannelIdComparator implements Comparator<EcalGain> {
+            public int compare(EcalGain o1, EcalGain o2) {
+                if (o1.getChannelId() < o2.getChannelId()) {
+                    return -1;
+                } else if (o1.getChannelId() > o2.getChannelId()) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }
+            
+        }
     }
-
+    
+    
     /**
      * Get the gain value in units of MeV/ADC count.
      * @return The gain value.

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	Fri Mar 13 09:03:34 2015
@@ -1,4 +1,6 @@
 package org.hps.conditions.ecal;
+
+import java.util.Comparator;
 
 import org.hps.conditions.api.AbstractConditionsObject;
 import org.hps.conditions.api.AbstractConditionsObjectCollection;
@@ -6,6 +8,7 @@
 import org.hps.conditions.database.Field;
 import org.hps.conditions.database.MultipleCollectionsAction;
 import org.hps.conditions.database.Table;
+import org.hps.conditions.ecal.EcalGain.EcalGainCollection.ChannelIdComparator;
 
 /**
  * A conditions class for representing the setup of the LED system in the ECAL
@@ -20,6 +23,22 @@
      * Generic collection class for these objects.
      */
     public static class EcalLedCollection extends AbstractConditionsObjectCollection<EcalLed> {
+        public AbstractConditionsObjectCollection<EcalLed> sorted() {
+            return sorted(new ChannelIdComparator());
+        }
+                
+        class ChannelIdComparator implements Comparator<EcalLed> {
+            public int compare(EcalLed o1, EcalLed o2) {
+                if (o1.getEcalChannelId() < o2.getEcalChannelId()) {
+                    return -1;
+                } else if (o1.getEcalChannelId() > o2.getEcalChannelId()) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }
+            
+        }
     }
 
     /**

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	Fri Mar 13 09:03:34 2015
@@ -15,6 +15,9 @@
      * Generic collection class for these objects.
      */
     public static class EcalLedCalibrationCollection extends AbstractConditionsObjectCollection<EcalLedCalibration> {
+    }
+    
+    public EcalLedCalibration() {        
     }
     
     public EcalLedCalibration(int channelId, double mean, double 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	Fri Mar 13 09:03:34 2015
@@ -1,4 +1,6 @@
 package org.hps.conditions.ecal;
+
+import java.util.Comparator;
 
 import org.hps.conditions.api.AbstractConditionsObject;
 import org.hps.conditions.api.AbstractConditionsObjectCollection;
@@ -6,6 +8,7 @@
 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.
@@ -19,6 +22,21 @@
      * A collection of {@link EcalTimeShift} objects.
      */
     public static class EcalTimeShiftCollection extends AbstractConditionsObjectCollection<EcalTimeShift> {
+        public AbstractConditionsObjectCollection<EcalTimeShift> sorted() {
+            return sorted(new ChannelIdComparator());
+        }
+                
+        class ChannelIdComparator implements Comparator<EcalTimeShift> {
+            public int compare(EcalTimeShift o1, EcalTimeShift o2) {
+                if (o1.getChannelId() < o2.getChannelId()) {
+                    return -1;
+                } else if (o1.getChannelId() > o2.getChannelId()) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }
+        }
     }
 
     /**

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	Fri Mar 13 09:03:34 2015
@@ -109,7 +109,7 @@
             
             ecalConditions = conditionsManager.getCachedConditions(EcalConditions.class, "ecal_conditions").getCachedData();
             Set<EcalChannelConstants> channelConstants = new LinkedHashSet<EcalChannelConstants>();
-            for (EcalChannel channel : ecalConditions.getChannelCollection().sortedByChannelId()) {
+            for (EcalChannel channel : ecalConditions.getChannelCollection().sorted()) {
                 channelConstants.add(ecalConditions.getChannelConstants(channel));
             }
             assertEquals("Wrong number of channel constants.", nChannels, channelConstants.size());