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