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