You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/06/09 15:25:10 UTC
svn commit: r1133863 - in /jackrabbit/sandbox/spi2microkernel/src:
main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java
Author: mduerig
Date: Thu Jun 9 13:25:10 2011
New Revision: 1133863
URL: http://svn.apache.org/viewvc?rev=1133863&view=rev
Log:
spi2microkernel prototype (WIP)
write support: remove (hacking the hacks....)
Modified:
jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java
Modified: jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java?rev=1133863&r1=1133862&r2=1133863&view=diff
==============================================================================
--- jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java (original)
+++ jackrabbit/sandbox/spi2microkernel/src/main/java/org/apache/jackrabbit/spi2microkernel/RepositoryServiceImpl.java Thu Jun 9 13:25:10 2011
@@ -55,7 +55,6 @@ import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import java.io.IOException;
-import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -371,7 +370,7 @@ public class RepositoryServiceImpl exten
private class CommitBuilder implements Batch {
private final SessionInfo sessionInfo;
- private final StringBuilder sb = new StringBuilder();
+ private final StringBuilder jsop = new StringBuilder();
public CommitBuilder(SessionInfo sessionInfo) {
this.sessionInfo = sessionInfo;
@@ -379,12 +378,12 @@ public class RepositoryServiceImpl exten
public void addNode(NodeId parentId, Name nodeName, Name nodetypeName, String uuid) throws RepositoryException {
try {
- StringWriter sw = new StringWriter();
- JsonBuilder.create(sw)
+ StringBuilder sb = new StringBuilder();
+ JsonBuilder.create(sb)
.value(Paths.translateQName(NameConstants.JCR_PRIMARYTYPE), Paths.translateQName(nodetypeName))
.build();
- sb.append('+').append(target(parentId, nodeName)).append(" : ").append(sw.toString()).append('\n');
+ jsop.append('+').append(target(parentId, nodeName)).append(" : ").append(sb.toString()).append('\n');
}
catch (IOException e) {
throw new RepositoryException(e);
@@ -392,24 +391,35 @@ public class RepositoryServiceImpl exten
}
public void addProperty(NodeId parentId, Name propertyName, QValue value) throws RepositoryException {
- addProperty(parentId, propertyName, Values.create(value));
+ setProperty(parentId, propertyName, Values.create(value));
}
public void addProperty(NodeId parentId, Name propertyName, QValue[] values) throws RepositoryException {
- addProperty(parentId, propertyName, Values.create(values));
+ setProperty(parentId, propertyName, Values.create(values));
}
public void setValue(PropertyId propertyId, QValue value) throws RepositoryException {
- addProperty(propertyId.getParentId(), propertyId.getName(), Values.create(value));
+ setProperty(propertyId.getParentId(), propertyId.getName(), Values.create(value));
}
public void setValue(PropertyId propertyId, QValue[] values) throws RepositoryException {
- addProperty(propertyId.getParentId(), propertyId.getName(), Values.create(values));
+ setProperty(propertyId.getParentId(), propertyId.getName(), Values.create(values));
}
public void remove(ItemId itemId) throws RepositoryException {
- // todo implement remove
- throw new UnsupportedRepositoryOperationException("remove");
+ if (itemId.denotesNode()) {
+ NodeId nodeId = (NodeId) itemId;
+ if (nodeId.getPath().denotesRoot()) {
+ throw new RepositoryException("Cannot remove root node");
+ }
+
+ String path = target(nodeId);
+ jsop.append('-').append(path).append(" : \n");
+ }
+ else {
+ PropertyId propertyId = (PropertyId) itemId;
+ setProperty(propertyId.getParentId(), propertyId.getName(), "null");
+ }
}
public void reorderNodes(NodeId parentId, NodeId srcNodeId, NodeId beforeNodeId) throws RepositoryException {
@@ -434,18 +444,23 @@ public class RepositoryServiceImpl exten
public void commit() throws RepositoryException {
String rev = getRevision(sessionInfo);
- rev = microKernel.commit("/", sb.toString(), rev);
+ jsop.deleteCharAt(jsop.length() - 1); // remove training new line. DiffParser messes up otherwise
+ rev = microKernel.commit("/", jsop.toString(), rev);
setRevision(sessionInfo, rev);
}
+ private String target(NodeId nodeId) throws RepositoryException {
+ return PathUtil.relativize("/", Paths.translateQPath(sessionInfo.getWorkspaceName(), nodeId.getPath()));
+ }
+
private String target(NodeId parentId, Name itemName) throws RepositoryException {
String path = Paths.translateQPath(sessionInfo.getWorkspaceName(), parentId.getPath());
String name = Paths.translateQName(itemName);
return PathUtil.concat(PathUtil.relativize("/", path), name);
}
- private void addProperty(NodeId parentId, Name propertyName, String jsonValue) throws RepositoryException {
- sb.append('^').append(target(parentId, propertyName)).append(" : ").append(jsonValue);
+ private void setProperty(NodeId parentId, Name propertyName, String jsonValue) throws RepositoryException {
+ jsop.append('^').append(target(parentId, propertyName)).append(" : ").append(jsonValue).append('\n');
}
}
Modified: jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java?rev=1133863&r1=1133862&r2=1133863&view=diff
==============================================================================
--- jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java (original)
+++ jackrabbit/sandbox/spi2microkernel/src/test/java/org/apache/jackrabbit/spi2microkernel/RepositoryTest.java Thu Jun 9 13:25:10 2011
@@ -333,7 +333,54 @@ public class RepositoryTest {
}
}
- @Ignore // todo implement in RepositoryService
+ @Test
+ public void nullProperty() throws RepositoryException {
+ Node parentNode = getNode(testPath);
+ parentNode.setProperty("newProperty", "some value");
+ parentNode.getSession().save();
+
+ Session session2 = getRepository().login();
+ try {
+ session2.getProperty(testPath + "/newProperty").setValue((String) null);
+ session2.save();
+ }
+ finally {
+ session2.logout();
+ }
+
+ Session session3 = getRepository().login();
+ try {
+ assertFalse(session3.propertyExists(testPath + "/newProperty"));
+ }
+ finally {
+ session3.logout();
+ }
+ }
+
+ @Test
+ public void removeProperty() throws RepositoryException {
+ Node parentNode = getNode(testPath);
+ parentNode.setProperty("newProperty", "some value");
+ parentNode.getSession().save();
+
+ Session session2 = getRepository().login();
+ try {
+ session2.getProperty(testPath + "/newProperty").remove();
+ session2.save();
+ }
+ finally {
+ session2.logout();
+ }
+
+ Session session3 = getRepository().login();
+ try {
+ assertFalse(session3.propertyExists(testPath + "/newProperty"));
+ }
+ finally {
+ session3.logout();
+ }
+ }
+
@Test
public void removeNode() throws RepositoryException {
Node parentNode = getNode(testPath);
@@ -341,9 +388,21 @@ public class RepositoryTest {
parentNode.getSession().save();
Session session2 = getRepository().login();
- session2.getNode(testPath + "/newNode").remove();
- session2.save();
- session2.logout();
+ try {
+ session2.getNode(testPath + "/newNode").remove();
+ session2.save();
+ }
+ finally {
+ session2.logout();
+ }
+
+ Session session3 = getRepository().login();
+ try {
+ assertFalse(session3.nodeExists(testPath + "/newNode"));
+ }
+ finally {
+ session3.logout();
+ }
}
//------------------------------------------< private >---