1 package com.atlassian.maven.plugins.amps.codegen;
2
3 import java.io.File;
4 import java.net.URL;
5 import java.net.URLClassLoader;
6 import java.util.ArrayList;
7 import java.util.List;
8 import java.util.Map;
9 import java.util.TreeMap;
10
11 import com.atlassian.maven.plugins.amps.codegen.annotations.asm.ProductContextProviderLocator;
12
13
14
15
16 public class ContextProviderFactory
17 {
18 protected static Map<String, String> providers = new TreeMap<String, String>();
19
20 public static void locateAvailableContextProviders(String productId, List<String> classpathElements) throws Exception
21 {
22 List<URL> conditionURLs = new ArrayList<URL>();
23 for (String path : classpathElements)
24 {
25 File aFile = new File(path);
26 conditionURLs.add(aFile.toURI()
27 .toURL());
28 }
29
30 URLClassLoader conditionLoader = URLClassLoader.newInstance(conditionURLs.toArray(new URL[]{}));
31 ClassLoader oldLoader = Thread.currentThread()
32 .getContextClassLoader();
33 Thread.currentThread()
34 .setContextClassLoader(conditionLoader);
35
36 ProductContextProviderLocator locator = new ProductContextProviderLocator(productId, providers);
37 locator.parse();
38
39 Thread.currentThread()
40 .setContextClassLoader(oldLoader);
41 }
42
43 public static Map<String, String> getAvailableContextProviders()
44 {
45 return providers;
46 }
47 }