On 11/26/2009 04:28 PM, tmortagne (SVN) wrote:
Author: tmortagne
Date: 2009-11-26 16:28:25 +0100 (Thu, 26 Nov 2009)
New Revision: 25288
Added:
enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java
Modified:
enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java
platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java
platform/core/trunk/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java
platform/core/trunk/xwiki-xmlrpc/xwiki-xmlrpc-model/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcApi.java
Log:
XWIKI-4464: Extend the XmlRpc API with new rendering features
* Apply patch from Florin Ciubotaru:
** New getRenderedContendMethods added to the api(We still need a few votes on devs
for these to get commited). Completed the client with the new additions.
** Added integration tests.
Modified:
enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java
===================================================================
---
enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java 2009-11-26
11:14:42 UTC (rev 25287)
+++
enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java 2009-11-26
15:28:25 UTC (rev 25288)
@@ -62,6 +62,7 @@
addTestCase(suite, org.xwiki.xmlrpc.XWikiClassesTest.class);
addTestCase(suite, org.xwiki.xmlrpc.XWikiObjectsTest.class);
addTestCase(suite, org.xwiki.xmlrpc.SearchTest.class);
+ addTestCase(suite, org.xwiki.xmlrpc.RenderingTest.class);
return new XWikiTestSetup(suite);
}
Added:
enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java
===================================================================
---
enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java
(rev 0)
+++
enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java 2009-11-26
15:28:25 UTC (rev 25288)
@@ -0,0 +1,145 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ *
+ */
+package org.xwiki.xmlrpc;
+
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.xwiki.xmlrpc.model.XWikiPage;
+
+public class RenderingTest extends AbstractXWikiXmlRpcTest
+{
+ public void testGetInputSyntaxes() throws XmlRpcException
+ {
+ List<String> syntaxes = rpc.getInputSyntaxes();
+
+ TestUtils.banner("TEST: getInputSyntaxes()");
I'd swap the banner setting and the retrieval method, since if the
method fails, then the banner won't be set. Also, System.out should not
be used.
+ System.out.format("%d conversion input
syntaxes found:\n", syntaxes.size());
+ for (String syntaxId : syntaxes) {
+ System.out.format("%s\n", syntaxId);
+ }
+ Assert.assertTrue(syntaxes.size() != 0);
+ }
+
+ public void testGetOutputSyntaxes() throws XmlRpcException
+ {
+ List<String> syntaxes = rpc.getOutputSyntaxes();
+
+ TestUtils.banner("TEST: getOutputSyntaxes()");
+ System.out.format("%d conversion output syntaxes found:\n",
syntaxes.size());
+ for (String syntaxId : syntaxes) {
+ System.out.format("%s\n", syntaxId);
+ }
+ Assert.assertTrue(syntaxes.size() != 0);
+ }
+
+ public void testConvert() throws XmlRpcException
+ {
+ String inputXWiki =
+ "**BoldText**//ItalicText//" + String.format("%n") +
"==h2Text==" + String.format("%n") + "normalText";
Why String.format("%n")? Doesn't a simple \n suffice? Or, if the reak
system endline must be used, for a reason I can't see now, how about
org.apache.commons.lang.SystemUtils.LINE_SEPARATOR or the raw
System.getProperty("line.separator")?
+ String inputXhtml =
+
"<div><p><strong>boldText</strong><br/><em>ItalicText</em></p>"
+ String.format("%n")
+ + "<h2
id=\"h2Text\"><span>h2Text</span></h2><p>normalText</p></div>";
+
+ TestUtils.banner("TEST: convert()");
+ System.out.format("\nTesting xwiki/2.0 -> xhtml/1.0
conversion\n");
+ System.out.format("Input text:\n%s", inputXWiki);
+
+ String outputXhtml = rpc.convert(inputXhtml, "xwiki/2.0",
"xhtml/1.0");
+
+ System.out.format("\nOutput text:\n%s", outputXhtml);
+
+ Assert.assertNotNull(outputXhtml);
+ Assert.assertFalse(outputXhtml.equals(""));
You could also test some generated markup here.
+
Assert.assertTrue(outputXhtml.contains("strong"));
+ Assert.assertTrue(outputXhtml.contains("normalText"));
+ Assert.assertTrue(outputXhtml.contains("ItalicText"));
+
+ System.out.format("\nTesting xhtml/1.0 -> xwiki/2.0
conversion\n");
+ System.out.format("Input text:\n%s", inputXhtml);
+
+ String outputXWiki = rpc.convert(inputXhtml, "xhtml/1.0",
"xwiki/2.0");
+
+ System.out.format("\nOutput text:\n%s\n", outputXWiki);
+
+ Assert.assertNotNull(outputXWiki);
+ Assert.assertFalse(outputXhtml.equals(""));
+ Assert.assertTrue(outputXhtml.contains("normalText"));
+ Assert.assertTrue(outputXhtml.contains("ItalicText"));
+ }
+
+ public void testGetRenderedContent() throws XmlRpcException
+ {
+ String pageContent = "**Text in
Bold**{{velocity}}VelocityCode{{/velocity}}";
+
+ XWikiPage page = new XWikiPage();
+ page.setId(TestConstants.TEST_PAGE);
+ page.setContent(pageContent);
+ page.setSyntaxId("xwiki/2.0");
+
+ TestUtils.banner("TEST: getRenderedContent()");
+ System.out.format("\nCalling getRenderedContent for page %s\n",
page.getId());
+ System.out.format("\nWiki content is:\n%s\n", pageContent);
+
+ rpc.storePage(page);
+
+ try {
+ String renderedContent = rpc.getRenderedContent(page.getId(),
"annotatedxhtml/1.0");
+
+ System.out.format("\nObtained rendered content:\n%s\n\n",
renderedContent);
+
+ Assert.assertTrue(renderedContent.contains("Text in Bold"));
+ Assert.assertTrue(renderedContent.contains("startmacro"));
+ } finally {
+ rpc.removePage(page.getId());
+ }
+ }
+
+ public void testRenderPageContent() throws XmlRpcException
+ {
+ String pageContent = "**Text in
Bold**{{velocity}}VelocityCode{{/velocity}}";
+
+ XWikiPage page = new XWikiPage();
+ page.setId(TestConstants.TEST_PAGE);
+ page.setContent(pageContent);
+ page.setSyntaxId("xwiki/2.0");
+
+ TestUtils.banner("TEST: renderPageContent");
+ System.out.format("\nCalling renderPageContent with context as page
%s\n", TestConstants.TEST_PAGE);
+ System.out.format("\nWiki content is:\n%s\n", pageContent);
+
+ rpc.storePage(page);
+
+ try {
+ String renderedContent =
+ rpc.renderPageContent(page.getId(), page.getContent(),
page.getSyntaxId(), "annotatedxhtml/1.0");
+
+ System.out.format("\nObtained rendered content:\n%s\n\n",
renderedContent);
+
+ Assert.assertTrue(renderedContent.contains("Text in Bold"));
+ Assert.assertTrue(renderedContent.contains("startmacro"));
+ } finally {
+ rpc.removePage(page.getId());
+ }
+ }
+}
Modified:
platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java
===================================================================
---
platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java 2009-11-26
11:14:42 UTC (rev 25287)
+++
platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java 2009-11-26
15:28:25 UTC (rev 25288)
@@ -1455,4 +1455,47 @@
}
return syntaxes;
}
+
+ /**
+ * Renders a text in the context of a wiki page.
+ *
+ * @param token The authentication token.
+ * @param pageId The id of the page.
+ * @param content The context to be rendered.
+ * @param sourceSyntaxId The syntax of the content.
+ * @param targetSyntaxId The target syntax of the rendered content
+ * @return The rendered content.
+ * @throws Exception If a invalid token is provided, an unsupported syntax id is
given or the rendering fails.
+ */
Make sure a user can't use the programming rights of a page to interpret
his own text.
+ public String renderPageContent(String token,
String pageId, String content, String sourceSyntaxId,
+ String targetSyntaxId) throws Exception
+ {
+ XWikiXmlRpcUser user = XWikiUtils.checkToken(token, this.xwikiContext);
+ LOG.debug(String.format("User %s has called renderPageContent()",
user.getName()));
+
+ Document doc = XWikiUtils.getDocument(this.xwikiApi, pageId, true);
+
+ return doc.getRenderedContent(content, sourceSyntaxId, targetSyntaxId);
+ }
+
+ /**
+ * Gets the rendered content of an existing document.
+ *
+ * @param token The authentication token.
+ * @param pageId The id of the page.
+ * @param syntaxId The target syntax of the rendered content
+ * @return The rendered content
+ * @throws Exception If a invalid token is provided, an unsupported syntax id is
given or the rendering fails.
+ */
+ public String getRenderedContent(String token, String pageId, String syntaxId)
throws Exception
+ {
+ XWikiXmlRpcUser user = XWikiUtils.checkToken(token, this.xwikiContext);
+ LOG.debug(String.format("User %s has called getRenderedContent()",
user.getName()));
+
+ Document doc = XWikiUtils.getDocument(this.xwikiApi, pageId, true);
+ SyntaxFactory syntaxFactory = Utils.getComponent(SyntaxFactory.class);
+ Syntax syntax = syntaxFactory.createSyntaxFromIdString(syntaxId);
+
+ return doc.getRenderedContent(syntax);
+ }
}
--
Sergiu Dumitriu
http://purl.org/net/sergiu/