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/07/10 16:17:56 UTC
svn commit: r1359696 - in /jackrabbit/oak/trunk/oak-jcr/src/main:
java/org/apache/jackrabbit/oak/jcr/nodetype/
resources/org/apache/jackrabbit/oak/jcr/nodetype/
Author: reschke
Date: Tue Jul 10 14:17:55 2012
New Revision: 1359696
URL: http://svn.apache.org/viewvc?rev=1359696&view=rev
Log:
OAK-66: decouple CND based NodeTypeManagerDelegate from NamespaceRegistry by restricting it to well known Oak prefixes
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java?rev=1359696&r1=1359695&r2=1359696&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java Tue Jul 10 14:17:55 2012
@@ -21,11 +21,11 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.jcr.NamespaceRegistry;
import javax.jcr.RepositoryException;
import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
@@ -34,20 +34,27 @@ import org.apache.jackrabbit.commons.cnd
import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractNodeTypeDefinitionBuilder;
import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractPropertyDefinitionBuilder;
import org.apache.jackrabbit.commons.cnd.ParseException;
-import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.CoreValueFactory;
-import org.apache.jackrabbit.oak.plugins.name.NamespaceRegistryImpl;
public class NodeTypeManagerDelegate {
private final CoreValueFactory cvf;
- private final NamespaceRegistry nsregistry;
private final List<NodeTypeDelegate> typeDelegates;
- public NodeTypeManagerDelegate(ContentSession session, CoreValueFactory cvf) throws RepositoryException {
+ private static final Map<String, String> nsdefaults;
+ static {
+ Map<String, String> tmp = new HashMap<String,String>();
+ tmp.put("rep", "internal"); // TODO: https://issues.apache.org/jira/browse/OAK-74
+ tmp.put("jcr", "http://www.jcp.org/jcr/1.0");
+ tmp.put("nt", "http://www.jcp.org/jcr/nt/1.0");
+ tmp.put("mix", "http://www.jcp.org/jcr/mix/1.0");
+ tmp.put("xml", "http://www.w3.org/XML/1998/namespace");
+ nsdefaults = Collections.unmodifiableMap(tmp);
+ }
+
+ public NodeTypeManagerDelegate(CoreValueFactory cvf) throws RepositoryException {
this.cvf = cvf;
- this.nsregistry = new NamespaceRegistryImpl(session);
try {
InputStream stream = NodeTypeManagerImpl.class.getResourceAsStream("builtin_nodetypes.cnd");
@@ -88,6 +95,15 @@ public class NodeTypeManagerDelegate {
@Override
public void setNamespace(String prefix, String uri) throws RepositoryException {
+
+ String t = nsdefaults.get(prefix);
+ if (t == null) {
+ throw new RepositoryException("Unsupported namespace prefix for initial CND load: " + prefix);
+ }
+ else if (!t.equals(uri)) {
+ throw new RepositoryException("Can't remap namespace prefix for initial CND laod: " + prefix);
+ }
+
nsmap.put(prefix, uri);
}
@@ -97,26 +113,7 @@ public class NodeTypeManagerDelegate {
}
public String convertNameToOak(String cndName) throws RepositoryException {
- if (cndName == null) {
- return null;
- } else {
- int pos = cndName.indexOf(":");
- if (pos < 0) {
- // no colon
- return cndName;
- } else {
- String pref = cndName.substring(0, pos);
- String name = cndName.substring(pos + 1);
- String ns = nsmap.get(pref);
-
- if (ns == null) {
- throw new RepositoryException("no namespace defined for prefix " + pref);
- } else {
- String oakprefix = nsregistry.getPrefix(ns);
- return oakprefix + ":" + name;
- }
- }
- }
+ return cndName; // is assumed to be the Oak name for now
}
public List<String> convertNamesToOak(List<String> cndNames) throws RepositoryException {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java?rev=1359696&r1=1359695&r2=1359696&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java Tue Jul 10 14:17:55 2012
@@ -49,7 +49,7 @@ public class NodeTypeManagerImpl impleme
public NodeTypeManagerImpl(SessionDelegate sd) throws RepositoryException {
this.vf = sd.getValueFactory();
this.mapper = sd.getNamePathMapper();
- this.ntmd = new NodeTypeManagerDelegate(sd.getContentSession(), sd.getValueFactory().getCoreValueFactory());
+ this.ntmd = new NodeTypeManagerDelegate(sd.getValueFactory().getCoreValueFactory());
}
private void init() {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd?rev=1359696&r1=1359695&r2=1359696&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd Tue Jul 10 14:17:55 2012
@@ -18,7 +18,7 @@
<rep='internal'>
<jcr='http://www.jcp.org/jcr/1.0'>
<nt='http://www.jcp.org/jcr/nt/1.0'>
-<mixin='http://www.jcp.org/jcr/mix/1.0'>
+<mix='http://www.jcp.org/jcr/mix/1.0'>
//------------------------------------------------------------------------------
// B A S E T Y P E
@@ -43,7 +43,7 @@
* This abstract node type serves as the supertype of nt:file and nt:folder.
* @since 1.0
*/
-[nt:hierarchyNode] > mixin:created
+[nt:hierarchyNode] > mix:created
abstract
/**
@@ -92,7 +92,7 @@
*
* @since 1.0
*/
-[nt:resource] > mixin:mimeType, mixin:lastModified, mixin:referenceable
+[nt:resource] > mix:mimeType, mix:lastModified, mix:referenceable
primaryitem jcr:data
- jcr:data (BINARY) mandatory
@@ -103,7 +103,7 @@
* Note that the protected attributes suggested by JSR283 are omitted in this variant.
* @since 2.0
*/
-[mixin:title]
+[mix:title]
mixin
- jcr:title (STRING)
- jcr:description (STRING)
@@ -120,7 +120,7 @@
*
* @since 2.0
*/
-[mixin:created]
+[mix:created]
mixin
- jcr:created (DATE) autocreated protected
- jcr:createdBy (STRING) autocreated protected
@@ -142,7 +142,7 @@
* Note that the protected attributes suggested by JSR283 are omitted in this variant.
* @since 2.0
*/
-[mixin:lastModified]
+[mix:lastModified]
mixin
- jcr:lastModified (DATE) autocreated
- jcr:lastModifiedBy (STRING) autocreated
@@ -157,7 +157,7 @@
* Note that the protected attributes suggested by JSR283 are omitted in this variant.
* @since 2.0
*/
-[mixin:language]
+[mix:language]
mixin
- jcr:language (STRING)
@@ -174,7 +174,7 @@
* Note that the protected attributes suggested by JSR283 are omitted in this variant.
* @since 2.0
*/
-[mixin:mimeType]
+[mix:mimeType]
mixin
- jcr:mimeType (STRING)
- jcr:encoding (STRING)
@@ -221,14 +221,14 @@
- jcr:id (WEAKREFERENCE)
/**
- * The mixin:etag mixin type defines a standardized identity validator for BINARY
+ * The mix:etag mixin type defines a standardized identity validator for BINARY
* properties similar to the entity tags used in HTTP/1.1
*
* A jcr:etag property is an opaque string whose syntax is identical to that
* defined for entity tags in HTTP/1.1. Semantically, the jcr:etag is comparable
* to the HTTP/1.1 strong entity tag.
*
- * On creation of a mixin:etag node N, or assignment of mixin:etag to N, the
+ * On creation of a mix:etag node N, or assignment of mix:etag to N, the
* repository must create a jcr:etag property with an implementation determined
* value.
*
@@ -240,7 +240,7 @@
*
* @since 2.0
*/
-[mixin:etag]
+[mix:etag]
mixin
- jcr:etag (STRING) protected autocreated
@@ -281,7 +281,7 @@
*
* @since 1.0
*/
-[mixin:referenceable]
+[mix:referenceable]
mixin
- jcr:uuid (STRING) mandatory autocreated protected INITIALIZE
@@ -292,7 +292,7 @@
/**
* @since 1.0
*/
-[mixin:lockable]
+[mix:lockable]
mixin
- jcr:lockOwner (STRING) protected IGNORE
- jcr:lockIsDeep (BOOLEAN) protected IGNORE
@@ -304,7 +304,7 @@
/**
* @since 2.0
*/
-[mixin:shareable] > mixin:referenceable
+[mix:shareable] > mix:referenceable
mixin
//------------------------------------------------------------------------------
@@ -314,14 +314,14 @@
/**
* @since 2.0
*/
-[mixin:simpleVersionable]
+[mix:simpleVersionable]
mixin
- jcr:isCheckedOut (BOOLEAN) = 'true' mandatory autocreated protected IGNORE
/**
* @since 1.0
*/
-[mixin:versionable] > mixin:simpleVersionable, mixin:referenceable
+[mix:versionable] > mix:simpleVersionable, mix:referenceable
mixin
- jcr:versionHistory (REFERENCE) mandatory protected IGNORE < 'nt:versionHistory'
- jcr:baseVersion (REFERENCE) mandatory protected IGNORE < 'nt:version'
@@ -335,7 +335,7 @@
/**
* @since 1.0
*/
-[nt:versionHistory] > mixin:referenceable
+[nt:versionHistory] > mix:referenceable
- jcr:versionableUuid (STRING) mandatory autocreated protected ABORT
/** @since 2.0 */
- jcr:copiedFrom (WEAKREFERENCE) protected ABORT < 'nt:version'
@@ -352,7 +352,7 @@
/**
* @since 1.0
*/
-[nt:version] > mixin:referenceable
+[nt:version] > mix:referenceable
- jcr:created (DATE) mandatory autocreated protected ABORT
- jcr:predecessors (REFERENCE) protected multiple ABORT < 'nt:version'
- jcr:successors (REFERENCE) protected multiple ABORT < 'nt:version'
@@ -363,7 +363,7 @@
/**
* @since 1.0
*/
-[nt:frozenNode] > mixin:referenceable
+[nt:frozenNode] > mix:referenceable
orderable
- jcr:frozenPrimaryType (NAME) mandatory autocreated protected ABORT
- jcr:frozenMixinTypes (NAME) protected multiple ABORT
@@ -381,13 +381,13 @@
/**
* @since 2.0
*/
-[nt:activity] > mixin:referenceable
+[nt:activity] > mix:referenceable
- jcr:activityTitle (STRING) mandatory autocreated protected
/**
* @since 2.0
*/
-[nt:configuration] > mixin:versionable
+[nt:configuration] > mix:versionable
- jcr:root (REFERENCE) mandatory autocreated protected
//------------------------------------------------------------------------------
@@ -469,7 +469,7 @@
//------------------------------------------------------------------------------
/**
- * Only nodes with mixin node type mixin:lifecycle may participate in a lifecycle.
+ * Only nodes with mixin node type mix:lifecycle may participate in a lifecycle.
*
* @peop jcr:lifecyclePolicy
* This property is a reference to another node that contains
@@ -481,7 +481,7 @@
*
* @since 2.0
*/
-[mixin:lifecycle]
+[mix:lifecycle]
mixin
- jcr:lifecyclePolicy (REFERENCE) protected INITIALIZE
- jcr:currentLifecycleState (STRING) protected INITIALIZE
@@ -591,7 +591,7 @@
// User Management
// -----------------------------------------------------------------------------
-[rep:Authorizable] > mixin:referenceable, nt:hierarchyNode
+[rep:Authorizable] > mix:referenceable, nt:hierarchyNode
abstract
+ * (nt:base) = nt:unstructured VERSION
- rep:principalName (STRING) protected mandatory