Author: sdumitriu Date: 2008-01-03 20:13:22 +0100 (Thu, 03 Jan 2008) New Revision: 6616
Added: xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentAddOperation.java xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentDeleteOperation.java xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/AttachmentOperationsTest.java Modified: xwiki-platform/core/trunk/xwiki-patchservice/pom.xml xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/api/RWOperation.java xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AbstractOperationImpl.java xwiki-platform/core/trunk/xwiki-patchservice/src/main/resources/META-INF/services/org.xwiki.platform.patchservice.api.RWOperation xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/CheckAllOperationsImplementedTest.java Log: XWIKI-1977: Create a patchservice data model Added the implementatins for attachment operations. All done. Modified: xwiki-platform/core/trunk/xwiki-patchservice/pom.xml =================================================================== --- xwiki-platform/core/trunk/xwiki-patchservice/pom.xml 2008-01-03 17:37:32 UTC (rev 6615) +++ xwiki-platform/core/trunk/xwiki-patchservice/pom.xml 2008-01-03 19:13:22 UTC (rev 6616) @@ -64,6 +64,16 @@ <version>2.8.1</version> <scope>test</scope> </dependency> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>1.3</version> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>1.2</version> + </dependency> </dependencies> <build> <plugins> Modified: xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/api/RWOperation.java =================================================================== --- xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/api/RWOperation.java 2008-01-03 17:37:32 UTC (rev 6615) +++ xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/api/RWOperation.java 2008-01-03 19:13:22 UTC (rev 6616) @@ -47,7 +47,9 @@ Position position); /* Operations affeting the attachments */ - boolean setAttachment(InputStream is); + boolean addAttachment(InputStream is, String filename, String author); + + boolean setAttachment(InputStream is, String filename, String author); boolean deleteAttachment(String name); Modified: xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AbstractOperationImpl.java =================================================================== --- xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AbstractOperationImpl.java 2008-01-03 17:37:32 UTC (rev 6615) +++ xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AbstractOperationImpl.java 2008-01-03 19:13:22 UTC (rev 6616) @@ -1,8 +1,11 @@ package org.xwiki.platform.patchservice.impl; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.util.Map; +import org.apache.commons.codec.binary.Base64; +import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xwiki.platform.patchservice.api.Position; @@ -38,12 +41,16 @@ public static final String ATTACHMENT_NODE_NAME = "attachment"; + public static final String ATTACHMENT_FILANAME_ATTRIBUTE_NAME = CLASS_NAME_ATTRIBUTE_NAME; + + public static final String ATTACHMENT_AUTHOR_ATTRIBUTE_NAME = "author"; + private String type; /** * [EMAIL PROTECTED] */ - public boolean addObject(String objectClass) + public boolean insert(String text, Position position) { return false; } @@ -51,8 +58,7 @@ /** * [EMAIL PROTECTED] */ - public boolean createType(String className, String propertyName, String propertyType, - Map properties) + public boolean delete(String text, Position position) { return false; } @@ -60,7 +66,7 @@ /** * [EMAIL PROTECTED] */ - public boolean delete(String text, Position position) + public boolean setProperty(String property, String value) { return false; } @@ -68,7 +74,8 @@ /** * [EMAIL PROTECTED] */ - public boolean deleteAttachment(String name) + public boolean createType(String className, String propertyName, String propertyType, + Map properties) { return false; } @@ -76,8 +83,7 @@ /** * [EMAIL PROTECTED] */ - public boolean deleteFromProperty(String objectClass, int index, String property, - String text, Position position) + public boolean modifyType(String className, String propertyName, Map properties) { return false; } @@ -85,7 +91,7 @@ /** * [EMAIL PROTECTED] */ - public boolean deleteObject(String objectClass, int index) + public boolean deleteType(String className, String propertyName) { return false; } @@ -93,7 +99,7 @@ /** * [EMAIL PROTECTED] */ - public boolean deleteType(String className, String propertyName) + public boolean addObject(String objectClass) { return false; } @@ -101,7 +107,7 @@ /** * [EMAIL PROTECTED] */ - public boolean insert(String text, Position position) + public boolean deleteObject(String objectClass, int index) { return false; } @@ -109,6 +115,15 @@ /** * [EMAIL PROTECTED] */ + public boolean setObjectProperty(String objectClass, int index, String propertyName, + String value) + { + return false; + } + + /** + * [EMAIL PROTECTED] + */ public boolean insertInProperty(String objectClass, int index, String property, String text, Position position) { @@ -118,7 +133,8 @@ /** * [EMAIL PROTECTED] */ - public boolean modifyType(String className, String propertyName, Map properties) + public boolean deleteFromProperty(String objectClass, int index, String property, + String text, Position position) { return false; } @@ -126,7 +142,7 @@ /** * [EMAIL PROTECTED] */ - public boolean setAttachment(InputStream is) + public boolean addAttachment(InputStream is, String filename, String author) { return false; } @@ -134,8 +150,7 @@ /** * [EMAIL PROTECTED] */ - public boolean setObjectProperty(String objectClass, int index, String propertyName, - String value) + public boolean setAttachment(InputStream is, String filename, String author) { return false; } @@ -143,7 +158,7 @@ /** * [EMAIL PROTECTED] */ - public boolean setProperty(String property, String value) + public boolean deleteAttachment(String name) { return false; } @@ -289,6 +304,51 @@ return getClassNode(e).getAttribute(CLASS_NAME_ATTRIBUTE_NAME); } + public Element createAttachmentNode(String filename, Document doc) + { + return createAttachmentNode(null, filename, null, doc); + } + + public Element createAttachmentNode(byte[] content, String filename, String author, + Document doc) + { + Element xmlNode = doc.createElement(ATTACHMENT_NODE_NAME); + xmlNode.setAttribute(ATTACHMENT_FILANAME_ATTRIBUTE_NAME, filename); + if (author != null) { + xmlNode.setAttribute(ATTACHMENT_AUTHOR_ATTRIBUTE_NAME, author); + } + if (content != null) { + xmlNode.setTextContent(new String(Base64.encodeBase64(content))); + } + return xmlNode; + } + + public Element getAttachmentNode(Element e) + { + return (Element) e.getElementsByTagName(ATTACHMENT_NODE_NAME).item(0); + } + + public byte[] getAttachmentContent(Element e) + { + try { + return Base64.decodeBase64(getAttachmentNode(e).getTextContent().getBytes( + "ISO-8859-1")); + } catch (UnsupportedEncodingException e1) { + } catch (DOMException e1) { + } + return new byte[0]; + } + + public String getAttachmentFilename(Element e) + { + return getAttachmentNode(e).getAttribute(ATTACHMENT_FILANAME_ATTRIBUTE_NAME); + } + + public String getAttachmentAuthor(Element e) + { + return getAttachmentNode(e).getAttribute(ATTACHMENT_AUTHOR_ATTRIBUTE_NAME); + } + public Position loadPositionNode(Element e) throws XWikiException { Position position = new PositionImpl(); Added: xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentAddOperation.java =================================================================== --- xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentAddOperation.java (rev 0) +++ xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentAddOperation.java 2008-01-03 19:13:22 UTC (rev 6616) @@ -0,0 +1,144 @@ +package org.xwiki.platform.patchservice.impl; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Formatter; + +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xwiki.platform.patchservice.api.Operation; +import org.xwiki.platform.patchservice.api.RWOperation; + +import com.xpn.xwiki.XWikiContext; +import com.xpn.xwiki.XWikiException; +import com.xpn.xwiki.doc.XWikiAttachment; +import com.xpn.xwiki.doc.XWikiDocument; + +public class AttachmentAddOperation extends AbstractOperationImpl implements RWOperation +{ + private byte[] data; + + private String filename; + + private String author; + + static { + OperationFactoryImpl.registerTypeProvider(Operation.TYPE_ATTACHMENT_ADD, + AttachmentAddOperation.class); + OperationFactoryImpl.registerTypeProvider(Operation.TYPE_ATTACHMENT_SET, + AttachmentAddOperation.class); + } + + public AttachmentAddOperation() + { + this.setType(Operation.TYPE_ATTACHMENT_ADD); + } + + /** + * [EMAIL PROTECTED] + */ + public void apply(XWikiDocument doc, XWikiContext context) throws XWikiException + { + try { + XWikiAttachment attachment = doc.getAttachment(filename); + if (this.getType().equals(TYPE_ATTACHMENT_ADD)) { + if (attachment != null) { + throw new XWikiException(XWikiException.MODULE_XWIKI_PLUGINS, + XWikiException.ERROR_XWIKI_UNKNOWN, + new Formatter().format( + "Cannot apply patch: Attachment already exists: [%s]", + new Object[] {filename}).toString()); + } + attachment = new XWikiAttachment(); + } + doc.getAttachmentList().add(attachment); + attachment.setContent(data); + attachment.setFilename(filename); + attachment.setAuthor(author); + attachment.setDoc(doc); + } catch (Exception ex) { + throw new XWikiException(XWikiException.MODULE_XWIKI_PLUGINS, + XWikiException.ERROR_XWIKI_UNKNOWN, + "Invalid attachment: " + this.filename); + } + } + + /** + * [EMAIL PROTECTED] + */ + public boolean addAttachment(InputStream is, String filename, String author) + { + this.setType(TYPE_ATTACHMENT_ADD); + try { + data = org.apache.commons.io.IOUtils.toByteArray(is); + this.filename = filename; + this.author = author; + } catch (IOException e) { + return false; + } + return true; + } + + public boolean setAttachment(InputStream is, String filename, String author) + { + if (!this.addAttachment(is, filename, author)) { + return false; + } + this.setType(TYPE_ATTACHMENT_SET); + return true; + } + + /** + * [EMAIL PROTECTED] + */ + public void fromXml(Element e) throws XWikiException + { + this.setType(getOperationType(e)); + this.data = getAttachmentContent(e); + this.filename = getAttachmentFilename(e); + this.author = getAttachmentAuthor(e); + } + + /** + * [EMAIL PROTECTED] + */ + public Element toXml(Document doc) throws XWikiException + { + Element xmlNode = createOperationNode(doc); + xmlNode.appendChild(createAttachmentNode(data, filename, author, doc)); + return xmlNode; + } + + /** + * [EMAIL PROTECTED] + */ + public boolean equals(Object other) + { + try { + AttachmentAddOperation that = (AttachmentAddOperation) other; + return this.getType().equals(that.getType()) && this.filename.equals(that.filename) + && this.author.equals(that.author) && ArrayUtils.isEquals(this.data, that.data); + } catch (Exception e) { + return false; + } + } + + /** + * [EMAIL PROTECTED] + */ + public int hashCode() + { + return new HashCodeBuilder(37, 41).append(this.getType()).append(this.filename).append( + this.author).append(this.data).toHashCode(); + } + + /** + * [EMAIL PROTECTED] + */ + public String toString() + { + return this.getType() + ": [" + this.filename + "] by [" + this.author + "]"; + } +} Property changes on: xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentAddOperation.java ___________________________________________________________________ Name: svn:eol-style + native Added: xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentDeleteOperation.java =================================================================== --- xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentDeleteOperation.java (rev 0) +++ xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentDeleteOperation.java 2008-01-03 19:13:22 UTC (rev 6616) @@ -0,0 +1,108 @@ +package org.xwiki.platform.patchservice.impl; + +import java.util.Formatter; + +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xwiki.platform.patchservice.api.Operation; +import org.xwiki.platform.patchservice.api.RWOperation; + +import com.xpn.xwiki.XWikiContext; +import com.xpn.xwiki.XWikiException; +import com.xpn.xwiki.doc.XWikiAttachment; +import com.xpn.xwiki.doc.XWikiDocument; + +public class AttachmentDeleteOperation extends AbstractOperationImpl implements RWOperation +{ + private String filename; + + static { + OperationFactoryImpl.registerTypeProvider(Operation.TYPE_ATTACHMENT_DELETE, + AttachmentDeleteOperation.class); + } + + public AttachmentDeleteOperation() + { + this.setType(Operation.TYPE_ATTACHMENT_DELETE); + } + + /** + * [EMAIL PROTECTED] + */ + public void apply(XWikiDocument doc, XWikiContext context) throws XWikiException + { + try { + XWikiAttachment attachment = doc.getAttachment(filename); + if (attachment == null) { + throw new XWikiException(XWikiException.MODULE_XWIKI_PLUGINS, + XWikiException.ERROR_XWIKI_UNKNOWN, + new Formatter().format( + "Cannot apply patch: Attachment does not exists: [%s]", + new Object[] {filename}).toString()); + } + doc.deleteAttachment(attachment, context); + } catch (Exception ex) { + throw new XWikiException(XWikiException.MODULE_XWIKI_PLUGINS, + XWikiException.ERROR_XWIKI_UNKNOWN, + "Invalid attachment: " + this.filename); + } + } + + /** + * [EMAIL PROTECTED] + */ + public boolean deleteAttachment(String filename) + { + this.filename = filename; + return true; + } + + /** + * [EMAIL PROTECTED] + */ + public void fromXml(Element e) throws XWikiException + { + this.filename = getAttachmentFilename(e); + } + + /** + * [EMAIL PROTECTED] + */ + public Element toXml(Document doc) throws XWikiException + { + Element xmlNode = createOperationNode(doc); + xmlNode.appendChild(createAttachmentNode(filename, doc)); + return xmlNode; + } + + /** + * [EMAIL PROTECTED] + */ + public boolean equals(Object other) + { + try { + AttachmentDeleteOperation that = (AttachmentDeleteOperation) other; + return this.getType().equals(that.getType()) && this.filename.equals(that.filename); + } catch (Exception e) { + return false; + } + } + + /** + * [EMAIL PROTECTED] + */ + public int hashCode() + { + return new HashCodeBuilder(37, 41).append(this.getType()).append(this.filename) + .toHashCode(); + } + + /** + * [EMAIL PROTECTED] + */ + public String toString() + { + return this.getType() + ": [" + this.filename + "]"; + } +} Property changes on: xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/AttachmentDeleteOperation.java ___________________________________________________________________ Name: svn:eol-style + native Modified: xwiki-platform/core/trunk/xwiki-patchservice/src/main/resources/META-INF/services/org.xwiki.platform.patchservice.api.RWOperation =================================================================== --- xwiki-platform/core/trunk/xwiki-patchservice/src/main/resources/META-INF/services/org.xwiki.platform.patchservice.api.RWOperation 2008-01-03 17:37:32 UTC (rev 6615) +++ xwiki-platform/core/trunk/xwiki-patchservice/src/main/resources/META-INF/services/org.xwiki.platform.patchservice.api.RWOperation 2008-01-03 19:13:22 UTC (rev 6616) @@ -9,3 +9,5 @@ org.xwiki.platform.patchservice.impl.ObjectPropertySetOperation org.xwiki.platform.patchservice.impl.ObjectPropertyInsertAtOperation org.xwiki.platform.patchservice.impl.ObjectPropertyDeleteAtOperation +org.xwiki.platform.patchservice.impl.AttachmentAddOperation +org.xwiki.platform.patchservice.impl.AttachmentDeleteOperation Added: xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/AttachmentOperationsTest.java =================================================================== --- xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/AttachmentOperationsTest.java (rev 0) +++ xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/AttachmentOperationsTest.java 2008-01-03 19:13:22 UTC (rev 6616) @@ -0,0 +1,148 @@ +package org.xwiki.platform; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import junit.framework.TestCase; + +import org.apache.commons.lang.ArrayUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xwiki.platform.patchservice.api.Operation; +import org.xwiki.platform.patchservice.api.RWOperation; +import org.xwiki.platform.patchservice.impl.OperationFactoryImpl; + +import com.xpn.xwiki.XWikiContext; +import com.xpn.xwiki.XWikiException; +import com.xpn.xwiki.doc.XWikiAttachment; +import com.xpn.xwiki.doc.XWikiDocument; + +public class AttachmentOperationsTest extends TestCase +{ + Document domDoc; + + XWikiDocument doc; + + XWikiContext context; + + InputStream helloContent; + + protected void setUp() + { + try { + domDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); + doc = new XWikiDocument(); + context = new XWikiContext(); + helloContent = new ByteArrayInputStream("hello".getBytes()); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } + } + + public void testApplyAttachmentAddOperation() throws XWikiException + { + RWOperation operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_ADD); + operation.addAttachment(helloContent, "file.txt", "XWiki.Admin"); + assertNull(doc.getAttachment("file.txt")); + operation.apply(doc, context); + assertNotNull(doc.getAttachment("file.txt")); + assertTrue(ArrayUtils.isEquals("hello".getBytes(), doc.getAttachment("file.txt") + .getContent(context))); + } + + public void testApplyTwiceAttachmentAddOperation() throws XWikiException + { + RWOperation operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_ADD); + operation.addAttachment(helloContent, "file.txt", "XWiki.Admin"); + assertNull(doc.getAttachment("file.txt")); + operation.apply(doc, context); + try { + operation.apply(doc, context); + assertTrue(false); + } catch (XWikiException ex) { + assertTrue(true); + } + } + + public void testXmlRoundtripAttachmentAddOperation() throws XWikiException + { + RWOperation operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_ADD); + operation.addAttachment(helloContent, "file.txt", "XWiki.Admin"); + Element e = operation.toXml(domDoc); + Operation loadedOperation = OperationFactoryImpl.getInstance().loadOperation(e); + assertEquals(loadedOperation, operation); + } + + public void testApplyAttachmentSetOperation() throws XWikiException + { + RWOperation operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_SET); + XWikiAttachment a = new XWikiAttachment(doc, "file.txt"); + a.setContent("old hello".getBytes()); + doc.getAttachmentList().add(a); + assertNotNull(doc.getAttachment("file.txt")); + operation.setAttachment(helloContent, "file.txt", "XWiki.Admin"); + assertTrue(ArrayUtils.isEquals("old hello".getBytes(), doc.getAttachment("file.txt") + .getContent(context))); + operation.apply(doc, context); + assertNotNull(doc.getAttachment("file.txt")); + assertTrue(ArrayUtils.isEquals("hello".getBytes(), doc.getAttachment("file.txt") + .getContent(context))); + } + + public void testApplyInvalidAttachmentSetOperation() throws XWikiException + { + RWOperation operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_SET); + operation.setAttachment(helloContent, "file.txt", "XWiki.Admin"); + assertNull(doc.getAttachment("file.txt")); + try { + operation.apply(doc, context); + assertTrue(false); + } catch (XWikiException ex) { + assertTrue(true); + } + } + + public void testXmlRoundtripAttachmentSetOperation() throws XWikiException + { + RWOperation operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_SET); + operation.setAttachment(helloContent, "file.txt", "XWiki.Admin"); + Element e = operation.toXml(domDoc); + Operation loadedOperation = OperationFactoryImpl.getInstance().loadOperation(e); + assertEquals(loadedOperation, operation); + } + + // We can't easily test the attachment delete due to XWIKI-1982 + + public void testApplyInvalidAttachmentDeleteOperation() throws XWikiException + { + RWOperation operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_DELETE); + operation.deleteAttachment("file.txt"); + assertNull(doc.getAttachment("file.txt")); + try { + operation.apply(doc, context); + assertTrue(false); + } catch (XWikiException ex) { + assertTrue(true); + } + } + + public void testXmlRoundtripAttachmentDeleteOperation() throws XWikiException + { + RWOperation operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_DELETE); + operation.deleteAttachment("file.txt"); + Element e = operation.toXml(domDoc); + Operation loadedOperation = OperationFactoryImpl.getInstance().loadOperation(e); + assertEquals(loadedOperation, operation); + } +} Property changes on: xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/AttachmentOperationsTest.java ___________________________________________________________________ Name: svn:eol-style + native Modified: xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/CheckAllOperationsImplementedTest.java =================================================================== --- xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/CheckAllOperationsImplementedTest.java 2008-01-03 17:37:32 UTC (rev 6615) +++ xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/CheckAllOperationsImplementedTest.java 2008-01-03 19:13:22 UTC (rev 6616) @@ -1,5 +1,6 @@ package org.xwiki.platform; +import java.io.ByteArrayInputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -46,9 +47,9 @@ RWOperation.TYPE_OBJECT_PROPERTY_INSERT_AT)); assertNotNull(OperationFactoryImpl.getInstance().newOperation( RWOperation.TYPE_OBJECT_PROPERTY_DELETE_AT)); + assertNotNull(OperationFactoryImpl.getInstance().newOperation( + RWOperation.TYPE_ATTACHMENT_ADD)); // assertNotNull(OperationFactoryImpl.getInstance().newOperation( - // RWOperation.TYPE_ATTACHMENT_ADD)); - // assertNotNull(OperationFactoryImpl.getInstance().newOperation( // RWOperation.TYPE_ATTACHMENT_SET)); // assertNotNull(OperationFactoryImpl.getInstance().newOperation( // RWOperation.TYPE_ATTACHMENT_DELETE)); @@ -121,6 +122,20 @@ root.appendChild(operation.toXml(doc)); root.appendChild(doc.createTextNode("\n")); + operation = + OperationFactoryImpl.getInstance().newOperation( + RWOperation.TYPE_OBJECT_PROPERTY_DELETE_AT); + operation.deleteFromProperty("XWiki.Class", 0, "property", "deleted text", + new PositionImpl(2, 0)); + root.appendChild(operation.toXml(doc)); + root.appendChild(doc.createTextNode("\n")); + + operation = + OperationFactoryImpl.getInstance().newOperation(RWOperation.TYPE_ATTACHMENT_ADD); + operation.addAttachment(new ByteArrayInputStream("hello".getBytes()), "file", "XWiki.Me"); + root.appendChild(operation.toXml(doc)); + root.appendChild(doc.createTextNode("\n")); + DOMImplementationLS ls = (DOMImplementationLS) doc.getImplementation(); System.out.println(ls.createLSSerializer().writeToString(doc)); } _______________________________________________ notifications mailing list notifications@xwiki.org http://lists.xwiki.org/mailman/listinfo/notifications