On Feb 17, 2010, at 11:03 AM, Thomas Mortagne wrote:
  On Wed, Feb 17, 2010 at 10:45, Jerome Velociter
<jerome(a)xwiki.com> wrote:
   Hi,
 I'd like to suggest the following strategy for now:
 * We modify all our vm files to use references (by using the
 ModelScriptService, see below)
 * We introduce APIs taking References in api.* (ex: api.Document,
 api.XWiki)
 * We _don't_ deprecate existing APIs in api.*. This means we allow users
 to use the older string APIs for ease of use 
 Hello Vincent,
 Before I can make up my mind, I would like to know:
 * What will be the strategy for velocity code in wiki pages (here you
 mention only .vm pages - will the strategy be voted again for wiki pages?)
 * Considering we use the same strategy for wiki pages, and since we do not
 deprecate the old APIs that manipulate strings, what will be the
 'recommanded' way of say getting a document ? (the one we would advertise
 on 
xwiki.org code examples for example) 
 
 To summarize:
 * String based methods: helper methods for users
 * EntityReference based methods: what we are supposed to use or anyone
 that want to write proper code 
Yes.
You can use the the string-based APIs but then you *MUST* be sure to perform the correct
escapes.
For example:
$xwiki.getDocument("Main.My\\.Page")
Thanks
-Vincent
 > Thanks,
> Jerome
>
>
>>
>> FYI here's what I've started adding in ModelScriptService:
>>
>> @Component("model")
>> public class ModelScriptService implements ScriptService
>> {
>>     @Requirement
>>     private ComponentManager componentManager;
>>
>>     public DocumentReference createDocumentReference(String wiki, String
>> space, String page, String hint)
>>     {
>>         EntityReference reference = null;
>>         if (!StringUtils.isEmpty(wiki)) {
>>             reference = new EntityReference(wiki, EntityType.WIKI);
>>         }
>>         if (!StringUtils.isEmpty(space)) {
>>             reference = new EntityReference(space, EntityType.SPACE,
>> reference);
>>         }
>>         if (!StringUtils.isEmpty(page)) {
>>             reference = new EntityReference(page, EntityType.DOCUMENT,
>> reference);
>>         }
>>
>>         DocumentReference documentReference;
>>         try {
>>             documentReference =
>> this.componentManager.lookup(DocumentReferenceResolver.class,
>> hint).resolve(reference);
>>         } catch (ComponentLookupException e) {
>>             documentReference = null;
>>         }
>>         return documentReference;
>>     }
>>
>>     public DocumentReference resolveDocument(String stringRepresentation,
>> String hint)
>>     {
>>         DocumentReference result;
>>         try {
>>             result =
>> this.componentManager.lookup(DocumentReferenceResolver.class,
>> hint).resolve(
>>                 stringRepresentation);
>>         } catch (ComponentLookupException e) {
>>             result = null;
>>         }
>>         return result;
>>     }
>>
>>     public String serialize(EntityReference reference, String hint)
>>     {
>>         String result;
>>         try {
>>             result = (String)
>> this.componentManager.lookup(EntityReferenceSerializer.class,
>> hint).serialize(reference);
>>         } catch (ComponentLookupException e) {
>>             result = null;
>>         }
>>         return result;
>>     }
>> }
>>
>> Thanks
>> -Vincent