On Jan 10, 2010, at 4:23 PM, Sergiu Dumitriu wrote:
> On 01/10/2010 03:12 PM, Vincent Massol wrote:
>>
>> On Jan 9, 2010, at 1:25 PM, Pascal Voitot wrote:
>>
>>> does it mean all scripts using the older functions will need to be updated?
>>
>> There's only one gotcha right now with what I have on my machine (not
>> committed) and I'm still hesitating. Internally I've modified the field
>> containing the objects from
>>
>> private Map<String, Vector<BaseObject>> objects
>>
>> to
>>
>> private Map<DocumentReference, List<BaseObject>> objects
>>
>> This means that the old (deprecated APIs) have to wrap the internal map. For
>> example when XWikiDocument.getxWikiObjects() is called it returns a new Map,
>> copying the internal map to a map of type Map<String, Vector<BaseObject>>.
>> The problem is that if you have code like the following it'll now fail:
>>
>> getxWikiObjects().put(something)
>>
>> Then calling getxWikiObjects() again will not contain the "something" object.
>>
>> IMO it's a bad usage of the API. Instead if you wish to add something you
>> should call addObject (now addXObject) for example. However it was allowed
>> and will break old code which would need to be modified to work.
>>
>> WDYT? I don't see any solution to preserve the old behavior and at the same
>> time move to Map<DocumentReference, List<BaseObject>> objects
>
> I think it's safe to make this change, since the behavior was not
> documented, and at least in the official code it wasn't used.
Actually it's used in a lot of places in the old code... I've fixed the ones
I've found and I keep finding new ones. The latest example:
public XWikiDocument copyDocument(String newDocumentName, XWikiContext
context) throws XWikiException
{
loadAttachments(context);
loadArchive(context);
XWikiDocument newdoc = (XWikiDocument) clone();
newdoc.setOriginalDocument(null);
newdoc.setFullName(newDocumentName, context);
newdoc.setContentDirty(true);
newdoc.getxWikiClass().setName(newDocumentName);
Map<String, Vector<BaseObject>> objectclasses =
newdoc.getxWikiObjects();
if (objectclasses != null) {
for (Vector<BaseObject> objects : objectclasses.values()) {
if (objects != null) {
for (BaseObject object : objects) {
if (object != null) {
object.setName(newDocumentName);
// Since GUIDs are supposed to be Unique, although
this object holds the same data, it is
// not
// exactly the same object, so it should have a
different identifier.
object.setGuid(UUID.randomUUID().toString());
}
}
}
}
}
XWikiDocumentArchive archive = newdoc.getDocumentArchive();
if (archive != null) {
newdoc.setDocumentArchive(archive.clone(newdoc.getId(), context));
}
return newdoc;
}
As you can see object.setName() and object.setGuid() are used.
Thanks
-Vincent
> However,
> I'd like it to work the same way with the new API, so the new
> getXObjects should return a Collections.unmodifiableMap(this.objects)
> instead of this.objects, and the read-only result well specified in the
> javadoc.
>
>> Thanks
>> -Vincent
>>
>>> Pascal
>>>
>>> On Sat, Jan 9, 2010 at 12:43 PM, Vincent Massol<[email protected]> wrote:
>>>
>>>> Hi devs,
>>>>
>>>> As I mentioned already I'm modifying all APIs in XWikiDocument to use
>>>> References (I'm adding new APIs and deprecating old ones).
>>>>
>>>> While doing this I'm also fixing names for new APIs. So far I'm modifying 3
>>>> things:
>>>> - replace Vector by List
>>>> - replace Object by XObject in API. For example: getxWikiObjects() -->
>>>> getXObjects(), getObjects(String classname) -->
>>>> getXObjects(DocumentReference classnameReference)
>>>> - replace Class by XClass in API. For example: getxWikiClasses -->
>>>> getXClasses()
>>>>
>>>> Note1: I wanted to use getObject and getClass but getClass is reserved
>>>> already.
>>>> Note2: in the new model we won't have this problem since we'll
>>>> intelligently use another name for object definitions, something like
>>>> ObjectDefinition :). We could also change Object but it's less problematic
>>>> and it's probably ok to keep it.
>>>>
>>>> Here's my +1
>>>>
>>>> Thanks
>>>> -Vincent
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs