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 }