1   package com.atlassian.maven.plugins.amps.product.studio;
2   
3   import com.atlassian.maven.plugins.amps.MavenContext;
4   import com.atlassian.maven.plugins.amps.MavenGoals;
5   import com.atlassian.maven.plugins.amps.Product;
6   import com.atlassian.maven.plugins.amps.ProductArtifact;
7   import com.atlassian.maven.plugins.amps.product.JiraProductHandler;
8   import com.atlassian.maven.plugins.amps.util.ConfigFileUtils;
9   import com.atlassian.maven.plugins.amps.util.ConfigFileUtils.Replacement;
10  import com.atlassian.maven.plugins.amps.util.JvmArgsFix;
11  import com.google.common.collect.Lists;
12  import org.apache.maven.plugin.MojoExecutionException;
13  
14  import java.io.File;
15  import java.io.FilenameFilter;
16  import java.util.HashMap;
17  import java.util.List;
18  import java.util.Map;
19  
20  import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO_JIRA;
21  
22  /**
23   * Handler for Studio-JIRA
24   * @since 3.6
25   */
26  public class StudioJiraProductHandler extends JiraProductHandler implements StudioComponentProductHandler
27  {
28      public StudioJiraProductHandler(final MavenContext context, final MavenGoals goals)
29      {
30          super(context, goals);
31      }
32  
33  
34      @Override
35      public String getId()
36      {
37          return STUDIO_JIRA;
38      }
39  
40      @Override
41      public ProductArtifact getArtifact()
42      {
43          return new ProductArtifact("com.atlassian.jira", "jira-ondemand-webapp", "RELEASE");
44      }
45  
46      @Override
47      protected void customiseInstance(Product ctx, File homeDir, File explodedWarDir) throws MojoExecutionException
48      {
49  
50          // change database to hsql
51          List<File> configFiles = Lists.newArrayList();
52          configFiles.add(new File(explodedWarDir, "WEB-INF/classes/entityengine.xml"));
53          configFiles.add(new File(explodedWarDir, "WEB-INF/web.xml"));
54  
55          List<Replacement> replacements = Lists.newArrayList();
56          replacements.add(new Replacement("field-type-name=\"postgres72\"", "field-type-name=\"hsql\"", false));
57          replacements.add(new Replacement("schema-name=\"public\"", "schema-name=\"PUBLIC\"", false));
58          replacements.add(new Replacement("%JIRA-HOME%", homeDir.getAbsolutePath()));
59  
60          ConfigFileUtils.replace(configFiles, replacements, false, log);
61  
62          File importsDir = new File(homeDir, "import");
63          if (importsDir.exists())
64          {
65              configFiles = Lists.newArrayList(importsDir.listFiles(new FilenameFilter()
66              {
67                  @Override
68                  public boolean accept(File dir, String name)
69                  {
70                      return name.endsWith(".xml");
71                  }
72              }));
73              replacements = Lists.newArrayList(new Replacement("%JIRA-HOME%", homeDir.getAbsolutePath()));
74              ConfigFileUtils.replace(configFiles, replacements, false, log);
75          }
76  
77          StudioProductHandler.addProductHandlerOverrides(log, ctx, homeDir, explodedWarDir);
78      }
79  
80      // JIRA needs a bit more heap and PermGen - default is -Xmx512m -XX:MaxPermSize=256m (see JvmArgsFix)
81      protected void fixJvmArgs(Product ctx)
82      {
83          final String jvmArgs = JvmArgsFix.empty()
84                  .with("-Xms", "256m")
85                  .with("-Xmx", "768m")
86                  .with("-XX:MaxPermSize=", "512m")
87                  .apply(ctx.getJvmArgs());
88          ctx.setJvmArgs(jvmArgs);
89      }
90  
91      @Override
92      public Map<String, String> getSystemProperties(Product product)
93      {
94          Map<String, String> properties = new HashMap<String, String>(super.getSystemProperties(product));
95  
96          // We also add common studio system properties
97          properties.putAll(product.getStudioProperties().getSystemProperties());
98  
99          return properties;
100     }
101 }