summaryrefslogtreecommitdiff
path: root/src/main/java/moe/nea/prickly/util/QueryParameterHelper.java
blob: 191dae8c4b7db53d597bf0372f80bff3f6317019 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* (C) 2025 Linnea Gräf - Licensed to everyone under the BSD 3 Clause License */
package moe.nea.prickly.util;

import com.google.common.net.UrlEscapers;
import java.net.URI;
import java.util.Map;
import org.jspecify.annotations.Nullable;

public class QueryParameterHelper {
	public static URI appendQuery(URI uri, Map<String, @Nullable String> extraArgs) {
		var uriBuilder = new StringBuilder();
		uriBuilder.append(uri);
		var escaper = UrlEscapers.urlFormParameterEscaper();
		var first = true;
		for (var entry : extraArgs.entrySet()) {
			if (entry.getValue() == null) continue;
			if (first) {
				char c = uriBuilder.charAt(uriBuilder.length() - 1);
				if (c != '?' && c != '&') uriBuilder.append((uri.getQuery() == null) ? '?' : '&');
				first = false;
			} else {
				uriBuilder.append('&');
			}
			uriBuilder.append(escaper.escape(entry.getKey())).append('=').append(escaper.escape(entry.getValue()));
		}
		return URI.create(uriBuilder.toString());
	}
}