in src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java [151:223]
void parseDeprecation(final JsonValue dValue) throws IOException {
if ( dValue.getValueType() == ValueType.STRING ) {
// value is deprecation message for the whole package
final DeprecationInfo info = new DeprecationInfo(((JsonString)dValue).getString());
this.getDeprecation().setPackageInfo(info);
} else if ( dValue.getValueType() == ValueType.OBJECT ) {
// value is an object with properties
final JsonObject depObj = dValue.asJsonObject();
if ( depObj.containsKey(MSG_KEY) && depObj.containsKey(MEMBERS_KEY) ) {
throw new IOException("Export " + this.getName() + " has wrong info in " + DEPRECATED_KEY);
}
if ( !depObj.containsKey(MSG_KEY) && !depObj.containsKey(MEMBERS_KEY)) {
throw new IOException("Export " + this.getName() + " has missing info in " + DEPRECATED_KEY);
}
if ( depObj.containsKey(MSG_KEY) ) {
// whole package
final DeprecationInfo info = new DeprecationInfo(depObj.getString(MSG_KEY));
info.setSince(depObj.getString(SINCE_KEY, null));
info.setForRemoval(depObj.getString(FOR_REMOVAL_KEY, null));
if ( depObj.getString(MODE_KEY, null) != null ) {
try {
info.setMode(DeprecationValidationMode.valueOf(depObj.getString(MODE_KEY)));
} catch ( final IllegalArgumentException iae) {
throw new IOException(iae);
}
}
this.getDeprecation().setPackageInfo(info);
} else {
if ( depObj.containsKey(SINCE_KEY) ) {
throw new IOException("Export " + this.getName() + " has wrong since in " + DEPRECATED_KEY);
}
if ( depObj.containsKey(FOR_REMOVAL_KEY) ) {
throw new IOException("Export " + this.getName() + " has wrong for-removal in " + DEPRECATED_KEY);
}
if ( depObj.containsKey(MODE_KEY) ) {
throw new IOException("Export " + this.getName() + " has wrong mode in " + DEPRECATED_KEY);
}
final JsonValue val = depObj.get(MEMBERS_KEY);
if ( val.getValueType() != ValueType.OBJECT) {
throw new IOException("Export " + this.getName() + " has wrong type for " + MEMBERS_KEY + " : " + val.getValueType().name());
}
for (final Map.Entry<String, JsonValue> memberProp : val.asJsonObject().entrySet()) {
if ( memberProp.getValue().getValueType() == ValueType.STRING ) {
final DeprecationInfo info = new DeprecationInfo(((JsonString)memberProp.getValue()).getString());
this.getDeprecation().addMemberInfo(memberProp.getKey(), info);
} else if ( memberProp.getValue().getValueType() == ValueType.OBJECT ) {
final JsonObject memberObj = memberProp.getValue().asJsonObject();
if ( !memberObj.containsKey(MSG_KEY) ) {
throw new IOException("Export " + this.getName() + " has wrong type for member in " + MEMBERS_KEY + " : " + memberProp.getValue().getValueType().name());
}
final DeprecationInfo info = new DeprecationInfo(memberObj.getString(MSG_KEY));
info.setSince(memberObj.getString(SINCE_KEY, null));
info.setForRemoval(depObj.getString(FOR_REMOVAL_KEY, null));
if ( depObj.getString(MODE_KEY, null) != null ) {
try {
info.setMode(DeprecationValidationMode.valueOf(depObj.getString(MODE_KEY)));
} catch ( final IllegalArgumentException iae) {
throw new IOException(iae);
}
}
this.getDeprecation().addMemberInfo(memberProp.getKey(), info);
} else {
throw new IOException("Export " + this.getName() + " has wrong type for member in " + MEMBERS_KEY + " : " + memberProp.getValue().getValueType().name());
}
}
}
} else {
throw new IOException("Export " + this.getName() + " has wrong type for " + DEPRECATED_KEY + " : " + dValue.getValueType().name());
}
}