Return-Path: Delivered-To: apmail-incubator-jackrabbit-commits-archive@www.apache.org Received: (qmail 52722 invoked from network); 20 Oct 2004 16:12:31 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 20 Oct 2004 16:12:31 -0000 Received: (qmail 64602 invoked by uid 500); 20 Oct 2004 16:12:31 -0000 Mailing-List: contact jackrabbit-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jackrabbit-dev@incubator.apache.org Delivered-To: mailing list jackrabbit-commits@incubator.apache.org Received: (qmail 64588 invoked by uid 500); 20 Oct 2004 16:12:31 -0000 Delivered-To: apmail-incubator-jackrabbit-cvs@incubator.apache.org Received: (qmail 64585 invoked by uid 99); 20 Oct 2004 16:12:30 -0000 X-ASF-Spam-Status: No, hits=-10.0 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Wed, 20 Oct 2004 09:12:30 -0700 Received: (qmail 52685 invoked by uid 65534); 20 Oct 2004 16:12:29 -0000 Date: 20 Oct 2004 16:12:29 -0000 Message-ID: <20041020161229.52680.qmail@minotaur.apache.org> From: stefan@apache.org To: jackrabbit-cvs@incubator.apache.org Subject: svn commit: rev 55160 - in incubator/jackrabbit/trunk/src: java/org/apache/jackrabbit/core java/org/apache/jackrabbit/core/jndi/provider test/org/apache/jackrabbit/test X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Author: stefan Date: Wed Oct 20 09:12:27 2004 New Revision: 55160 Added: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/provider/ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/provider/DummyContext.java (contents, props changed) incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/provider/DummyInitialContextFactory.java (contents, props changed) Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Test.java incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/JackrabbitRepositoryStub.java Log: adding simple in-memory jndi context for testing purposes Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Test.java ============================================================================== --- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Test.java (original) +++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Test.java Wed Oct 20 09:12:27 2004 @@ -51,23 +51,14 @@ // fallback to cwd repHomeDir = System.getProperty("user.dir"); } - - RepositoryConfig repConf = RepositoryConfig.create(configDir + "/" + "repository.xml", repHomeDir); - Repository r = RepositoryImpl.create(repConf); -/* - // Set up the environment for creating the initial context + // set up the environment for creating the initial context Hashtable env = new Hashtable(); - //env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); - //env.put(Context.PROVIDER_URL, "file:./jndi"); - - env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ervacon.xnam.XMLInitialContextFactory"); - env.put(Context.PROVIDER_URL, "d:/temp/jndi.xml"); - - //env.put(Context.INITIAL_CONTEXT_FACTORY, "org.codehaus.spice.jndikit.memory.StaticMemoryInitialContextFactory"); + env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory"); InitialContext ctx = new InitialContext(env); + RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir, true); Repository r = (Repository) ctx.lookup("repo"); -*/ + Session session = r.login(new SimpleCredentials("anonymous", "".toCharArray()), null); Workspace wsp = session.getWorkspace(); Added: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/provider/DummyContext.java ============================================================================== --- (empty file) +++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/provider/DummyContext.java Wed Oct 20 09:12:27 2004 @@ -0,0 +1,398 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed 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.core.jndi.provider; + +import javax.naming.*; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Properties; + +/** + * DummyContext is a simple service provider that + * implements a flat namespace in memory. It is intended to be used for + * testing purposes only. + */ +class DummyContext extends Hashtable implements Context, Cloneable { + + private transient Hashtable environment; + + private static final NameParser nameParser = new FlatNameParser(); + + /** + * Constructs a new DummyContext instance + */ + DummyContext() { + this(null); + } + + /** + * Constructs a new DummyContext instance + * + * @param environment + */ + DummyContext(Hashtable environment) { + if (environment == null) { + this.environment = new Hashtable(); + } else { + this.environment = (Hashtable) environment.clone(); + } + } + + protected String getComponentName(Name name) throws NamingException { + if (name instanceof CompositeName) { + if (name.size() > 1) { + throw new InvalidNameException(name.toString() + " has more components than namespace can handle"); + } + return name.get(0); + } else { + // compound name + return name.toString(); + } + } + + protected Object getBoundObject(String name) throws NamingException { + Object obj = get(name); + if (obj == null) { + throw new NameNotFoundException(); + } else { + return obj; + } + } + + public Object clone() { + Object obj = super.clone(); + ((DummyContext) obj).environment = (Hashtable) environment.clone(); + return obj; + } + + //--------------------------------------------------------------< Context > + /** + * @see Context#bind(Name, Object) + */ + public void bind(Name name, Object obj) throws NamingException { + if (name.isEmpty()) { + throw new InvalidNameException("empty name"); + } + String n = getComponentName(name); + if (containsKey(n)) { + throw new NameAlreadyBoundException(); + } + put(n, obj); + } + + /** + * @see Context#bind(String, Object) + */ + public void bind(String name, Object obj) throws NamingException { + bind(new CompositeName(name), obj); + } + + /** + * @see Context#close() + */ + public void close() throws NamingException { + } + + /** + * @see Context#composeName(Name, Name) + */ + public Name composeName(Name name, Name prefix) throws NamingException { + Name newName = (Name) prefix.clone(); + return newName.addAll(name); + } + + /** + * @see Context#composeName(String, String) + */ + public String composeName(String name, String prefix) throws NamingException { + return composeName(new CompositeName(name), new CompositeName(prefix)).toString(); + } + + /** + * @see Context#createSubcontext(Name) + */ + public Context createSubcontext(Name name) throws NamingException { + throw new OperationNotSupportedException("subcontexts are not supported"); + } + + /** + * @see Context#createSubcontext(String) + */ + public Context createSubcontext(String name) throws NamingException { + return createSubcontext(new CompositeName(name)); + } + + /** + * @see Context#destroySubcontext(Name) + */ + public void destroySubcontext(Name name) throws NamingException { + throw new OperationNotSupportedException("subcontexts are not supported"); + } + + /** + * @see Context#destroySubcontext(String) + */ + public void destroySubcontext(String name) throws NamingException { + destroySubcontext(new CompositeName(name)); + } + + /** + * @see Context#getEnvironment() + */ + public Hashtable getEnvironment() throws NamingException { + return (Hashtable) environment.clone(); + } + + /** + * @see Context#getNameInNamespace() + */ + public String getNameInNamespace() throws NamingException { + throw new OperationNotSupportedException(); + } + + /** + * @see Context#getNameParser(Name) + */ + public NameParser getNameParser(Name name) throws NamingException { + return nameParser; + } + + /** + * @see Context#getNameParser(String) + */ + public NameParser getNameParser(String name) throws NamingException { + return nameParser; + } + + /** + * @see Context#list(Name) + */ + public NamingEnumeration list(Name name) throws NamingException { + if (name.isEmpty()) { + return new NamingEnum(this); + } + String n = getComponentName(name); + Object obj = getBoundObject(n); + if (obj instanceof Context) { + return ((Context) obj).list(""); + } else { + throw new NotContextException(name + " is not bound to a context"); + } + } + + /** + * @see Context#list(String) + */ + public NamingEnumeration list(String name) throws NamingException { + return list(new CompositeName(name)); + } + + /** + * @see Context#listBindings(Name) + */ + public NamingEnumeration listBindings(Name name) throws NamingException { + if (name.isEmpty()) { + return new BindingEnum(this); + } + String n = getComponentName(name); + Object obj = getBoundObject(n); + if (obj instanceof Context) { + return ((Context) obj).listBindings(""); + } else { + throw new NotContextException(name + " is not bound to a context"); + } + } + + /** + * @see Context#listBindings(String) + */ + public NamingEnumeration listBindings(String name) throws NamingException { + return listBindings(new CompositeName(name)); + } + + /** + * @see Context#lookup(Name) + */ + public Object lookup(Name name) throws NamingException { + if (name.isEmpty()) { + return clone(); + } + String n = getComponentName(name); + return getBoundObject(n); + } + + /** + * @see Context#lookup(String) + */ + public Object lookup(String name) throws NamingException { + return lookup(new CompositeName(name)); + } + + /** + * @see Context#lookupLink(Name) + */ + public Object lookupLink(Name name) throws NamingException { + // no special handling of links, delegate to lookup(Name) + return lookup(name); + } + + /** + * @see Context#lookupLink(String) + */ + public Object lookupLink(String name) throws NamingException { + return lookupLink(new CompositeName(name)); + } + + /** + * @see Context#rebind(Name, Object) + */ + public void rebind(Name name, Object obj) throws NamingException { + if (name.isEmpty()) { + throw new InvalidNameException("empty name"); + } + String n = getComponentName(name); + put(n, obj); + } + + /** + * @see Context#rebind(String, Object) + */ + public void rebind(String name, Object obj) throws NamingException { + rebind(new CompositeName(name), obj); + } + + /** + * @see Context#removeFromEnvironment(String) + */ + public Object removeFromEnvironment(String propName) throws NamingException { + return environment.remove(propName); + } + + /** + * @see Context#rename(Name, Name) + */ + public void rename(Name oldName, Name newName) throws NamingException { + if (oldName.isEmpty() || newName.isEmpty()) { + throw new InvalidNameException("empty name"); + } else { + Object obj = lookup(oldName); + bind(newName, obj); + unbind(oldName); + } + } + + /** + * @see Context#rename(String, String) + */ + public void rename(String oldName, String newName) throws NamingException { + rename(new CompositeName(oldName), new CompositeName(newName)); + } + + /** + * @see Context#unbind(Name) + */ + public void unbind(Name name) throws NamingException { + if (name.isEmpty()) { + throw new InvalidNameException("empty name"); + } + String n = getComponentName(name); + remove(n); + } + + /** + * @see Context#unbind(String) + */ + public void unbind(String name) throws NamingException { + unbind(new CompositeName(name)); + } + + /** + * @see Context#addToEnvironment(String, Object) + */ + public Object addToEnvironment(String propName, Object propVal) throws NamingException { + return environment.put(propName, propVal); + } + + //--------------------------------------------------------< inner classes > + /** + * FlatNameParser ... + */ + static class FlatNameParser implements NameParser { + + private static final Properties syntax = new Properties(); + + static { + syntax.put("jndi.syntax.direction", "flat"); + syntax.put("jndi.syntax.ignorecase", "false"); + } + + /** + * @see NameParser#parse(String) + */ + public Name parse(String name) throws NamingException { + return new CompoundName(name, syntax); + } + } + + /** + * NamingEnum ... + */ + class NamingEnum implements NamingEnumeration { + protected Enumeration namesEnum; + protected Hashtable bindings; + + NamingEnum(Hashtable bindings) { + namesEnum = bindings.keys(); + this.bindings = bindings; + } + + public boolean hasMoreElements() { + return namesEnum.hasMoreElements(); + } + + public boolean hasMore() throws NamingException { + return hasMoreElements(); + } + + public Object next() throws NamingException { + return nextElement(); + } + + public Object nextElement() { + String name = (String) namesEnum.nextElement(); + String className = bindings.get(name).getClass().getName(); + return new NameClassPair(name, className); + } + + public void close() throws NamingException { + } + } + + /** + * BindingEnum ... + */ + class BindingEnum extends NamingEnum { + + BindingEnum(Hashtable bindings) { + super(bindings); + } + + public Object nextElement() { + String name = (String) namesEnum.nextElement(); + return new Binding(name, bindings.get(name)); + } + } +} Added: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/provider/DummyInitialContextFactory.java ============================================================================== --- (empty file) +++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/provider/DummyInitialContextFactory.java Wed Oct 20 09:12:27 2004 @@ -0,0 +1,34 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed 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.core.jndi.provider; + +import javax.naming.spi.InitialContextFactory; +import javax.naming.Context; +import javax.naming.NamingException; +import java.util.Hashtable; + +/** + * DummyInitialContextFactory ... + */ +public class DummyInitialContextFactory implements InitialContextFactory { + + /** + * @see InitialContextFactory#getInitialContext(java.util.Hashtable) + */ + public Context getInitialContext(Hashtable environment) throws NamingException { + return new DummyContext(environment); + } +} Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/JackrabbitRepositoryStub.java ============================================================================== --- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/JackrabbitRepositoryStub.java (original) +++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/JackrabbitRepositoryStub.java Wed Oct 20 09:12:27 2004 @@ -23,7 +23,9 @@ import javax.jcr.RepositoryException; import javax.naming.InitialContext; import javax.naming.NamingException; +import javax.naming.Context; import java.util.Properties; +import java.util.Hashtable; /** * Implements the RepositoryStub for the JCR Reference Implementation. @@ -74,13 +76,13 @@ String repConfig = environment.getProperty(PROP_REPOSITORY_CONFIG); String repHome = environment.getProperty(PROP_REPOSITORY_HOME); - RepositoryConfig repConf = RepositoryConfig.create(repConfig, repHome); - repository = RepositoryImpl.create(repConf); -/* - InitialContext ctx = new InitialContext(); + // register repository instance + Hashtable env = new Hashtable(); + env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory"); + InitialContext ctx = new InitialContext(env); RegistryHelper.registerRepository(ctx, repName, repConfig, repHome, true); + repository = (Repository) ctx.lookup(repName); -*/ } catch (Exception e) { throw new RepositoryStubException(e.toString()); }