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    }