/** * Return query string for the SMART plugin. * * @param contexts The relevant contexts. * @return The query string. */ private String getQueryString(Collection<ContextMap> contexts) { QueryStringBuilder qs = new QueryStringBuilder(); for (ContextMap context : contexts) { for (Entry<String, String> entry : context.entrySet()) { qs.append(entry.getKey(), entry.getValue()); } } if (qs.length() > 0) { qs.append("fhirServiceUrl", getServiceRoot()); } return qs.toString(); }
/** * Append a list of values. Each value is a separate name/value pair in the query string. * * @param name Name of the query parameter. * @param values List of values for the query parameter. * @return Returns <code>this</code> for chaining. */ public QueryStringBuilder append(String name, List<?> values) { if (values != null) { for (Object value : values) { append(name, value); } } return this; }
@Test public void testQueryStringBuilder() { QueryStringBuilder sb = new QueryStringBuilder(); assertEquals(0, sb.length()); sb.append("q1", "value 1", "value 2"); List<String> list = new ArrayList<>(); list.add("value 1"); list.add("value 2"); list.add("value 3"); sb.append("q2", list); sb.append("q3", "single"); sb.append("q4<>", "escape+name"); String qs = sb.toString(); print(qs); assertEquals("q1=value+1,value+2&q2=value+1&q2=value+2&q2=value+3&q3=single&q4%3C%3E=escape%2Bname", qs); sb.clear(); assertTrue(sb.toString().isEmpty()); }