/**
   * Get the filters from the JSON string
   *
   * @param jsonFilterString
   * @return
   */
  public static WorklistFilterDTO getFilters(
      String jsonFilterString, List<DescriptorColumnDTO> availableDescriptorColumns) {
    WorklistFilterDTO worklistFilter = null;
    if (StringUtils.isNotEmpty(jsonFilterString)) {
      try {
        JsonMarshaller jsonIo = new JsonMarshaller();
        JsonObject json = jsonIo.readJsonObject(jsonFilterString);
        worklistFilter =
            DTOBuilder.buildFromJSON(
                json, WorklistFilterDTO.class, WorklistFilterDTO.getCustomTokens());
        populateDescriptorFilters(worklistFilter, json, availableDescriptorColumns);
      } catch (Exception e) {
        trace.error("Error in Deserializing filter JSON", e);
      }
    }

    return worklistFilter;
  }
  /**
   * Populates the descriptor filter values.
   *
   * @param worklistFilter
   * @param descriptorColumnsFilterJson
   */
  public static void populateDescriptorFilters(
      WorklistFilterDTO worklistFilter,
      JsonObject descriptorColumnsFilterJson,
      List<DescriptorColumnDTO> availableDescriptorColumns) {

    List<DescriptorColumnDTO> descriptorColumns = availableDescriptorColumns;

    Map<String, DescriptorFilterDTO> descriptorColumnMap =
        new HashMap<String, DescriptorFilterDTO>();

    for (DescriptorColumnDTO descriptorColumnDTO : descriptorColumns) {
      Object filterDTO = null;
      String id = descriptorColumnDTO.id;

      if (null != descriptorColumnsFilterJson.get(id)) {
        // String TYPE
        if (ColumnDataType.STRING.toString().equals(descriptorColumnDTO.type)) {
          filterDTO =
              new Gson()
                  .fromJson(
                      descriptorColumnsFilterJson.get(id), WorklistFilterDTO.TextSearchDTO.class);

        } else if (ColumnDataType.DATE.toString().equals(descriptorColumnDTO.type)
            || ColumnDataType.NUMBER.toString().equals(descriptorColumnDTO.type)) {
          filterDTO =
              new Gson()
                  .fromJson(descriptorColumnsFilterJson.get(id), WorklistFilterDTO.RangeDTO.class);
        } else if (ColumnDataType.BOOLEAN.toString().equals(descriptorColumnDTO.type)) {
          filterDTO =
              new Gson()
                  .fromJson(
                      descriptorColumnsFilterJson.get(id), WorklistFilterDTO.BooleanDTO.class);
        }
        descriptorColumnMap.put(id, new DescriptorFilterDTO(descriptorColumnDTO.type, filterDTO));
      }
    }

    worklistFilter.descriptorFilterMap = descriptorColumnMap;
  }