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