You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/03/22 18:28:23 UTC
svn commit: r1303905 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
Author: mduerig
Date: Thu Mar 22 17:28:23 2012
New Revision: 1303905
URL: http://svn.apache.org/viewvc?rev=1303905&view=rev
Log:
OAK-38: KernelNodeState should handle multi valued properties
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java?rev=1303905&r1=1303904&r2=1303905&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java Thu Mar 22 17:28:23 2012
@@ -18,12 +18,6 @@
*/
package org.apache.jackrabbit.oak.kernel;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.api.MicroKernelException;
import org.apache.jackrabbit.mk.json.JsopReader;
@@ -33,6 +27,12 @@ import org.apache.jackrabbit.mk.model.Ch
import org.apache.jackrabbit.mk.model.NodeState;
import org.apache.jackrabbit.mk.model.PropertyState;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
/**
* Basic {@link NodeState} implementation based on the {@link MicroKernel}
* interface. This class makes an attempt to load data lazily.
@@ -50,11 +50,11 @@ class KernelNodeState extends AbstractNo
private final String revision;
- private Map<String, PropertyState> properties = null;
+ private Map<String, PropertyState> properties;
private long childNodeCount = -1;
- private Map<String, NodeState> childNodes = null; // TODO: WeakReference?
+ private Map<String, NodeState> childNodes; // TODO: WeakReference?
public KernelNodeState(MicroKernel kernel, String path, String revision) {
this.kernel = kernel;
@@ -79,18 +79,23 @@ class KernelNodeState extends AbstractNo
Long.valueOf(reader.read(JsopTokenizer.NUMBER));
} else if (reader.matches('{')) {
reader.read('}');
- String childPath = path + "/" + name;
+ String childPath = path + '/' + name;
if ("/".equals(path)) {
- childPath = "/" + name;
+ childPath = '/' + name;
}
childNodes.put(name, new KernelNodeState(
kernel, childPath, revision));
- } else if (reader.matches(JsopTokenizer.NUMBER)) {
+ } else if (reader.matches(JsopTokenizer.NUMBER) ||
+ reader.matches(JsopTokenizer.TRUE) ||
+ reader.matches(JsopTokenizer.FALSE) ||
+ reader.matches(JsopTokenizer.STRING)) {
properties.put(name, new KernelPropertyState(
name, reader.getToken()));
- } else {
+ } else if (reader.matches('[')) {
properties.put(name, new KernelPropertyState(
- name, reader.readString()));
+ name, readArray(reader)));
+ } else {
+ throw new IllegalArgumentException("Unexpected token: " + reader.getToken());
}
} while (reader.matches(','));
reader.read('}');
@@ -195,10 +200,31 @@ class KernelNodeState extends AbstractNo
private String getChildPath(String name) {
if ("/".equals(path)) {
- return "/" + name;
+ return '/' + name;
} else {
- return path + "/" + name;
+ return path + '/' + name;
+ }
+ }
+
+ private static String readArray(JsopReader reader) {
+ StringBuilder sb = new StringBuilder("[");
+ String sep = "";
+ while (!reader.matches(']')) {
+ if (reader.matches(JsopTokenizer.NUMBER) ||
+ reader.matches(JsopTokenizer.TRUE) ||
+ reader.matches(JsopTokenizer.FALSE) ||
+ reader.matches(JsopTokenizer.STRING)) {
+ sb.append(sep);
+ sep = ",";
+ sb.append(reader.getToken());
+ }
+ else {
+ throw new IllegalArgumentException("Unexpected token: " + reader.getToken());
+ }
+ reader.matches(',');
}
+ sb.append(']');
+ return sb.toString();
}
}
\ No newline at end of file