/plugin-module-codegen-maven-client/src/main/java/com/atlassian/maven/plugins/amps/codegen/ContextProviderFactory.java

https://bitbucket.org/mmeinhold/amps · Java · 47 lines · 36 code · 8 blank · 3 comment · 1 complexity · ee3a5e234d2c572bf3ea9b183cacd168 MD5 · raw file

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