View Javadoc

1   package com.atlassian.plugins.rest.sample.entities;
2   
3   import org.apache.commons.lang.StringUtils;
4   
5   import java.net.URI;
6   import java.net.URISyntaxException;
7   import java.util.LinkedList;
8   import java.util.List;
9   
10  public class UriBuilder {
11      private static final String CONTEXT_SYSTEM_PROPERTY = "context.path";
12      private static final String HTTP_PORT_SYSTEM_PROPERTY = "http.port";
13      private static final int DEFAULT_HTTP_PORT = 0;
14  
15      private static final String CONTEXT;
16      private static final int HTTP_PORT;
17  
18      static {
19          CONTEXT = System.getProperty(CONTEXT_SYSTEM_PROPERTY);
20          HTTP_PORT = Integer.valueOf(System.getProperty(HTTP_PORT_SYSTEM_PROPERTY, String.valueOf(DEFAULT_HTTP_PORT)));
21  
22          if (CONTEXT == null || HTTP_PORT == DEFAULT_HTTP_PORT) {
23              throw new IllegalStateException(CONTEXT_SYSTEM_PROPERTY + " or " + HTTP_PORT_SYSTEM_PROPERTY + " not set!");
24          }
25      }
26  
27      private final List<String> paths = new LinkedList<String>();
28  
29      private UriBuilder() {
30      }
31  
32      public static UriBuilder create() {
33          return new UriBuilder();
34      }
35  
36      public UriBuilder path(String path) {
37          paths.add(path);
38          return this;
39      }
40  
41      public URI build() {
42          try {
43              return new URI("http", null, "localhost", HTTP_PORT, buildPath(), buildQuery(), buildFragment());
44          } catch (URISyntaxException e) {
45              // will not happen
46              return null;
47          }
48      }
49  
50      private String buildPath() {
51          final StringBuilder path = new StringBuilder(paths.size() * 8);
52          if (StringUtils.isNotBlank(CONTEXT)) {
53              path.append(CONTEXT).append("/");
54          }
55          for (String element : paths) {
56              path.append(element).append("/");
57          }
58          if (path.charAt(0) != '/') {
59              path.insert(0, '/');
60          }
61          return path.toString();
62      }
63  
64      private String buildQuery() {
65          return null;
66      }
67  
68      private String buildFragment() {
69          return null;
70      }
71  }