\o/
On Thu, Feb 24, 2011 at 5:08 PM, tmortagne
<contrib-notifications(a)xwiki.org> 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
notifications(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/notifications