001         package com.croftsoft.apps.agoracast.c2p;
002    
003         import java.util.*;
004    
005         import com.croftsoft.core.lang.NullArgumentException;
006    
007         /*********************************************************************
008         * Sorts AgoracastData based upon comparison of a field value.
009         *
010         * <p />
011         *
012         * @version
013         *   2001-08-12
014         * @since
015         *   2001-08-09
016         * @author
017         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
018         *********************************************************************/
019    
020         public final class  AgoracastComparator
021           implements Comparator
022         //////////////////////////////////////////////////////////////////////
023         //////////////////////////////////////////////////////////////////////
024         {
025    
026         private final AgoracastModel  agoracastModel;
027    
028         //
029    
030         private String          sortField;
031    
032         private boolean         reverse;
033    
034         private AgoracastField  agoracastField;
035    
036         //////////////////////////////////////////////////////////////////////
037         //////////////////////////////////////////////////////////////////////
038    
039         /*********************************************************************
040         * Main constructor.
041         *********************************************************************/
042         public  AgoracastComparator (
043           AgoracastModel  agoracastModel,
044           String          sortField,
045           boolean         reverse )
046         //////////////////////////////////////////////////////////////////////
047         {
048           NullArgumentException.check (
049             this.agoracastModel = agoracastModel );
050    
051           setSortField ( sortField );
052    
053           this.reverse = reverse;
054         }
055    
056         //////////////////////////////////////////////////////////////////////
057         //////////////////////////////////////////////////////////////////////
058    
059         /*********************************************************************
060         * The field name on which the AgoracastData are to be sorted.
061         *********************************************************************/
062         public void  setSortField ( String  sortField )
063         //////////////////////////////////////////////////////////////////////
064         {
065           NullArgumentException.check ( this.sortField = sortField );
066    
067           agoracastField = agoracastModel.getAgoracastField ( sortField );
068         }
069    
070         /*********************************************************************
071         * Reverses the sort order.
072         *********************************************************************/
073         public void  setReverse ( boolean  reverse )
074         //////////////////////////////////////////////////////////////////////
075         {
076           this.reverse = reverse;
077         }
078    
079         //////////////////////////////////////////////////////////////////////
080         //////////////////////////////////////////////////////////////////////
081    
082         /*********************************************************************
083         * Compares two AgoracastData objects based upon field values.
084         *********************************************************************/
085         public int  compare ( Object  o1, Object  o2 )
086         //////////////////////////////////////////////////////////////////////
087         {
088           NullArgumentException.check ( o1 );
089    
090           NullArgumentException.check ( o2 );
091    
092           AgoracastData  a1 = ( AgoracastData ) o1;
093    
094           AgoracastData  a2 = ( AgoracastData ) o2;
095    
096           Object  e1 = a1.getValue ( sortField );
097    
098           Object  e2 = a2.getValue ( sortField );
099    
100           if ( agoracastField != null )
101           {
102             return agoracastField.compare ( ( String ) e1, ( String ) e2 )
103               * ( reverse ? -1 : 1 );
104           }
105    
106           if ( ( e1 == null )
107             && ( e2 == null ) )
108           {
109             return 0;
110           }
111    
112           if ( e1 == null )
113           {
114             return reverse ? 1 : -1;
115           }
116    
117           if ( e2 == null )
118           {
119             return reverse ? -1 : 1;
120           }
121    
122           Comparable  c1 = ( Comparable ) e1;
123    
124           Comparable  c2 = ( Comparable ) e2;
125    
126           return c1.compareTo ( c2 ) * ( reverse ? -1 : 1 );
127         }
128    
129         //////////////////////////////////////////////////////////////////////
130         //////////////////////////////////////////////////////////////////////
131         }