1 package com.atlassian.plugin.webresource;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.PluginInformation;
5 import com.google.common.collect.Maps;
6
7 import java.util.Map;
8 import java.util.TreeMap;
9
10
11
12
13
14
15 public class WebResourceUrlProviderImpl implements WebResourceUrlProvider
16 {
17 static final String STATIC_RESOURCE_PREFIX = "s";
18 static final String STATIC_RESOURCE_SUFFIX = "_";
19
20 private final WebResourceIntegration webResourceIntegration;
21
22 public WebResourceUrlProviderImpl(WebResourceIntegration webResourceIntegration)
23 {
24 this.webResourceIntegration = webResourceIntegration;
25 }
26
27 public String getStaticResourcePrefix(UrlMode urlMode)
28 {
29
30
31 String lang = makeLocaleHashPath();
32 return webResourceIntegration.getBaseUrl(urlMode) + "/" + STATIC_RESOURCE_PREFIX + "/" +
33 lang +
34 webResourceIntegration.getSystemBuildNumber() + "/" + webResourceIntegration.getSystemCounter() + "/" + STATIC_RESOURCE_SUFFIX;
35 }
36
37 private String makeLocaleHashPath() {
38 String lang = webResourceIntegration.getStaticResourceLocale();
39 Map<String,String> vars = webResourceIntegration.getResourceSubstitutionVariables();
40 if (vars.isEmpty() && lang == null) {
41 return "";
42 }
43 StringBuilder path = new StringBuilder();
44 if (lang != null) {
45 path.append(lang);
46 }
47 if (!vars.isEmpty()) {
48 path.append("-").append(new TreeMap<String, String>(vars).toString().hashCode());
49 }
50 path.append("/");
51 return path.toString();
52 }
53
54 public String getStaticResourcePrefix(String resourceCounter, UrlMode urlMode)
55 {
56
57
58 String lang = makeLocaleHashPath();
59 return webResourceIntegration.getBaseUrl(urlMode) + "/" + STATIC_RESOURCE_PREFIX + "/" +
60 lang +
61 webResourceIntegration.getSystemBuildNumber() + "/" + webResourceIntegration.getSystemCounter() + "/" + resourceCounter + "/" + STATIC_RESOURCE_SUFFIX;
62 }
63
64 public String getStaticPluginResourceUrl(final String moduleCompleteKey, final String resourceName, final UrlMode urlMode)
65 {
66 final ModuleDescriptor<?> moduleDescriptor = webResourceIntegration.getPluginAccessor().getEnabledPluginModule(moduleCompleteKey);
67 if (moduleDescriptor == null)
68 {
69 return null;
70 }
71
72 return getStaticPluginResourceUrl(moduleDescriptor, resourceName, urlMode);
73 }
74
75 public String getStaticPluginResourceUrl(ModuleDescriptor moduleDescriptor, String resourceName, UrlMode urlMode)
76 {
77 PluginInformation pluginInfo = moduleDescriptor.getPlugin().getPluginInformation();
78 String pluginVersion = pluginInfo != null ? pluginInfo.getVersion() : "unknown";
79
80
81 final String staticUrlPrefix = getStaticResourcePrefix(pluginVersion, urlMode);
82
83 return staticUrlPrefix + getResourceUrl(moduleDescriptor.getCompleteKey(), resourceName);
84 }
85
86 public String getResourceUrl(final String moduleCompleteKey, final String resourceName)
87 {
88 return new SinglePluginResource(resourceName, moduleCompleteKey, false).getUrl();
89 }
90
91 public String getBaseUrl()
92 {
93 return webResourceIntegration.getBaseUrl();
94 }
95
96 public String getBaseUrl(UrlMode urlMode)
97 {
98 return webResourceIntegration.getBaseUrl(urlMode);
99 }
100 }