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 ju...@apache.org on 2012/08/02 16:26:55 UTC
svn commit: r1368485 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
core/ContentRepositoryImpl.java kernel/KernelNodeStoreBranch.java
plugins/type/DefaultTypeEditor.java
Author: jukka
Date: Thu Aug 2 14:26:54 2012
New Revision: 1368485
URL: http://svn.apache.org/viewvc?rev=1368485&view=rev
Log:
OAK-66: JCR Node Type Management
Add a CommitEditor that automatically adds jcr:primaryType to all nodes without it
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/DefaultTypeEditor.java (with props)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1368485&r1=1368484&r2=1368485&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java Thu Aug 2 14:26:54 2012
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.oak.kernel.
import org.apache.jackrabbit.oak.plugins.lucene.LuceneEditor;
import org.apache.jackrabbit.oak.plugins.name.NameValidatorProvider;
import org.apache.jackrabbit.oak.plugins.name.NamespaceValidatorProvider;
+import org.apache.jackrabbit.oak.plugins.type.DefaultTypeEditor;
import org.apache.jackrabbit.oak.plugins.type.TypeValidatorProvider;
import org.apache.jackrabbit.oak.plugins.value.ConflictValidatorProvider;
import org.apache.jackrabbit.oak.query.QueryEngineImpl;
@@ -97,6 +98,7 @@ public class ContentRepositoryImpl imple
nodeStore = new KernelNodeStore(microKernel);
List<CommitEditor> editors = new ArrayList<CommitEditor>();
+ editors.add(new DefaultTypeEditor());
editors.add(new ValidatingEditor(validatorProvider));
editors.add(new LuceneEditor());
nodeStore.setEditor(new CompositeEditor(editors));
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java?rev=1368485&r1=1368484&r2=1368485&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java Thu Aug 2 14:26:54 2012
@@ -125,7 +125,7 @@ class KernelNodeStoreBranch implements N
MicroKernel kernel = store.getKernel();
CommitEditor editor = store.getEditor();
- NodeState oldRoot = store.getRoot();
+ NodeState oldRoot = base;
NodeState toCommit = editor.editCommit(store, oldRoot, currentRoot);
setRoot(toCommit);
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/DefaultTypeEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/DefaultTypeEditor.java?rev=1368485&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/DefaultTypeEditor.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/DefaultTypeEditor.java Thu Aug 2 14:26:54 2012
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.type;
+
+import javax.jcr.PropertyType;
+
+import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.CoreValue;
+import org.apache.jackrabbit.oak.spi.commit.CommitEditor;
+import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
+import org.apache.jackrabbit.oak.spi.state.DefaultNodeStateDiff;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
+
+/**
+ * This class updates a Lucene index when node content is changed.
+ */
+public class DefaultTypeEditor implements CommitEditor {
+
+ @Override
+ public NodeState editCommit(
+ NodeStore store, NodeState before, NodeState after)
+ throws CommitFailedException {
+ // TODO: Calculate default type from the node definition
+ CoreValue defaultType = store.getValueFactory().createValue(
+ "nt:unstructured", PropertyType.NAME);
+ NodeBuilder builder = store.getBuilder(after);
+ after.compareAgainstBaseState(
+ before, new DefaultTypeDiff(builder, defaultType));
+ return builder.getNodeState();
+ }
+
+ private static class DefaultTypeDiff extends DefaultNodeStateDiff {
+
+ private final NodeBuilder builder;
+
+ private final CoreValue defaultType;
+
+ public DefaultTypeDiff(NodeBuilder builder, CoreValue defaultType) {
+ this.builder = builder;
+ this.defaultType = defaultType;
+ }
+
+ @Override
+ public void childNodeAdded(String name, NodeState after) {
+ if (!NodeStateUtils.isHidden(name)) {
+ NodeBuilder childBuilder = builder.getChildBuilder(name);
+ if (after.getProperty("jcr:primaryType") == null) {
+ childBuilder.setProperty("jcr:primaryType", defaultType);
+ }
+ DefaultTypeDiff childDiff =
+ new DefaultTypeDiff(childBuilder, defaultType);
+ for (ChildNodeEntry entry : after.getChildNodeEntries()) {
+ childDiff.childNodeAdded(
+ entry.getName(), entry.getNodeState());
+ }
+ }
+ }
+
+ @Override
+ public void childNodeChanged(
+ String name, NodeState before, NodeState after) {
+ if (!NodeStateUtils.isHidden(name)) {
+ NodeBuilder childBuilder = builder.getChildBuilder(name);
+ DefaultTypeDiff childDiff =
+ new DefaultTypeDiff(childBuilder, defaultType);
+ after.compareAgainstBaseState(before, childDiff);
+ }
+ }
+
+ }
+
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/DefaultTypeEditor.java
------------------------------------------------------------------------------
svn:eol-style = native