On Thu, Feb 17, 2011 at 12:55 AM, Emmanuel Lécharny <[email protected]> wrote: > On 2/16/11 9:02 PM, Alex Karasulu wrote: >> >> On Wed, Feb 16, 2011 at 4:50 PM, Emmanuel Lecharny<[email protected]> >> wrote: >>> >>> Hi, >>> >>> we have had some convo about the Dn methods last night. Here are some of >>> the things we discussed and came with : >>> >>> o the getPrefix(N)/getSuffix(N) are cumbersome, and not easy to >>> manipulate. The main issue is that they depend on the RDN order, which is >>> the opposite as what people are used to manipulate. Everytime you have to >>> get a prefix from a Dn, you always wonder what the position should be, and >>> if it's 0 based or 1 based... >>> >>> We propose to replace those methods by getParent(Dn) and >>> getDescendant(Dn). Let me give you an example : >>> >>> // A DN >>> Dn dn = new Dn( "cn=test,ou=server,ou=directory,dc=apache,dc=org" ); >>> >>> // Get the right part (equivalent to getprefix( 2 ) ) >>> Dn parent = dn.getParent( "cn=test,ou=server,ou=directory" ); // returns >>> "dc=apache,dc=org" >>> >>> // Get the left part (equivalent to getSuffix( 3 )) >>> Dn descendant = dn.getDescendant( "ou=directory,dc=apache,dc=org" ); // >>> returns "cn=test,ou=server" >>> >>> o The Add method is a bit annoying to remove, because first, the JNDI >>> Name interface has such a method, and people are used to it, second removing >>> it means we have to add some more constructors line Dn( Dn, Rdn... ). I >>> agree that someone doing something like : >>> >>> Dn dn = new Dn( "dc=apache,dc=org" ); >>> dn.add( "ou=directory" ); >>> >>> will expect that the dn is now "ou=directory,dc=apache,dc=org", when it's >>> unchanged. >>> >>> This is really troublesome... What about rename it concatenate() ? >>> >>> Thoughts ? >> >> Sounds good. But how about this: >> >> // not showing full Rdn but an index value representing the actual >> rdns in the dn for pos clarity >> Dn dn = new Dn( “9, 8, 7, 6, 5, 4, 3, 2, 1, 0” ); >> >> dn.getAncestorDn( “9, 8, 7, 6” ); >> >> => “5, 4, 3, 2, 1, 0” > > That's ok, but why not getParent() ?
Because the result is not necessarily the parent of 'dn'. It may be if it's immediately superior. You're mixing together the meanings I think. getAncestorDn() is loooong. I'd rather > use getAncestor(), but I find it more user friendly to use getParent() >> >> dn.getAncestorDn( 6 ); >> >> => “5, 4, 3, 2, 1, 0” > > Does not work. What if the initial dn is "9, 8, 7, 6, 5, 4, 6, 3, 2, 2, 0" ? >> >> dn.getDnToAncestor( “1, 0” ); > > Again, the name is frankly difficult to understand, and also confusing > (getDnToAncestor ? getAncestorDn ? Which one does what ?). > > dn.getDescendant() is easier to understand, even if not perfect. > > -- > Regards, > Cordialement, > Emmanuel Lécharny > www.iktek.com > >
