Author: sdumitriu
Date: 2008-01-02 18:11:21 +0100 (Wed, 02 Jan 2008)
New Revision: 6599
Added:
xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/ClassPropertyDeleteOperation.java
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/test/java/org/xwiki/platform/ClassPropertyOperationsTest.java
Log:
XWIKI-1977: Create a patchservice data model
Add the ClassPropertyDeleteOperation implementation.
Added:
xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/ClassPropertyDeleteOperation.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/ClassPropertyDeleteOperation.java
(rev 0)
+++
xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/ClassPropertyDeleteOperation.java
2008-01-02 17:11:21 UTC (rev 6599)
@@ -0,0 +1,105 @@
+package org.xwiki.platform.patchservice.impl;
+
+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.XWikiException;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.objects.classes.BaseClass;
+import com.xpn.xwiki.objects.classes.PropertyClass;
+
+public class ClassPropertyDeleteOperation extends AbstractOperationImpl
implements RWOperation
+{
+ public static final String PROPERTY_NAME_ATTRIBUTE_NAME = "name";
+
+ private String propertyName;
+
+ static {
+
OperationFactoryImpl.registerTypeProvider(Operation.TYPE_CLASS_PROPERTY_DELETE,
+ ClassPropertyDeleteOperation.class);
+ }
+
+ public ClassPropertyDeleteOperation()
+ {
+ this.setType(Operation.TYPE_CLASS_PROPERTY_DELETE);
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public void apply(XWikiDocument doc) throws XWikiException
+ {
+ BaseClass bclass = doc.getxWikiClass();
+ PropertyClass prop = (PropertyClass) bclass.get(propertyName);
+ if (prop != null) {
+ bclass.removeField(propertyName);
+ } else {
+ throw new XWikiException(XWikiException.MODULE_XWIKI_PLUGINS,
+ XWikiException.ERROR_XWIKI_UNKNOWN,
+ "Invalid property name: " + this.propertyName);
+ }
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public boolean deleteType(String propertyName)
+ {
+ this.propertyName = propertyName;
+ return true;
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public void fromXml(Element e) throws XWikiException
+ {
+ this.propertyName = e.getAttribute(PROPERTY_NAME_ATTRIBUTE_NAME);
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public Element toXml(Document doc) throws XWikiException
+ {
+ Element xmlNode = doc.createElement(AbstractOperationImpl.NODE_NAME);
+ xmlNode.setAttribute(AbstractOperationImpl.TYPE_ATTRIBUTE_NAME,
this.getType());
+ xmlNode.setAttribute(PROPERTY_NAME_ATTRIBUTE_NAME, propertyName);
+ return xmlNode;
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public boolean equals(Object other)
+ {
+ try {
+ ClassPropertyDeleteOperation otherOperation =
(ClassPropertyDeleteOperation) other;
+ return otherOperation.propertyName.equals(this.propertyName);
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public int hashCode()
+ {
+ return new HashCodeBuilder(13,
17).append(this.propertyName).toHashCode();
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public String toString()
+ {
+ return this.getType() + ": [" + this.propertyName + "]";
+ }
+}
Property changes on:
xwiki-platform/core/trunk/xwiki-patchservice/src/main/java/org/xwiki/platform/patchservice/impl/ClassPropertyDeleteOperation.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-02 16:59:09 UTC (rev 6598)
+++
xwiki-platform/core/trunk/xwiki-patchservice/src/main/resources/META-INF/services/org.xwiki.platform.patchservice.api.RWOperation
2008-01-02 17:11:21 UTC (rev 6599)
@@ -2,3 +2,4 @@
org.xwiki.platform.patchservice.impl.ContentDeleteOperation
org.xwiki.platform.patchservice.impl.PropertySetOperation
org.xwiki.platform.patchservice.impl.ClassPropertySetOperation
+org.xwiki.platform.patchservice.impl.ClassPropertyDeleteOperation
Modified:
xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/ClassPropertyOperationsTest.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/ClassPropertyOperationsTest.java
2008-01-02 16:59:09 UTC (rev 6598)
+++
xwiki-platform/core/trunk/xwiki-patchservice/src/test/java/org/xwiki/platform/ClassPropertyOperationsTest.java
2008-01-02 17:11:21 UTC (rev 6599)
@@ -26,7 +26,7 @@
Document domDoc;
XWikiDocument doc;
-
+
BaseClass bclass;
protected void setUp()
@@ -96,7 +96,8 @@
((PropertyClass) bclass.get("prop1")).setPrettyName("new Property 1");
RWOperation operation = getOperation((PropertyClass)
bclass.get("prop1"), false);
operation.apply(doc);
- assertEquals("new Property 1", ((PropertyClass)
doc.getxWikiClass().get("prop1")).getPrettyName());
+ assertEquals("new Property 1", ((PropertyClass)
doc.getxWikiClass().get("prop1"))
+ .getPrettyName());
}
public void testXmlRoundtripPropertySetOperation() throws XWikiException
@@ -108,8 +109,80 @@
assertEquals(loadedOperation, operation);
}
- private RWOperation getOperation(PropertyClass property, boolean create)
throws XWikiException
+ public void testApplyPropertyDeleteOperation() throws XWikiException
{
+ testApplyPropertyAddOperation();
+ RWOperation operation =
+ OperationFactoryImpl.getInstance().newOperation(
+ RWOperation.TYPE_CLASS_PROPERTY_DELETE);
+ operation.deleteType("prop1");
+ operation.apply(doc);
+ assertEquals(1, doc.getxWikiClass().getProperties().length);
+ assertNull(doc.getxWikiClass().get("prop1"));
+ assertNotNull(doc.getxWikiClass().get("prop2"));
+ }
+
+ public void testApplyInvalidPropertyDeleteOperation() throws XWikiException
+ {
+ RWOperation operation =
+ OperationFactoryImpl.getInstance().newOperation(
+ RWOperation.TYPE_CLASS_PROPERTY_DELETE);
+ operation.deleteType("prop3");
+ try {
+ operation.apply(doc);
+ assertTrue(false);
+ } catch (XWikiException ex) {
+ assertTrue(true);
+ }
+ assertNull(doc.getxWikiClass().get("prop3"));
+ }
+
+ public void testXmlRoundtripPropertyDeleteOperation() throws XWikiException
+ {
+ RWOperation operation =
+ OperationFactoryImpl.getInstance().newOperation(
+ RWOperation.TYPE_CLASS_PROPERTY_DELETE);
+ operation.deleteType("prop1");
+ Element e = operation.toXml(domDoc);
+ Operation loadedOperation =
OperationFactoryImpl.getInstance().loadOperation(e);
+ assertEquals(loadedOperation, operation);
+ }
+
+ public void testConsecutiveClassOperations() throws XWikiException
+ {
+ bclass.addTextField("prop1", "Property 1", 30);
+ RWOperation operation = getOperation((PropertyClass)
bclass.get("prop1"), true);
+ operation.apply(doc);
+ assertEquals(1, doc.getxWikiClass().getProperties().length);
+ assertNotNull(doc.getxWikiClass().getField("prop1"));
+ assertEquals("prop1", doc.getxWikiClass().get("prop1").getName());
+
+ ((PropertyClass) bclass.get("prop1")).setPrettyName("new Property 1");
+ operation = getOperation((PropertyClass) bclass.get("prop1"), false);
+ operation.apply(doc);
+ assertEquals("new Property 1", ((PropertyClass)
doc.getxWikiClass().get("prop1"))
+ .getPrettyName());
+ assertEquals(1, doc.getxWikiClass().getProperties().length);
+
+ bclass.addBooleanField("prop2", "Property 2", "yesno");
+ operation = getOperation((PropertyClass) bclass.get("prop2"), true);
+ operation.apply(doc);
+ assertEquals(2, doc.getxWikiClass().getProperties().length);
+
+ operation =
+ OperationFactoryImpl.getInstance().newOperation(
+ RWOperation.TYPE_CLASS_PROPERTY_DELETE);
+ operation.deleteType("prop1");
+ assertEquals(2, doc.getxWikiClass().getProperties().length);
+ operation.apply(doc);
+ assertEquals(1, doc.getxWikiClass().getProperties().length);
+ assertNotNull(doc.getxWikiClass().getField("prop2"));
+ assertNull(doc.getxWikiClass().getField("prop1"));
+ }
+
+ private RWOperation getOperation(PropertyClass property, boolean create)
+ throws XWikiException
+ {
String type = property.getClass().getCanonicalName();
Map config = new HashMap();
for (Iterator it2 = property.getFieldList().iterator();
it2.hasNext();) {
@@ -117,7 +190,9 @@
config.put(pr.getName(), pr.getValue());
}
RWOperation operation =
- OperationFactoryImpl.getInstance().newOperation(create ?
RWOperation.TYPE_CLASS_PROPERTY_ADD : RWOperation.TYPE_CLASS_PROPERTY_CHANGE);
+ OperationFactoryImpl.getInstance().newOperation(
+ create ? RWOperation.TYPE_CLASS_PROPERTY_ADD
+ : RWOperation.TYPE_CLASS_PROPERTY_CHANGE);
if (create) {
operation.createType(type, config);
} else {
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications