0b91658a187399758e5e8dac99f884749c0d048e
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / main / java / org / opendaylight / controller / sal / binding / impl / util / ClassLoaderUtils.java
1 package org.opendaylight.controller.sal.binding.impl.util;
2
3
4
5 import java.util.concurrent.Callable;
6
7 import static com.google.common.base.Preconditions.*;
8
9 import java.lang.reflect.Constructor;
10 import java.lang.reflect.InvocationTargetException;
11 import java.util.ArrayList;
12
13 public class ClassLoaderUtils {
14     
15     public static <V> V withClassLoader(ClassLoader cls,Callable<V> function) throws Exception {
16         checkNotNull(cls);
17         checkNotNull(function);
18         ClassLoader oldCls = Thread.currentThread().getContextClassLoader();
19         try {
20             Thread.currentThread().setContextClassLoader(cls);
21             V result = function.call();
22             Thread.currentThread().setContextClassLoader(oldCls);
23             return result;
24         } catch (Exception e) {
25             Thread.currentThread().setContextClassLoader(oldCls);
26             throw new Exception(e);
27         }
28     }
29
30     public static Object construct(Constructor<? extends Object> constructor, ArrayList<Object> objects) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
31     Object[] initargs = objects.toArray(new Object[]{});
32     return constructor.newInstance(initargs);
33     }
34     
35     
36     public static Class<?> loadClassWithTCCL(String name) throws ClassNotFoundException {
37         return Thread.currentThread().getContextClassLoader().loadClass(name);
38     }
39 }