From oak-commits-return-1100-apmail-jackrabbit-oak-commits-archive=jackrabbit.apache.org@jackrabbit.apache.org Tue Jul 3 14:09:00 2012 Return-Path: X-Original-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Delivered-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 57E3EC542 for ; Tue, 3 Jul 2012 14:09:00 +0000 (UTC) Received: (qmail 37746 invoked by uid 500); 3 Jul 2012 14:09:00 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 37703 invoked by uid 500); 3 Jul 2012 14:08:59 -0000 Mailing-List: contact oak-commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: oak-commits@jackrabbit.apache.org Delivered-To: mailing list oak-commits@jackrabbit.apache.org Received: (qmail 37659 invoked by uid 99); 3 Jul 2012 14:08:58 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Jul 2012 14:08:58 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Jul 2012 14:08:56 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 59743238897D; Tue, 3 Jul 2012 14:08:36 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1356742 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype: NodeTypeManagerDelegate.java NodeTypeManagerImpl.java Date: Tue, 03 Jul 2012 14:08:35 -0000 To: oak-commits@jackrabbit.apache.org From: reschke@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120703140836.59743238897D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: reschke Date: Tue Jul 3 14:08:34 2012 New Revision: 1356742 URL: http://svn.apache.org/viewvc?rev=1356742&view=rev Log: OAK-66: split NodeTypeManager into delegate and session dependent part Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java (with props) Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java Added: 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=1356742&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java Tue Jul 3 14:08:34 2012 @@ -0,0 +1,284 @@ +/* + * 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.jcr.nodetype; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.ArrayList; +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; +import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory; +import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractNodeDefinitionBuilder; +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 typeDelegates; + + public NodeTypeManagerDelegate(ContentSession session, CoreValueFactory cvf) throws RepositoryException { + this.cvf = cvf; + this.nsregistry = new NamespaceRegistryImpl(session); + + try { + InputStream stream = NodeTypeManagerImpl.class.getResourceAsStream("builtin_nodetypes.cnd"); + Reader reader = new InputStreamReader(stream, "UTF-8"); + try { + DefinitionBuilderFactory> dbf = new DefinitionDelegateBuilderFactory(); + CompactNodeTypeDefReader> cndr = new CompactNodeTypeDefReader>( + reader, null, dbf); + + typeDelegates = cndr.getNodeTypeDefinitions(); + } catch (ParseException ex) { + throw new RepositoryException("Failed to load built-in node types", ex); + } finally { + stream.close(); + } + } catch (IOException ex) { + throw new RepositoryException("Failed to load built-in node types", ex); + } + } + + public List getAllNodeTypeDelegates() { + return typeDelegates; + } + + private class DefinitionDelegateBuilderFactory extends DefinitionBuilderFactory> { + + private Map nsmap = new HashMap(); + + @Override + public Map getNamespaceMapping() { + return nsmap; + } + + @Override + public AbstractNodeTypeDefinitionBuilder newNodeTypeDefinitionBuilder() throws RepositoryException { + return new NodeTypeDefinitionDelegateBuilder(this); + } + + @Override + public void setNamespace(String prefix, String uri) throws RepositoryException { + nsmap.put(prefix, uri); + } + + @Override + public void setNamespaceMapping(Map nsmap) { + this.nsmap = nsmap; + } + + 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; + } + } + } + } + + public List convertNamesToOak(List cndNames) throws RepositoryException { + List result = new ArrayList(); + for (String cndName : cndNames) { + result.add(convertNameToOak(cndName)); + } + return result; + } + } + + private class NodeTypeDefinitionDelegateBuilder extends AbstractNodeTypeDefinitionBuilder { + + private final List propertyDefinitions = new ArrayList(); + private final List childNodeDefinitions = new ArrayList(); + + private final DefinitionDelegateBuilderFactory ddbf; + + private String primaryItemName; + private List declaredSuperTypes = new ArrayList(); + + public NodeTypeDefinitionDelegateBuilder(DefinitionDelegateBuilderFactory ddbf) { + this.ddbf = ddbf; + } + + @Override + public void addSupertype(String superType) throws RepositoryException { + this.declaredSuperTypes.add(superType); + } + + @Override + public void setPrimaryItemName(String primaryItemName) throws RepositoryException { + this.primaryItemName = primaryItemName; + } + + @Override + public AbstractPropertyDefinitionBuilder newPropertyDefinitionBuilder() throws RepositoryException { + return new PropertyDefinitionDelegateBuilder(this); + } + + @Override + public AbstractNodeDefinitionBuilder newNodeDefinitionBuilder() throws RepositoryException { + return new NodeDefinitionDelegateBuilder(this); + } + + @Override + public NodeTypeDelegate build() throws RepositoryException { + + name = ddbf.convertNameToOak(name); + declaredSuperTypes = ddbf.convertNamesToOak(declaredSuperTypes); + primaryItemName = ddbf.convertNameToOak(primaryItemName); + + NodeTypeDelegate result = new NodeTypeDelegate(name, declaredSuperTypes.toArray(new String[declaredSuperTypes.size()]), + primaryItemName, isMixin, isAbstract, isOrderable); + + for (PropertyDefinitionDelegateBuilder pdb : propertyDefinitions) { + result.addPropertyDefinitionDelegate(pdb.getPropertyDefinitionDelegate()); + } + + for (NodeDefinitionDelegateBuilder ndb : childNodeDefinitions) { + result.addChildNodeDefinitionDelegate(ndb.getNodeDefinitionDelegate()); + } + + return result; + } + + public void addPropertyDefinition(PropertyDefinitionDelegateBuilder pd) { + this.propertyDefinitions.add(pd); + } + + public void addNodeDefinition(NodeDefinitionDelegateBuilder nd) { + this.childNodeDefinitions.add(nd); + } + + public String convertNameToOak(String name) throws RepositoryException { + return ddbf.convertNameToOak(name); + } + } + + private class NodeDefinitionDelegateBuilder extends AbstractNodeDefinitionBuilder { + + private String declaringNodeType; + private String defaultPrimaryType; + private final List requiredPrimaryTypes = new ArrayList(); + + private final NodeTypeDefinitionDelegateBuilder ndtb; + + public NodeDefinitionDelegateBuilder(NodeTypeDefinitionDelegateBuilder ntdb) { + this.ndtb = ntdb; + } + + public NodeDefinitionDelegate getNodeDefinitionDelegate() { + return new NodeDefinitionDelegate(name, autocreate, isMandatory, onParent, isProtected, + requiredPrimaryTypes.toArray(new String[requiredPrimaryTypes.size()]), defaultPrimaryType, allowSns); + } + + @Override + public void setDefaultPrimaryType(String defaultPrimaryType) throws RepositoryException { + this.defaultPrimaryType = defaultPrimaryType; + } + + @Override + public void addRequiredPrimaryType(String name) throws RepositoryException { + this.requiredPrimaryTypes.add(name); + } + + @Override + public void setDeclaringNodeType(String declaringNodeType) throws RepositoryException { + this.declaringNodeType = declaringNodeType; + } + + @Override + public void build() throws RepositoryException { + this.ndtb.addNodeDefinition(this); + } + } + + private class PropertyDefinitionDelegateBuilder extends AbstractPropertyDefinitionBuilder { + + private String declaringNodeType; + private final List defaultValues = new ArrayList(); + private final List valueConstraints = new ArrayList(); + + private final NodeTypeDefinitionDelegateBuilder ndtb; + + public PropertyDefinitionDelegateBuilder(NodeTypeDefinitionDelegateBuilder ntdb) { + this.ndtb = ntdb; + } + + public PropertyDefinitionDelegate getPropertyDefinitionDelegate() throws RepositoryException { + + CoreValue[] defaultCoreValues = new CoreValue[defaultValues.size()]; + + for (int i = 0; i < defaultCoreValues.length; i++) { + // TODO: need name mapping? + defaultCoreValues[i] = cvf.createValue(defaultValues.get(i), requiredType); + } + + name = ndtb.convertNameToOak(name); + + return new PropertyDefinitionDelegate(name, autocreate, isMandatory, onParent, isProtected, requiredType, isMultiple, + defaultCoreValues); + } + + @Override + public void addValueConstraint(String constraint) throws RepositoryException { + this.valueConstraints.add(constraint); + } + + @Override + public void addDefaultValues(String value) throws RepositoryException { + this.defaultValues.add(value); + } + + @Override + public void setDeclaringNodeType(String declaringNodeType) throws RepositoryException { + this.declaringNodeType = declaringNodeType; + } + + @Override + public void build() throws RepositoryException { + this.ndtb.addPropertyDefinition(this); + } + } +} Propchange: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerDelegate.java ------------------------------------------------------------------------------ svn:eol-style = native 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=1356742&r1=1356741&r2=1356742&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 3 14:08:34 2012 @@ -16,10 +16,6 @@ */ package org.apache.jackrabbit.oak.jcr.nodetype; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -27,7 +23,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.jcr.NamespaceRegistry; import javax.jcr.RepositoryException; import javax.jcr.UnsupportedRepositoryOperationException; import javax.jcr.nodetype.NoSuchNodeTypeException; @@ -39,56 +34,29 @@ import javax.jcr.nodetype.NodeTypeManage import javax.jcr.nodetype.NodeTypeTemplate; import javax.jcr.nodetype.PropertyDefinitionTemplate; -import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader; -import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory; -import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractNodeDefinitionBuilder; -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.commons.iterator.NodeTypeIteratorAdapter; -import org.apache.jackrabbit.oak.api.CoreValue; -import org.apache.jackrabbit.oak.api.CoreValueFactory; import org.apache.jackrabbit.oak.jcr.SessionDelegate; import org.apache.jackrabbit.oak.jcr.value.ValueFactoryImpl; import org.apache.jackrabbit.oak.namepath.NameMapper; -import org.apache.jackrabbit.oak.plugins.name.NamespaceRegistryImpl; public class NodeTypeManagerImpl implements NodeTypeManager { private final ValueFactoryImpl vf; private final NameMapper mapper; - private final NamespaceRegistry nsregistry; - private final List typeDelegates; - + private final NodeTypeManagerDelegate ntmd; private final Map typemap = new HashMap(); public NodeTypeManagerImpl(SessionDelegate sd) throws RepositoryException { this.vf = sd.getValueFactory(); this.mapper = sd.getNamePathMapper(); - this.nsregistry = new NamespaceRegistryImpl(sd.getContentSession()); - - try { - InputStream stream = NodeTypeManagerImpl.class.getResourceAsStream("builtin_nodetypes.cnd"); - Reader reader = new InputStreamReader(stream, "UTF-8"); - try { - DefinitionBuilderFactory> dbf = new DefinitionDelegateBuilderFactory(); - CompactNodeTypeDefReader> cndr = new CompactNodeTypeDefReader>( - reader, null, dbf); - - typeDelegates = cndr.getNodeTypeDefinitions(); - } catch (ParseException ex) { - throw new RepositoryException("Failed to load built-in node types", ex); - } finally { - stream.close(); - } - } catch (IOException ex) { - throw new RepositoryException("Failed to load built-in node types", ex); - } + this.ntmd = new NodeTypeManagerDelegate(sd.getContentSession(), sd.getValueFactory().getCoreValueFactory()); } private void init() { if (typemap.isEmpty()) { - for (NodeTypeDelegate t : typeDelegates) { + List alltypes = ntmd.getAllNodeTypeDelegates(); + + for (NodeTypeDelegate t : alltypes) { NodeType nt = new NodeTypeImpl(this, vf, mapper, t); typemap.put(t.getName(), nt); } @@ -194,214 +162,4 @@ public class NodeTypeManagerImpl impleme public void unregisterNodeTypes(String[] names) throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } - - private class DefinitionDelegateBuilderFactory extends DefinitionBuilderFactory> { - - private Map nsmap = new HashMap(); - - @Override - public Map getNamespaceMapping() { - return nsmap; - } - - @Override - public AbstractNodeTypeDefinitionBuilder newNodeTypeDefinitionBuilder() throws RepositoryException { - return new NodeTypeDefinitionDelegateBuilder(this); - } - - @Override - public void setNamespace(String prefix, String uri) throws RepositoryException { - nsmap.put(prefix, uri); - } - - @Override - public void setNamespaceMapping(Map nsmap) { - this.nsmap = nsmap; - } - - 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; - } - } - } - } - - public List convertNamesToOak(List cndNames) throws RepositoryException { - List result = new ArrayList(); - for (String cndName : cndNames) { - result.add(convertNameToOak(cndName)); - } - return result; - } - } - - private class NodeTypeDefinitionDelegateBuilder extends AbstractNodeTypeDefinitionBuilder { - - private final List propertyDefinitions = new ArrayList(); - private final List childNodeDefinitions = new ArrayList(); - - private final DefinitionDelegateBuilderFactory ddbf; - - private String primaryItemName; - private List declaredSuperTypes = new ArrayList(); - - public NodeTypeDefinitionDelegateBuilder(DefinitionDelegateBuilderFactory ddbf) { - this.ddbf = ddbf; - } - - @Override - public void addSupertype(String superType) throws RepositoryException { - this.declaredSuperTypes.add(superType); - } - - @Override - public void setPrimaryItemName(String primaryItemName) throws RepositoryException { - this.primaryItemName = primaryItemName; - } - - @Override - public AbstractPropertyDefinitionBuilder newPropertyDefinitionBuilder() throws RepositoryException { - return new PropertyDefinitionDelegateBuilder(this); - } - - @Override - public AbstractNodeDefinitionBuilder newNodeDefinitionBuilder() throws RepositoryException { - return new NodeDefinitionDelegateBuilder(this); - } - - @Override - public NodeTypeDelegate build() throws RepositoryException { - - name = ddbf.convertNameToOak(name); - declaredSuperTypes = ddbf.convertNamesToOak(declaredSuperTypes); - primaryItemName = ddbf.convertNameToOak(primaryItemName); - - NodeTypeDelegate result = new NodeTypeDelegate(name, declaredSuperTypes.toArray(new String[declaredSuperTypes.size()]), - primaryItemName, isMixin, isAbstract, isOrderable); - - for (PropertyDefinitionDelegateBuilder pdb : propertyDefinitions) { - result.addPropertyDefinitionDelegate(pdb.getPropertyDefinitionDelegate(vf.getCoreValueFactory())); - } - - for (NodeDefinitionDelegateBuilder ndb : childNodeDefinitions) { - result.addChildNodeDefinitionDelegate(ndb.getNodeDefinitionDelegate()); - } - - return result; - } - - public void addPropertyDefinition(PropertyDefinitionDelegateBuilder pd) { - this.propertyDefinitions.add(pd); - } - - public void addNodeDefinition(NodeDefinitionDelegateBuilder nd) { - this.childNodeDefinitions.add(nd); - } - - public String convertNameToOak(String name) throws RepositoryException { - return ddbf.convertNameToOak(name); - } - } - - private class NodeDefinitionDelegateBuilder extends AbstractNodeDefinitionBuilder { - - private String declaringNodeType; - private String defaultPrimaryType; - private final List requiredPrimaryTypes = new ArrayList(); - - private final NodeTypeDefinitionDelegateBuilder ndtb; - - public NodeDefinitionDelegateBuilder(NodeTypeDefinitionDelegateBuilder ntdb) { - this.ndtb = ntdb; - } - - public NodeDefinitionDelegate getNodeDefinitionDelegate() { - return new NodeDefinitionDelegate(name, autocreate, isMandatory, onParent, isProtected, - requiredPrimaryTypes.toArray(new String[requiredPrimaryTypes.size()]), defaultPrimaryType, allowSns); - } - - @Override - public void setDefaultPrimaryType(String defaultPrimaryType) throws RepositoryException { - this.defaultPrimaryType = defaultPrimaryType; - } - - @Override - public void addRequiredPrimaryType(String name) throws RepositoryException { - this.requiredPrimaryTypes.add(name); - } - - @Override - public void setDeclaringNodeType(String declaringNodeType) throws RepositoryException { - this.declaringNodeType = declaringNodeType; - } - - @Override - public void build() throws RepositoryException { - this.ndtb.addNodeDefinition(this); - } - } - - private class PropertyDefinitionDelegateBuilder extends AbstractPropertyDefinitionBuilder { - - private String declaringNodeType; - private final List defaultValues = new ArrayList(); - private final List valueConstraints = new ArrayList(); - - private final NodeTypeDefinitionDelegateBuilder ndtb; - - public PropertyDefinitionDelegateBuilder(NodeTypeDefinitionDelegateBuilder ntdb) { - this.ndtb = ntdb; - } - - public PropertyDefinitionDelegate getPropertyDefinitionDelegate(CoreValueFactory cvf) throws RepositoryException { - - CoreValue[] defaultCoreValues = new CoreValue[defaultValues.size()]; - - for (int i = 0; i < defaultCoreValues.length; i++) { - // TODO: need name mapping? - defaultCoreValues[i] = cvf.createValue(defaultValues.get(i), requiredType); - } - - name = ndtb.convertNameToOak(name); - - return new PropertyDefinitionDelegate(name, autocreate, isMandatory, onParent, isProtected, requiredType, isMultiple, - defaultCoreValues); - } - - @Override - public void addValueConstraint(String constraint) throws RepositoryException { - this.valueConstraints.add(constraint); - } - - @Override - public void addDefaultValues(String value) throws RepositoryException { - this.defaultValues.add(value); - } - - @Override - public void setDeclaringNodeType(String declaringNodeType) throws RepositoryException { - this.declaringNodeType = declaringNodeType; - } - - @Override - public void build() throws RepositoryException { - this.ndtb.addPropertyDefinition(this); - } - } }