1 package com.atlassian.refapp.sal;
2
3 import com.atlassian.fugue.Option;
4 import com.atlassian.plugin.refimpl.saldeps.ServletContextThreadLocal;
5 import com.atlassian.plugin.spring.scanner.annotation.export.ExportAsService;
6 import com.atlassian.refapp.sal.license.RefappProduct;
7 import com.atlassian.sal.api.ApplicationProperties;
8 import com.atlassian.sal.api.UrlMode;
9 import com.google.common.base.Supplier;
10
11 import javax.annotation.Nonnull;
12 import javax.inject.Named;
13 import javax.servlet.http.HttpServletRequest;
14 import java.io.File;
15 import java.net.MalformedURLException;
16 import java.net.URL;
17 import java.util.Date;
18
19
20
21
22 @ExportAsService
23 @Named("applicationProperties")
24 public class RefimplApplicationProperties implements ApplicationProperties {
25 private static final Date THEN = new Date();
26
27 public static final Supplier<String> CANONICAL_BASE_URL_SUPPLIER = new Supplier<String>() {
28 @Override
29 public String get() {
30 return getCanonicalBaseUrl();
31 }
32 };
33
34 public static final Supplier<String> CANONICAL_CONTEXT_PATH_SUPPLIER = new Supplier<String>() {
35 @Override
36 public String get() {
37 return getCanonicalContextPath();
38 }
39 };
40
41 @Override
42 @Deprecated
43 public String getBaseUrl() {
44 Option<String> absoluteUrl = getAbsoluteBaseUrlFromRequest();
45 return absoluteUrl.getOrElse(CANONICAL_BASE_URL_SUPPLIER);
46 }
47
48 private Option<String> getAbsoluteBaseUrlFromRequest() {
49 HttpServletRequest request = ServletContextThreadLocal.getRequest();
50 if (request != null) {
51 return Option.some(HttpServletRequestBaseUrlExtractor.extractBaseUrl(request));
52 }
53 return Option.none();
54 }
55
56 private Option<String> getContextPathFromRequest() {
57 HttpServletRequest request = ServletContextThreadLocal.getRequest();
58 if (request != null) {
59 return Option.some(request.getContextPath());
60 }
61 return Option.none();
62 }
63
64 private static String getCanonicalBaseUrl() {
65 String baseurl = System.getProperty("baseurl");
66 if (baseurl == null)
67 throw new IllegalStateException("baseurl system property is not configured");
68 return baseurl;
69 }
70
71 private static String getCanonicalContextPath() {
72 String baseUrl = getCanonicalBaseUrl();
73 try {
74 return new URL(baseUrl).getPath();
75 } catch (MalformedURLException e) {
76 throw new IllegalStateException("Base URL misconfigured", e);
77 }
78 }
79
80 @Override
81 @Nonnull
82 public String getBaseUrl(UrlMode urlMode) {
83 switch (urlMode) {
84 case ABSOLUTE: {
85 Option<String> absoluteUrl = getAbsoluteBaseUrlFromRequest();
86 return absoluteUrl.getOrElse(CANONICAL_BASE_URL_SUPPLIER);
87 }
88 case CANONICAL:
89 return getCanonicalBaseUrl();
90 case RELATIVE: {
91 Option<String> contextPath = getContextPathFromRequest();
92 return contextPath.getOrElse(CANONICAL_CONTEXT_PATH_SUPPLIER);
93 }
94 case RELATIVE_CANONICAL:
95 return getCanonicalContextPath();
96 case AUTO: {
97 Option<String> contextPath = getContextPathFromRequest();
98 return contextPath.getOrElse(CANONICAL_BASE_URL_SUPPLIER);
99 }
100 default:
101 throw new IllegalStateException("Unhandled UrlMode " + urlMode);
102 }
103 }
104
105 @Override
106 @Nonnull
107 public String getDisplayName() {
108 return RefappProduct.REFAPP.getName();
109 }
110
111 @Override
112 @Nonnull
113 public String getPlatformId() {
114 return RefappProduct.REFAPP.getNamespace();
115 }
116
117 @Override
118 @Nonnull
119 public String getVersion() {
120 return "1.0";
121 }
122
123 @Override
124 @Nonnull
125 public Date getBuildDate() {
126 return THEN;
127 }
128
129 @Override
130 @Nonnull
131 public String getBuildNumber() {
132 return "123";
133 }
134
135 @Override
136 @Nonnull
137 public File getHomeDirectory() {
138 return new File(System.getProperty("refapp.home", System.getProperty("java.io.tmpdir")));
139 }
140
141 @Override
142 @Deprecated
143 public String getPropertyValue(String s) {
144 return null;
145 }
146 }