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