On Wed, Feb 16, 2011 at 10:02 PM, Alex Karasulu <akaras...@apache.org> wrote:
> 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.
>

Maybe some convenience methods like:

dn.isAncestor( namingContext );
namingContext.isDescendant( dn );

dn.isRelated( namingContext ); => i.e. two DNs in different
namingContexts will not be related

namingContext.isParent( dn );
dn.isChild( namingContext );
dn.isSibling( namingContext );

Regards,
Alex

Reply via email to