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 2012/03/10 22:44:04 UTC
svn commit: r1299278 - in
/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit:
state/PersistentNodeState.java utils/Function0.java
Author: mduerig
Date: Sat Mar 10 21:44:04 2012
New Revision: 1299278
URL: http://svn.apache.org/viewvc?rev=1299278&view=rev
Log:
Microkernel based prototype of JCR implementation (WIP)
- memoize properties
Added:
jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java
Modified:
jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java
Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java?rev=1299278&r1=1299277&r2=1299278&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java Sat Mar 10 21:44:04 2012
@@ -15,14 +15,29 @@ import org.apache.jackrabbit.oak.model.P
import org.apache.jackrabbit.spi.commons.iterator.Iterators;
import org.apache.jackrabbit.spi.commons.iterator.Predicate;
import org.apache.jackrabbit.spi.commons.iterator.Transformer;
+import org.apache.jackrabbit.utils.Function0;
import java.util.Iterator;
import java.util.Map.Entry;
+import java.util.Set;
public class PersistentNodeState extends AbstractNodeState {
private final MicroKernel microkernel;
private final String revision;
private final Path path;
+
+ private final Function0<JsonObject> properties = new Function0<JsonObject>() {
+ private JsonObject properties;
+
+ @Override
+ public JsonObject apply() {
+ if (properties == null) {
+ String json = microkernel.getNodes(path.toMkPath(), revision, 0, 0, -1, null);
+ properties = FullJsonParser.parseObject(new UnescapingJsonTokenizer(json));
+ }
+ return properties;
+ }
+ };
public PersistentNodeState(MicroKernel microkernel, String revision, Path path) {
this.microkernel = microkernel;
@@ -32,24 +47,23 @@ public class PersistentNodeState extends
@Override
public PropertyState getProperty(String name) {
- JsonObject jsonObject = getPropertiesAsJson();
- return createPropertyState(name, jsonObject.get(name));
+ return createPropertyState(name, properties.apply().get(name));
}
@Override
public Iterable<PropertyState> getProperties() {
return new Iterable<PropertyState>() {
- private final JsonObject jsonObject = getPropertiesAsJson();
+ private final Set<Entry<String, JsonValue>> props = properties.apply().value().entrySet();
@Override
public Iterator<PropertyState> iterator() {
- return Iterators.transformIterator(jsonObject.value().entrySet().iterator(),
- new Transformer<Entry<String, JsonValue>, PropertyState>() {
- @Override
- public PropertyState transform(Entry<String, JsonValue> entry) {
- return createPropertyState(entry.getKey(), entry.getValue());
- }
- });
+ return Iterators.transformIterator(props.iterator(),
+ new Transformer<Entry<String, JsonValue>, PropertyState>() {
+ @Override
+ public PropertyState transform(Entry<String, JsonValue> entry) {
+ return createPropertyState(entry.getKey(), entry.getValue());
+ }
+ });
}
};
}
@@ -66,8 +80,7 @@ public class PersistentNodeState extends
@Override
public long getChildNodeCount() {
- JsonObject jsonObject = getPropertiesAsJson();
- JsonValue count = jsonObject.get(":childNodeCount");
+ JsonValue count = properties.apply().get(":childNodeCount");
long c = toLong(count);
if (c < 0) {
return super.getChildNodeCount();
@@ -109,11 +122,6 @@ public class PersistentNodeState extends
//------------------------------------------< private >---
- private JsonObject getPropertiesAsJson() {
- String json = microkernel.getNodes(path.toMkPath(), revision, 0, 0, -1, null);
- return FullJsonParser.parseObject(new UnescapingJsonTokenizer(json));
- }
-
private JsonObject getNodesAsJson(long offset, long length) {
// fixme: microkernel should also use long for length
String json = microkernel.getNodes(path.toMkPath(), revision, 1, offset, (int) length, null);
Added: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java?rev=1299278&view=auto
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java (added)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java Sat Mar 10 21:44:04 2012
@@ -0,0 +1,5 @@
+package org.apache.jackrabbit.utils;
+
+public interface Function0<T> {
+ T apply();
+}