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);
}
}