/**
* EasyBeans
* Copyright (C) 2007 Bull S.A.S.
* Contact: easybeans@ow2.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* --------------------------------------------------------------------------
* $Id: URLFactory.java 5369 2010-02-24 14:58:19Z benoitf $
* --------------------------------------------------------------------------
*/
package org.ow2.easybeans.naming.url;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.spi.ObjectFactory;
/**
* Allow to lookup java.net.URL object.
* @author Florent BENOIT
*/
public class URLFactory implements ObjectFactory {
/**
* The Java type for which this factory knows how to create objects.
*/
protected static final String FACTORY_TYPE = "java.net.URL";
/**
* Creates a java.net.URL object using the location or reference information
* specified.
* @param obj the possibly null object containing location or reference
* information that can be used in creating an object.
* @param name the name of this object relative to nameCtx, or null if no
* name is specified.
* @param nameCtx the context relative to which the name parameter is
* specified, or null if name is relative to the default initial
* context.
* @param environment the possibly null environment that is used in creating
* the object.
* @return a newly created java.net.URL object with the specific
* configuration; null if an object cannot be created.
* @throws NamingException if this object factory encountered an exception while
* attempting to create an object, and no other object factories are
* to be tried.
*/
public Object getObjectInstance(final Object obj, final Name name, final Context nameCtx, final Hashtable<?, ?> environment)
throws NamingException {
// Get the reference
Reference ref = (Reference) obj;
// Get the class name
String clname = ref.getClassName();
// Check the class name
if (!ref.getClassName().equals(FACTORY_TYPE)) {
throw new NamingException("Cannot create object : required type is '" + FACTORY_TYPE + "', but found type is '"
+ clname + "'.");
}
URL url = null;
String urlString = (String) ref.get("url").getContent();
if (urlString != null) {
try {
url = new URL(urlString);
} catch (MalformedURLException e) {
NamingException ne = new NamingException("Cannot build an URL with the given string '" + urlString + "'");
ne.initCause(e);
throw ne;
}
} else {
throw new NamingException("Can not build an object as no URL was given.");
}
return url;
}
}