Re: [xwiki-devs] [xwiki-notifications] r25290 - enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-model
Hi all, I wonder if http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-xmlrpc/xwiki-xm... is needed at all after the refactoring Florin did. The rationale for this interface was that before we were creating a Java proxy object in order to wrap each invocation inside a context initialization-cleanup. And since proxies could be created only by using interfaces we needed the API to be expressed as an interface. Now that the context initialization/cleanup is handled through filters there is no more need for the proxy and hence for that interface. Moreover this interface exposes method signature using XMLRPC types (so Maps instead of model objects). So it might also be confusing. I am +1 for removing it so that the code is even more clean. -Fabio On Nov 26, 2009, at 5:17 PM, tmortagne (SVN) wrote:
Author: tmortagne Date: 2009-11-26 17:17:04 +0100 (Thu, 26 Nov 2009) New Revision: 25290
Added: enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java Modified: enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java platform/core/branches/xwiki-core-2.0/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/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java =================================================================== --- enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java 2009-11-26 15:38:04 UTC (rev 25289) +++ enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -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); }
Copied: enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java (from rev 25288, enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java) =================================================================== --- enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java (rev 0) +++ enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -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()"); + 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"; + 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("")); + 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/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java =================================================================== --- platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java 2009-11-26 15:38:04 UTC (rev 25289) +++ platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -1446,4 +1446,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. + */ + 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); + } }
Modified: platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java =================================================================== --- platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java 2009-11-26 15:38:04 UTC (rev 25289) +++ platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -932,6 +932,85 @@ }
/** + * Converts a wiki source from a syntax to another syntax. + * + * @param source The content to be converted. + * @param initialSyntaxId The initial syntax of the source. + * @param targetSyntaxId The final syntax of the returned content. + * @return The converted source. + * @throws XmlRpcException An invalid token is provided, the syntaxId is not supported, the source is invalid or the + * conversion fails. + */ + public String convert( String source, String initialSyntaxId, String targetSyntaxId) + throws XmlRpcException + { + return (String) invokeRpc("convert", this.token, source, initialSyntaxId, targetSyntaxId); + } + + /** + * Gets all syntaxes supported by the rendering parsers as an input for a syntax conversion. + * + * @return A list containing all syntaxes supported by rendering parsers. + * @throws Exception An invalid token is provided or the syntax lookup fails. + */ + public List<String> getInputSyntaxes() throws XmlRpcException + { + List<String> result = new ArrayList<String>(); + Object[] objects = (Object[]) invokeRpc("getInputSyntaxes", this.token); + for(Object object:objects) + { + result.add((String)object); + } + return result; + } + + /** + * Gets all syntaxes supported by the rendering as an output for a syntax conversion. + * + * @return A list containing all syntaxes supported by renderers. + * @throws XmlRpcException An invalid token is provided or the syntax lookup fails. + */ + public List<String> getOutputSyntaxes() throws XmlRpcException + { + List<String> result = new ArrayList<String>(); + Object[] objects = (Object[]) invokeRpc("getOutputSyntaxes", this.token); + for(Object object:objects) + { + result.add((String)object); + } + return result; + } + + /** + * Renders a text in the context of a wiki page. + * + * @param pageId The id of the page. + * @param content The contenxt to be rendered. + * @param sourceSyntaxId The syntax of the content. + * @param targetSyntaxId The target syntax of the rendered content + * @return The rendered content. + * @throws XmlRpcException If a invalid token is provided, an unsuported syntax id is given or the rendering fails. + */ + public String renderPageContent(String pageId, String content, String sourceSyntaxId, + String targetSyntaxId) throws XmlRpcException + { + return (String) invokeRpc("renderPageContent", this.token, pageId, content, sourceSyntaxId, targetSyntaxId); + } + + /** + * Gets the rendered content of an existing document. + * + * @param pageId The id of the page. + * @param syntaxId The target syntax of the rendered content + * @return The renderded content + * @throws Exception If a invalid token is provided, an unsuported syntax id is given or the rendering fails. + */ + public String getRenderedContent(String pageId, String syntaxId) throws XmlRpcException + { + return (String) invokeRpc("getRenderedContent", this.token, pageId, syntaxId); + } + + /** * Utility method for invoking remote RPC methods. * * @param methodName
Modified: platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-model/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcApi.java =================================================================== --- platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-model/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcApi.java 2009-11-26 15:38:04 UTC (rev 25289) +++ platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-model/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcApi.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -63,6 +63,11 @@
public String renderContent(String token, String space, String pageId, String content) throws Exception;
+ public String renderPageContent(String token, String pageId, String content, String sourceSyntaxId, + String targetSyntaxId) throws Exception; + + public String getRenderedContent(String token, String pageId, String syntaxId) throws Exception; + public String convert(String token, String source, String initialSyntaxId, String targetSyntaxId) throws Exception;
public List<String> getInputSyntaxes(String token) throws Exception;
_______________________________________________ notifications mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/notifications
Hi, Yes, the interface is not used required any more, but I find it useful for the fact that it's more like an specification for the xml-rpc API and it's better placed for this purpose, in the xml-rpc model as opposed the implementation which is in the old core. It's also easier to navigate then XWikiXmlRpcApiImpl. Like any interface, it might be useful in the future if we change the implemetation. Not sure what the balance is on removing it vs keeping it. +0 Thanks, Florin Ciubotaru On 11/27/2009 3:26 PM, Fabio Mancinelli wrote:
Hi all,
I wonder if http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-xmlrpc/xwiki-xm... is needed at all after the refactoring Florin did.
The rationale for this interface was that before we were creating a Java proxy object in order to wrap each invocation inside a context initialization-cleanup. And since proxies could be created only by using interfaces we needed the API to be expressed as an interface.
Now that the context initialization/cleanup is handled through filters there is no more need for the proxy and hence for that interface.
Moreover this interface exposes method signature using XMLRPC types (so Maps instead of model objects). So it might also be confusing.
I am +1 for removing it so that the code is even more clean.
-Fabio
On Nov 26, 2009, at 5:17 PM, tmortagne (SVN) wrote:
Author: tmortagne Date: 2009-11-26 17:17:04 +0100 (Thu, 26 Nov 2009) New Revision: 25290
Added: enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java Modified: enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java platform/core/branches/xwiki-core-2.0/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/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java =================================================================== --- enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java 2009-11-26 15:38:04 UTC (rev 25289) +++ enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -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); }
Copied: enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java (from rev 25288, enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java) =================================================================== --- enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java (rev 0) +++ enterprise/branches/xwiki-enterprise-2.0/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -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()"); + 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"; + 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("")); + 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/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java =================================================================== --- platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java 2009-11-26 15:38:04 UTC (rev 25289) +++ platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -1446,4 +1446,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. + */ + 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); + } }
Modified: platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java =================================================================== --- platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java 2009-11-26 15:38:04 UTC (rev 25289) +++ platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -932,6 +932,85 @@ }
/** + * Converts a wiki source from a syntax to another syntax. + * + * @param source The content to be converted. + * @param initialSyntaxId The initial syntax of the source. + * @param targetSyntaxId The final syntax of the returned content. + * @return The converted source. + * @throws XmlRpcException An invalid token is provided, the syntaxId is not supported, the source is invalid or the + * conversion fails. + */ + public String convert( String source, String initialSyntaxId, String targetSyntaxId) + throws XmlRpcException + { + return (String) invokeRpc("convert", this.token, source, initialSyntaxId, targetSyntaxId); + } + + /** + * Gets all syntaxes supported by the rendering parsers as an input for a syntax conversion. + * + * @return A list containing all syntaxes supported by rendering parsers. + * @throws Exception An invalid token is provided or the syntax lookup fails. + */ + public List<String> getInputSyntaxes() throws XmlRpcException + { + List<String> result = new ArrayList<String>(); + Object[] objects = (Object[]) invokeRpc("getInputSyntaxes", this.token); + for(Object object:objects) + { + result.add((String)object); + } + return result; + } + + /** + * Gets all syntaxes supported by the rendering as an output for a syntax conversion. + * + * @return A list containing all syntaxes supported by renderers. + * @throws XmlRpcException An invalid token is provided or the syntax lookup fails. + */ + public List<String> getOutputSyntaxes() throws XmlRpcException + { + List<String> result = new ArrayList<String>(); + Object[] objects = (Object[]) invokeRpc("getOutputSyntaxes", this.token); + for(Object object:objects) + { + result.add((String)object); + } + return result; + } + + /** + * Renders a text in the context of a wiki page. + * + * @param pageId The id of the page. + * @param content The contenxt to be rendered. + * @param sourceSyntaxId The syntax of the content. + * @param targetSyntaxId The target syntax of the rendered content + * @return The rendered content. + * @throws XmlRpcException If a invalid token is provided, an unsuported syntax id is given or the rendering fails. + */ + public String renderPageContent(String pageId, String content, String sourceSyntaxId, + String targetSyntaxId) throws XmlRpcException + { + return (String) invokeRpc("renderPageContent", this.token, pageId, content, sourceSyntaxId, targetSyntaxId); + } + + /** + * Gets the rendered content of an existing document. + * + * @param pageId The id of the page. + * @param syntaxId The target syntax of the rendered content + * @return The renderded content + * @throws Exception If a invalid token is provided, an unsuported syntax id is given or the rendering fails. + */ + public String getRenderedContent(String pageId, String syntaxId) throws XmlRpcException + { + return (String) invokeRpc("getRenderedContent", this.token, pageId, syntaxId); + } + + /** * Utility method for invoking remote RPC methods. * * @param methodName
Modified: platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-model/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcApi.java =================================================================== --- platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-model/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcApi.java 2009-11-26 15:38:04 UTC (rev 25289) +++ platform/core/branches/xwiki-core-2.0/xwiki-xmlrpc/xwiki-xmlrpc-model/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcApi.java 2009-11-26 16:17:04 UTC (rev 25290) @@ -63,6 +63,11 @@
public String renderContent(String token, String space, String pageId, String content) throws Exception;
+ public String renderPageContent(String token, String pageId, String content, String sourceSyntaxId, + String targetSyntaxId) throws Exception; + + public String getRenderedContent(String token, String pageId, String syntaxId) throws Exception; + public String convert(String token, String source, String initialSyntaxId, String targetSyntaxId) throws Exception;
public List<String> getInputSyntaxes(String token) throws Exception;
_______________________________________________ notifications mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/notifications
_______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
On Nov 27, 2009, at 4:51 PM, Florin Ciubotaru wrote:
Hi,
Yes, the interface is not used required any more, but I find it useful for the fact that it's more like an specification for the xml-rpc API and it's better placed for this purpose, in the xml-rpc model as opposed the implementation which is in the old core. It's also easier to navigate then XWikiXmlRpcApiImpl. Like any interface, it might be useful in the future if we change the implemetation. Not sure what the balance is on removing it vs keeping it. +0
I think that's redudant because we also have a Client (http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-xmlrpc/xwiki-xm...) which also exposes the same API, using the actual model class for the return types (which is more clear). And anyway in the XMLRPC properties file (http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-core/src/main/r...) you specify directly the implementation. I agree though, that it can be seen as a specification. I still tend to +1 for removing it, but let's wait for what the others will say. Thanks, -Fabio
participants (2)
-
Fabio Mancinelli -
Florin Ciubotaru