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