Skip to content

Commit 8230771

Browse files
committed
A few improvements to QueryParamsHelper
1 parent 8cbac5b commit 8230771

File tree

3 files changed

+39
-18
lines changed

3 files changed

+39
-18
lines changed

app/logbook/olog/client-es/src/main/java/org/phoebus/olog/es/api/OlogHttpClient.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ public List<LogEntry> findLogs(Map<String, String> map) {
240240
private SearchResult findLogs(MultivaluedMap<String, String> searchParams) throws RuntimeException {
241241
HttpRequest request = HttpRequest.newBuilder()
242242
.uri(URI.create(Preferences.olog_url +
243-
"/logs/search?" + mapToQueryParams(searchParams)))
243+
"/logs/search?" + QueryParamsHelper.mapToQueryParams(searchParams)))
244244
.header(OLOG_CLIENT_INFO_HEADER, CLIENT_INFO)
245245
.header("Content-Type", CONTENT_TYPE_JSON)
246246
.GET()
@@ -467,21 +467,6 @@ public InputStream getAttachment(Long logId, String attachmentName) {
467467
}
468468
}
469469

470-
471-
private String mapToQueryParams(MultivaluedMap<String, String> map) {
472-
StringBuilder stringBuilder = new StringBuilder();
473-
map.keySet().forEach(k -> {
474-
List<String> value = map.get(k);
475-
if (value != null && !value.isEmpty()) {
476-
stringBuilder.append(k).append("=");
477-
stringBuilder.append(String.join(",",
478-
value.stream().map(v -> URLEncoder.encode(v, StandardCharsets.UTF_8)).toList()));
479-
stringBuilder.append("&");
480-
}
481-
});
482-
return stringBuilder.toString();
483-
}
484-
485470
/**
486471
* @param id Unique log entry id
487472
* @return A {@link SearchResult} containing a list of {@link LogEntry} objects representing the

core/util/src/main/java/org/phoebus/util/http/QueryParamsHelper.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,17 @@
1111

1212
public class QueryParamsHelper {
1313

14+
/**
15+
* Converts a {@link MultivaluedMap<String, String>} to a URL encoded query parameter {@link String}. Attempts to
16+
* be fault-tolerant: <code>null</code> or empty {@link List}s values are ignored and not appended to the
17+
* returned query parameter {@link String}. See also unit test class.
18+
* @param map Map of key/value pairs where each value is expected to be a {@link List} of {@link String}s.
19+
* @return A URL encoded {@link String} that can be appended in a http URL, e.g. <code>key1=value1,value2&key2=value3</code>.
20+
*/
1421
public static String mapToQueryParams(MultivaluedMap<String, String> map) {
22+
if(map == null || map.isEmpty()){
23+
return "";
24+
}
1525
StringBuilder stringBuilder = new StringBuilder();
1626
map.keySet().forEach(k -> {
1727
List<String> value = map.get(k);
@@ -22,6 +32,10 @@ public static String mapToQueryParams(MultivaluedMap<String, String> map) {
2232
stringBuilder.append("&");
2333
}
2434
});
25-
return stringBuilder.toString();
35+
String queryParams = stringBuilder.toString();
36+
if("".equals(queryParams)){
37+
return "";
38+
}
39+
return queryParams.substring(0, queryParams.length() - 1);
2640
}
2741
}

core/util/src/test/java/org/phoebus/util/http/QueryParamsHelperTest.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import javax.ws.rs.core.MultivaluedHashMap;
1010
import javax.ws.rs.core.MultivaluedMap;
11+
import java.util.Collections;
1112
import java.util.List;
1213

1314
import static org.junit.jupiter.api.Assertions.*;
@@ -23,6 +24,27 @@ public void testBasic(){
2324

2425
String queryParamString = QueryParamsHelper.mapToQueryParams(map);
2526

26-
assertEquals(queryParamString, "key1=value1,value2&key2=value+3&key3=value%3A4&");
27+
assertEquals("key1=value1,value2&key2=value+3&key3=value%3A4", queryParamString);
28+
29+
queryParamString = QueryParamsHelper.mapToQueryParams(new MultivaluedHashMap<>());
30+
assertEquals("", queryParamString);
31+
32+
queryParamString = QueryParamsHelper.mapToQueryParams(null);
33+
assertEquals("", queryParamString);
34+
35+
map = new MultivaluedHashMap<>();
36+
map.put("key1", null);
37+
map.put("key2", List.of("value3"));
38+
39+
queryParamString = QueryParamsHelper.mapToQueryParams(map);
40+
assertEquals("key2=value3", queryParamString);
41+
42+
map = new MultivaluedHashMap<>();
43+
map.put("key1", null);
44+
map.put("key2", Collections.emptyList());
45+
46+
queryParamString = QueryParamsHelper.mapToQueryParams(map);
47+
assertEquals("", queryParamString);
48+
2749
}
2850
}

0 commit comments

Comments
 (0)