1   package com.atlassian.maven.plugins.amps.util;
2   
3   import com.google.common.collect.ImmutableMap;
4   import com.google.common.collect.Lists;
5   import com.google.common.collect.Maps;
6   import org.apache.commons.lang.StringUtils;
7   
8   import java.util.List;
9   import java.util.Map;
10  
11  /**
12   * @since 3.8
13   */
14  public class JvmArgsFix
15  {
16      private final Map<String, String> defaultParams;
17  
18      private JvmArgsFix(Map<String, String> initial)
19      {
20          defaultParams = Maps.newLinkedHashMap(initial);
21      }
22  
23      private JvmArgsFix()
24      {
25          defaultParams = Maps.newLinkedHashMap();
26      }
27  
28      public static JvmArgsFix defaults()
29      {
30          return new JvmArgsFix(ImmutableMap.<String, String>of("-Xmx", "512m", "-XX:MaxPermSize=", "256m"));
31      }
32  
33      public static JvmArgsFix empty()
34      {
35          return new JvmArgsFix();
36      }
37  
38      public JvmArgsFix with(String param, String value)
39      {
40          defaultParams.put(param, value);
41          return this;
42      }
43  
44      public String apply(String jvmArgs)
45      {
46          final List<String> args = StringUtils.isNotBlank(jvmArgs) ? Lists.newArrayList(jvmArgs) : Lists.<String>newArrayList();
47  
48          for (Map.Entry<String, String> param : defaultParams.entrySet())
49          {
50              if (!StringUtils.contains(jvmArgs, param.getKey()))
51              {
52                  args.add(param.getKey() + param.getValue());
53              }
54          }
55  
56          return StringUtils.join(args, ' ');
57      }
58  }