1   
2   package com.atlassian.maven.plugins.amps.product.studio;
3   
4   import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO_FECRU;
5   import static org.apache.commons.io.FileUtils.copyDirectory;
6   
7   import java.io.File;
8   import java.io.IOException;
9   import java.util.HashMap;
10  import java.util.List;
11  import java.util.Map;
12  
13  import org.apache.maven.plugin.MojoExecutionException;
14  import org.apache.tools.ant.taskdefs.Java;
15  
16  import com.atlassian.maven.plugins.amps.MavenContext;
17  import com.atlassian.maven.plugins.amps.MavenGoals;
18  import com.atlassian.maven.plugins.amps.Product;
19  import com.atlassian.maven.plugins.amps.ProductArtifact;
20  import com.atlassian.maven.plugins.amps.product.FeCruProductHandler;
21  import com.atlassian.maven.plugins.amps.util.ConfigFileUtils.Replacement;
22  
23  public class StudioFeCruProductHandler extends FeCruProductHandler implements StudioComponentProductHandler
24  {
25  
26      public StudioFeCruProductHandler(MavenContext context, MavenGoals goals)
27      {
28          super(context, goals);
29      }
30  
31      @Override
32      public String getId()
33      {
34          return STUDIO_FECRU;
35      }
36  
37      @Override
38      protected ProductArtifact getArtifact()
39      {
40          return new ProductArtifact("com.atlassian.studio", "studio-fisheye", "RELEASE");
41      }
42  
43      @Override
44      public Map<String, String> getSystemProperties(Product product)
45      {
46          Map<String, String> properties = new HashMap<String, String>(super.getSystemProperties(product));
47  
48          properties.put("fisheye.dev.mode", "true");
49  
50          // We also add common studio system properties
51          properties.putAll(product.getStudioProperties().getSystemProperties());
52  
53  
54          return properties;
55      }
56  
57      protected void extractProductHomeData(File productHomeData, File homeDir, Product ctx)
58              throws MojoExecutionException
59      {
60          try
61          {
62              copyDirectory(productHomeData, homeDir);
63          }
64          catch (IOException e)
65          {
66              throw new MojoExecutionException(String.format("Can't copy Fisheye's home directory from %s to %s", productHomeData.getAbsolutePath(),
67                      homeDir.getAbsolutePath()));
68          }
69      }
70  
71      @Override
72      public List<Replacement> getReplacements(Product ctx)
73      {
74          List<Replacement> replacements = super.getReplacements(ctx);
75          replacements.add(new Replacement("%TEST-CONTROL-BIND%", String.valueOf(controlPort(ctx.getHttpPort()))));
76          replacements.add(new Replacement("%TEST-HTTP-BIND%", String.valueOf(this.getDefaultHttpPort())));
77          return replacements;
78      }
79  
80      @Override
81      protected void addProductHandlerOverrides(Product ctx, File homeDir, File explodedWarDir) throws MojoExecutionException
82      {
83          // Note: this config.xml is in the War.
84          StudioProductHandler.addProductHandlerOverrides(log, ctx, homeDir, explodedWarDir, "config.xml");
85      }
86  
87      @Override
88      protected void addOverridesToJavaTask(final Product ctx, Java java)
89      {
90          java.setFork(true);
91          java.setDir(getAppDirectory(ctx));
92      }
93  }