Skip to content

Commit 4e2910d

Browse files
committed
Hide schema rendering if read/write only
1 parent d3eb191 commit 4e2910d

File tree

1 file changed

+46
-31
lines changed

1 file changed

+46
-31
lines changed

src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java

+46-31
Original file line numberDiff line numberDiff line change
@@ -216,13 +216,22 @@ private String schema(ChangedSchema schema) {
216216
return schema(1, schema);
217217
}
218218

219+
private static boolean isDisplayed(ChangedSchema schema) {
220+
return isDisplayed(schema.getNewSchema(), schema.getContext());
221+
}
222+
223+
private static boolean isDisplayed(Schema schema, DiffContext context) {
224+
return !(Boolean.TRUE.equals(schema.getWriteOnly()) && context.isResponse())
225+
|| !(Boolean.TRUE.equals(schema.getReadOnly()) && context.isRequest());
226+
}
227+
219228
private String oneOfSchema(int deepness, ChangedOneOfSchema schema, String discriminator) {
220229
StringBuilder sb = new StringBuilder("");
221230
sb.append(format("%sSwitch `%s`:\n", indent(deepness), discriminator));
222231
schema.getMissingMapping().keySet()
223232
.forEach(key -> sb.append(format("%s- Removed '%s'\n", indent(deepness), key)));
224233
schema.getIncreasedMapping().forEach((key, sub) ->
225-
sb.append(format("%s- Added '%s':\n", indent(deepness), key)).append(schema(deepness + 1, sub)));
234+
sb.append(format("%s- Added '%s':\n", indent(deepness), key)).append(schema(deepness + 1, sub, schema.getContext())));
226235
schema.getChangedMapping().forEach((key, sub) ->
227236
sb.append(format("%s- Updated `%s`:\n", indent(deepness), key))
228237
.append(schema(deepness + 1, sub)));
@@ -231,6 +240,9 @@ private String oneOfSchema(int deepness, ChangedOneOfSchema schema, String discr
231240

232241
private String schema(int deepness, ChangedSchema schema) {
233242
StringBuilder sb = new StringBuilder("");
243+
if (!isDisplayed(schema)) {
244+
return sb.toString();
245+
}
234246
if (schema.isDiscriminatorPropertyChanged()) {
235247
LOGGER.debug("Discriminator property changed");
236248
}
@@ -240,59 +252,41 @@ private String schema(int deepness, ChangedSchema schema) {
240252
sb.append(oneOfSchema(deepness, schema.getChangedOneOfSchema(), discriminator));
241253
}
242254
sb.append(listDiff(deepness, "enum", schema.getChangeEnum()));
243-
sb.append(properties(deepness, "Added property", schema.getIncreasedProperties(), true));
244-
sb.append(properties(deepness, "Deleted property", schema.getMissingProperties(), false));
255+
sb.append(properties(deepness, "Added property", schema.getIncreasedProperties(), true, schema.getContext()));
256+
sb.append(properties(deepness, "Deleted property", schema.getMissingProperties(), false, schema.getContext()));
245257
schema.getChangedProperties().forEach((name, property) -> sb.append(property(deepness, name, property)));
246258
return sb.toString();
247259
}
248260

249-
private String schema(int deepness, ComposedSchema schema) {
261+
private String schema(int deepness, ComposedSchema schema, DiffContext context) {
250262
StringBuilder sb = new StringBuilder("");
251263
if (schema.getAllOf() != null && schema.getAllOf() != null) {
252264
LOGGER.debug("All of schema");
253265
schema.getAllOf().stream()
254266
.map(this::resolve)
255-
.forEach(composedChild -> sb.append(schema(deepness, composedChild)));
267+
.forEach(composedChild -> sb.append(schema(deepness, composedChild, context)));
256268
}
257269
if (schema.getOneOf() != null && schema.getOneOf() != null) {
258270
LOGGER.debug("One of schema");
259271
sb.append(format("%sOne of:\n\n", indent(deepness)));
260272
schema.getOneOf().stream()
261273
.map(this::resolve)
262-
.forEach(composedChild -> sb.append(schema(deepness + 1, composedChild)));
274+
.forEach(composedChild -> sb.append(schema(deepness + 1, composedChild, context)));
263275
}
264276
return sb.toString();
265277
}
266278

267-
private String schema(int deepness, Schema schema) {
279+
private String schema(int deepness, Schema schema, DiffContext context) {
268280
StringBuilder sb = new StringBuilder("");
281+
if (!isDisplayed(schema, context)) {
282+
return sb.toString();
283+
}
269284
sb.append(listItem(deepness, "Enum", schema.getEnum()));
270-
sb.append(properties(deepness, "Property", schema.getProperties(), true));
285+
sb.append(properties(deepness, "Property", schema.getProperties(), true, context));
271286
if (schema instanceof ComposedSchema) {
272-
sb.append(schema(deepness, (ComposedSchema) schema));
287+
sb.append(schema(deepness, (ComposedSchema) schema, context));
273288
} else if (schema instanceof ArraySchema) {
274-
sb.append(items(deepness, resolve(((ArraySchema) schema).getItems())));
275-
}
276-
return sb.toString();
277-
}
278-
279-
private String items(int deepness, Schema schema) {
280-
StringBuilder sb = new StringBuilder("");
281-
sb.append(format("%sItems (%s)%s\n", indent(deepness), type(schema), Arrays.asList("object", "array").contains(type(schema)) ? " :\n" : ""));
282-
description(indent(deepness + 1), schema.getDescription());
283-
sb.append(schema(deepness, schema));
284-
return sb.toString();
285-
}
286-
287-
private String properties(final int deepness, String title, Map<String, Schema> properties, boolean showContent) {
288-
StringBuilder sb = new StringBuilder("");
289-
if (properties != null) {
290-
properties.forEach((key, value) -> {
291-
sb.append(property(deepness, title, key, resolve(value)));
292-
if (showContent) {
293-
sb.append(schema(deepness + 1, resolve(value)));
294-
}
295-
});
289+
sb.append(items(deepness, resolve(((ArraySchema) schema).getItems()), context));
296290
}
297291
return sb.toString();
298292
}
@@ -405,4 +399,25 @@ private String indent(int deepness) {
405399
private Schema resolve(Schema schema) {
406400
return refPointer.resolveRef(diff.getNewSpecOpenApi().getComponents(), schema, schema.get$ref());
407401
}
402+
403+
private String items(int deepness, Schema schema, DiffContext context) {
404+
StringBuilder sb = new StringBuilder("");
405+
sb.append(format("%sItems (%s)%s\n", indent(deepness), type(schema), Arrays.asList("object", "array").contains(type(schema)) ? " :\n" : ""));
406+
description(indent(deepness + 1), schema.getDescription());
407+
sb.append(schema(deepness, schema, context));
408+
return sb.toString();
409+
}
410+
411+
private String properties(final int deepness, String title, Map<String, Schema> properties, boolean showContent, DiffContext context) {
412+
StringBuilder sb = new StringBuilder("");
413+
if (properties != null) {
414+
properties.forEach((key, value) -> {
415+
sb.append(property(deepness, title, key, resolve(value)));
416+
if (showContent) {
417+
sb.append(schema(deepness + 1, resolve(value), context));
418+
}
419+
});
420+
}
421+
return sb.toString();
422+
}
408423
}

0 commit comments

Comments
 (0)