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