Re: [xwiki-devs] [xwiki-notifications] r34917 - in contrib/sandbox/xwiki-extension-handler-xar/src: main/java/org/xwiki/extension/xar/internal/handler/packager/xml test/java/org/xwiki/extension/xar test/resources/repository/local
\o/ On Thu, Feb 24, 2011 at 5:08 PM, tmortagne <[email protected]> wrote:
Author: tmortagne Date: 2011-02-24 17:08:47 +0100 (Thu, 24 Feb 2011) New Revision: 34917
Added: contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/page.xml Removed: contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/ClassHandler.java contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/ObjectHandler.java Modified: contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/DocumentImporterHandler.java contrib/sandbox/xwiki-extension-handler-xar/src/test/java/org/xwiki/extension/xar/XarExtensionHandlerTest.java contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/test-1.0.xar contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/test-2.0.xar Log: XWIKI-5557: Add extension manager xar handler Yea ! first fully implemented version with install/commit/upgrade support (ok "upgrade" is maybe a lot to say ;))
Deleted: contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/ClassHandler.java =================================================================== --- contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/ClassHandler.java 2011-02-24 15:58:04 UTC (rev 34916) +++ contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/ClassHandler.java 2011-02-24 16:08:47 UTC (rev 34917) @@ -1,37 +0,0 @@ -/* - * 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.extension.xar.internal.handler.packager.xml; - -import org.xwiki.component.manager.ComponentManager; - -import com.xpn.xwiki.objects.classes.BaseClass; - -public class ClassHandler extends AbstractHandler -{ - public ClassHandler(ComponentManager componentManager, BaseClass xclass) - { - super(componentManager, xclass); - } - - public BaseClass getObject() - { - return (BaseClass) getCurrentBean(); - } -}
Modified: contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/DocumentImporterHandler.java =================================================================== --- contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/DocumentImporterHandler.java 2011-02-24 15:58:04 UTC (rev 34916) +++ contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/DocumentImporterHandler.java 2011-02-24 16:08:47 UTC (rev 34917) @@ -19,6 +19,7 @@ */ package org.xwiki.extension.xar.internal.handler.packager.xml;
+import org.dom4j.io.SAXContentHandler; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xwiki.component.manager.ComponentLookupException; @@ -26,7 +27,9 @@ import org.xwiki.model.reference.DocumentReference;
import com.xpn.xwiki.XWikiContext; +import com.xpn.xwiki.XWikiException; import com.xpn.xwiki.doc.XWikiDocument; +import com.xpn.xwiki.objects.BaseObject;
public class DocumentImporterHandler extends AbstractHandler { @@ -34,6 +37,11 @@
private boolean needSave = true;
+ /** + * Avoid create a new SAXContentHandler for each object/class when the same can be used for all. + */ + public SAXContentHandler domBuilder = new SAXContentHandler(); + public DocumentImporterHandler(ComponentManager componentManager) { super(componentManager); @@ -43,6 +51,7 @@ } catch (ComponentLookupException e) { setCurrentBean(new XWikiDocument()); } + // skip useless known elements this.skippedElements.add("version"); this.skippedElements.add("minorEdit"); @@ -99,10 +108,9 @@ { if (qName.equals("attachment")) { setCurrentHandler(new AttachmentHandler(getComponentManager())); - } else if (qName.equals("object")) { - setCurrentHandler(new ObjectHandler(getComponentManager())); - } else if (qName.equals("class")) { - setCurrentHandler(new ClassHandler(getComponentManager(), getDocument().getXClass())); + } else if (qName.equals("class") || qName.equals("object")) { + this.domBuilder.startDocument(); + setCurrentHandler(this.domBuilder); } else { super.startElementInternal(uri, localName, qName, attributes); } @@ -120,14 +128,25 @@
getDocument().getAttachmentList().add(handler.getAttachment());
- // TODO: add attachment to documentxwikidoc + // TODO: add attachment to document saveDocument("Import: add attachment"); } else if (qName.equals("object")) { - ObjectHandler handler = (ObjectHandler) getCurrentHandler(); - getDocument().addXObject(handler.getObject()); + try { + BaseObject baseObject = new BaseObject(); + baseObject.fromXML(this.domBuilder.getDocument().getRootElement()); + getDocument().setXObject(baseObject.getNumber(), baseObject); + } catch (XWikiException e) { + throw new SAXException("Failed to parse object", e); + }
this.needSave = true; } else if (qName.equals("class")) { + try { + getDocument().getXClass().fromXML(this.domBuilder.getDocument().getRootElement()); + } catch (XWikiException e) { + throw new SAXException("Failed to parse object", e); + } + this.needSave = true; } else { super.endElementInternal(uri, localName, qName);
Deleted: contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/ObjectHandler.java =================================================================== --- contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/ObjectHandler.java 2011-02-24 15:58:04 UTC (rev 34916) +++ contrib/sandbox/xwiki-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/xml/ObjectHandler.java 2011-02-24 16:08:47 UTC (rev 34917) @@ -1,37 +0,0 @@ -/* - * 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.extension.xar.internal.handler.packager.xml; - -import org.xwiki.component.manager.ComponentManager; - -import com.xpn.xwiki.objects.BaseObject; - -public class ObjectHandler extends AbstractHandler -{ - public ObjectHandler(ComponentManager componentManager) - { - super(componentManager, new BaseObject()); - } - - public BaseObject getObject() - { - return (BaseObject) getCurrentBean(); - } -}
Modified: contrib/sandbox/xwiki-extension-handler-xar/src/test/java/org/xwiki/extension/xar/XarExtensionHandlerTest.java =================================================================== --- contrib/sandbox/xwiki-extension-handler-xar/src/test/java/org/xwiki/extension/xar/XarExtensionHandlerTest.java 2011-02-24 15:58:04 UTC (rev 34916) +++ contrib/sandbox/xwiki-extension-handler-xar/src/test/java/org/xwiki/extension/xar/XarExtensionHandlerTest.java 2011-02-24 16:08:47 UTC (rev 34917) @@ -40,6 +40,9 @@ import com.xpn.xwiki.XWiki; import com.xpn.xwiki.XWikiContext; import com.xpn.xwiki.doc.XWikiDocument; +import com.xpn.xwiki.objects.BaseObject; +import com.xpn.xwiki.objects.classes.BaseClass; +import com.xpn.xwiki.objects.classes.NumberClass; import com.xpn.xwiki.test.AbstractBridgedComponentTestCase;
public class XarExtensionHandlerTest extends AbstractBridgedComponentTestCase @@ -147,6 +150,11 @@ Assert.assertEquals("Wrong content", "content", document.getContent()); Assert.assertEquals("Wrong author", "XWiki.author", document.getAuthor()); Assert.assertEquals("Wrong versions", "1.1", document.getVersion()); + + BaseClass baseClass = document.getXClass(); + Assert.assertNotNull(baseClass.getField("property")); + Assert.assertEquals("property", baseClass.getField("property").getName()); + Assert.assertSame(NumberClass.class, baseClass.getField("property").getClass()); }
@Test @@ -173,6 +181,11 @@ Assert.assertEquals("Wrong content", "content 2", document.getContent()); Assert.assertEquals("Wrong author", "XWiki.author", document.getAuthor()); Assert.assertEquals("Wrong versions", "2.1", document.getVersion()); + + BaseClass baseClass = document.getXClass(); + Assert.assertNotNull(baseClass.getField("property")); + Assert.assertEquals("property", baseClass.getField("property").getName()); + Assert.assertSame(NumberClass.class, baseClass.getField("property").getClass()); }
@Test
Added: contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/page.xml =================================================================== --- contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/page.xml (rev 0) +++ contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/page.xml 2011-02-24 16:08:47 UTC (rev 34917) @@ -0,0 +1,166 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xwikidoc> +<web>space</web> +<name>page</name> +<language></language> +<defaultLanguage>en</defaultLanguage> +<translation>0</translation> +<parent></parent> +<creator>XWiki.creator</creator> +<author>XWiki.author</author> +<customClass></customClass> +<contentAuthor>XWiki.contentAuthor</contentAuthor> +<creationDate>1297952360000</creationDate> +<date>1297952371000</date> +<contentUpdateDate>1297952371000</contentUpdateDate> +<version>1.1</version> +<title></title> +<template></template> +<defaultTemplate></defaultTemplate> +<validationScript></validationScript> +<comment></comment> +<minorEdit>false</minorEdit> +<syntaxId>xwiki/2.0</syntaxId> +<hidden>false</hidden> +<class> +<name>space.page</name> +<customClass></customClass> +<customMapping></customMapping> +<defaultViewSheet></defaultViewSheet> +<defaultEditSheet></defaultEditSheet> +<defaultWeb></defaultWeb> +<nameField></nameField> +<validationScript></validationScript> +<property> +<disabled>0</disabled> +<name>property</name> +<number>1</number> +<numberType>long</numberType> +<prettyName>property</prettyName> +<size>30</size> +<unmodifiable>0</unmodifiable> +<classType>com.xpn.xwiki.objects.classes.NumberClass</classType> +</property> +</class> +<object> +<class> +<name>XWiki.StyleSheetExtension</name> +<customClass></customClass> +<customMapping></customMapping> +<defaultViewSheet></defaultViewSheet> +<defaultEditSheet></defaultEditSheet> +<defaultWeb></defaultWeb> +<nameField></nameField> +<validationScript></validationScript> +<cache> +<cache>0</cache> +<disabled>0</disabled> +<displayType>select</displayType> +<multiSelect>0</multiSelect> +<name>cache</name> +<number>5</number> +<prettyName>Caching policy</prettyName> +<relationalStorage>0</relationalStorage> +<separator> </separator> +<separators> ,|</separators> +<size>1</size> +<unmodifiable>0</unmodifiable> +<values>long|short|default|forbid</values> +<classType>com.xpn.xwiki.objects.classes.StaticListClass</classType> +</cache> +<code> +<disabled>0</disabled> +<name>code</name> +<number>2</number> +<prettyName>Code</prettyName> +<rows>20</rows> +<size>50</size> +<unmodifiable>0</unmodifiable> +<classType>com.xpn.xwiki.objects.classes.TextAreaClass</classType> +</code> +<name> +<disabled>0</disabled> +<name>name</name> +<number>1</number> +<prettyName>Name</prettyName> +<size>30</size> +<unmodifiable>0</unmodifiable> +<classType>com.xpn.xwiki.objects.classes.StringClass</classType> +</name> +<parse> +<disabled>0</disabled> +<displayFormType>select</displayFormType> +<displayType>yesno</displayType> +<name>parse</name> +<number>4</number> +<prettyName>Parse content</prettyName> +<unmodifiable>0</unmodifiable> +<classType>com.xpn.xwiki.objects.classes.BooleanClass</classType> +</parse> +<use> +<cache>0</cache> +<disabled>0</disabled> +<displayType>select</displayType> +<multiSelect>0</multiSelect> +<name>use</name> +<number>3</number> +<prettyName>Use this extension</prettyName> +<relationalStorage>0</relationalStorage> +<separator> </separator> +<separators> ,|</separators> +<size>1</size> +<unmodifiable>0</unmodifiable> +<values>onDemand=On demand|always=Always</values> +<classType>com.xpn.xwiki.objects.classes.StaticListClass</classType> +</use> +</class> +<name>space.page</name> +<number>0</number> +<className>XWiki.StyleSheetExtension</className> +<guid>8eaeac52-e2f2-47b2-87e1-bc6909597b39</guid> +<property> +<cache>long</cache> +</property> +<property> +<code>some code</code> +</property> +<property> +<name>name</name> +</property> +<property> +<parse></parse> +</property> +<property> +<use>onDemand</use> +</property> +</object> +<object> +<class> +<name>space.page</name> +<customClass></customClass> +<customMapping></customMapping> +<defaultViewSheet></defaultViewSheet> +<defaultEditSheet></defaultEditSheet> +<defaultWeb></defaultWeb> +<nameField></nameField> +<validationScript></validationScript> +<property> +<disabled>0</disabled> +<name>property</name> +<number>1</number> +<numberType>long</numberType> +<prettyName>property</prettyName> +<size>30</size> +<unmodifiable>0</unmodifiable> +<classType>com.xpn.xwiki.objects.classes.NumberClass</classType> +</property> +</class> +<name>space.page</name> +<number>0</number> +<className>space.page</className> +<guid>e2167721-2a64-430c-9520-bac1c0ee68cb</guid> +<property> +<property>12</property> +</property> +</object> +<content>content</content></xwikidoc>
Property changes on: contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/page.xml ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native
Modified: contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/test-1.0.xar =================================================================== (Binary files differ)
Modified: contrib/sandbox/xwiki-extension-handler-xar/src/test/resources/repository/local/test-2.0.xar =================================================================== (Binary files differ)
_______________________________________________ notifications mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/notifications
participants (1)
-
Jerome Velociter