Print

Print


Author: [log in to unmask]
Date: Mon Dec 15 14:29:59 2014
New Revision: 1736

Log:
Add method to get objects by index value.  It uses iterator internally.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObjectCollection.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	Mon Dec 15 14:29:59 2014
@@ -1,7 +1,12 @@
 package org.hps.conditions.api;
 
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
+import java.util.List;
 
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.TableMetaData;
@@ -12,7 +17,7 @@
  * @author Jeremy McCormick <[log in to unmask]>
  * @param <ObjectType> The concrete type of the collection class.
  */
-public class AbstractConditionsObjectCollection<ObjectType extends ConditionsObject> extends LinkedHashSet<ObjectType> {
+public abstract class AbstractConditionsObjectCollection<ObjectType extends ConditionsObject> extends LinkedHashSet<ObjectType> {
 
     protected TableMetaData tableMetaData = null;
     protected int collectionId = -1;
@@ -122,7 +127,7 @@
         
     public void insert() throws ConditionsObjectException, SQLException {
         
-        // TODO: First check here if conditions record and/or collection ID is assigned, 
+        // TODO: First check here if conditions record and/or collection ID is assigned already, 
         //       in which case an error should be thrown as this is not a new collection.
         
         DatabaseConditionsManager.getInstance().insertCollection(this);
@@ -148,7 +153,7 @@
      * Convert object to string.
      */
     public String toString() {
-        // TODO: Should print out column headers here.
+        // TODO: Should print out column headers here if available from meta data.
         StringBuffer buffer = new StringBuffer();
         for (ConditionsObject object : this) {
             buffer.append(object.toString());
@@ -156,4 +161,46 @@
         }
         return buffer.toString();
     }       
+    
+    /**
+     * Get an object by index.
+     * @param index The index in the set.
+     * @return The object at the index.
+     * @throws IndexOutOfBoundsException If the index value is invalid.
+     */
+    ObjectType get(int index) {
+        if (index + 1 > this.size() || index < 0) {
+            throw new IndexOutOfBoundsException("The index is out of bounds: " + index);
+        }
+        int current = 0;
+        Iterator<ObjectType> iterator = this.iterator();
+        ObjectType object = iterator.next();
+        while (current != index && iterator.hasNext()) {
+            object = iterator.next();
+            current++;
+        }
+        return object;
+    }
+    
+    /**
+     * Sort in place and replace the contents with the sorted list.
+     * @param comparator The comparator to use for sorting.
+     */
+    void sort(Comparator<ObjectType> comparator) {
+        List<ObjectType> objects = new ArrayList<ObjectType>(this);
+        Collections.sort(objects, comparator);
+        clear();
+        addAll(objects);
+    }
+    
+    /**
+     * Get a sorted list of the objects.  
+     * @param comparator The comparator to use for the sort.
+     * @return A sorted list of the objects.
+     */
+    List<ObjectType> sorted(Comparator<ObjectType> comparator) {
+        List<ObjectType> objects = new ArrayList<ObjectType>(this);
+        Collections.sort(objects, comparator);
+        return objects;
+    }
 }