On 10/13/2011 07:08 AM, Vincent Massol wrote:
After more brainstorming with Denis and Thomas
here's some updated information about what we'd like to do:
* Make EntityReference immutable (ie remove the set* methods) - it's a best practice
since it reduces potential mistakes (you pass a reference to some code and then somewhere
else you call setXXX())
* Remove the clone() method (since it's less needed when the object is immutable and
it's hard to implement in a generic way for generic parameters)
* Have equals(), toString(), hashCode(), compareTo() all act on all EntityReference class
fields (ie including the parameters)
* Modify or add a new EntityReferenceResolver that will fill the parameters when
they're missing. Of course the resolver will only know how to handle some parameters
(Version and Locale ATM).
* We thought that the safest way was to add the get/setLocale() and get/setVersion
methods in DocumentReference for now (as helper methods to the generic add/getParameter
methods in EntityReference. This is because the new model hasn't been voted yet and
thus we're not yet sure that all Entities will support Version/Locale
Note that this will break backward compatibility in EntityReference but we think we need
to do this ASAP.
Let us know if you think there's a problem.
Looks good, +1.
Thanks
-Vincent
On Sep 15, 2011, at 4:35 PM, Vincent Massol wrote:
> Hi devs,
>
> After much brainstorming with Thomas and with the implementation of the new model
I'm doing, we've come to the conclusion that it would be better to add the notions
of Locale and Version in EntityReference.
>
> The main reasons are:
> * otherwise we need to introduce a notion of UniqueEntityReference in the model and
it makes it very awkward at an API level (user need to constuct a UniqueEntityReference
from an EntityReference depending on the APIs used)
> * it makes APIs more complex than what they could be.
>
> For example:
> - getDocument(EntityReference)
> - getDocument(EntityReference, Locale)
> - getDocument(EntityReference, Version)
> - getDocument(EntityReference, Locale, Version)
>
> vs
>
> - getDocument(EntityReference)
>
> (subnote: this is why I introduced UniqueEntityReference in the model)
>
> * It'll mean that anywhere we use an entity reference we'll be able to
reference a specific version of that entity and/or a specific language. Some example:
including a specific version of a page, referencing a specific version of an attachment in
wiki syntax, etc.
>
> In a first version I'd like to only introduce a generic get/setAttributes (to
allow extensibility) in EntityReference + get/setLocale/Version (for easiness of access).
>
> ATM I'm not planning to define a textual syntax for attributes (but it could
something like: wiki:space.page[name1=value1, … nameN=valueN]). I'm not asking to vote
on this.
>
> Here's my +1
>
> Thanks
> -Vincent
--
Sergiu Dumitriu
http://purl.org/net/sergiu/