001 package railo.runtime.type.comparator; 002 003 import java.util.Comparator; 004 005 import railo.runtime.exp.ExpressionException; 006 import railo.runtime.exp.PageException; 007 import railo.runtime.exp.PageRuntimeException; 008 import railo.runtime.op.Caster; 009 010 011 /** 012 * comparator implementation to compare textes 013 */ 014 public final class TextComparator implements Comparator { 015 016 private boolean isAsc; 017 private boolean ignoreCase; 018 019 /** 020 * constructor of the class 021 * @param isAsc ascending or desending 022 * @param ignoreCase ignore case or not 023 */ 024 public TextComparator(boolean isAsc, boolean ignoreCase) { 025 this.isAsc=isAsc; 026 this.ignoreCase=ignoreCase; 027 } 028 029 @Override 030 public int compare(Object oLeft, Object oRight) { 031 try { 032 if(isAsc) return compareObjects(oLeft, oRight); 033 return compareObjects(oRight, oLeft); 034 } 035 catch (PageException e) { 036 throw new PageRuntimeException(new ExpressionException("can only sort arrays with simple values",e.getMessage())); 037 } 038 } 039 040 private int compareObjects(Object oLeft, Object oRight) throws PageException { 041 if(ignoreCase)return Caster.toString(oLeft).compareToIgnoreCase(Caster.toString(oRight)); 042 return Caster.toString(oLeft).compareTo(Caster.toString(oRight)); 043 } 044 045 }