-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]>

Reply via email to