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