Author: chetanm
Date: Thu Dec 21 06:32:06 2017
New Revision: 1818884

URL: http://svn.apache.org/viewvc?rev=1818884&view=rev
Log:
OAK-7102 - Refactor DocumentIndexer logic to enable different sort approaches

Add method to create line with path and json nodestate

Modified:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java
    
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java?rev=1818884&r1=1818883&r2=1818884&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriter.java
 Thu Dec 21 06:32:06 2017
@@ -19,6 +19,9 @@
 
 package org.apache.jackrabbit.oak.index.indexer.document.flatfile;
 
+import java.util.List;
+
+import com.google.common.base.Joiner;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
 import org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntry;
@@ -34,6 +37,7 @@ public class NodeStateEntryWriter {
     private static final String DELIMITER = "|";
     private final JsopBuilder jw = new JsopBuilder();
     private final JsonSerializer serializer;
+    private final Joiner pathJoiner = Joiner.on('/');
 
     //TODO Possible optimizations
     //1. Compression
@@ -44,19 +48,27 @@ public class NodeStateEntryWriter {
     }
 
     public String toString(NodeStateEntry e) {
-        String text = asText(e.getNodeState());
-        StringBuilder sb = new StringBuilder(text.length() + 
e.getPath().length() + 1);
-        sb.append(e.getPath())
+        return toString(e.getPath(), asJson(e.getNodeState()));
+    }
+
+    public String toString(String path, String nodeStateAsJson) {
+        StringBuilder sb = new StringBuilder(nodeStateAsJson.length() + 
path.length() + 1);
+        sb.append(path)
                 .append(DELIMITER)
-                .append(text);
+                .append(nodeStateAsJson);
         return sb.toString();
     }
 
-    private String asText(NodeState nodeState) {
-        return asJson(nodeState);
+    public String toString(List<String> pathElements, String nodeStateAsJson) {
+        int pathStringSize = 
pathElements.stream().mapToInt(String::length).sum();
+        StringBuilder sb = new StringBuilder(nodeStateAsJson.length() + 
pathStringSize + pathElements.size() + 1);
+        sb.append('/');
+        pathJoiner.appendTo(sb, pathElements);
+        sb.append(DELIMITER).append(nodeStateAsJson);
+        return sb.toString();
     }
 
-    private String asJson(NodeState nodeState) {
+    public String asJson(NodeState nodeState) {
         jw.resetWriter();
         jw.object();
         for (PropertyState ps : nodeState.getProperties()) {

Modified: 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java?rev=1818884&r1=1818883&r2=1818884&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/NodeStateEntryWriterTest.java
 Thu Dec 21 06:32:06 2017
@@ -20,6 +20,7 @@
 package org.apache.jackrabbit.oak.index.indexer.document.flatfile;
 
 import java.util.Arrays;
+import java.util.List;
 
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.index.indexer.document.NodeStateEntry;
@@ -29,6 +30,9 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.junit.Test;
 
+import static com.google.common.collect.ImmutableList.copyOf;
+import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
+import static 
org.apache.jackrabbit.oak.index.indexer.document.flatfile.NodeStateEntryWriter.getPath;
 import static 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -97,4 +101,44 @@ public class NodeStateEntryWriterTest {
         assertFalse(r1.getNodeState().hasProperty(":childOrder"));
     }
 
+    @Test
+    public void pathElements(){
+        NodeStateEntryWriter nw = new NodeStateEntryWriter(blobStore);
+        NodeBuilder b1 = EMPTY_NODE.builder();
+        b1.setProperty("foo", "bar");
+
+        NodeStateEntry e1 = new NodeStateEntry(b1.getNodeState(), "/a/b/c/d");
+
+        String json = nw.asJson(e1.getNodeState());
+        List<String> pathElements = copyOf(elements(e1.getPath()));
+
+        String line = nw.toString(pathElements, json);
+
+        NodeStateEntryReader nr = new NodeStateEntryReader(blobStore);
+        NodeStateEntry r1 = nr.read(line);
+        assertTrue(r1.getNodeState().hasProperty("foo"));
+        assertEquals("/a/b/c/d", r1.getPath());
+
+    }
+
+    @Test
+    public void pathElements_root(){
+        NodeStateEntryWriter nw = new NodeStateEntryWriter(blobStore);
+        NodeBuilder b1 = EMPTY_NODE.builder();
+        b1.setProperty("foo", "bar");
+
+        NodeStateEntry e1 = new NodeStateEntry(b1.getNodeState(), "/");
+
+        String json = nw.asJson(e1.getNodeState());
+        List<String> pathElements = copyOf(elements(e1.getPath()));
+
+        String line = nw.toString(pathElements, json);
+
+        NodeStateEntryReader nr = new NodeStateEntryReader(blobStore);
+        NodeStateEntry r1 = nr.read(line);
+        assertTrue(r1.getNodeState().hasProperty("foo"));
+        assertEquals("/", r1.getPath());
+
+    }
+
 }
\ No newline at end of file


Reply via email to