On Wed, Feb 16, 2011 at 4:50 PM, Emmanuel Lecharny <elecha...@gmail.com> 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”

dn.getAncestorDn( 6 );

=> “5, 4, 3, 2, 1, 0”

dn.getDnToAncestor( “1, 0” );

=> “9, 8, 7, 6, 5, 4, 3, 2”

dn.getDnToAncestor( 2 );

=> “9, 8, 7, 6, 5, 4, 3, 2”

Dn namingContext = “1, 0”;

// all same below
Dn dnAfterNamingContext = dn.getDnToAncestor( "1, 0" );
Dn dnAfterNamingContext = dn.getDnToAncestor( namingContext );
Dn dnAfterNamingContext = dn.getDnToAncestor( namingContext.size() );
Dn dnAfterNamingContext = dn.getDnToAncestor( namingContext.toString() );

dnAfterNamingContext ===> “9, 8, 7, 6, 5, 4, 3, 2”

Overloads should be provided for Dn, String and int.

Reply via email to