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 re...@apache.org on 2012/04/25 11:52:22 UTC
svn commit: r1330177 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/
Author: reschke
Date: Wed Apr 25 09:52:21 2012
New Revision: 1330177
URL: http://svn.apache.org/viewvc?rev=1330177&view=rev
Log:
OAK-61: add NameMapper interface + implementation (WIP)
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java?rev=1330177&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java Wed Apr 25 09:52:21 2012
@@ -0,0 +1,87 @@
+/*
+ * 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.namepath;
+
+public abstract class AbstractNameMapper implements NameMapper {
+
+ abstract protected String getJcrPrefix(String oakPrefix);
+
+ abstract protected String getOakPrefix(String jcrPrefix);
+
+ abstract protected String getOakPrefixFromURI(String uri);
+
+ @Override
+ public String getOakName(String jcrName) {
+
+ int pos = jcrName.indexOf(":");
+
+ if (pos < 0) {
+ // no colon
+ return jcrName;
+ } else {
+ if (jcrName.charAt(0) == '{') {
+ int endpos = jcrName.indexOf('}');
+ if (endpos > pos) {
+ // expanded name
+
+ String nsuri = jcrName.substring(1, endpos);
+ String name = jcrName.substring(endpos + 1);
+
+ String oakPref = getOakPrefixFromURI(nsuri);
+ if (oakPref == null) {
+ // TODO
+ return null;
+ } else {
+ return oakPref + ":" + name;
+ }
+ }
+ }
+
+ // otherwise: not an expanded name
+
+ String pref = jcrName.substring(0, pos);
+ String name = jcrName.substring(pos + 1);
+ String oakPrefix = getOakPrefix(pref);
+ if (oakPrefix == null) {
+ // TODO
+ return null;
+ } else {
+ return oakPrefix + ":" + name;
+ }
+ }
+ }
+
+ @Override
+ public String getJcrName(String oakName) {
+ int pos = oakName.indexOf(":");
+ if (pos < 0) {
+ // non-prefixed
+ return oakName;
+ } else {
+ String pref = oakName.substring(0, pos);
+ String name = oakName.substring(pos + 1);
+ String jcrPrefix = getJcrPrefix(pref);
+ if (jcrPrefix == null) {
+ // TODO
+ return null;
+ } else {
+ return jcrPrefix + ":" + name;
+ }
+ }
+ }
+
+}
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java?rev=1330177&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java Wed Apr 25 09:52:21 2012
@@ -0,0 +1,26 @@
+/*
+ * 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.namepath;
+
+public interface NameMapper {
+
+ // TODO consider error handling
+ String getOakName(String jcrName);
+
+ // TODO consider error handling
+ String getJcrName(String oakName);
+}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java?rev=1330177&r1=1330176&r2=1330177&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java Wed Apr 25 09:52:21 2012
@@ -16,22 +16,12 @@
*/
package org.apache.jackrabbit.oak.jcr;
-import org.apache.jackrabbit.api.JackrabbitSession;
-import org.apache.jackrabbit.api.security.principal.PrincipalManager;
-import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.commons.AbstractSession;
-import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.api.ContentSession;
-import org.apache.jackrabbit.oak.api.Root;
-import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.jcr.value.ValueFactoryImpl;
-import org.apache.jackrabbit.oak.namepath.Paths;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.ContentHandler;
+import java.io.IOException;
+import java.security.AccessControlException;
import javax.jcr.Credentials;
import javax.jcr.InvalidItemStateException;
+import javax.jcr.NamespaceRegistry;
import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
@@ -44,8 +34,23 @@ import javax.jcr.nodetype.NodeTypeManage
import javax.jcr.retention.RetentionManager;
import javax.jcr.security.AccessControlManager;
import javax.jcr.version.VersionManager;
-import java.io.IOException;
-import java.security.AccessControlException;
+
+import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import org.apache.jackrabbit.api.security.user.UserManager;
+import org.apache.jackrabbit.commons.AbstractSession;
+import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.jcr.namespace.NamespaceRegistryImpl;
+import org.apache.jackrabbit.oak.jcr.value.ValueFactoryImpl;
+import org.apache.jackrabbit.oak.namepath.AbstractNameMapper;
+import org.apache.jackrabbit.oak.namepath.NameMapper;
+import org.apache.jackrabbit.oak.namepath.Paths;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.ContentHandler;
/**
* {@code SessionImpl}...
@@ -61,7 +66,9 @@ public class SessionImpl extends Abstrac
private final ContentSession contentSession;
private final ValueFactoryImpl valueFactory;
private final Workspace workspace;
+ private final NamespaceRegistry nsreg;
private final SessionContext<SessionImpl> sessionContext = new Context();
+ private final NameMapper nameMapper = new SessionNameMapper();
private boolean isAlive = true;
private Root root;
@@ -70,7 +77,8 @@ public class SessionImpl extends Abstrac
this.globalContext = globalContext;
this.contentSession = contentSession;
this.valueFactory = new ValueFactoryImpl(contentSession.getCoreValueFactory());
- workspace = new WorkspaceImpl(sessionContext);
+ this.nsreg = new NamespaceRegistryImpl(contentSession);
+ this.workspace = new WorkspaceImpl(sessionContext, this.nsreg);
this.root = contentSession.getCurrentRoot();
}
@@ -309,6 +317,42 @@ public class SessionImpl extends Abstrac
throw new UnsupportedOperationException("Implementation missing");
}
+ //--------------------------------------------------< SessionNamespaceResolver >---
+
+ private class SessionNameMapper extends AbstractNameMapper {
+
+ @Override
+ protected String getJcrPrefix(String oakPrefix) {
+ try {
+ String ns = nsreg.getURI(oakPrefix);
+ return getNamespacePrefix(ns);
+ } catch (RepositoryException e) {
+ // TODO
+ return null;
+ }
+ }
+
+ @Override
+ protected String getOakPrefix(String jcrPrefix) {
+ try {
+ String ns = getNamespaceURI(jcrPrefix);
+ return nsreg.getPrefix(ns);
+ } catch (RepositoryException e) {
+ // TODO
+ return null;
+ }
+ }
+
+ @Override
+ protected String getOakPrefixFromURI(String uri) {
+ try {
+ return nsreg.getPrefix(uri);
+ } catch (RepositoryException e) {
+ // TODO
+ return null;
+ }
+ }
+ }
//--------------------------------------------------------------------------
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java?rev=1330177&r1=1330176&r2=1330177&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java Wed Apr 25 09:52:21 2012
@@ -56,10 +56,11 @@ public class WorkspaceImpl implements Ja
private final SessionContext<SessionImpl> sessionContext;
private QueryManagerImpl queryManager;
- private NamespaceRegistry nsRegistry;
+ private final NamespaceRegistry nsRegistry;
- public WorkspaceImpl(SessionContext<SessionImpl> sessionContext) {
+ public WorkspaceImpl(SessionContext<SessionImpl> sessionContext, NamespaceRegistry nsRegistry) {
this.sessionContext = sessionContext;
+ this.nsRegistry = nsRegistry;
}
//----------------------------------------------------------< Workspace >---
@@ -158,10 +159,6 @@ public class WorkspaceImpl implements Ja
@Override
public NamespaceRegistry getNamespaceRegistry() throws RepositoryException {
ensureIsAlive();
- if (nsRegistry == null) {
- nsRegistry = new NamespaceRegistryImpl(
- sessionContext.getContentSession());
- }
return nsRegistry;
}