You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2009/05/28 10:24:58 UTC
svn commit: r779476 - in
/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit:
server/remoting/davex/JsonDiffHandler.java
webdav/jcr/DefaultItemCollection.java
Author: angela
Date: Thu May 28 08:24:58 2009
New Revision: 779476
URL: http://svn.apache.org/viewvc?rev=779476&view=rev
Log:
JCR-2003: JCR2SPI / SPI: Add support for JCR 2.0
- initial implementation for Node.setPrimaryType. untested server-side part (spi2dav/spi2davex)
Modified:
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java
jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java?rev=779476&r1=779475&r2=779476&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonDiffHandler.java Thu May 28 08:24:58 2009
@@ -106,6 +106,8 @@
if (JcrConstants.JCR_MIXINTYPES.equals(propName)) {
setMixins(parent, extractValuesFromRequest(targetPath));
+ } else if (JcrConstants.JCR_PRIMARYTYPE.equals(propName)) {
+ setPrimaryType(parent, extractValuesFromRequest(targetPath));
} else {
if (diffValue == null || diffValue.length() == 0) {
// single valued property with value present in multipart.
@@ -347,6 +349,17 @@
return n;
}
+ private static void setPrimaryType(Node n, Value[] values) throws RepositoryException, DiffException {
+ if (values.length == 1) {
+ String ntName = values[0].getString();
+ if (!ntName.equals(n.getPrimaryNodeType().getName())) {
+ n.setPrimaryType(ntName);
+ } // else: same primaryType as before -> nothing to do.
+ } else {
+ throw new DiffException("Invalid diff: jcr:primarytype cannot have multiple values, nor can it's value be removed.");
+ }
+ }
+
private static void setMixins(Node n, Value[] values) throws RepositoryException {
if (values.length == 0) {
// remove all mixins
Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java?rev=779476&r1=779475&r2=779476&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java Thu May 28 08:24:58 2009
@@ -226,8 +226,9 @@
if (!exists()) {
throw new DavException(DavServletResponse.SC_NOT_FOUND);
}
- if (property.getName().equals(JCR_MIXINNODETYPES)) {
- Node n = (Node)item;
+ DavPropertyName propName = property.getName();
+ if (JCR_MIXINNODETYPES.equals(propName)) {
+ Node n = (Node) item;
try {
NodeType[] existingMixin = n.getMixinNodeTypes();
NodeTypeProperty mix = new NodeTypeProperty(property);
@@ -252,8 +253,23 @@
} catch (RepositoryException e) {
throw new JcrDavException(e);
}
+ } else if (JCR_PRIMARYNODETYPE.equals(propName)) {
+ Node n = (Node) item;
+ try {
+ NodeTypeProperty ntProp = new NodeTypeProperty(property);
+ Set names = ntProp.getNodeTypeNames();
+ if (names.size() == 1) {
+ String ntName = names.iterator().next().toString();
+ n.setPrimaryType(ntName);
+ } else {
+ // only a single node type can be primary node type.
+ throw new DavException(DavServletResponse.SC_BAD_REQUEST);
+ }
+ } catch (RepositoryException e) {
+ throw new JcrDavException(e);
+ }
} else {
- // all props except for mixinnodetypes are read-only
+ // all props except for mixinnodetypes and primaryType are read-only
throw new DavException(DavServletResponse.SC_CONFLICT);
}
}