package edu.harvard.med.screensaver.ui.screenresults; import java.util.Iterator; import java.util.List; import java.util.Map; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; public class CollationOrder implements Iterable<PlateOrderingGroup> { private List<PlateOrderingGroup> _ordering; // a mapping to be used to easily input these orderings from a command line public static Map<String,CollationOrder> orderings = Maps.newHashMap(); static { orderings.put("PQCR", new CollationOrder(ImmutableList.of(PlateOrderingGroup.Plates, PlateOrderingGroup.Quadrants, PlateOrderingGroup.Conditions, PlateOrderingGroup.Replicates, PlateOrderingGroup.Readouts))); orderings.put("PQRC", new CollationOrder(ImmutableList.of(PlateOrderingGroup.Plates, PlateOrderingGroup.Quadrants, PlateOrderingGroup.Replicates, PlateOrderingGroup.Conditions, PlateOrderingGroup.Readouts))); orderings.put("CPQR", new CollationOrder(ImmutableList.of(PlateOrderingGroup.Conditions, PlateOrderingGroup.Plates, PlateOrderingGroup.Quadrants, PlateOrderingGroup.Replicates, PlateOrderingGroup.Readouts))); orderings.put("CRPQ", new CollationOrder(ImmutableList.of(PlateOrderingGroup.Conditions, PlateOrderingGroup.Replicates, PlateOrderingGroup.Plates, PlateOrderingGroup.Quadrants, PlateOrderingGroup.Readouts))); orderings.put("RPQC", new CollationOrder(ImmutableList.of(PlateOrderingGroup.Replicates, PlateOrderingGroup.Plates, PlateOrderingGroup.Quadrants, PlateOrderingGroup.Conditions, PlateOrderingGroup.Readouts))); orderings.put("RCPQ", new CollationOrder(ImmutableList.of(PlateOrderingGroup.Replicates, PlateOrderingGroup.Conditions, PlateOrderingGroup.Plates, PlateOrderingGroup.Quadrants, PlateOrderingGroup.Readouts))); } public static CollationOrder getOrder(String ordering) { return orderings.get(ordering.toUpperCase()); } public CollationOrder(List<PlateOrderingGroup> ordering) { _ordering = ordering; } public List<PlateOrderingGroup> getOrdering() { return _ordering; } @Override public String toString() { return Joiner.on(" \u2192 ").join(_ordering); } public String toShortString() { String shortString = ""; for(PlateOrderingGroup p:this) { shortString += p.toString().charAt(0); } return shortString; } @Override public Iterator<PlateOrderingGroup> iterator() { return _ordering.iterator(); } @Override public int hashCode() { return _ordering.hashCode(); } @Override public boolean equals(Object other) { if (other instanceof CollationOrder) { return _ordering.equals(((CollationOrder) other)._ordering); } return false; } }