code: private static String getMapPropertyValue(
        String varName,
        Map<String, Object> map,
        boolean containsExplodeModifier,
        CompositeOutput compositeOutput) {
      if (map.isEmpty()) {
        return "";
      }
      StringBuilder retBuf = new StringBuilder();
      String joiner;
      String mapElementsJoiner;
      if (containsExplodeModifier) {
        joiner = compositeOutput.getExplodeJoiner();
        mapElementsJoiner = "=";
      } else {
        joiner = COMPOSITE_NON_EXPLODE_JOINER;
        mapElementsJoiner = COMPOSITE_NON_EXPLODE_JOINER;
        if (compositeOutput.requiresVarAssignment()) {
          retBuf.append(CharEscapers.escapeUriPath(varName));
          retBuf.append("=");
        }
      }
      for (Iterator<Map.Entry<String, Object>> mapIterator = map.entrySet().iterator();
          mapIterator.hasNext(); ) {
        Map.Entry<String, Object> entry = mapIterator.next();
        String encodedKey = compositeOutput.getEncodedValue(entry.getKey());
        String encodedValue = compositeOutput.getEncodedValue(entry.getValue().toString());
        retBuf.append(encodedKey);
        retBuf.append(mapElementsJoiner);
        retBuf.append(encodedValue);
        if (mapIterator.hasNext()) {
          retBuf.append(joiner);
        }
      }
      return retBuf.toString();
    }
docs: Expand the template of a composite map property. Eg: If d := [("semi", ";"),("dot",
  "."),("comma", ",")] then {/d*} is expanded to "/semi=%3B/dot=./comma=%2C"
  
  @param varName The name of the variable the value corresponds to. Eg: "d"
  @param map The map property value. Eg: [("semi", ";"),("dot", "."),("comma", ",")]
  @param containsExplodeModifier Set to true if the template contains the explode modifier "*"
  @param compositeOutput An instance of CompositeOutput. Contains information on how the
  expansion should be done
  @return The expanded map template
  @throws IllegalArgumentException if the required list path parameter is map