On Tue, Jun 29, 2010 at 12:32, Caleb James
DeLisle
<calebdelisle(a)lavabit.com> wrote:
Thomas Mortagne wrote:
On Tue, Jun 29, 2010 at 11:42, Caleb James
DeLisle
<calebdelisle(a)lavabit.com> 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)