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());