1 package com.atlassian.plugin.web.model;
2
3 import com.atlassian.plugin.web.WebFragmentHelper;
4 import com.atlassian.plugin.web.ContextProvider;
5 import com.atlassian.plugin.web.descriptors.WebFragmentModuleDescriptor;
6 import org.dom4j.Element;
7
8 import javax.servlet.http.HttpServletRequest;
9 import java.util.Map;
10 import java.util.HashMap;
11
12
13
14
15 public class DefaultWebLink extends AbstractWebItem implements WebLink
16 {
17 private final String url;
18 private final boolean absoluteUrl;
19 private final String accessKey;
20 private final String id;
21
22 public DefaultWebLink(Element linkEl, WebFragmentHelper webFragmentHelper, ContextProvider contextProvider, WebFragmentModuleDescriptor descriptor)
23 {
24 super(webFragmentHelper, contextProvider, descriptor);
25 this.url = linkEl.getTextTrim();
26 this.accessKey = linkEl.attributeValue("accessKey");
27 this.id = linkEl.attributeValue("linkId");
28 this.absoluteUrl = "true".equals(linkEl.attributeValue("absolute"));
29 }
30
31 public String getRenderedUrl(Map<String,Object> context)
32 {
33 Map<String,Object> tmpContext = new HashMap<String,Object>(context);
34 tmpContext.putAll(getContextMap(tmpContext));
35 return getWebFragmentHelper().renderVelocityFragment(url, tmpContext);
36 }
37
38 private boolean isRelativeUrl(String url)
39 {
40 return !(absoluteUrl || url.startsWith("http://") || url.startsWith("https://"));
41 }
42
43 public String getDisplayableUrl(HttpServletRequest req, Map<String,Object> context)
44 {
45 String renderedUrl = getRenderedUrl(context);
46 if (isRelativeUrl(renderedUrl))
47 return req.getContextPath() + renderedUrl;
48 else
49 return renderedUrl;
50 }
51
52 public boolean hasAccessKey()
53 {
54 return accessKey != null && !"".equals(accessKey);
55 }
56
57 public String getAccessKey(Map<String,Object> context)
58 {
59 context.putAll(getContextMap(context));
60 return getWebFragmentHelper().renderVelocityFragment(accessKey, context);
61 }
62
63 public String getId()
64 {
65 return id;
66 }
67 }