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 {
12 private static final String CONTEXT_SYSTEM_PROPERTY = "context.path";
13 private static final String HTTP_PORT_SYSTEM_PROPERTY = "http.port";
14 private static final int DEFAULT_HTTP_PORT = 0;
15
16 private static final String CONTEXT;
17 private static final int HTTP_PORT;
18
19 static
20 {
21 CONTEXT = System.getProperty(CONTEXT_SYSTEM_PROPERTY);
22 HTTP_PORT = Integer.valueOf(System.getProperty(HTTP_PORT_SYSTEM_PROPERTY, String.valueOf(DEFAULT_HTTP_PORT)));
23
24 if (CONTEXT == null || HTTP_PORT == DEFAULT_HTTP_PORT)
25 {
26 throw new IllegalStateException(CONTEXT_SYSTEM_PROPERTY + " or " + HTTP_PORT_SYSTEM_PROPERTY + " not set!");
27 }
28 }
29
30 private final List<String> paths = new LinkedList<String>();
31
32 private UriBuilder()
33 {
34 }
35
36 public static UriBuilder create()
37 {
38 return new UriBuilder();
39 }
40
41 public UriBuilder path(String path)
42 {
43 paths.add(path);
44 return this;
45 }
46
47 public URI build()
48 {
49 try
50 {
51 return new URI("http", null, "localhost", HTTP_PORT, buildPath(), buildQuery(), buildFragment());
52 }
53 catch (URISyntaxException e)
54 {
55
56 return null;
57 }
58 }
59
60 private String buildPath()
61 {
62 final StringBuilder path = new StringBuilder(paths.size() * 8);
63 if (StringUtils.isNotBlank(CONTEXT))
64 {
65 path.append(CONTEXT).append("/");
66 }
67 for (String element : paths)
68 {
69 path.append(element).append("/");
70 }
71 if (path.charAt(0) != '/')
72 {
73 path.insert(0, '/');
74 }
75 return path.toString();
76 }
77
78 private String buildQuery()
79 {
80 return null;
81 }
82
83 private String buildFragment()
84 {
85 return null;
86 }
87 }