(resending, meant to send to the dev list.)
Sorry to drag up old commits but I have a couple of questions.
vmassol (SVN) wrote:
> Author: vmassol
> Date: 2010-01-07 23:02:51 +0100 (Thu, 07 Jan 2010)
> New Revision: 26074
>
> Modified:
>
> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
>
> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/doc/XWikiDocumentTest.java
> Log:
> XWIKI-4677: Introduce new Model module
>
> * Fixed infinite cycle (revert some previous change). We need to find a
> solution.
> * Refactored existing code to prevent manual parsing
>
> Modified:
> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
> ===================================================================
> ---
> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
> 2010-01-07 16:55:03 UTC (rev 26073)
> +++
> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/doc/XWikiDocument.java
> 2010-01-07 22:02:51 UTC (rev 26074)
> @@ -80,6 +80,7 @@
> import org.xwiki.context.ExecutionContextManager;
> import org.xwiki.model.reference.DocumentReferenceResolver;
> import org.xwiki.model.reference.EntityReferenceSerializer;
> +import org.xwiki.model.reference.WikiReference;
> import org.xwiki.rendering.block.Block;
> import org.xwiki.rendering.block.HeaderBlock;
> import org.xwiki.rendering.block.LinkBlock;
> @@ -359,8 +360,10 @@
> /**
> * Used to create proper {...@link Syntax} objects.
> */
> - SyntaxFactory syntaxFactory = Utils.getComponent(SyntaxFactory.class);
> + private SyntaxFactory syntaxFactory =
> Utils.getComponent(SyntaxFactory.class);
>
Why are we holding a hard reference on the Execution which was present when the
document was first loaded
or created?
Is this not a memory leak? Cache holds Document holds Execution holds
ExecutionContext holds XWikiContext
holds DocumentArchive?
> + private Execution execution = Utils.getComponent(Execution.class);
> +
> /**
> * @since 2.2M1
> */
> @@ -375,7 +378,9 @@
> @Deprecated
> public XWikiDocument()
> {
> -
> this(Utils.getComponent(DocumentReferenceResolver.class).resolve(""));
> + // TODO: Replace this with the following when we find a way to not
> generate a cycle:
> + //
> this(Utils.getComponent(DocumentReferenceResolver.class).resolve(""));
> + this(new DocumentReference("xwiki", "Main", "WebHome"));
> }
>
> /**
> @@ -397,25 +402,18 @@
> *
> * @param wiki The wiki this document belongs to.
> * @param space The space this document belongs to.
> - * @param name The name of the document.
> + * @param name The name of the document (can contain either the page
> name or the space and page name)
> * @deprecated since 2.2M1 use {...@link
> #XWikiDocument(org.xwiki.model.reference.DocumentReference)} instead
> */
> @Deprecated
> public XWikiDocument(String wiki, String space, String name)
> {
> - String normalizedPage;
> - String normalizedSpace;
> - int i1 = name.indexOf(".");
> - if (i1 == -1) {
> - normalizedPage = name;
> - normalizedSpace = space;
> - } else {
> - normalizedSpace = name.substring(0, i1);
> - normalizedPage = name.substring(i1 + 1);
> - }
> -
> - init(Utils.getComponent(DocumentReferenceResolver.class,
> "current/reference").resolve(
> - new DocumentReference(wiki, normalizedSpace, normalizedPage)));
> + // We allow to specify the space in the name (eg name =
> "space.page"). In this case the passed space is
> + // ignored.
> + DocumentReference reference = resolveReference(name, new
> DocumentReference(wiki, space, null));
> + // Replace the resolved wiki by the passed wiki
> + reference.setWikiReference(new WikiReference(wiki));
> + init(reference);
> }
>
> public XWikiStoreInterface getStore(XWikiContext context)
> @@ -5846,4 +5844,21 @@
>
> return syntaxId;
> }
> +
> + private DocumentReference resolveReference(String referenceAsString,
> DocumentReference defaultReference)
> + {
> + XWikiContext xcontext = getXWikiContext();
> + XWikiDocument originalCurentDocument = xcontext.getDoc();
> + try {
> + xcontext.setDoc(new XWikiDocument(defaultReference));
> + return
> this.currentDocumentReferenceResolver.resolve(referenceAsString);
> + } finally {
> + xcontext.setDoc(originalCurentDocument);
> + }
> + }
> +
How is this different from XWikiDocument#getContext() introduced in 23506?
Is the only difference that the context is the one from when the document was
created/loaded rather than the
current context? If so this probably ought to be commented since it is a major
trap for anyone who expects
getXWikiContext().getUser() to yield the current user (for example).
> + private XWikiContext getXWikiContext()
> + {
> + return (XWikiContext)
> this.execution.getContext().getProperty("xwikicontext");
> + }
> }
>
> Modified:
> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/doc/XWikiDocumentTest.java
> ===================================================================
> ---
> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/doc/XWikiDocumentTest.java
> 2010-01-07 16:55:03 UTC (rev 26073)
> +++
> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/doc/XWikiDocumentTest.java
> 2010-01-07 22:02:51 UTC (rev 26074)
> @@ -155,6 +155,29 @@
>
> this.mockXWikiStoreInterface.stubs().method("search").will(returnValue(new
> ArrayList<XWikiDocument>()));
> }
>
> + public void testConstructor()
> + {
> + XWikiDocument doc = new XWikiDocument("notused", "space.page");
> + assertEquals("space", doc.getSpaceName());
> + assertEquals("page", doc.getPageName());
> + assertEquals("xwiki", doc.getWikiName());
> +
> + doc = new XWikiDocument("space", "page");
> + assertEquals("space", doc.getSpaceName());
> + assertEquals("page", doc.getPageName());
> + assertEquals("xwiki", doc.getWikiName());
> +
> + doc = new XWikiDocument("wiki", "space", "page");
> + assertEquals("space", doc.getSpaceName());
> + assertEquals("page", doc.getPageName());
> + assertEquals("wiki", doc.getWikiName());
> +
> + doc = new XWikiDocument("wiki", "notused", "notused:space.page");
> + assertEquals("space", doc.getSpaceName());
> + assertEquals("page", doc.getPageName());
> + assertEquals("wiki", doc.getWikiName());
> + }
> +
> public void testGetDisplayTitleWhenNoTitleAndNoContent()
> {
> this.document.setContent("Some content");
>
> _______________________________________________
> notifications mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/notifications
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs