1 package com.atlassian.maven.plugins.amps.product;
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.util.ConfigFileUtils;
8 import com.atlassian.maven.plugins.amps.util.ConfigFileUtils.Replacement;
9 import org.apache.maven.plugin.MojoExecutionException;
10 import java.io.File;
11 import java.io.IOException;
12 import java.util.*;
13
14 import static com.atlassian.maven.plugins.amps.util.FileUtils.deleteDir;
15
16 public class BambooProductHandler extends AbstractWebappProductHandler
17 {
18 public BambooProductHandler(MavenContext context, MavenGoals goals)
19 {
20 super(context, goals, new BambooPluginProvider());
21 }
22
23 public String getId()
24 {
25 return "bamboo";
26 }
27
28 public ProductArtifact getArtifact()
29 {
30 return new ProductArtifact("com.atlassian.bamboo", "atlassian-bamboo-web-app", "RELEASE");
31 }
32
33 protected Collection<ProductArtifact> getSalArtifacts(String salVersion)
34 {
35 return Arrays.asList(
36 new ProductArtifact("com.atlassian.sal", "sal-api", salVersion),
37 new ProductArtifact("com.atlassian.sal", "sal-bamboo-plugin", salVersion));
38 }
39
40 public ProductArtifact getTestResourcesArtifact()
41 {
42 return new ProductArtifact("com.atlassian.bamboo.plugins", "bamboo-plugin-test-resources");
43 }
44
45 public int getDefaultHttpPort()
46 {
47 return 6990;
48 }
49
50 public Map<String, String> getSystemProperties(Product ctx)
51 {
52 Map<String, String> systemProperties = new HashMap<String, String>();
53 systemProperties.put("bamboo.home", getHomeDirectory(ctx).getPath());
54 systemProperties.put("org.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES", "false");
55 return Collections.unmodifiableMap(systemProperties);
56 }
57
58 @Override
59 public File getUserInstalledPluginsDirectory(final File webappDir, final File homeDir)
60 {
61 return new File(homeDir, "plugins");
62 }
63
64 public List<ProductArtifact> getExtraContainerDependencies()
65 {
66 return Collections.emptyList();
67 }
68
69 public String getBundledPluginPath(Product ctx)
70 {
71 return "WEB-INF/classes/atlassian-bundled-plugins.zip";
72 }
73
74 public void processHomeDirectory(final Product ctx, final File homeDir) throws MojoExecutionException
75 {
76 super.processHomeDirectory(ctx, homeDir);
77
78
79 ConfigFileUtils.replaceAll(new File(homeDir, "/xml-data/configuration/administration.xml"),
80 "http://(?:[^:]+|\\[.+]):8085", "http://" + ctx.getServer() + ":" + ctx.getHttpPort() + "/" + ctx.getContextPath().replaceAll("^/|/$", ""));
81 }
82
83
84
85 @Override
86 public List<Replacement> getReplacements(Product product)
87 {
88 List<Replacement> replacements = super.getReplacements(product);
89 File homeDirectory = getHomeDirectory(product);
90 replacements.add(new Replacement("@project-dir@", homeDirectory.getParent()));
91 replacements.add(new Replacement("/bamboo-home/", "/home/"));
92 replacements.add(new Replacement("${bambooHome}", homeDirectory.getAbsolutePath()));
93 return replacements;
94 }
95
96 @Override
97 public List<File> getConfigFiles(Product product, File homeDirectory)
98 {
99 List<File> configFiles = super.getConfigFiles(product, homeDirectory);
100 configFiles.add(new File(homeDirectory, "bamboo.cfg.xml"));
101 configFiles.add(new File(homeDirectory, "database/defaultdb.log"));
102 configFiles.add(new File(homeDirectory, "database/defaultdb.script"));
103 configFiles.add(new File(homeDirectory, "database.log"));
104 configFiles.add(new File(homeDirectory, "database.script"));
105 return configFiles;
106 }
107
108 public List<ProductArtifact> getDefaultLibPlugins()
109 {
110 return Collections.emptyList();
111 }
112
113 public List<ProductArtifact> getDefaultBundledPlugins()
114 {
115 return Collections.emptyList();
116 }
117
118 @Override
119 public void cleanupProductHomeForZip(Product bamboo, File genDir) throws MojoExecutionException, IOException
120 {
121 super.cleanupProductHomeForZip(bamboo, genDir);
122 deleteDir(new File(genDir, "jms-store"));
123 deleteDir(new File(genDir, "caches"));
124 deleteDir(new File(genDir, "logs"));
125 }
126
127 private static class BambooPluginProvider extends AbstractPluginProvider
128 {
129
130 @Override
131 protected Collection<ProductArtifact> getSalArtifacts(String salVersion)
132 {
133 return Arrays.asList(
134 new ProductArtifact("com.atlassian.sal", "sal-api", salVersion),
135 new ProductArtifact("com.atlassian.sal", "sal-bamboo-plugin", salVersion));
136 }
137
138 }
139 }