public static ReplaceQueryPartsHint fromJson()

in google-cloud-spanner-hibernate-dialect/src/main/java/com/google/cloud/spanner/hibernate/hints/ReplaceQueryPartsHint.java [250:290]


  public static ReplaceQueryPartsHint fromJson(String json) {
    try {
      JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
      JsonElement replacementsElement = jsonObject.get(SPANNER_REPLACEMENTS_FIELD_NAME);
      if (replacementsElement == null) {
        throw new HibernateException(
            "Hint does not contain a " + SPANNER_REPLACEMENTS_FIELD_NAME + " element at the root");
      }
      if (!replacementsElement.isJsonArray()) {
        throw new HibernateException(SPANNER_REPLACEMENTS_FIELD_NAME + " must be an array");
      }
      JsonArray replacementsArray = replacementsElement.getAsJsonArray();
      ImmutableList.Builder<Replacement> replacementsMapBuilder = ImmutableList.builder();
      for (JsonElement replacement : replacementsArray.asList()) {
        if (!replacement.isJsonObject()) {
          throw new HibernateException(
              "All elements of " + SPANNER_REPLACEMENTS_FIELD_NAME + " must be objects");
        }
        JsonObject replacementObject = replacement.getAsJsonObject();
        JsonElement regexElement = replacementObject.get(REGEX_FIELD_NAME);
        if (regexElement == null) {
          throw new HibernateException(
              "Missing " + REGEX_FIELD_NAME + " field in replacement object");
        }
        if (!regexElement.isJsonPrimitive()) {
          throw new HibernateException(REGEX_FIELD_NAME + " must be a string");
        }
        String regex = getAsString(replacementObject, REGEX_FIELD_NAME);
        String replacementString = getAsString(replacementObject, REPLACEMENT_FIELD_NAME);
        String replaceModeString =
            getAsString(replacementObject, REPLACE_MODE_FIELD_NAME, /* optional = */ true);
        ReplaceMode replaceMode =
            replaceModeString == null ? ReplaceMode.ALL : ReplaceMode.valueOf(replaceModeString);
        replacementsMapBuilder.add(new Replacement(regex, replacementString, replaceMode));
      }
      return new ReplaceQueryPartsHint(replacementsMapBuilder.build());
    } catch (JsonSyntaxException exception) {
      throw new HibernateException(
          "Comment is not a valid hint: " + exception.getMessage(), exception);
    }
  }