1 package io.getunleash.util;
2
3 import io.getunleash.lang.Nullable;
4 import java.net.MalformedURLException;
5 import java.net.URI;
6 import java.net.URL;
7
8 public class UnleashURLs {
9     private final URL fetchTogglesURL;
10     private final URL clientMetricsURL;
11     private final URL clientRegisterURL;
12
13     public UnleashURLs(URI unleashAPI) {
14         try {
15             String unleashAPIstr = unleashAPI.toString();
16             fetchTogglesURL = URI.create(unleashAPIstr + "/client/features").normalize().toURL();
17             clientMetricsURL = URI.create(unleashAPIstr + "/client/metrics").normalize().toURL();
18             clientRegisterURL = URI.create(unleashAPIstr + "/client/register").normalize().toURL();
19
20         } catch (MalformedURLException ex) {
21             throw new IllegalArgumentException("Unleash API is not a valid URL: " + unleashAPI);
22         }
23     }
24
25     public URL getFetchTogglesURL() {
26         return fetchTogglesURL;
27     }
28
29     public URL getClientMetricsURL() {
30         return clientMetricsURL;
31     }
32
33     public URL getClientRegisterURL() {
34         return clientRegisterURL;
35     }
36
37     public URL getFetchTogglesURL(@Nullable String projectName, @Nullable String namePrefix) {
38         StringBuilder suffix = new StringBuilder();
39         appendParam(suffix, "project", projectName);
40         appendParam(suffix, "namePrefix", namePrefix);
41
42         try {
43             return URI.create(fetchTogglesURL + suffix.toString()).normalize().toURL();
44         } catch (IllegalArgumentException | MalformedURLException e) {
45             throw new IllegalArgumentException(
46                     "fetchTogglesURL [" + fetchTogglesURL + suffix + "] was not URL friendly.", e);
47         }
48     }
49
50     private void appendParam(StringBuilder suffix, String key, @Nullable String value) {
51         if (value == null) {
52             return;
53         }
54         if (suffix.length() == 0) {
55             suffix.append("?");
56         } else {
57             suffix.append("&");
58         }
59         suffix.append(key).append("=").append(value);
60     }
61 }
62