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
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 }