On Tue, Jun 29, 2010 at 12:32, Caleb James DeLisle
<[email protected]> wrote:
>
>
> Thomas Mortagne wrote:
>> On Tue, Jun 29, 2010 at 11:42, Caleb James DeLisle
>> <[email protected]> wrote:
>>> I believe that in order for a new api to be accepted by the community, it 
>>> must be more useful and/or easier to use
>>> than the api which it replaces.
>>>
>>> The old way of getting a document was this:
>>> $xwiki.getDocument("xwiki:Main.WebHome")
>>>
>>> The current way to get a document is this:
>>> $xwiki.getDocument($services.model.createDocumentReference($context.wiki, 
>>> $space, "WebHome"))
>>>
>>> I am quite sure that the user community will choose the former even if it 
>>> has escaping issues.
>>>
>>> Lest one think we can bully the community into choosing the latter by 
>>> deprecation or removal of methods, recall
>>> the dismal sales of Windows Vista even with the control afforded by the 
>>> proprietary license and the awesome power
>>> Microsoft wields over the market. The user is the boss, their word is law.
>>>
>>> My first proposal is that we move to an easier way to handle document names.
>>>
>>>
>>>
>>> My second proposal is a possible way to do it.
>>> I would like velocity and groovy script authors to be able to give a 
>>> command like this:
>>> xwiki.getDocument(["Main", "WebHome"]);
>>> or in velocity
>>> $xwiki.getDocument(["Main", "WebHome"])
>>>
>>> To make that possible I am proposing we change the reference model as 
>>> follows:
>>> EntityReference extends List<String>
>>> Each reference has a name which is expressed as a string, it also has a 
>>> reference to the next node and the last
>>> node. This is a classic example of a LinkedList. The point is that any 
>>> List<String> is a valid (although reletive)
>>> reference. When a relative reference is passed, it is replaced with a 
>>> complete reference which is completed using
>>> the document in the context.
>>>
>>> As you prepare your -1's please recognize that the community will never go 
>>> for the current model and almost
>>> anything is better than a rift between the community and the development 
>>> team. If there are any other ideas of
>>> how to make it that easy, I would be glad to hear them.
>>
>> I don't see why making public script API to get a document easier
>> imply to change EntityReferences. You can always have this
>> xwiki.getDocument(["Main", "WebHome"]); without touching
>> EntityReferences design, you just create a reference from this list in
>> the getDocument implementation.
>
> Then we will have
> getDocument(Reference)
> getDocument(String)
> getDocument(List)
> not to mention rename, copyDocument etc.
>
> If we must add new methods because we can't make references easy to create 
> then I think sooner or later we are
> going to have to change direction.

Note that you forget one feature of Velocity: we can implements an
uberspector that automatically convert give list to the corresponding
EntityReference.

So you would only have

getDocument(DocumentReference) in the api

but if someone calls getDocument(["Main", "WebHome"]); the uberspector
will see that there is not direct match but there is a EntityReference
based one so it will convert the List and calls
getDocument(DocumentReference)

Groovy does not needs a service to create a document reference so it's
not an issue for it IMO

>
>>
>> Problem with your proposal is that it will introduce several
>> limitations  since you have only strings: You have no idea what is
>> what in this String list you can only rely on the index of the string
>> in the list.
>> - the current EntityReferences is that way because we wanted to make
>> possible to have a reference with just the wiki and the page and give
>> it to a resolver to get a full reference
>> - how do you support multiple spaces since you can't know which of
>> theses strings are spaces ?
>
> The algorithm would work like this. If the current document is:
> xwiki:one.two.three.space.doc
> and you reference ["xwiki", "Main", "WebHome"]
> it would count back 3 from the current document location and you would get
> xwiki:one.two.xwiki.Main.WebHome
> To make an explicit reference you could pass an entity which is illegal such 
> as:
> [0, "xwiki", "Main", "WebHome"]
> or
> [$xwiki, "xwiki", "Main", "WebHome"]
> Since nested spaces are not implemented I don't see why we need to worry too 
> much about
> how easy it is to work around them as long as we know it won't be impossible 
> to implement
> when the time comes.

Except that, as I said, it is impossible with the design you are proposing...

>
>
>>
>>>
>>> Caleb
>>>
>>> _______________________________________________
>>> devs mailing list
>>> [email protected]
>>> http://lists.xwiki.org/mailman/listinfo/devs
>>>
>>
>>
>>
>
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to