View Javadoc

1   package com.atlassian.plugin.loaders.classloading;
2   
3   import java.io.File;
4   import java.io.IOException;
5   import java.net.URISyntaxException;
6   import java.net.URL;
7   
8   import com.atlassian.plugin.test.PluginTestUtils;
9   import com.atlassian.plugin.util.ClassLoaderUtils;
10  
11  import org.apache.commons.io.FileUtils;
12  
13  public class DirectoryPluginLoaderUtils
14  {
15      private static final String TEST_PLUGIN_DIRECTORY = "ap-plugins";
16      public static final String PADDINGTON_JAR = "paddington-test-plugin.jar";
17      public static final String POOH_JAR = "pooh-test-plugin.jar";
18  
19      /**
20       * Copies the test plugins to a new temporary directory and returns that directory.
21       */
22      public static File copyTestPluginsToTempDirectory() throws IOException
23      {
24          File directory = PluginTestUtils.createTempDirectory(DirectoryPluginLoaderUtils.class);
25          FileUtils.copyDirectory(getTestPluginsDirectory(), directory);
26  
27          // Clean up version control files in case we copied them by mistake.
28          FileUtils.deleteDirectory(new File(directory, "CVS"));
29          FileUtils.deleteDirectory(new File(directory, ".svn"));
30  
31          return directory;
32      }
33  
34      /**
35       * Returns the directory on the classpath where the test plugins live.
36       */
37      public static File getTestPluginsDirectory()
38      {
39          URL url = ClassLoaderUtils.getResource(TEST_PLUGIN_DIRECTORY, DirectoryPluginLoaderUtils.class);
40          try
41          {
42              return new File(url.toURI());
43          }
44          catch (URISyntaxException e)
45          {
46              // Shouldn't happen, but fallback to getFile if the above fails. getFile breaks for paths with spaces
47              // and other special characters because they get URL encoded
48              return new File(url.getFile());
49          }
50      }
51  
52      public static ScannerDirectories createFillAndCleanTempPluginDirectory() throws IOException
53      {
54          File pluginsDirectory = getTestPluginsDirectory();
55          File pluginsTestDir = copyTestPluginsToTempDirectory();
56          return new ScannerDirectories(pluginsDirectory, pluginsTestDir);
57      }
58  
59      public static class ScannerDirectories
60      {
61          public final File pluginsDirectory;
62          public final File pluginsTestDir;
63  
64          public ScannerDirectories(File pluginsDirectory, File pluginsTestDir)
65          {
66              this.pluginsDirectory = pluginsDirectory;
67              this.pluginsTestDir = pluginsTestDir;
68          }
69      }
70  }