/**
   * Set the styles which should be cached on a layer
   *
   * @param info
   * @param defaultStyle
   * @param cachedStyles
   */
  public static void setCachedStyles(
      GeoServerTileLayerInfo info, String defaultStyle, Set<String> cachedStyles) {
    StyleParameterFilter filter = (StyleParameterFilter) info.getParameterFilter("STYLES");
    if (filter == null) filter = new StyleParameterFilter();

    filter.setDefaultValue(defaultStyle);
    filter.setStyles(cachedStyles);
    info.addParameterFilter(filter);
  }
  /**
   * Add a {@link FloatParameterFilter} set accept anything, replacing any existing filter for the
   * same parameter.
   *
   * @param tileLayerInfo layer to update the filter on
   * @param paramKey key for the parameter
   * @param createParam create a new filter if there is none to replace for the specified key
   */
  public static void updateAcceptAllFloatParameterFilter(
      final GeoServerTileLayerInfo tileLayerInfo, final String paramKey, boolean createParam) {

    createParam |= tileLayerInfo.removeParameterFilter(paramKey);

    if (createParam) {
      FloatParameterFilter filter = new FloatParameterFilter();
      filter.setKey(paramKey);
      filter.setDefaultValue("");
      tileLayerInfo.addParameterFilter(filter);
    }
  }
  /**
   * Add a {@link StringParameterFilter} to the layer, replacing any existing filter for the same
   * parameter.
   *
   * @param tileLayerInfo layer to update the filter on
   * @param paramKey key for the parameter
   * @param createParam create a new filter if there is none to replace for the specified key
   * @param defaultValue default value
   * @param allowedValues legal values for the parameter
   */
  public static void updateStringParameterFilter(
      final GeoServerTileLayerInfo tileLayerInfo,
      final String paramKey,
      boolean createParam,
      final String defaultValue,
      final Set<String> allowedValues) {

    createParam |= tileLayerInfo.removeParameterFilter(paramKey);

    if (createParam && allowedValues != null && allowedValues.size() > 0) {
      // make sure default value is among the list of allowed values
      Set<String> values = new TreeSet<String>(allowedValues);

      StringParameterFilter stringListFilter = new StringParameterFilter();
      stringListFilter.setKey(paramKey);
      stringListFilter.setDefaultValue(defaultValue == null ? "" : defaultValue);
      values.addAll(stringListFilter.getValues());
      stringListFilter.setValues(new ArrayList<String>(values));
      tileLayerInfo.addParameterFilter(stringListFilter);
    }
  }