@@ -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