7fa399a70bd4d9637e2f99105ee7aa602aea8449
[scilab.git] / scilab / modules / javasci / src / java / javasci / ClassPath.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA - Allan CORNET
4  * 
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at    
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 /*--------------------------------------------------------------------------*/
14 /**
15  * Loading classes at runtime.
16  * @author Allan CORNET - INRIA 2007
17  */
18 /*--------------------------------------------------------------------------*/
19 package javasci;
20 /*--------------------------------------------------------------------------*/ 
21 import java.lang.reflect.Method;
22 import java.lang.reflect.InvocationTargetException;
23 import java.io.File;
24 import java.io.IOException;
25 import java.net.URL;
26 import java.net.URLClassLoader;
27 import java.net.URI;
28 /*--------------------------------------------------------------------------*/
29 /**
30  * ClassPath to overload java classpath.
31  */
32 public class ClassPath {
33
34         private static final Class[] parameters = new Class[]{URL.class};
35
36         /**
37          * Constructor
38          */
39         protected ClassPath() {
40                 /*  indicate that the requested operation is not supported */
41                 throw new UnsupportedOperationException();              
42         }
43
44         /**
45          * add a filename to java classpath.
46          * @param s a filename
47          * @throws IOException if an error occurs
48          */
49         public static void addFile(final String s) throws IOException {
50                 File f = new File(s);
51                 addFile(f);
52         }
53         /*--------------------------------------------------------------------------*/
54         /**
55          * add a file to java classpath.
56          * @param  f a file
57          * @throws IOException if an error occurs
58          */
59         public static void addFile(final File f) throws IOException {
60         
61                 URI uri = f.toURI();
62                 addURL(uri.toURL());
63         }
64         /*--------------------------------------------------------------------------*/
65         /**
66          * add a URL to classpath.
67          * @param u URL
68          * @throws IOException if an error occurs 
69          */
70         public static void addURL(final URL u) throws IOException {
71
72                 URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
73                 Class sysclass = URLClassLoader.class;
74
75                 try {
76                         Method method = sysclass.getDeclaredMethod("addURL", parameters);
77                         method.setAccessible(true);
78                         method.invoke(sysloader , new Object[] {u });
79                 } catch (NoSuchMethodException e) {
80                         throw new IOException("Error NoSuchMethodException, could not add URL to system classloader");
81                 } catch (IllegalAccessException e) {
82                         throw new IOException("Error IllegalAccessException, could not add URL to system classloader");
83                 } catch (InvocationTargetException e) {
84                         throw new IOException("Error InvocationTargetException, could not add URL to system classloader");
85                 }
86
87         }
88         /*--------------------------------------------------------------------------*/
89         /**
90          * get the scilab classpath.
91          * @return classpath
92          */
93         public static String[] getClassPath() {
94         
95                 URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
96                 URL[] path = sysloader.getURLs();
97                 String[] paths = new String[path.length];
98                 for (int i = 0; i < path.length; i++) {
99                         paths[i] = path[i].getFile();
100                 }
101                 return paths;
102         }
103         /*--------------------------------------------------------------------------*/
104 }
105 /*--------------------------------------------------------------------------*/
106