Author: [log in to unmask] Date: Mon Dec 15 22:39:18 2014 New Revision: 1744 Log: Add more sorting methods. Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsRecord.java 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 Mon Dec 15 22:39:18 2014 @@ -4,7 +4,9 @@ import java.util.Collections; import java.util.Comparator; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.hps.conditions.database.DatabaseConditionsManager; import org.hps.conditions.database.QueryBuilder; @@ -20,26 +22,72 @@ public final class ConditionsRecord extends AbstractConditionsObject { /** - * The concrete collection implementation including sorting utilities. + * The concrete collection implementation, including sorting utilities. */ public static class ConditionsRecordCollection extends AbstractConditionsObjectCollection<ConditionsRecord> { - public List<ConditionsRecord> sortedByUpdated() { + /** + * Sort using a comparator and leave the original collection unchanged. + * @param comparator + * @return + */ + public ConditionsRecordCollection sorted(Comparator<ConditionsRecord> comparator) { List<ConditionsRecord> list = new ArrayList<ConditionsRecord>(this); - Collections.sort(list, new UpdatedComparator()); - return list; - } - - public List<ConditionsRecord> sortedByCreated() { + Collections.sort(list, comparator); + ConditionsRecordCollection collection = new ConditionsRecordCollection(); + collection.addAll(list); + return collection; + } + + public ConditionsRecordCollection sortedByUpdated() { + return sorted(new UpdatedComparator()); + } + + public ConditionsRecordCollection sortedByCreated() { + return sorted(new CreatedComparator()); + } + + public ConditionsRecordCollection sortedByRunStart() { + return sorted(new RunStartComparator()); + } + + public ConditionsRecordCollection sortedByKey() { + return sorted(new KeyComparator()); + } + + /** + * Sort the collection in place. + * @param comparator + */ + public void sort(Comparator<ConditionsRecord> comparator) { 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; + Collections.sort(list, comparator); + this.clear(); + this.addAll(list); + } + + public void sortByUpdated() { + this.sort(new UpdatedComparator()); + } + + public void sortByCreated() { + sort(new CreatedComparator()); + } + + public void sortByRunStart() { + sort(new RunStartComparator()); + } + + public void sortByKey() { + sort(new KeyComparator()); + } + + public Set<String> getConditionsKeys() { + Set<String> conditionsKeys = new HashSet<String>(); + for (ConditionsRecord record : this) { + conditionsKeys.add(record.getName()); + } + return conditionsKeys; } private static class RunStartComparator implements Comparator<ConditionsRecord> { @@ -80,6 +128,13 @@ } return 0; } + } + + private static class KeyComparator implements Comparator<ConditionsRecord> { + @Override + public int compare(ConditionsRecord c1, ConditionsRecord c2) { + return c1.getName().compareTo(c2.getName()); + } } } @@ -213,4 +268,4 @@ buff.append("notes: " + getNotes() + '\n'); return buff.toString(); } -} +}