On 04/12/2010 04:58 PM, Caleb James DeLisle
wrote:
Thomas Mortagne wrote:
On Mon, Apr 12, 2010 at 15:12, Caleb James
DeLisle
<calebdelisle(a)lavabit.com> wrote:
> Currently, api.Document.getPreviousVersion() calls
doc.XWikiDocument.getPreviousVersion() which
> calls doc.XWikiDocument.getDocumentArchive() which will return null if the document
archive is not
> currently loaded.
>
> doc.XWikiDocument.getPreviousVersion() is inherently dangerous and should be
deprecated then removed.
> doc.XWikiDocument.getDocumentArchive() sometimes returns null and should be
deprecated then made private.
>
> everywhere doc.XWikiDocument.getDocumentArchive() is used it should be replaced with
> doc.XWikiDocument.getDocumentArchive(XWikiContext) which calls loadDocumentArchive
first.
>
>
> What I propose we do now (for 2.3)
> #1
> Change api.Document.getPreviousVersion() to call
getDocumentArchive(getXWikiContext()) and move the logic
> from doc.XWikiDocument.getPreviousVersion() into api.Document.getPreviousVersion()
>
> #2
> change doc.XWikiDocument.copyDocument(DocumentReference newDocumentReference,
XWikiContext context) to call
> getDocumentArchive(XWikiContext) instead of getDocumentArchive()
>
> #3
> Add warnings in javadoc for:
> clone(XWikiDocument document)
> cloneInternal(DocumentReference newDocumentReference, boolean keepsIdentity)
> to say that they may not copy the archive since they use getDocumentArchive()
>
> #4
> mark doc.XWikiDocument.getPreviousVersion() and
doc.XWikiDocument.getDocumentArchive() as depricated and
> explain why in a comment.
What would you have to use instead of XWikiDocument.getPreviousVersion() ?
api.Document.getPreviousVersion()
-0
First, the API is not usually available inside the core, and it
shouldn't since actually this is not a service API, but a public
scripting API.
Second, going to the API is an unneeded roundtrip, since the API should
not contain any logic, it should just forward the call to the internal
method, which is again XWikiDocument.getPreviousVersion.
Third, the API might actually disappear in the future, once we move to
the 2.0 model and add @Security and @Access annotations to it to mark
public (scriptable) API methods and their associated access rights
requirements.
I thought the API would outlast the rest of the old core since removing the
API would break every application and snippet.
I did some find-grepping and it seems that getPreviousVersion is not used anywhere
in platform, watch, xoffice, xeclipse, or workspaces.
I don't see the reasoning for having no logic in the API and I hate to add methods
to XWikiDocument but another option is to add a method
XWikiDocument.getPreviousVersion(XWikiContext)
My
rationale is that we should use public api in internal code as often as possible because
public api is
supposed to always stay the same and internal code will thus become stronger. Also it
will mean that an
accidental api break will be more likely to cause test failures.
>> WDYT?
>>
>> Caleb
_______________________________________________
devs mailing list
devs(a)xwiki.org