directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Karasulu <akaras...@apache.org>
Subject Re: Some more thoughts about the Dn class
Date Wed, 16 Feb 2011 23:03:13 GMT
On Thu, Feb 17, 2011 at 12:55 AM, Emmanuel Lécharny
<elecharny@apache.org> wrote:
> On 2/16/11 9:02 PM, Alex Karasulu wrote:
>>
>> On Wed, Feb 16, 2011 at 4:50 PM, Emmanuel Lecharny<elecharny@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”
>
> 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
>
>

Mime
View raw message