1 package com.atlassian.plugin.webresource;
2
3 import static com.atlassian.plugin.servlet.AbstractFileServerServlet.PATH_SEPARATOR;
4 import static com.atlassian.plugin.servlet.AbstractFileServerServlet.SERVLET_PATH;
5 import static com.atlassian.plugin.servlet.AbstractFileServerServlet.RESOURCE_URL_PREFIX;
6
7 import java.util.Map;
8 import java.util.Collections;
9
10
11
12
13
14
15
16
17
18
19 public class SinglePluginResource implements PluginResource
20 {
21
22
23
24 static final String URL_PREFIX = PATH_SEPARATOR + SERVLET_PATH + PATH_SEPARATOR + RESOURCE_URL_PREFIX;
25
26 private final String resourceName;
27 private final String moduleCompleteKey;
28 private final boolean cached;
29 private final Map<String, String> params;
30
31 public SinglePluginResource(String resourceName, String moduleCompleteKey, boolean cached)
32 {
33 this(resourceName, moduleCompleteKey, cached, Collections.EMPTY_MAP);
34 }
35
36 public SinglePluginResource(String resourceName, String moduleCompleteKey, boolean cached, Map<String, String> params)
37 {
38 this.resourceName = resourceName;
39 this.moduleCompleteKey = moduleCompleteKey;
40 this.cached = cached;
41 this.params = params;
42 }
43
44 public String getResourceName()
45 {
46 return resourceName;
47 }
48
49 public String getModuleCompleteKey()
50 {
51 return moduleCompleteKey;
52 }
53
54 public Map<String, String> getParams()
55 {
56 return Collections.unmodifiableMap(params);
57 }
58
59 public boolean isCacheSupported()
60 {
61 return cached;
62 }
63
64
65
66
67
68
69 public String getUrl()
70 {
71 return URL_PREFIX + PATH_SEPARATOR + moduleCompleteKey + PATH_SEPARATOR + resourceName;
72 }
73
74 public static boolean matches(String url)
75 {
76 return url.indexOf(URL_PREFIX) != -1;
77 }
78
79
80
81
82
83
84 public static SinglePluginResource parse(String url)
85 {
86 int indexOfPrefix = url.indexOf(SinglePluginResource.URL_PREFIX);
87 String libraryAndResource = url.substring(indexOfPrefix + SinglePluginResource.URL_PREFIX.length() + 1);
88
89 if (libraryAndResource.indexOf('?') != -1)
90 {
91 libraryAndResource = libraryAndResource.substring(0, libraryAndResource.indexOf('?'));
92 }
93
94 String[] parts = libraryAndResource.split("/", 2);
95
96 if (parts.length != 2)
97 return null;
98
99 return new SinglePluginResource(parts[1], parts[0], url.substring(0, indexOfPrefix).length() > 0);
100 }
101 }