package io.github.azagniotov.stubby4j.utils; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; /** * @author Alexander Zagniotov * @since 11/6/12, 6:33 PM */ public final class CollectionUtils { private CollectionUtils() { } public static Map<String, String> constructParamMap(final String requestQueryString) { if (!StringUtils.isSet(requestQueryString)) { return new LinkedHashMap<>(); } final Map<String, String> paramMap = new LinkedHashMap<>(); final String[] pairs = requestQueryString.split("&"); for (final String pair : pairs) { final String[] splittedPair = pair.split("="); final String splittedPairKey = splittedPair[0]; String splittedPairValue = splittedPair.length > 1 ? splittedPair[1] : ""; if (StringUtils.isWithinSquareBrackets(splittedPairValue)) { final String cleansedValue = StringUtils.decodeUrlEncodedQuotes(StringUtils.removeSquareBrackets(splittedPairValue)); final String bracketedQueryValueAsCSV = Arrays.asList(cleansedValue.split(",")).toString(); splittedPairValue = StringUtils.trimSpacesBetweenCSVElements(bracketedQueryValueAsCSV); } paramMap.put(splittedPairKey, StringUtils.decodeUrlEncoded(splittedPairValue)); } return paramMap; } public static String constructQueryString(final Map<String, String> query) { final Set<Map.Entry<String, String>> mapEntries = query.entrySet(); final Iterator<Map.Entry<String, String>> iterator = mapEntries.iterator(); final StringBuilder queryStringBuilder = new StringBuilder(); while (iterator.hasNext()) { final Map.Entry<String, String> entry = iterator.next(); final String pair = String.format("%s=%s", entry.getKey(), entry.getValue()); queryStringBuilder.append(pair); if (iterator.hasNext()) { queryStringBuilder.append('&'); } } return queryStringBuilder.toString(); } }