001 /*******************************************************************************
002 * Copyright (C) PicoContainer Organization. All rights reserved.
003 * ---------------------------------------------------------------------------
004 * The software in this package is published under the terms of the BSD style
005 * license a copy of which has been included with this distribution in the
006 * LICENSE.txt file.
007 ******************************************************************************/
008 package org.picocontainer.script.util;
009
010
011 import java.net.URL;
012 import java.net.MalformedURLException;
013 import java.security.AccessController;
014 import java.security.PrivilegedAction;
015 import java.io.File;
016
017 import org.picocontainer.classname.ClassPathElement;
018 import org.picocontainer.classname.ClassLoadingPicoContainer;
019 import org.picocontainer.script.ScriptedPicoContainerMarkupException;
020
021 public class ClassPathElementHelper {
022 public static final String HTTP = "http://";
023
024 public static ClassPathElement addClassPathElement(final String path, ClassLoadingPicoContainer container) {
025 URL pathURL;
026 try {
027 if (path.toLowerCase().startsWith(HTTP)) {
028 pathURL = new URL(path);
029 } else {
030 Object rVal = AccessController.doPrivileged(new PrivilegedAction<Object>() {
031 public Object run() {
032 try {
033 File file = new File(path);
034 if (!file.exists()) {
035 return new ScriptedPicoContainerMarkupException("classpath '" + path + "' does not exist ");
036 }
037 return file.toURI().toURL();
038 } catch (MalformedURLException e) {
039 return e;
040 }
041
042 }
043 });
044 if (rVal instanceof MalformedURLException) {
045 throw (MalformedURLException) rVal;
046 }
047 if (rVal instanceof ScriptedPicoContainerMarkupException) {
048 throw (ScriptedPicoContainerMarkupException) rVal;
049 }
050 pathURL = (URL) rVal;
051 }
052 } catch (MalformedURLException e) {
053 throw new ScriptedPicoContainerMarkupException("classpath '" + path + "' malformed ", e);
054 }
055 return container.addClassLoaderURL(pathURL);
056 }
057 }