001 package edu.nrao.sss.model.resource.sort; 002 003 import java.util.Set; 004 import java.util.Comparator; 005 006 import edu.nrao.sss.model.resource.Resource; 007 import edu.nrao.sss.model.resource.ReceiverBand; 008 import edu.nrao.sss.sort.SortKey; 009 import edu.nrao.sss.sort.SortOrder; 010 import edu.nrao.sss.sort.StringSortKey; 011 012 /** 013 * Sorts {@link Resource resources} based on their first ReceiverBand. 014 * <p> 015 * Because this class is a {@link SortKey}, you may configure its instances with 016 * a particular {@code SortOrder}. Because it is a {@link StringSortKey}, you 017 * may tell it to ignore differences in case. Finally, because it is a 018 * {@link Comparator}, you may use it for sorting collections on its own, or 019 * place it in a {@link edu.nrao.sss.sort.CompoundComparator} to use as one of 020 * many keys in a single sort.</p> 021 * <p/> 022 * The default values for this key's attributes are: 023 * <ul> 024 * <li>{@link #setOrder(SortOrder) Sort order}: 025 * {@link SortOrder#NATURAL natural}</li> 026 * <li>{@link #setIgnoreCase(boolean) Ignore case}: true</li> 027 * </ul> 028 * <p> 029 * <b>Version Info:</b> 030 * <table style="margin-left:2em"> 031 * <tr><td>$Revision: 1710 $</td></tr> 032 * <tr><td>$Date: 2008-11-14 11:54:07 -0700 (Fri, 14 Nov 2008) $</td></tr> 033 * <tr><td>$Author: dharland $</td></tr> 034 * </table></p> 035 */ 036 public class ReceiverBandSortKey 037 extends StringSortKey 038 implements Comparator<Resource> 039 { 040 public int compare(Resource a, Resource b) 041 { 042 Set<ReceiverBand> receiversA = a.getAntennaElectronics().getActiveReceivers(); 043 Set<ReceiverBand> receiversB = b.getAntennaElectronics().getActiveReceivers(); 044 045 if (receiversA == null || receiversA.isEmpty()) 046 return -1; 047 048 else if (receiversB == null || receiversB.isEmpty()) 049 return 1; 050 051 else 052 return compareObjects(receiversA.iterator().next().toString(), receiversB.iterator().next().toString()); 053 } 054 }