@Override
public JsonObject toJson(final JsonSchemaVersion schemaVersion, final Predicate<JsonField> thePredicate) {
checkNotNull(schemaVersion, "schema version");
checkNotNull(thePredicate, "predicate");
final Predicate<JsonField> predicate = schemaVersion.and(thePredicate);
final JsonObjectBuilder jsonObjectBuilder = JsonFactory.newObjectBuilder();
jsonObjectBuilder.set(JsonFields.SCHEMA_VERSION, schemaVersion.toInt(), predicate);
if (null != lifecycle) {
jsonObjectBuilder.set(JsonFields.LIFECYCLE, lifecycle.name(), predicate);
}
if (null != revision) {
jsonObjectBuilder.set(JsonFields.REVISION, revision.toLong(), predicate);
}
if (null != modified) {
jsonObjectBuilder.set(JsonFields.MODIFIED, modified.toString(), predicate);
}
if (null != policyId) {
jsonObjectBuilder.set(JsonFields.NAMESPACE, namespace, predicate);
jsonObjectBuilder.set(JsonFields.ID, policyId, predicate);
}
jsonObjectBuilder.set(JsonFields.ENTRIES, stream()
.map(policyEntry -> JsonFactory.newObjectBuilder()
.set(policyEntry.getLabel().getJsonFieldDefinition(),
policyEntry.toJson(schemaVersion, thePredicate.and(FieldType.notHidden())),
predicate)
.build())
.collect(JsonCollectors.objectsToObject()), predicate);
return jsonObjectBuilder.build();
}