Skip to content

Commit f123033

Browse files
committed
Merge branch 'read-write-only'
# Conflicts: # src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/SchemaDiffResult.java # src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java
2 parents 9a787c5 + 56c40b2 commit f123033

File tree

2 files changed

+42
-18
lines changed

2 files changed

+42
-18
lines changed

src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/SchemaDiffResult.java

+14-4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import lombok.Getter;
1414

1515
import java.util.*;
16+
import java.util.stream.Collectors;
1617

1718
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
1819

@@ -51,8 +52,6 @@ public Optional<ChangedSchema> diff(HashSet<String> refSet, Components leftCompo
5152
Map<String, Schema> leftProperties = null == left ? null : left.getProperties();
5253
Map<String, Schema> rightProperties = null == right ? null : right.getProperties();
5354
MapKeyDiff<String, Schema> propertyDiff = MapKeyDiff.diff(leftProperties, rightProperties);
54-
Map<String, Schema> increasedProp = propertyDiff.getIncreased();
55-
Map<String, Schema> missingProp = propertyDiff.getMissing();
5655

5756
for (String key : propertyDiff.getSharedKey()) {
5857
Optional<ChangedSchema> resultSchema = openApiDiff.getSchemaDiff().diff(refSet, leftProperties.get(key), rightProperties.get(key), required(context, key, right.getRequired()));
@@ -61,11 +60,22 @@ public Optional<ChangedSchema> diff(HashSet<String> refSet, Components leftCompo
6160

6261
compareAdditionalProperties(refSet, left, right, context);
6362

64-
changedSchema.getIncreasedProperties().putAll(increasedProp);
65-
changedSchema.getMissingProperties().putAll(missingProp);
63+
changedSchema.getIncreasedProperties().putAll(filterProperties(propertyDiff.getIncreased(), context));
64+
changedSchema.getMissingProperties().putAll(filterProperties(propertyDiff.getMissing(), context));
6665
return isChanged(changedSchema);
6766
}
6867

68+
private Map<String, Schema> filterProperties(Map<String, Schema> properties, DiffContext context) {
69+
return properties.entrySet().stream()
70+
.filter(entry -> isPropertyApplicable(entry.getValue(), context))
71+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
72+
}
73+
74+
private boolean isPropertyApplicable(Schema schema, DiffContext context) {
75+
return !(context.isResponse() && Boolean.TRUE.equals(schema.getWriteOnly()))
76+
&& !(context.isRequest() && Boolean.TRUE.equals(schema.getReadOnly()));
77+
}
78+
6979
private DiffContext required(DiffContext context, String key, List<String> required) {
7080
return context.copyWithRequired(required != null && required.contains(key));
7181
}

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

+28-14
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,23 @@ protected String oneOfSchema(int deepness, ChangedOneOfSchema schema, String dis
203203
.forEach(key -> sb.append(format("%sDeleted '%s' %s\n", indent(deepness), key, discriminator)));
204204
schema.getIncreasedMapping().forEach((key, sub) ->
205205
sb.append(format("%sAdded '%s' %s:\n", indent(deepness), key, discriminator))
206-
.append(schema(deepness, sub)));
206+
.append(schema(deepness, sub, schema.getContext())));
207207
schema.getChangedMapping().forEach((key, sub) ->
208208
sb.append(format("%sUpdated `%s` %s:\n", indent(deepness), key, discriminator))
209209
.append(schema(deepness, sub)));
210210
return sb.toString();
211211
}
212212

213+
protected String required(int deepness, String title, List<String> required) {
214+
StringBuilder sb = new StringBuilder("");
215+
if (required.size() > 0) {
216+
sb.append(format("%s%s:\n", indent(deepness), title));
217+
required.forEach(s -> sb.append(format("%s- `%s`\n", indent(deepness), s)));
218+
sb.append("\n");
219+
}
220+
return sb.toString();
221+
}
222+
213223
protected String schema(int deepness, ChangedSchema schema) {
214224
StringBuilder sb = new StringBuilder("");
215225
if (schema.isDiscriminatorPropertyChanged()) {
@@ -220,58 +230,62 @@ protected String schema(int deepness, ChangedSchema schema) {
220230
schema.getNewSchema().getDiscriminator().getPropertyName() : "";
221231
sb.append(oneOfSchema(deepness, schema.getChangedOneOfSchema(), discriminator));
222232
}
233+
if (schema.getChangeRequired() != null) {
234+
sb.append(required(deepness, "New required properties", schema.getChangeRequired().getIncreased()));
235+
sb.append(required(deepness, "New optional properties", schema.getChangeRequired().getMissing()));
236+
}
223237
sb.append(listDiff(deepness, "enum", schema.getChangeEnum()));
224-
sb.append(properties(deepness, "Added property", schema.getIncreasedProperties(), true));
225-
sb.append(properties(deepness, "Deleted property", schema.getMissingProperties(), false));
238+
sb.append(properties(deepness, "Added property", schema.getIncreasedProperties(), true, schema.getContext()));
239+
sb.append(properties(deepness, "Deleted property", schema.getMissingProperties(), false, schema.getContext()));
226240
schema.getChangedProperties().forEach((name, property) -> sb.append(property(deepness, name, property)));
227241
return sb.toString();
228242
}
229243

230-
protected String schema(int deepness, ComposedSchema schema) {
244+
protected String schema(int deepness, ComposedSchema schema, DiffContext context) {
231245
StringBuilder sb = new StringBuilder("");
232246
if (schema.getAllOf() != null && schema.getAllOf() != null) {
233247
LOGGER.debug("All of schema");
234248
schema.getAllOf().stream()
235249
.map(this::resolve)
236-
.forEach(composedChild -> sb.append(schema(deepness, composedChild)));
250+
.forEach(composedChild -> sb.append(schema(deepness, composedChild, context)));
237251
}
238252
if (schema.getOneOf() != null && schema.getOneOf() != null) {
239253
LOGGER.debug("One of schema");
240254
sb.append(format("%sOne of:\n\n", indent(deepness)));
241255
schema.getOneOf().stream()
242256
.map(this::resolve)
243-
.forEach(composedChild -> sb.append(schema(deepness + 1, composedChild)));
257+
.forEach(composedChild -> sb.append(schema(deepness + 1, composedChild, context)));
244258
}
245259
return sb.toString();
246260
}
247261

248-
protected String schema(int deepness, Schema schema) {
262+
protected String schema(int deepness, Schema schema, DiffContext context) {
249263
StringBuilder sb = new StringBuilder("");
250264
sb.append(listItem(deepness, "Enum", schema.getEnum()));
251-
sb.append(properties(deepness, "Property", schema.getProperties(), true));
265+
sb.append(properties(deepness, "Property", schema.getProperties(), true, context));
252266
if (schema instanceof ComposedSchema) {
253-
sb.append(schema(deepness, (ComposedSchema) schema));
267+
sb.append(schema(deepness, (ComposedSchema) schema, context));
254268
} else if (schema instanceof ArraySchema) {
255-
sb.append(items(deepness, resolve(((ArraySchema) schema).getItems())));
269+
sb.append(items(deepness, resolve(((ArraySchema) schema).getItems()), context));
256270
}
257271
return sb.toString();
258272
}
259273

260-
protected String items(int deepness, Schema schema) {
274+
protected String items(int deepness, Schema schema, DiffContext context) {
261275
StringBuilder sb = new StringBuilder("");
262276
sb.append(format("%sItems (%s)%s\n", indent(deepness), type(schema), Arrays.asList("object", "array").contains(type(schema)) ? " :\n" : ""));
263277
description(indent(deepness + 1), schema.getDescription());
264-
sb.append(schema(deepness, schema));
278+
sb.append(schema(deepness, schema, context));
265279
return sb.toString();
266280
}
267281

268-
protected String properties(final int deepness, String title, Map<String, Schema> properties, boolean showContent) {
282+
protected String properties(final int deepness, String title, Map<String, Schema> properties, boolean showContent, DiffContext context) {
269283
StringBuilder sb = new StringBuilder("");
270284
if (properties != null) {
271285
properties.forEach((key, value) -> {
272286
sb.append(property(deepness, title, key, resolve(value)));
273287
if (showContent) {
274-
sb.append(schema(deepness + 1, resolve(value)));
288+
sb.append(schema(deepness + 1, resolve(value), context));
275289
}
276290
});
277291
}

0 commit comments

Comments
 (0)