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="http://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 }