View Javadoc
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   * Implementation of ApplicationProperties
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 }