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/02/13 16:03:15 UTC

svn commit: r1243551 - in /jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state: ChangeTree.java NodeState.java

Author: mduerig
Date: Mon Feb 13 15:03:15 2012
New Revision: 1243551

URL: http://svn.apache.org/viewvc?rev=1243551&view=rev
Log:
Microkernel based prototype of JCR implementation (WIP)
- refactor property handling in transient space 

Modified:
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java?rev=1243551&r1=1243550&r2=1243551&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java Mon Feb 13 15:03:15 2012
@@ -22,6 +22,7 @@ package org.apache.jackrabbit.state;
 import org.apache.commons.collections.map.ReferenceMap;
 import org.apache.jackrabbit.Path;
 import org.apache.jackrabbit.json.JsonValue;
+import org.apache.jackrabbit.json.JsonValue.JsonAtom;
 import org.apache.jackrabbit.spi.commons.iterator.Iterators;
 import org.apache.jackrabbit.spi.commons.iterator.Predicate;
 
@@ -229,7 +230,8 @@ public class ChangeTree {
 
         /**
          * @param name
-         * @return {@code true} iff this node has a property with the given {@code name}.
+         * @return {@code true} iff a property with the given name has been added,
+         * removed or modified.
          */
         public boolean hasProperty(String name) {
             return properties.containsKey(name);
@@ -237,25 +239,18 @@ public class ChangeTree {
 
         /**
          * @param name
-         * @return  the property with the given {@code name} or {@code null} if the property
-         * has been removed ({@link #hasProperty(String)} {@code true}) or does not exist
-         * ({@link #hasProperty(String)} {@code false}).
+         * @return  the value of the property with the given {@code name}, JSON {@code null} if the
+         * property has been removed or {@code null} if if does not exist.
          */
         public JsonValue getProperty(String name) {
             return properties.get(name);
         }
 
         /**
-         * @return  an iterator of all added/modified properties.
+         * @return  an iterator of all added, removed and modified properties.
          */
         public Iterator<Entry<String, JsonValue>> getProperties() {
-            return Iterators.filterIterator(properties.entrySet().iterator(),
-                new Predicate<Entry<String, JsonValue>>() {
-                    @Override
-                    public boolean evaluate(Entry<String, JsonValue> entry) {
-                        return entry.getValue() != null;
-                    }
-            });
+            return properties.entrySet().iterator();
         }
 
         /**
@@ -323,12 +318,16 @@ public class ChangeTree {
 
         /**
          * Set the property with the given {@code name} to {@code value} or remove the
-         * property if {@code value} is {@code null}.
+         * property if {@code value} is {@code null} or JSON {@code null}.
          * @param name
          * @param value
          */
         public void setValue(String name, JsonValue value) {
-            if (value == null && properties.containsKey(name) && properties.get(name) != null) {
+            if (value == null) {
+                value = JsonAtom.NULL;
+            }
+            
+            if (value.isNull() && properties.containsKey(name) && properties.get(name) != JsonAtom.NULL) {
                 properties.remove(name);
             }
             else {

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java?rev=1243551&r1=1243550&r2=1243551&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/NodeState.java Mon Feb 13 15:03:15 2012
@@ -23,6 +23,7 @@ import org.apache.jackrabbit.Path;
 import org.apache.jackrabbit.SessionImpl.Context;
 import org.apache.jackrabbit.json.FullJsonParser;
 import org.apache.jackrabbit.json.JsonValue;
+import org.apache.jackrabbit.json.JsonValue.JsonAtom;
 import org.apache.jackrabbit.json.JsonValue.JsonObject;
 import org.apache.jackrabbit.json.UnescapingJsonTokenizer;
 import org.apache.jackrabbit.mk.api.MicroKernel;
@@ -147,11 +148,12 @@ public class NodeState {
     }
 
     public boolean isPropertyNew(String name) {
-        return nodeDelta.getProperty(name) != null && getPersistedPropertyValue(name) == null;
+        JsonValue value = nodeDelta.getProperty(name);
+        return value != null && !value.isNull() && getPersistedPropertyValue(name) == null;
     }
 
     public boolean isPropertyModified(String name) {
-        return nodeDelta.getProperty(name) != null;
+        return nodeDelta.hasProperty(name);
     }
 
     public void removeProperty(String name) {
@@ -235,14 +237,13 @@ public class NodeState {
     }
 
     private JsonValue getPropertyValueOrNull(String name) {
-        if (nodeDelta.hasProperty(name)) {
-            JsonValue value = nodeDelta.getProperty(name);
-            if (value != null) {
-                return value;
-            }
+        JsonValue value = nodeDelta.getProperty(name);
+        if (value == null) {
+            return getPersistedPropertyValue(name);
+        }
+        else {
+            return value == JsonAtom.NULL ? null : value;
         }
-
-        return getPersistedPropertyValue(name);
     }
 
     private JsonValue getPersistedPropertyValue(String name) {