[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: [ldapext] Java LDAP API, sorting



  Also, please explain how LDAPAttribute and LDAPEntry will implement compareTo.

Rob


Rob Weltman wrote:
> 
> Steve,
> 
>   Your second message on this topic (below) is very difficult to parse. Could you rewrite it to just include what you are proposing?
> 
> Thanks,
> Rob
> 
> Steve Sonntag wrote:
> >
> > Rob,
> >
> > I realize I overlooked something in the discussion on sorting,
> > specifically
> > the two classes TreeSet and TreeMap that order objects as they are
> > added into the to the Tree object.  Objects are sorted either by
> > their natural order or as specified by a Comparator object.
> >
> > With that information, the following changes are in order.
> >
> > >>> "Steve Sonntag" <vtag@novell.com> 15-Apr-02 4:20:35 PM >>>
> >
> > > Rob,
> > >
> > > I have been reviewing the changes associated
> > > with the addition of the Java Collections
> > > Framework.  I believe the specification is
> > > incomplete relative to the use of this framework.
> > >
> > > Specifically I am looking at how one performs sorts
> > > using the collections framework and have reviewed
> > > the statements in Appendix 9.2 that relate to sorting.
> > >
> > > >  LDAPAttributeSet
> > > >
> > > >          Implements Cloneable and java.util.Set. Removed the
> > methods
> > >
> > > >          made redundant by implementing Set: add(LDAPAttribute
> > attr),
> > >
> > > >          elementAt(), getAttributes(), remove(String name),
> > > >          removeElementAt(), and size().
> > > >
> > > >  LDAPCompareAttrNames
> > > >
> > > >          Implements java.util.Comparator instead of
> > > LDAPEntryComparator.
> > > >
> > > >  LDAPSearchResults
> > > >
> > > >          Does not implement Enumeration.
> > > >
> > > >          Removed nextElement().
> > > >
> > > >          Renamed hasMoreElements() to hasMore().
> > > >
> > > >          Removed sort() (sorting can now be done with
> > > classes/interfaces
> > > >          of the Collections framework now that LDAPAttributeSet
> > > >          implements Set).
> > >
> > > The collections framework has two interfaces and two classes
> >         Four Classes
> > > that facilitate sorting.  These are:
> > >
> > > -  The Comparable interface - an implementing
> > >     object can be compared with another implementing
> > >     object, determining the natural ordering of
> > >     the objects.
> > > -  The Comparator interface - implementers can
> > >     compare and order two objects, called specific ordering.
> > > -  The Arrays class - allows sorting of objects
> > >     contained in an array using either natural
> > >     or specific ordering.
> > > -  The Collections class - allows sorting of
> > >     objects contained in a class that implements the
> > >     List interface using natural or specific ordering.
> >
> > -       The TreeSet class, an implementation of the SortedSet interface
> >         sorts objects as they are added to the object, and
> >         uses natural or specific ordering.
> > -       The TreeMap class, an implementation of the SortedMap interface
> >         sorts objects by keys as they are added to the object, and
> >         uses natural or specific ordering.
> > >
> > > There seem to be three obvious kinds of data
> > > that one might consider sorting:
> > >
> > > 1)    Values of a multi-valued attribute.
> > > 2)    Attribute Names
> > > 3)    Search Entries
> > >
> > > Let's see how the Collections Framework
> > > can be used to sort these items:
> > >
> > > Sort values from a multivalued binary attribute:
> > >
> > >       byte[][] values = attr.getByteValueArray( )
> > >       Arrays.sort( values[]);      // Order by byte values
> > >       Arrays.sort( values[], myComparator) // Specific ordering
> > >
> >     TreeSet can be used to order values by looping through
> >         values and adding them to the set using natural ordering
> >         or a specific comparator.
> >
> > > Sort values from a multivalued String attribute:
> > >
> > >       String[] values = attr.getStringValueArray();
> > >       Arrays.sort(values);              // Natural ordering
> > >       Arrays.sort(values, myComparator);  // Specific Ordering
> > >
> >     TreeSet can be used to order values by looping through
> >         values and adding them to the set using natural ordering
> >         or a specific comparator.
> >
> > > Sort Attribute objects
> > >
> > >       LDAPEntry entry = results.next();
> > >       LDAPAttributeSet aset = entry.getAttributeSet()
> > >       LDAPAttribute[] attrs = new LDAPAttribute[20];
> > >       attrs = aset.toArray(attrs);            // from Set
> > >       Arrays.sort(attrs);                           // Natural
> > > ordering by attribute name
> > >       Arrays.sort(attrs, myComparator); // Specific ordering
> > >
> > >     Note: Currently natural ordering between
> > >     LDAPAttribute objects is undefined since
> > >     LDAPAttribute does not implement the Comparable
> > >     interface.  I suggest that LDAPAttribute implement
> > >     the Comparable interface with natural ordering
> > >     based on attribute name.
> > >
> >
> >     TreeSet can be used to order attributes by looping
> >         through the name and adding each to the set using natural
> >         ordering or a specific comparator.
> >
> >         If LDAPAttribute objects implement Comparable as I
> >         suggest, one can simply say "new TreeSet(attributeSet)"
> >         to create a naturally sorted collection of attributes.
> >
> > > Sort LDAPEntry objects
> > >
> > >     It is not possible to sort Entries, since
> > >     there is no way to get either a List or an
> > >     Array from LDAPSearchResults.  I suggest
> > >     that LDAPEntry implement the Comparable
> > >     interface with natural ordering based on the
> > >     dn, and that LDAPSearchResults implement
> > >     a nextArray() method (see below).  If this
> > >     were done, sorting of LDAPEntry objects
> > >     could be done as follows:
> > >
> > >     LDAPEntry[] entries = results.nextArray();
> > >     Arrays.sort(entries);                           // Sort by dn
> > >     Arrays.sort(entries, myComparator);       // Specific ordering.
> > >
> > >     Note: myComparator is probably of type LDAPCompareAttrNames,
> > >     but an application could implement their own Comparator class.
> >
> >         Using TreeSet, Entries can be sorted by adding the Entries
> >         to the TreeSet object.  This has the advantage over nextArray()
> >         in that no fiddling need be done with batchsize.  It is up
> >         to the application to determine which Entries are sorted and
> >         how to deal with ensuring adequate memory for large sorts.
> >
> >         I see no need for the above described nextArray method.
> >
> > >
> > >
> > -----------------------------------------------------------------------------
> > > Suggested changes to the draft:
> > >
> > > 2.1 public class LDAPAttribute
> > >         implements Cloneable, Serializable, Comparable
> > >   ------------------------
> > > 2.2.2 compareTo
> > >
> > >       public int compareTo(Object obj)
> > >
> > >     Compares this object with the specified object for
> > >     order.  Ordering is determined by comparing attribute
> > >     names (see getName()) using the compareTo() method of
> > >     the String class. Returns a negative integer, zero, or
> > >     a positive integer as this object is less than, equal
> > >     to, or greater than the specified object.
> > >
> > >      obj              The object to be compared to this object.
> > >   ------------------------
> > >
> > > 2.14 public classs LDAPEntry
> > >         implements Serializable, Comparable
> > >   ------------------------
> > > 2.14.2 compareTo
> > >
> > >       public int compareTo(Object obj)
> > >
> > >     Compares this object with the specified object for
> > >     order.  Ordering is determined by comparing dn values
> > >     (see getDN) using the compareTo() method of the
> > StringaringValueArray();
> > >       Array
> > >     class.  Returns a negative integer, zero, or a
> > >     positive integer as this object is less than, equal
> > >     to, or greater than the specified object.
> > >
> > >      obj              The object to be compared to this object.
> > >
> > >   ------------------------
> > > (in class LDAPSearchResults)
> > >
> > > 2.35.5 nextArray
> > >
> > >       public LDAPEntry[] nextArray() throws LDAPException
> > >
> > > Returns an array containing all LDAPEntries in the
> > > order they were received. If automatic referral
> > > following is disabled or a referral was not
> > > followed, nextArray() will throw an
> > > LDAPReferralException when the referral is received.
> > >
> > > It should be noted that only those Entries which
> > > have been received and not retrieved via next()
> > > or nextArray() are placed in the array.  This will
> > > generally be the number of entries specified by
> > > batchsize. The size of the array returned will
> > > equal the number of entries returned. If all
> > > entries have already been returned, nextArray()
> > > throws NoSuchElementException.  If a sort of all
> > > entries returned by a search is desired, batchsize
> > > should be set to zero so that all entries are received
> > > by the API before control is returned to the application.
> > > (see LDAPSearchConstraints.setBatchSize()).  Sorting
> > > can be performed using the sort method of the Arrays class.
> > >   ------------------------
> >
> > Eliminate nextArray, but do have LDAPEntry and LDAPAttribute
> > implement Comparable.
> >
> > The description of LDAPCompareAttrNames should be clarified to
> > something like the following:
> >
> > 2.7 public class LDAPCompareaAttrNames
> >                         implements Comparator
> >
> >    An object of this class defines the ordering when sorting
> >    search results. LDAPEntry objects are sorted by the value
> >    of the specified attribute name(s) in ascending or descending
> >    order.  This object is typically supplied to an implementation
> >    of the collection interfaces like TreeSet which performs the sort.
> >
> >  -----------------------------------------------
> >
> > In summary what I suggest is,
> >
> >  add "implement Comparable" for classes LDAPAttribute and LDAPEntry
> >    (with appropriate description of natural compare mechanism)
> >
> >  Clarify description for LDAPCompareAttrNames
> >
> > -Steve
> > >
> > >
> > > -Steve
> > >
> > >
> > >
> > > ------------------------
> > > Steven Sonntag
> > > Novell, Inc., The leading provider of Net business solutions
> > > http://www.novell.com
> > >
> > >
> > > _______________________________________________
> > > Ldapext mailing list
> > > Ldapext@ietf.org
> > > https://www1.ietf.org/mailman/listinfo/ldapext

_______________________________________________
Ldapext mailing list
Ldapext@ietf.org
https://www1.ietf.org/mailman/listinfo/ldapext