1   package com.atlassian.sdk.accept;
2   
3   import java.io.File;
4   import java.io.IOException;
5   import java.util.*;
6   
7   import com.atlassian.maven.plugins.amps.util.ZipUtils;
8   
9   import org.apache.commons.io.FileUtils;
10  import org.apache.commons.io.FilenameUtils;
11  import org.apache.commons.lang.StringUtils;
12  
13  import junit.framework.Assert;
14  
15  public class SdkHelper
16  {
17      public static File setupSdk(File baseDir) throws IOException
18      {
19          File sdkZip = isWindows() ? new File(System.getProperty("sdk.zip")) : new File(System.getProperty("sdk.tar"));
20          String extension = isWindows() ? ".zip" : ".tar.gz";
21          
22          baseDir.mkdirs();
23          unzip(sdkZip, baseDir);
24  
25          return new File(baseDir, StringUtils.substringBefore(sdkZip.getName(),extension));
26      }
27  
28      public static void runSdkScript(File sdkHome, File baseDir, String scriptName, String... args)
29              throws IOException, InterruptedException
30      {
31          String extension = isWindows() ? ".bat" : "";
32          File bin = new File(sdkHome, "bin");
33  
34          ExecRunner runner = new ExecRunner();
35          File command = new File(bin, scriptName + extension);
36  
37          if (!isWindows())
38          {
39              runner.run(baseDir, Arrays.asList(
40                      "/bin/chmod",
41                      "755",
42                      sdkHome.getAbsolutePath() + "/apache-maven/bin/mvn",
43                      command.getAbsolutePath()), Collections.<String, String>emptyMap());
44          }
45          List<String> cmdlist = new ArrayList<String>(Arrays.asList(args));
46          cmdlist.add("-Dallow.google.tracking=false");
47          cmdlist.add(0, command.getAbsolutePath());
48          cmdlist.add("-s");
49          cmdlist.add(file(sdkHome, "apache-maven", "conf", "settings.xml").getPath());
50  
51          Assert.assertEquals(0, runner.run(baseDir, cmdlist, new HashMap<String, String>()
52          {{
53                  put("MAVEN_OPTS", "-Xmx256m");
54                  put("JAVA_HOME", System.getProperty("java.home"));
55                  put("PATH", System.getenv("PATH"));
56              }}));
57      }
58  
59      public static boolean isWindows()
60      {
61          String myos = System.getProperty("os.name");
62          return (myos.toLowerCase(Locale.ENGLISH).indexOf("windows") > -1);
63      }
64  
65      private static void unzip(File zipfile, File baseDir) throws IOException
66      {
67          if (FilenameUtils.isExtension(zipfile.getName(), "zip"))
68          {
69              ZipUtils.unzip(zipfile, baseDir.getAbsolutePath());
70          }
71          else
72          {
73              ZipUtils.untargz(zipfile, baseDir.getAbsolutePath());
74          }
75      }
76  
77      public static File file(File parent, String... kids)
78      {
79          File cur = parent;
80          for (String kid : kids)
81          {
82              cur = new File(cur, kid);
83          }
84          return cur;
85      }
86  
87      public static File createPlugin(String productId, File baseDir, File sdkHome, String prefix) throws IOException, InterruptedException
88      {
89          final String artifactId = prefix + "-" + productId + "-plugin";
90          final File appDir = new File(baseDir, artifactId);
91          FileUtils.deleteDirectory(appDir);
92  
93          runSdkScript(sdkHome, baseDir, "atlas-create-" + productId + "-plugin",
94                  "-a", artifactId,
95                  "-g", "com.example",
96                  "-p", "com.example.foo",
97                  "-v", "1.0-SNAPSHOT",
98                  "--non-interactive");
99  
100         Assert.assertTrue(appDir.exists());
101         return appDir;
102     }
103 }