View Javadoc

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   * The default implementation of {@link WebResourceUrlProvider}.
12   *
13   * @since 2.9.0
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          // "{base url}/s/{lang?}/{build num}/{system counter}/_"
30          // {lang} is optional
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          // "{base url}/s/{lang?}/{build num}/{system counter}/{resource counter}/_"
57          // {lang} is optional
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          // "{base url}/s/{build num}/{system counter}/{plugin version}/_"
81          final String staticUrlPrefix = getStaticResourcePrefix(pluginVersion, urlMode);
82          // "/download/resources/plugin.key:module.key/resource.name"
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 }