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