1   
2   package com.atlassian.maven.plugins.amps.product.studio;
3   
4   import com.atlassian.maven.plugins.amps.MavenContext;
5   import com.atlassian.maven.plugins.amps.MavenGoals;
6   import com.atlassian.maven.plugins.amps.Product;
7   import com.atlassian.maven.plugins.amps.ProductArtifact;
8   import com.atlassian.maven.plugins.amps.product.BambooProductHandler;
9   import org.apache.maven.plugin.MojoExecutionException;
10  
11  import java.io.File;
12  import java.util.Arrays;
13  import java.util.HashMap;
14  import java.util.List;
15  import java.util.Map;
16  
17  import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO_BAMBOO;
18  import static com.atlassian.maven.plugins.amps.util.FileUtils.fixWindowsSlashes;
19  import static java.lang.String.format;
20  
21  /**
22   * Handler for Studio-Bamboo
23   * @since 3.6
24   */
25  public class StudioBambooProductHandler extends BambooProductHandler
26  {
27  
28      public StudioBambooProductHandler(MavenContext context, MavenGoals goals)
29      {
30          super(context, goals);
31      }
32  
33      @Override
34      public String getId()
35      {
36          return STUDIO_BAMBOO;
37      }
38  
39      @Override
40      public ProductArtifact getArtifact()
41      {
42          return new ProductArtifact("com.atlassian.studio", "studio-bamboo", "RELEASE");
43      }
44  
45      @Override
46      public void processHomeDirectory(Product ctx, File homeDir) throws MojoExecutionException
47      {
48          super.processHomeDirectory(ctx, homeDir);
49  
50          StudioProductHandler.processProductsHomeDirectory(log, ctx, homeDir);
51      }
52  
53      @Override
54      protected void customiseInstance(Product ctx, File homeDir, File explodedWarDir) throws MojoExecutionException
55      {
56          StudioProductHandler.addProductHandlerOverrides(log, ctx, homeDir, explodedWarDir);
57      }
58  
59      @Override
60      public List<ProductArtifact> getExtraContainerDependencies()
61      {
62          return Arrays.asList(
63                  new ProductArtifact("hsqldb", "hsqldb", "1.8.0.5"),
64                  new ProductArtifact("jta", "jta", "1.0.1"));
65      }
66  
67      @Override
68      public Map<String, String> getSystemProperties(final Product product)
69      {
70          Map<String, String> systemProperties = new HashMap<String, String>(super.getSystemProperties(product));
71  
72          // This datasource is only used by the Studio version of Confluence:
73          final String dburl = System.getProperty("amps.datasource.url",
74                  format("jdbc:hsqldb:%s/database", fixWindowsSlashes(getHomeDirectory(product).getAbsolutePath())));
75          final String driverClass = System.getProperty("amps.datasource.driver", "org.hsqldb.jdbcDriver");
76          final String username = System.getProperty("amps.datasource.username", "sa");
77          final String password = System.getProperty("amps.datasource.password", "");
78          final String datasourceTypeClass = "javax.sql.DataSource";
79  
80          final String datasource = format("cargo.datasource.url=%s", dburl);
81          final String driver = format("cargo.datasource.driver=%s", driverClass);
82          final String datasourceUsername = format("cargo.datasource.username=%s", username);
83          final String datasourcePassword = format("cargo.datasource.password=%s", password);
84          final String datasourceType = "cargo.datasource.type=" + datasourceTypeClass;
85          final String jndi = "cargo.datasource.jndi=jdbc/DefaultDS";
86  
87          systemProperties.put("cargo.datasource.datasource",
88                  format("%s|%s|%s|%s|%s|%s", datasource, driver, datasourceUsername, datasourcePassword, datasourceType, jndi));
89  
90          // We also add common studio system properties
91          systemProperties.putAll(product.getStudioProperties().getSystemProperties());
92  
93          return systemProperties;
94      }
95  
96  }