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/cea424914f40ce924afbc49b3159b...) : 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.ht...
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