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 al...@apache.org on 2013/10/11 17:53:28 UTC
svn commit: r1531336 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/
oak-core/src/test/java/org/apache/jackrabbit/oak/ oak-core/src/test/jav...
Author: alexparvulescu
Date: Fri Oct 11 15:53:28 2013
New Revision: 1531336
URL: http://svn.apache.org/r1531336
Log:
OAK-924 Optimize namespace lookups
- removing the namespace map, now relying on the namespaces tree directly
Added:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestGlobalNameMapper.java (with props)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/LocalNameMapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/BuiltInNodeTypes.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestNameMapper.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapperTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/DocViewImportHandler.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/SysViewImportHandler.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/TargetImportHandler.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapper.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapper.java Fri Oct 11 15:53:28 2013
@@ -16,13 +16,15 @@
*/
package org.apache.jackrabbit.oak.namepath;
-import java.util.Map;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.jcr.RepositoryException;
+import org.apache.jackrabbit.oak.api.Tree;
+
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.plugins.name.Namespaces.getNamespacePrefix;
/**
* Name mapper with no local prefix remappings. URI to prefix mappings
@@ -37,7 +39,13 @@ import static com.google.common.base.Pre
* consistency check can be used if needed to locate and fix any Oak names
* with invalid namespace prefixes.
*/
-public abstract class GlobalNameMapper implements NameMapper {
+public class GlobalNameMapper implements NameMapper {
+
+ protected final Tree tree;
+
+ public GlobalNameMapper(Tree tree) {
+ this.tree = tree;
+ }
@Override @Nonnull
public String getJcrName(@Nonnull String oakName) {
@@ -96,17 +104,9 @@ public abstract class GlobalNameMapper i
return expandedName; // not an expanded name
}
- protected abstract Map<String, String> getNamespaceMap();
-
@CheckForNull
protected String getOakPrefixOrNull(String uri) {
- Map<String, String> namespaces = getNamespaceMap();
- for (Map.Entry<String, String> entry : namespaces.entrySet()) {
- if (uri.equals(entry.getValue())) {
- return entry.getKey();
- }
- }
- return null;
+ return getNamespacePrefix(tree, uri);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/LocalNameMapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/LocalNameMapper.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/LocalNameMapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/LocalNameMapper.java Fri Oct 11 15:53:28 2013
@@ -18,16 +18,23 @@ package org.apache.jackrabbit.oak.namepa
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.plugins.name.Namespaces.getNamespaceURI;
import java.util.Map;
import javax.annotation.CheckForNull;
+import org.apache.jackrabbit.oak.api.Tree;
+
/**
* Name mapper with local namespace mappings.
*/
public abstract class LocalNameMapper extends GlobalNameMapper {
+ public LocalNameMapper(Tree tree) {
+ super(tree);
+ }
+
private static boolean isExpandedName(String name) {
if (name.startsWith("{")) {
int brace = name.indexOf('}', 1);
@@ -47,7 +54,7 @@ public abstract class LocalNameMapper ex
int colon = oakName.indexOf(':');
if (colon > 0) {
String oakPrefix = oakName.substring(0, colon);
- String uri = getNamespaceMap().get(oakPrefix);
+ String uri = getNamespaceURI(tree, oakPrefix);
if (uri == null) {
throw new IllegalStateException(
"No namespace mapping found for " + oakName);
@@ -107,7 +114,7 @@ public abstract class LocalNameMapper ex
}
// Check that a global mapping is present and not remapped
- uri = getNamespaceMap().get(jcrPrefix);
+ uri = getNamespaceURI(tree, jcrPrefix);
if (uri == null || local.values().contains(uri)) {
return null;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/BuiltInNodeTypes.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/BuiltInNodeTypes.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/BuiltInNodeTypes.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/BuiltInNodeTypes.java Fri Oct 11 15:53:28 2013
@@ -21,7 +21,6 @@ import static org.apache.jackrabbit.oak.
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.util.Map;
import javax.annotation.Nonnull;
import javax.jcr.NamespaceRegistry;
@@ -29,17 +28,17 @@ import javax.jcr.RepositoryException;
import javax.jcr.ValueFactory;
import javax.jcr.nodetype.NodeTypeManager;
-import com.google.common.base.Charsets;
import org.apache.jackrabbit.commons.cnd.CndImporter;
import org.apache.jackrabbit.commons.cnd.ParseException;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.namepath.GlobalNameMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
-import org.apache.jackrabbit.oak.plugins.name.Namespaces;
import org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry;
import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
+import com.google.common.base.Charsets;
+
/**
* {@code BuiltInNodeTypes} is a utility class that registers the built-in
* node types required for a JCR repository running on Oak.
@@ -78,12 +77,7 @@ class BuiltInNodeTypes {
};
this.vf = new ValueFactoryImpl(null, new NamePathMapperImpl(
- new GlobalNameMapper() {
- @Override
- protected Map<String, String> getNamespaceMap() {
- return Namespaces.getNamespaceMap(root.getTree("/"));
- }
- }));
+ new GlobalNameMapper(root.getTree("/"))));
}
/**
Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestGlobalNameMapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestGlobalNameMapper.java?rev=1531336&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestGlobalNameMapper.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestGlobalNameMapper.java Fri Oct 11 15:53:28 2013
@@ -0,0 +1,39 @@
+/*
+ * 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;
+
+import java.util.Map;
+
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.namepath.GlobalNameMapper;
+import org.apache.jackrabbit.oak.plugins.name.Namespaces;
+
+/**
+ * TestGlobalNameMapper... TODO
+ */
+public final class TestGlobalNameMapper extends GlobalNameMapper {
+
+ public TestGlobalNameMapper(Map<String, String> global) {
+ this(Namespaces.setupTestNamespaces(global));
+ }
+
+ public TestGlobalNameMapper(Tree tree) {
+ super(tree);
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestGlobalNameMapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestGlobalNameMapper.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestNameMapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestNameMapper.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestNameMapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/TestNameMapper.java Fri Oct 11 15:53:28 2013
@@ -21,7 +21,9 @@ package org.apache.jackrabbit.oak;
import java.util.Collections;
import java.util.Map;
+import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.namepath.LocalNameMapper;
+import org.apache.jackrabbit.oak.plugins.name.Namespaces;
/**
* TestNameMapper... TODO
@@ -34,32 +36,27 @@ public final class TestNameMapper extend
public static final Map<String, String> LOCAL_MAPPING = Collections.singletonMap(TEST_LOCAL_PREFIX, TEST_URI);
- private final Map<String, String> global;
private final Map<String, String> local;
public TestNameMapper() {
- this.global = Collections.singletonMap(TEST_PREFIX, TEST_URI);
- this.local = LOCAL_MAPPING;
+ this(Collections.singletonMap(TEST_PREFIX, TEST_URI), LOCAL_MAPPING);
}
- public TestNameMapper(Map<String, String> global, Map<String, String> local) {
- this.global = global;
- this.local = local;
+ public TestNameMapper(Map<String, String> global) {
+ this(global, global);
}
- public TestNameMapper(Map<String, String> global) {
- this.global = global;
- this.local = global;
+ public TestNameMapper(Map<String, String> global, Map<String, String> local) {
+ this(Namespaces.setupTestNamespaces(global), local);
}
public TestNameMapper(TestNameMapper base, Map<String, String> local) {
- this.global = base.global;
- this.local = local;
+ this(base.tree, local);
}
- @Override
- protected Map<String, String> getNamespaceMap() {
- return global;
+ public TestNameMapper(Tree tree, Map<String, String> local) {
+ super(tree);
+ this.local = local;
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapperTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapperTest.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapperTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapperTest.java Fri Oct 11 15:53:28 2013
@@ -16,18 +16,21 @@
*/
package org.apache.jackrabbit.oak.namepath;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+
import javax.jcr.RepositoryException;
-import com.google.common.collect.ImmutableMap;
+import org.apache.jackrabbit.oak.TestGlobalNameMapper;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
+import com.google.common.collect.ImmutableMap;
public class GlobalNameMapperTest {
@@ -38,12 +41,7 @@ public class GlobalNameMapperTest {
"foo", "http://www.example.com/foo",
"quu", "http://www.example.com/quu");
- private NameMapper mapper = new GlobalNameMapper() {
- @Override
- protected Map<String, String> getNamespaceMap() {
- return NAMESPACES;
- }
- };
+ private NameMapper mapper = new TestGlobalNameMapper(NAMESPACES);
@Test
public void testEmptyName() throws RepositoryException {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java Fri Oct 11 15:53:28 2013
@@ -28,6 +28,9 @@ import java.util.Map;
import javax.jcr.RepositoryException;
import com.google.common.collect.ImmutableMap;
+
+import org.apache.jackrabbit.oak.TestGlobalNameMapper;
+import org.apache.jackrabbit.oak.TestNameMapper;
import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
import org.junit.Test;
@@ -47,17 +50,7 @@ public class NamePathMapperImplTest {
"foo", "http://www.example.com/foo",
"quu", "http://www.example.com/quu");
- private final NameMapper mapper = new LocalNameMapper() {
- @Override
- protected Map<String, String> getNamespaceMap() {
- return GLOBAL;
- }
-
- @Override
- protected Map<String, String> getSessionLocalMappings() {
- return LOCAL;
- }
- };
+ private final NameMapper mapper = new TestNameMapper(GLOBAL, LOCAL);
private NamePathMapper npMapper = new NamePathMapperImpl(mapper);
@@ -136,12 +129,7 @@ public class NamePathMapperImplTest {
@Test
public void testJcrToOakKeepIndexNoRemap() {
- NameMapper mapper = new GlobalNameMapper() {
- @Override
- protected Map<String, String> getNamespaceMap() {
- return GLOBAL;
- }
- };
+ NameMapper mapper = new TestGlobalNameMapper(GLOBAL);
NamePathMapper npMapper = new NamePathMapperImpl(mapper);
assertEquals("/", npMapper.getOakPathKeepIndex("/"));
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/AbstractAccessControlListTest.java Fri Oct 11 15:53:28 2013
@@ -30,18 +30,19 @@ import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.security.Privilege;
-import com.google.common.collect.Lists;
+import org.apache.jackrabbit.oak.TestGlobalNameMapper;
import org.apache.jackrabbit.oak.TestNameMapper;
-import org.apache.jackrabbit.oak.namepath.GlobalNameMapper;
import org.apache.jackrabbit.oak.namepath.NameMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
-import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
-import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.junit.Test;
+import com.google.common.collect.Lists;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -107,12 +108,7 @@ public abstract class AbstractAccessCont
@Test
public void testGetPath() {
- NameMapper nameMapper = new GlobalNameMapper() {
- @Override
- protected Map<String, String> getNamespaceMap() {
- return Collections.singletonMap("jr", "http://jackrabbit.apache.org");
- }
- };
+ NameMapper nameMapper = new TestGlobalNameMapper(Collections.singletonMap("jr", "http://jackrabbit.apache.org"));
NamePathMapper npMapper = new NamePathMapperImpl(nameMapper);
// map of jcr-path to standard jcr-path
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java Fri Oct 11 15:53:28 2013
@@ -51,7 +51,6 @@ import org.apache.jackrabbit.oak.jcr.ses
import org.apache.jackrabbit.oak.namepath.LocalNameMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
-import org.apache.jackrabbit.oak.plugins.name.Namespaces;
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
import org.apache.jackrabbit.oak.plugins.observation.Observable;
import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
@@ -120,11 +119,7 @@ public class SessionContext implements N
this.delegate = checkNotNull(delegate);
this.namespaces = new SessionNamespaces(this);
- LocalNameMapper nameMapper = new LocalNameMapper() {
- @Override
- protected Map<String, String> getNamespaceMap() {
- return Namespaces.getNamespaceMap(delegate.getRoot().getTree("/"));
- }
+ LocalNameMapper nameMapper = new LocalNameMapper(delegate.getRoot().getTree("/")) {
@Override
protected Map<String, String> getSessionLocalMappings() {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/DocViewImportHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/DocViewImportHandler.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/DocViewImportHandler.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/DocViewImportHandler.java Fri Oct 11 15:53:28 2013
@@ -22,15 +22,14 @@ import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
+
import javax.jcr.NamespaceRegistry;
import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
-import javax.jcr.ValueFactory;
import javax.jcr.nodetype.ConstraintViolationException;
-import com.google.common.collect.Lists;
-import org.apache.jackrabbit.commons.NamespaceHelper;
+import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.namepath.JcrNameParser;
import org.apache.jackrabbit.oak.plugins.name.NamespaceConstants;
import org.apache.jackrabbit.oak.spi.xml.Importer;
@@ -43,6 +42,8 @@ import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
+import com.google.common.collect.Lists;
+
/**
* {@code DocViewImportHandler} processes Document View XML SAX events
* and 'translates' them into {@code {@link Importer}} method calls.
@@ -64,11 +65,10 @@ class DocViewImportHandler extends Targe
* Constructs a new {@code DocViewImportHandler}.
*
* @param importer the importer
- * @param valueFactory a value factory
- * @param helper The namespace helper
+ * @param sessionContext the session context
*/
- DocViewImportHandler(Importer importer, ValueFactory valueFactory, NamespaceHelper helper) {
- super(importer, valueFactory, helper);
+ DocViewImportHandler(Importer importer, SessionContext sessionContext) {
+ super(importer, sessionContext);
}
/**
@@ -108,7 +108,7 @@ class DocViewImportHandler extends Targe
private void appendCharacters(char[] ch, int start, int length)
throws SAXException {
if (textHandler == null) {
- textHandler = new BufferedStringValue(valueFactory, currentNamePathMapper());
+ textHandler = new BufferedStringValue(sessionContext.getValueFactory(), currentNamePathMapper());
}
try {
textHandler.append(ch, start, length);
@@ -158,11 +158,11 @@ class DocViewImportHandler extends Targe
}
NodeInfo node =
- new NodeInfo(helper.getJcrName(NamespaceRegistry.NAMESPACE_JCR, "xmltext"), null, null, null);
+ new NodeInfo(getJcrName(NamespaceRegistry.NAMESPACE_JCR, "xmltext"), null, null, null);
TextValue[] values =
new TextValue[]{textHandler};
ArrayList<PropInfo> props = new ArrayList<PropInfo>();
- props.add(new PropInfo(helper.getJcrName(NamespaceRegistry.NAMESPACE_JCR, "xmlcharacters"),
+ props.add(new PropInfo(getJcrName(NamespaceRegistry.NAMESPACE_JCR, "xmlcharacters"),
PropertyType.STRING, values));
// call Importer
importer.startNode(node, props);
@@ -181,6 +181,11 @@ class DocViewImportHandler extends Targe
}
}
+ private String getJcrName(String uri, String name)
+ throws RepositoryException {
+ return sessionContext.getSession().getNamespacePrefix(uri) + ":" + name;
+ }
+
/**
* Processes the given {@code name}, i.e. decodes it and checks
* the format of the decoded name.
@@ -250,7 +255,7 @@ class DocViewImportHandler extends Targe
// see also DocViewSAXEventGenerator#leavingProperties(Node, int)
// TODO proper multi-value serialization support
propValues = new TextValue[1];
- propValues[0] = new StringValue(attrValue, valueFactory, currentNamePathMapper());
+ propValues[0] = new StringValue(attrValue, sessionContext.getValueFactory(), currentNamePathMapper());
if (NamespaceRegistry.NAMESPACE_JCR.equals(propNameInfo.getNamespaceUri())
&& "primaryType".equals(propNameInfo.getLocalName())) {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java Fri Oct 11 15:53:28 2013
@@ -18,14 +18,14 @@ package org.apache.jackrabbit.oak.jcr.xm
import java.util.HashMap;
import java.util.Map;
+
import javax.jcr.RepositoryException;
-import javax.jcr.ValueFactory;
import org.apache.jackrabbit.commons.NamespaceHelper;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.Root;
-import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
+import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.plugins.name.NamespaceConstants;
import org.apache.jackrabbit.oak.spi.xml.Importer;
import org.slf4j.Logger;
@@ -61,7 +61,6 @@ public class ImportHandler extends Defau
private final SessionContext sessionContext;
private final Importer importer;
- private final NamespaceHelper helper;
private final boolean isWorkspaceImport;
protected Locator locator;
@@ -76,7 +75,6 @@ public class ImportHandler extends Defau
SessionDelegate sd = sessionContext.getSessionDelegate();
initialRoot = sd.getContentSession().getLatestRoot();
root = (isWorkspaceImport) ? sd.getContentSession().getLatestRoot() : sd.getRoot();
- helper = new NamespaceHelper(sessionContext.getSession());
importer = new ImporterImpl(absPath, sessionContext, root, initialRoot, uuidBehavior, isWorkspaceImport);
}
@@ -143,7 +141,8 @@ public class ImportHandler extends Defau
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
try {
- helper.registerNamespace(prefix, uri);
+ new NamespaceHelper(sessionContext.getSession()).registerNamespace(
+ prefix, uri);
if (targetHandler != null) {
targetHandler.startPrefixMapping(prefix, uri);
} else {
@@ -169,11 +168,10 @@ public class ImportHandler extends Defau
if (targetHandler == null) {
// the namespace of the first element determines the type of XML
// (system view/document view)
- ValueFactory vf = sessionContext.getValueFactory();
if (NamespaceConstants.NAMESPACE_SV.equals(namespaceURI)) {
- targetHandler = new SysViewImportHandler(importer, vf, helper);
+ targetHandler = new SysViewImportHandler(importer, sessionContext);
} else {
- targetHandler = new DocViewImportHandler(importer, vf, helper);
+ targetHandler = new DocViewImportHandler(importer, sessionContext);
}
targetHandler.startDocument();
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/SysViewImportHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/SysViewImportHandler.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/SysViewImportHandler.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/SysViewImportHandler.java Fri Oct 11 15:53:28 2013
@@ -16,18 +16,17 @@
*/
package org.apache.jackrabbit.oak.jcr.xml;
-
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
+
import javax.jcr.InvalidSerializedDataException;
import javax.jcr.NamespaceRegistry;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
-import javax.jcr.ValueFactory;
-import org.apache.jackrabbit.commons.NamespaceHelper;
+import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.plugins.name.NamespaceConstants;
import org.apache.jackrabbit.oak.spi.xml.Importer;
import org.apache.jackrabbit.oak.spi.xml.NodeInfo;
@@ -63,11 +62,10 @@ class SysViewImportHandler extends Targe
* Constructs a new {@code SysViewImportHandler}.
*
* @param importer the underlying importer
- * @param valueFactory the value factory
- * @param helper the namespace helper
+ * @param sessionContext the session context
*/
- SysViewImportHandler(Importer importer, ValueFactory valueFactory, NamespaceHelper helper) {
- super(importer, valueFactory, helper);
+ SysViewImportHandler(Importer importer, SessionContext sessionContext) {
+ super(importer, sessionContext);
}
private void processNode(ImportState state, boolean start, boolean end)
@@ -168,7 +166,7 @@ class SysViewImportHandler extends Targe
}
} else if (namespaceURI.equals(NamespaceConstants.NAMESPACE_SV) && "value".equals(localName)) {
// sv:value element
- currentPropValue = new BufferedStringValue(valueFactory, currentNamePathMapper());
+ currentPropValue = new BufferedStringValue(sessionContext.getValueFactory(), currentNamePathMapper());
String xsiType = atts.getValue("xsi:type");
currentPropValue.setBase64("xs:base64Binary".equals(xsiType));
} else {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/TargetImportHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/TargetImportHandler.java?rev=1531336&r1=1531335&r2=1531336&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/TargetImportHandler.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/TargetImportHandler.java Fri Oct 11 15:53:28 2013
@@ -22,19 +22,22 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+
import javax.jcr.RepositoryException;
-import javax.jcr.ValueFactory;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ListMultimap;
-import org.apache.jackrabbit.commons.NamespaceHelper;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.namepath.LocalNameMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
+import org.apache.jackrabbit.oak.plugins.name.Namespaces;
import org.apache.jackrabbit.oak.spi.xml.Importer;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
+
/**
* {@code TargetImportHandler} serves as the base class for the concrete
* classes {@code {@link DocViewImportHandler}} and
@@ -43,15 +46,13 @@ import org.xml.sax.helpers.DefaultHandle
public abstract class TargetImportHandler extends DefaultHandler {
protected final Importer importer;
- protected final ValueFactory valueFactory;
- protected final NamespaceHelper helper;
+ protected final SessionContext sessionContext;
private final ListMultimap<String, String> documentContext = ArrayListMultimap.create();
private Map<String, String> documentPrefixMap = Collections.emptyMap();
- protected TargetImportHandler(Importer importer, ValueFactory valueFactory, NamespaceHelper helper) {
+ protected TargetImportHandler(Importer importer, SessionContext sessionContext) {
this.importer = importer;
- this.valueFactory = valueFactory;
- this.helper = helper;
+ this.sessionContext = sessionContext;
}
//--------------------------------------------------------< ImportHandler >
@@ -107,15 +108,7 @@ public abstract class TargetImportHandle
//--------------------------------------------------------
public NamePathMapper currentNamePathMapper() {
- return new NamePathMapperImpl(new LocalNameMapper() {
- @Override
- protected Map<String, String> getNamespaceMap() {
- try {
- return helper.getNamespaces();
- } catch (RepositoryException e) {
- return Collections.emptyMap();
- }
- }
+ return new NamePathMapperImpl(new LocalNameMapper(getNSReadTree()) {
@Override
protected Map<String, String> getSessionLocalMappings() {
@@ -124,6 +117,10 @@ public abstract class TargetImportHandle
});
}
+ private Tree getNSReadTree() {
+ return sessionContext.getSessionDelegate().getRoot().getTree("/");
+ }
+
private Map<String, String> createCurrentPrefixMap() {
Map<String, String> result = new HashMap<String, String>();
Set<Map.Entry<String, Collection<String>>> entries = documentContext.asMap().entrySet();
@@ -171,11 +168,11 @@ public abstract class TargetImportHandle
} else {
List<String> uris = documentContext.get(docPrefix);
if (uris.isEmpty()) {
- namespaceUri = helper.getURI(docPrefix);
+ namespaceUri = Namespaces.getNamespaceURI(getNSReadTree(), docPrefix);
repoPrefix = docPrefix;
} else {
namespaceUri = uris.get(uris.size() - 1);
- repoPrefix = helper.getPrefix(namespaceUri);
+ repoPrefix = Namespaces.getNamespacePrefix(getNSReadTree(), namespaceUri);
}
}
}