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 }