View Javadoc

1   package com.atlassian.plugin.webresource;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.hostcontainer.DefaultHostContainer;
5   import com.atlassian.plugin.web.Condition;
6   import com.google.common.collect.ImmutableMap;
7   
8   import java.util.ArrayList;
9   import java.util.Arrays;
10  import java.util.List;
11  
12  import static com.atlassian.plugin.webresource.Dom4jFluent.element;
13  
14  
15  /**
16   *
17   */
18  public class WebResourceModuleDescriptorBuilder
19  {
20      private final Plugin plugin;
21      private final String moduleKey;
22      private List<Dom4jFluent.Element> resourceDescriptors = new ArrayList<Dom4jFluent.Element>();
23      private List<Dom4jFluent.Element> dependencies = new ArrayList<Dom4jFluent.Element>();
24      private List<Dom4jFluent.Element> condition = new ArrayList<Dom4jFluent.Element>();
25      private List<Dom4jFluent.Element> contexts = new ArrayList<Dom4jFluent.Element>();
26  
27      public WebResourceModuleDescriptorBuilder(Plugin plugin, String moduleKey)
28      {
29          this.plugin = plugin;
30          this.moduleKey = moduleKey;
31      }
32  
33  
34      public WebResourceModuleDescriptorBuilder setCondition(Class<? extends Condition> condition)
35      {
36          this.condition.add(element("condition", ImmutableMap.of(
37                  "class", condition.getName())));
38          return this;
39      }
40  
41      public WebResourceModuleDescriptorBuilder addDescriptor(String downloadableFile)
42      {
43          return addDescriptor("download", downloadableFile, downloadableFile);
44      }
45  
46      public WebResourceModuleDescriptorBuilder addDescriptor(String type, String name, String location)
47      {
48          resourceDescriptors.add(element("resource", ImmutableMap.of(
49                  "type", type,
50                  "name", name,
51                  "location", location)));
52          return this;
53      }
54  
55      public WebResourceModuleDescriptorBuilder addDependency(String moduleKey)
56      {
57          dependencies.add(element("dependency", moduleKey));
58          return this;
59      }
60  
61      public WebResourceModuleDescriptorBuilder addContext(String context)
62      {
63          contexts.add(element("context", context));
64          return this;
65      }
66  
67      public WebResourceModuleDescriptor build()
68      {
69          WebResourceModuleDescriptor descriptor = new WebResourceModuleDescriptor(new DefaultHostContainer());
70          descriptor.init(plugin, element("web-resource",
71                  ImmutableMap.of(
72                          "key", moduleKey
73                  ),
74                  Arrays.<Iterable<Dom4jFluent.Element>>asList(
75                          resourceDescriptors,
76                          dependencies,
77                          condition,
78                          contexts
79                  )).toDom());
80          descriptor.enabled();
81          return descriptor;
82      }
83  }