From: Anjo K. <an...@us...> - 2006-10-17 10:36:05
|
Update of /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv1973/Sources/er/extensions Modified Files: ERXRegExQualifier.java ERXComparisonSupport.java Log Message: adding support for in-memory regex Index: ERXRegExQualifier.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXRegExQualifier.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ERXRegExQualifier.java 17 Oct 2006 09:39:27 -0000 1.1 --- ERXRegExQualifier.java 17 Oct 2006 10:35:57 -0000 1.2 *************** *** 21,25 **** public static String MatchesSelectorName = "matches"; ! public static NSSelector MatchesSelector = new NSSelector("matches"); static { --- 21,25 ---- public static String MatchesSelectorName = "matches"; ! public static NSSelector MatchesSelector = new NSSelector("matches", new Class[] {String.class}); static { Index: ERXComparisonSupport.java =================================================================== RCS file: /cvsroot/wonder/Wonder/Common/Frameworks/ERExtensions/Sources/er/extensions/ERXComparisonSupport.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ERXComparisonSupport.java 16 Oct 2006 14:14:46 -0000 1.1 --- ERXComparisonSupport.java 17 Oct 2006 10:35:57 -0000 1.2 *************** *** 1,19 **** package er.extensions; ! import java.text.*; ! import java.util.*; import org.apache.log4j.Logger; ! import com.webobjects.eocontrol.*; ! import com.webobjects.foundation.*; /** ! * Comparison support that sorts strings in a locale-savvy manner. * * @created ak on Fri Apr 11 2003 */ ! public class ERXComparisonSupport extends EOSortOrdering.ComparisonSupport { /** logging support */ --- 1,22 ---- package er.extensions; ! import java.text.Collator; ! import java.util.Locale; import org.apache.log4j.Logger; ! import com.webobjects.eocontrol.EOQualifier; ! import com.webobjects.eocontrol.EOSortOrdering; ! import com.webobjects.foundation.NSKeyValueCoding; ! import com.webobjects.foundation.NSSelector; /** ! * Comparison support that sorts strings in a locale-savvy manner and adds ! * support for regex in-memory matching when using qualifier strings. * * @created ak on Fri Apr 11 2003 */ ! public class ERXComparisonSupport { /** logging support */ *************** *** 25,70 **** public static void initialize() { ! EOSortOrdering.ComparisonSupport.setSupportForClass(new ERXComparisonSupport(), String.class); } ! ! private Collator collator() { ! Locale locale = ERXLocalizer.currentLocalizer().locale(); ! if(locale != null) { ! locale = Locale.getDefault(); } ! return Collator.getInstance(locale); } ! private static int _handleNulls(Object object1, Object object2) { ! if (object1 == null || object1 == NSKeyValueCoding.NullValue) { if (object2 == null || object2 == NSKeyValueCoding.NullValue) ! return 0; ! return -1; } - if (object2 == null || object2 == NSKeyValueCoding.NullValue) - return 1; - return MAGIC; - } ! protected int _genericCompareTo(Object object1, Object object2) { ! int i = _handleNulls(object1, object2); ! if (i != MAGIC) ! return i; ! Class clazz = object1.getClass(); ! if (clazz == stringClass) { ! return collator().compare(object1.toString(),object2.toString()); } - return super._genericCompareTo(object1, object2); - } ! protected int _genericCaseInsensitiveCompareTo(Object object1, Object object2) { ! int i = _handleNulls(object1, object2); ! if (i != MAGIC) ! return i; ! Class clazz = object1.getClass(); ! if (clazz == stringClass) { ! return collator().compare(object1.toString().toUpperCase(),object2.toString().toUpperCase()); } - return super._genericCaseInsensitiveCompareTo(object1, object2); } } --- 28,93 ---- public static void initialize() { ! EOSortOrdering.ComparisonSupport.setSupportForClass(new StringSortSupport(), String.class); ! EOQualifier.ComparisonSupport.setSupportForClass(new StringQualifierSupport(), String.class); } ! ! /** ! * Support class that adds regex matching, causing it to use the correct selector <code>String.matches(String)</code> ! * instead of <code>String.matches(Object)</code>. ! * We would not need this if there was a way to set the selector by name in EOQualifier... ! */ ! protected static class StringQualifierSupport extends EOQualifier.ComparisonSupport { ! ! public boolean _compareWithArbitrarySelector(Object aLeft, Object aRight, NSSelector aSelector) { ! if(aSelector.name().equals(ERXRegExQualifier.MatchesSelectorName)) { ! aSelector = ERXRegExQualifier.MatchesSelector; ! } ! return super._compareWithArbitrarySelector(aLeft, aRight, aSelector); } ! } ! protected static class StringSortSupport extends EOSortOrdering.ComparisonSupport { ! ! private Collator collator() { ! Locale locale = ERXLocalizer.currentLocalizer().locale(); ! if(locale != null) { ! locale = Locale.getDefault(); ! } ! return Collator.getInstance(locale); ! } ! ! private static int _handleNulls(Object object1, Object object2) { ! if (object1 == null || object1 == NSKeyValueCoding.NullValue) { ! if (object2 == null || object2 == NSKeyValueCoding.NullValue) ! return 0; ! return -1; ! } if (object2 == null || object2 == NSKeyValueCoding.NullValue) ! return 1; ! return MAGIC; } ! protected int _genericCompareTo(Object object1, Object object2) { ! int i = _handleNulls(object1, object2); ! if (i != MAGIC) ! return i; ! Class clazz = object1.getClass(); ! if (clazz == stringClass) { ! return collator().compare(object1.toString(),object2.toString()); ! } ! return super._genericCompareTo(object1, object2); } ! protected int _genericCaseInsensitiveCompareTo(Object object1, Object object2) { ! int i = _handleNulls(object1, object2); ! if (i != MAGIC) ! return i; ! Class clazz = object1.getClass(); ! if (clazz == stringClass) { ! return collator().compare(object1.toString().toUpperCase(),object2.toString().toUpperCase()); ! } ! return super._genericCaseInsensitiveCompareTo(object1, object2); } } } |