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() ? 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

Reply via email to