-1 to the ASC/DESC bit. That shouldn't be in comparators in my opinion, instead use the ReverseComparator.
What is Polarity vs Property? On Fri, 7 Jun 2002, Eric Pugh wrote: > I forged ahead.. I had a need to sort in asc/desc... so I have added a > sortPolarity and sortProperty methods.. > > Here is what I created... > > package com.upstate.util; > > import org.apache.commons.beanutils.WrapDynaBean; > import org.apache.commons.beanutils.*; > > import org.apache.log4j.Category; > > /** > * Description of the Class > * > *@author epugh > *@created May 5, 2002 > */ > public class BeanMethodComparator implements java.util.Comparator { > > public final static String ASC = "ASC"; > public final static String DESC = "DESC"; > > private static Category log = Category.getInstance( > BeanMethodComparator.class.getName() ); > private String sortProperty; > private String sortPolarity = "ASC"; > > /** Constructor for the BeanMethodComparator object */ > public BeanMethodComparator() { } > > /** > * Constructor for the BeanMetodComparator object > * > *@param sortProperty Description of Parameter > *@param sortPolarity Description of Parameter > */ > public BeanMethodComparator( String sortProperty, String sortPolarity ) { > setSortProperty( sortProperty ); > setSortPolarity( sortPolarity ); > } > > /** > * Sets the sortProperty attribute of the SortDaughterboard object > * > *@param sortProperty The new sortProperty value > */ > public void setSortProperty( String sortProperty ) { > this.sortProperty = sortProperty; > } > > /** > * Sets the sortPolarity attribute of the SortDaughterboard object > * > *@param sortPolarity The new sortPolarity > value. > * Can be either "ASC"/"DESC". > *@exception java.lang.IllegalArgumentException Thrown if you pass in a > bad > * sortPolarity. > */ > public void setSortPolarity( String sortPolarity ) > throws java.lang.IllegalArgumentException { > sortPolarity = sortPolarity.toUpperCase(); > if ( sortPolarity.equals( ASC ) || sortPolarity.equals( DESC ) ) { > throw new java.lang.IllegalArgumentException( "The argument:" + > sortPolarity + " was invalid." ); > } > this.sortPolarity = sortPolarity; > } > > /** > * Gets the sortPolarity attribute of the SortDaughterboard object > * > *@return The sortPolarity value > */ > public String getSortPolarity() { > return sortPolarity; > } > > > /** > * Gets the sortProperty attribute of the SortDaughterboard object > * > *@return The sortProperty value > */ > public String getSortProperty() { > return sortProperty; > } > > /** > * Description of the Method > * > *@param o1 Description of Parameter > *@param o2 Description of Parameter > *@return Description of the Returned Value > */ > public int compare( Object o1, Object o2 ) { > try { > WrapDynaBean bean1 = new WrapDynaBean( o1 ); > WrapDynaBean bean2 = new WrapDynaBean( o2 ); > > Comparable value1 = (Comparable) bean1.get( sortProperty ); > Comparable value2 = (Comparable) bean2.get( sortProperty ); > > int sort = 0; > > if ( ( value1 == null ) & ( value2 == null ) ) { > sort = 0; > } > else if ( value1 == null & value2 != null ) { > sort = 1; > } > else if ( value1 != null & value2 == null ) { > sort = -1; > } > else { > sort = value1.compareTo( value2 ); > } > > if ( sortPolarity.equals( DESC ) ) { > sort = sort * -1; > } > > return sort; > } > > catch ( Exception e ) { > log.error( "Problem in Sort. sortPolarity:" + sortPolarity + ", > sortProperty:" + sortProperty, e ); > return 0; > } > } > > } > > Eric Pugh > > > -----Original Message----- > From: Henri Yandell [mailto:[EMAIL PROTECTED]] > Sent: Friday, June 07, 2002 10:50 AM > To: Jakarta Commons Developers List > Subject: Re: [COLLECTIONS/BEANUTILS] Is there a comparator that can > dynamically pick a method to call on a bean? > > > > I don't think there is one in Commons yet. I've had one for myself for a > bit and it can be a lifesaver sometimes. > > BeanComparator bc = new BeanComparator("[1]"); was very sweet when I > realised that would work :) Not just Beans but also arrays/collections. > > I'm +1 for a BeanComparator, +1 in that I plan to do it sometime but have > not had the time to learn the Jakarta BeanUtils and stop using my own. > > Hen > > On Fri, 7 Jun 2002, Eric Pugh wrote: > > > Hi all, > > > > I have a series of Torque objects that I want to sort. Sometimes I want > to > > sort by MethodA, sometiems by MethodB. (Basically mapping onto all the > > columns in my database). > > > > Right now, I have a comparator compare method that looks like this: > > public int compare( Object o1, Object o2 ) { > > Daughterboard db1 = (Daughterboard) o1; > > Daughterboard db2 = (Daughterboard) o2; > > int sort = 0; > > if ( sortMethod.equals( "ScintillationFileNumber" ) ) { > > /* > > * if ( db1 == null == db2 ) { > > * return 0; > > * } > > * else if (db1 == null && > > */ > > sort = Strings.clean( db1.getScintillationFileNumber() >).compareTo( > > Strings.clean( db2.getScintillationFileNumber() ) ); > > > > } > > else if ( sortMethod.equals( "DaughterboardId" ) ) { > > sort = db1.getDaughterboardId().compareTo( >db2.getDaughterboardId() ); > > } > > if ( sortPolarity.equals( "desc" ) ) { > > sort = sort * -1; > > } > > > > return sort; > > } > > > > What I really want to do is pass in a sortMethod like > > ScintillationFileNumber, and dynamically call the objects getter for that > > name. If I wrap my object in a WrapDynaBean, and use that to call the > data, > > will is actually change the ordering of my objects? Or should I just use > > the WrapDynaBean locally inside of my compare method to facilitate calling > > the methods? > > > > First time using BeanUtils, but it looks great.. > > > > Lastly, would a comparator like this be something of general interest to > add > > to the collections list of comparators? > > > > Eric > > > > > > > > -- > > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > > > > -- > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>