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