1   package com.atlassian.maven.plugins.amps.codegen.jira;
2   
3   import java.io.File;
4   import java.lang.reflect.Field;
5   import java.net.MalformedURLException;
6   import java.net.URL;
7   import java.net.URLClassLoader;
8   import java.util.ArrayList;
9   import java.util.Collection;
10  import java.util.Collections;
11  import java.util.List;
12  
13  /**
14   * @since 3.5
15   */
16  public class ActionTypeFactory
17  {
18      protected static List<String> availableActionTypes;
19  
20      public static void locateAvailableActionTypes(List<String> classpathElements) throws MalformedURLException
21      {
22          List<URL> classpathURLs = new ArrayList<URL>();
23          for (String path : classpathElements)
24          {
25              File aFile = new File(path);
26              classpathURLs.add(aFile.toURI()
27                      .toURL());
28          }
29  
30          URLClassLoader productClassLoader = URLClassLoader.newInstance(classpathURLs.toArray(new URL[]{}));
31  
32          try
33          {
34              Class workflowClass = productClassLoader.loadClass("com.atlassian.jira.workflow.JiraWorkflow");
35              Field allTypesField = workflowClass.getField("ACTION_TYPE_ALL");
36              Collection<String> allTypes = (Collection<String>) allTypesField.get(null);
37              availableActionTypes = new ArrayList<String>(allTypes);
38  
39          } catch (Exception e)
40          {
41              //don't care
42          }
43  
44      }
45  
46      public static List<String> getAvailableActionTypes()
47      {
48          if (null == availableActionTypes)
49          {
50              availableActionTypes = new ArrayList<String>();
51          }
52  
53          Collections.sort(availableActionTypes);
54  
55          return Collections.unmodifiableList(availableActionTypes);
56      }
57  }