1 // ========================================================================
2 // $Id: javaURLContextFactory.java 231 2006-02-19 15:09:58Z janb $
3 // Copyright 1999-2006 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 package org.mortbay.naming.java;
17
18 import java.util.Hashtable;
19
20 import javax.naming.Context;
21 import javax.naming.Name;
22 import javax.naming.NamingException;
23 import javax.naming.spi.ObjectFactory;
24
25 import org.mortbay.log.Log;
26
27
28 /** javaURLContextFactory
29 * <p>This is the URL context factory for the java: URL.
30 *
31 * <p><h4>Notes</h4>
32 * <p>
33 *
34 * <p><h4>Usage</h4>
35 * <pre>
36 */
37 /*
38 * </pre>
39 *
40 * @see
41 *
42 * @author <a href="mailto:janb@mortbay.com">Jan Bartel</a>
43 * @version 1.0
44 */
45 public class javaURLContextFactory implements ObjectFactory
46 {
47
48 /**
49 * Either return a new context or the resolution of a url.
50 *
51 * @param url an <code>Object</code> value
52 * @param name a <code>Name</code> value
53 * @param ctx a <code>Context</code> value
54 * @param env a <code>Hashtable</code> value
55 * @return a new context or the resolved object for the url
56 * @exception Exception if an error occurs
57 */
58 public Object getObjectInstance(Object url, Name name, Context ctx, Hashtable env)
59 throws Exception
60 {
61 // null object means return a root context for doing resolutions
62 if (url == null)
63 {
64 if(Log.isDebugEnabled())Log.debug(">>> new root context requested ");
65 return new javaRootURLContext(env);
66 }
67
68 // return the resolution of the url
69 if (url instanceof String)
70 {
71 if(Log.isDebugEnabled())Log.debug(">>> resolution of url "+url+" requested");
72 Context rootctx = new javaRootURLContext (env);
73 return rootctx.lookup ((String)url);
74 }
75
76 // return the resolution of at least one of the urls
77 if (url instanceof String[])
78 {
79 if(Log.isDebugEnabled())Log.debug(">>> resolution of array of urls requested");
80 String[] urls = (String[])url;
81 Context rootctx = new javaRootURLContext (env);
82 Object object = null;
83 NamingException e = null;
84 for (int i=0;(i< urls.length) && (object == null); i++)
85 {
86 try
87 {
88 object = rootctx.lookup (urls[i]);
89 }
90 catch (NamingException x)
91 {
92 e = x;
93 }
94 }
95
96 if (object == null)
97 throw e;
98 else
99 return object;
100 }
101
102 if(Log.isDebugEnabled())Log.debug(">>> No idea what to do, so return a new root context anyway");
103 return new javaRootURLContext (env);
104 }
105 };