On Tue, Nov 15, 2011 at 21:26, Vincent Massol <[email protected]> wrote:

>
> On Nov 15, 2011, at 9:04 PM, Caleb James DeLisle wrote:
>
>
> > On 11/15/2011 12:25 PM, Vincent Massol wrote:
> >>
> >> On Nov 15, 2011, at 5:29 PM, Denis Gervalle wrote:
> >>
> >>> On Tue, Nov 15, 2011 at 17:11, Vincent Massol <[email protected]>
> wrote:
> >>>
> >>>>
> >>>> On Nov 15, 2011, at 5:03 PM, Denis Gervalle wrote:
> >>>>
> >>>>> Hi Devs,
> >>>>>
> >>>>> The implementation of the immutable version of reference is almost
> ready
> >>>>> now. It introduce the parameters on reference as suggested, but we
> now
> >>>> have
> >>>>> a discussion on how the constructors of "typed" entity reference
> should
> >>>> be.
> >>>>>
> >>>>> My initial dev was to provide constructor like:
> >>>>
> >>>> you're missing something here :)
> >>>>
> >>>>> But Vincent have different vision of this, here its comment extracted
> >>>> from
> >>>>
> >>>> I don't have a different vision. It's just that you limited your
> proposal
> >>>> to just Locale which clearly isn't good enough.
> >>>>
> >>>>> GitHub (
> >>>>>
> >>>>
> https://github.com/xwiki/xwiki-platform/commit/cea424914f40ce924afbc49b3159bc8934251aac#commitcomment-721603
> >>>> )
> >>>>> :
> >>>>>
> >>>>> My proposal was:
> >>>>>> - generic params in EntityReference
> >>>>>> - helpers methods for get/setLocale and get/setVersion in
> >>>> DocumentReference
> >>>>>>
> >>>>>> Now the fact that we're making the refs immutable changed this since
> >>>> it's
> >>>>>> no longer possible.
> >>>>>>
> >>>>>> I don't think multiplying the constructor signatures is a good idea.
> >>>>>>
> >>>>>> We could either have:
> >>>>>>
> >>>>>> public DocumentReference(String wikiName, List spaceNames, String
> >>>>>> pageName, Map<String, Object> parameters)
> >>>>>>
> >>>>>> or
> >>>>>>
> >>>>>> public DocumentReference(String wikiName, List spaceNames, String
> >>>>>> pageName, Pair<String, Object>... parameters)
> >
> > Neither of these signatures will work, If you want storage to have any
> hope of being able to get the same object for the same reference, it must
> be at least
> > a Map or Pair of <String, Serializable>, if you allow people to pass
> transient objects such as TCP sockets, they will.
> >
> > More importantly, if you introduce another parameter, there will be no
> way to search for all documents where param X = value Y. To do it with SQL
> would require
> > an evil query which did text searching on the parameter field something
> like:  WHERE doc.reference LIKE '%param=value%'
> > To add parameters to a reference and retain the ability to get all
> documents where "param=value" you would have to modify the database schema
> unless the information
> > already exists in the XWikiDocument mapping as with language.
> >
> >>>>>>
> >>>>>> where Pair is
> >>>>>>
> >>>>
> http://commons.apache.org/lang/api-3.0-beta/org/apache/commons/lang3/Pair.html
> >>>>>>
> >>>>>> Maybe this needs some discussion on the devs list rather than here
> to
> >>>> make
> >>>>>> sure everyone sees it?
> >>>>>>
> >>>>>
> >>>>> I am myself not really happy with that since I dislike the idea that
> >>>>> parameter are generic on "typed" references.
> >>>>> Do not like either the idea to provide keys for creating a Map or
> Pairs,
> >>>>> since the implementation details that use Map should not be so
> exposed
> >>>> IMO.
> >>>>>
> >>>>> There should not be so much parameter on a single "typed" reference,
> >>>>
> >>>> I don't understand this sentence.
> >>>>
> >>>> The Map is <String, Object>.
> >>>>
> >>>
> >>> I would means that this should not cause so many additional
> constructors,
> >>> if we list them individually.
> >>> So your have not the same vision then I have :)
> >>
> >> See below.
> >>
> >>>>> and
> >>>>> these should be easy to provide. Creating Maps in java is not fun in
> >>>> syntax
> >>>>> for that IMO, and is far too open.
> >>>>
> >>>> Sure but the goal here is not to redo java…
> >>>>
> >>>
> >>> Not my goals, just want to be explicit and easy to use.
> >>>
> >>>
> >>>>
> >>>>> I had propose using overloaded constructor like
> >>>>>
> >>>>> public DocumentReference(String wikiName, List<String> spaceNames,
> String
> >>>>> pageName, Locale locale)
> >
> > +1
> >
> >>>>
> >>>> Again, this doesn't work. It only works for a **single** parameter. It
> >>>> doesn't work for multiple parameters. How do you specify the Locale
> or some
> >>>> unknown String param?
> >>>>
> >>>
> >>> I simply provide the need constructor, no more.
> >>
> >> If you say this then you say that we don't need generic parameters for
> References which is what started the discussion…
> >>
> >> Also what you say is not correct at all since we already know we need
> Version which you didn't put.
> >>
> >> Last, it means passing null to the constuctors when you don't use the
> parameters which is really really bad IMO or you'll need to define lots of
> various constructors which increase exponentially with the number of
> parameters we support.
> >
> > A constant need for new parameters indicated design problems, including
> locale information is fixing an error which limited the document reference
> from the beginning.
> > Building this infrastructure for additional parameters will foster bad
> practice of using parameters where spaces should be used instead and will
> allow the creation
> > of arbitrary dimensional data trees where users are only familiar with
> the standard 1 dimension of filesystems and URLs.
> >
> >>
> >> However this won't even work since you won't be able to support adding
> new parameters. Users of the Reference system will need to modify its
> source if they wish to add a new parameter which again goes against the
> initial proposal.
> >>
> >>>>> or if something more flexible should be used
> >>>>>
> >>>>> public DocumentReference(String wikiName, List<String> spaceNames,
> String
> >>>>> pageName, Object... parameters)
> >>>>>
> >>>>> where parameters is later interpreted based on object type and
> limited to
> >>>>> those used for a given typed reference.
> >>>>
> >>>> This doesn't work. If I have 2 parameters of type String, how do you
> map
> >>>> them automatically?
> >>>>
> >>>
> >>> I suggest not to have loosely typed parameters, but strong one, like
> Locale
> >>> and Version.
> >
> > +1
> >
> > I am -1 on version, I don't like it since a document history should be a
> separate entity which yields documents, as it is now.
>
> How do you reference a given version of, say, a document? And how do you
> pass this along the chain of calls?
>
> We'll need to introduce a new Reference (which is the initial reason I
> made this proposal - I had to introduce a UniqueReference class in the new
> Model before of this).
>
> > If we include version in the reference, storage will be forced to remove
> it on save because we want users asking for a document
> > with no knowledge of the current version to get the current version.
> This means we already have a magic attribute which is treated
> > differently by storage.
>
> All params are treated specially by the code, I don't understand what's
> the problem. The exact same thing will happen for the Locale.
>
> > In addition, the introduction of a version parameter will allow a user
> to load a document of a given version
> > with a simple getDocument() call,
>
> Yes that's the idea! :)
>
> > fooling them into thinking all versions of every document are available
> in the same namespace,
>
> Not sure what namespace you're referring to.
>
> > if getDocument(referenceToThirdVersionOfMainWebHome) works then it
> stands to reason that search("WHERE doc.version=3 AND doc.name
> ='Main.WebHome'")
> > would as well but it won't because that's not how storage works.
>
> Maybe you meant that it's not how storage currently work?
>
> Remember that this proposal has nothing to do with either the current
> model or the current storage. It's about the new model and the new storage
> that we want to have.
>
> >> I'm a big big big -1 on this.
> >>
> >> There's no reason to create a fake String when all you need is a
> string. Same for int, long, Number, etc.
> >> Same for also if you want to have several Locales or several Versions.
> >>
> >>>> Also the goal is to have unknown parameters so how can you do a
> mapping
> >>>> for something unknown? :)
> >>>>
> >>>
> >>> That is clearly not my goal, why do you want unknown parameters on
> Document
> >>> Reference ?
> >>
> >> Maybe this is where we don't agree. This is the original idea: to have
> a set of "unknown" parameters for extensibility (from the POV of the
> Reference of course, from the POV of XWiki they are not unknown obviously
> ;)). This means that it's up to the users of the References to decide what
> parameters to put and it's up to the consumers to decide what parameters to
> support.
> >
> > The introduction of k-d trees for storing documents is not something
> that anyone has ever used to my knowledge, it may be something that people
> think they need
> > but like the goto command, something that starts out nice ends up
> creating more problems than it's worth.
> >
> >>
> >> It seems to me your vision is to:
> >> * Not support arbitrary parameters
> >> * Only support Version and Locale
> >> * Provide 3 constructors, one where there's no Locale no Version, one
> with Locale no version and one with Version on Locale
> >>
> >> Whereas my vision is:
> >> * Support arbitrary parameters for extensibility (like a URL if you
> prefer which support arbitrary parameters)
> >
> > This is not correct, the parameters in a URL are never to my knowledge
> used as a discriminator.
> > Any webserver I can think of uses the parameters as arguments which are
> passed to the page, not discriminators to select the page.
>
> Fun, you forgot XWiki itself! :)
> We use version and language as URL parameters…. ?rev=X&language=Y
>
> Params reference are optional and are meant to be qualifier for the
> reference.
>
> > for example:
> > path/to/some/page.php?var=val&varb=42
> > will load the page "path/to/some/page.php" then execute it, passing
> var=val and varb=42 as arguments.
>
> Seen all this I propose that stop this discussion and don't commit any of
> this on master for the moment since we have too many diverging opinions on
> the new model and we need to agree about the new model first.
>
> So I change my vote about the proposal I initially sent to -1 for now till
> this is sorted out because I don't want to rush into something for which we
> don't agree and have diverging ideas.
>
> I've been planning to put the work I started in the contrib sandbox into a
> branch on master in order to start using it ASAP (Thomas and I had a
> discussion and we think we could already start to slow use portions of it
> to validate it).
>
> So here's what I propose:
>
> * I do this ASAP
> * I write an email explaining the work done so far on the new model
> * We discuss it and come to an agreement
> * Whether we extend our current Entity References with params or not will
> be a direct consequence of the model agreement
>
> I know Denis wanted to use the Locale param for his work. FTM Denis will
> have to pass the Locale as a parameter alongside the Entity Reference as
> it's done every where ATM.
>
> Is that ok?
>

I am absolutely not happy with that. I had a hard time putting it to work
and I do not want to wait further to merge immutable references. Since
parameters cames with them, I will not loose my time removing them just
because there is now a doubt on the initial vote here.
I stay convince that we need to have language in references, and I have
seen nobody saying it should not.

The initial discussion came from the implementation of the constructor for
Document Reference, which simply provide optional Locale to a document
reference. So I do not understand your -1 now. What we do not agree on are
arbitrary parameters, and having version one of them. So what is the
problem to have my current implementation committed ?
(With Serializable in place of Object, which is a good remarks since we
need serializable references)

Denis


> Thanks
> -Vincent
>
> > Caleb
> >
> >
> >> * Have some "well-known" parameters so that xwiki code that users
> References know what they can put as reference parameters and what they can
> extract from XWiki parameters.
> >>
> >> Thanks
> >> -Vincent
> >>
> >>>> Thanks
> >>>> -Vincent
> >>>>
> >>>>> Here Vincent comments on this:
> >>>>>
> >>>>>> The automatic mapping idea seems a bad idea to me (too magic and
> doesn't
> >>>>>> work in a lot of cases).
> >>>>>
> >>>>>
> >>>>> Maybe some of you have an even better idea ?
> >>>>>
> >>>>> Denis
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



-- 
Denis Gervalle
SOFTEC sa - CEO
eGuilde sarl - CTO
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to