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:
But Vincent have different vision of this, here its comment extracted from
GitHub (
https://github.com/xwiki/xwiki-platform/commit/cea424914f40ce924afbc49b3159…)
:
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)
where Pair is
http://commons.apache.org/lang/api-3.0-beta/org/apache/commons/lang3/Pair.h…
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, and
these should be easy to provide. Creating Maps in java is not fun in syntax
for that IMO, and is far too open.
I had propose using overloaded constructor like
public DocumentReference(String wikiName, List<String> spaceNames, String
pageName, Locale locale)
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.
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