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 ch...@apache.org on 2017/07/26 05:26:49 UTC

svn commit: r1803017 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdater.java test/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdaterTest.java

Author: chetanm
Date: Wed Jul 26 05:26:49 2017
New Revision: 1803017

URL: http://svn.apache.org/viewvc?rev=1803017&view=rev
Log:
OAK-6471 - Support adding or updating index definitions via oak-run

Handle the :childOrder property update

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdater.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdaterTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdater.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdater.java?rev=1803017&r1=1803016&r2=1803017&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdater.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdater.java Wed Jul 26 05:26:49 2017
@@ -28,12 +28,14 @@ import com.google.common.base.Charsets;
 import com.google.common.collect.Maps;
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.commons.json.JsopReader;
 import org.apache.jackrabbit.oak.commons.json.JsopTokenizer;
 import org.apache.jackrabbit.oak.json.Base64BlobSerializer;
 import org.apache.jackrabbit.oak.json.JsonDeserializer;
 import org.apache.jackrabbit.oak.json.JsopDiff;
+import org.apache.jackrabbit.oak.plugins.tree.TreeFactory;
 import org.apache.jackrabbit.oak.spi.state.ApplyDiff;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -92,8 +94,13 @@ public class IndexDefinitionUpdater {
         }
 
 
+
         NodeBuilder indexBuilderParent = childBuilder(rootBuilder, parentPath);
-        //TODO Need to update parent :childNode list if parent has orderable children
+
+        //Use Tree api to ensure that :childOrder property is properly updated
+        Tree t = TreeFactory.createTree(indexBuilderParent);
+        t.addChild(indexNodeName);
+
         indexBuilderParent.setChildNode(indexNodeName, newDefinition);
         return indexBuilderParent.getChildNode(indexNodeName);
     }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdaterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdaterTest.java?rev=1803017&r1=1803016&r2=1803017&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdaterTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexDefinitionUpdaterTest.java Wed Jul 26 05:26:49 2017
@@ -24,14 +24,19 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.io.Files;
 import org.apache.felix.inventory.Format;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.index.inventory.IndexDefinitionPrinter;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
+import org.apache.jackrabbit.oak.plugins.tree.TreeFactory;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -44,7 +49,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
-import static com.google.common.base.Charsets.*;
 import static java.util.Arrays.asList;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static org.junit.Assert.*;
@@ -119,6 +123,34 @@ public class IndexDefinitionUpdaterTest
         assertTrue(idxBuilder.hasProperty("barIndexProp"));
     }
 
+    @Test
+    public void newIndexAndOrderableChildren() throws Exception{
+        String json = "{\"/oak:index/barIndex\": {\n" +
+                "    \"compatVersion\": 2,\n" +
+                "    \"type\": \"lucene\",\n" +
+                "    \"barIndexProp\": \"barbar\",\n" +
+                "    \"async\": \"async\",\n" +
+                "    \"jcr:primaryType\": \"oak:QueryIndexDefinition\"\n" +
+                "  }}";
+
+        NodeBuilder builder = store.getRoot().builder();
+        Tree root = TreeFactory.createTree(builder);
+        Tree oakIndex = root.addChild("oak:index");
+        oakIndex.setOrderableChildren(true);
+        Tree fooIndex = oakIndex.addChild("fooIndex");
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+
+        IndexDefinitionUpdater updater = new IndexDefinitionUpdater(json);
+        builder = store.getRoot().builder();
+        NodeBuilder idxBuilder = updater.apply(builder, "/oak:index/barIndex");
+
+        PropertyState childOrder = builder.getChildNode("oak:index").getProperty(":childOrder");
+        List<String> names = ImmutableList.copyOf(childOrder.getValue(Type.NAMES));
+
+        assertEquals(asList("fooIndex", "barIndex"), names);
+
+    }
+
     private void applyJson(String json) throws IOException, CommitFailedException {
         IndexDefinitionUpdater update = new IndexDefinitionUpdater(json);