
com.qdesrame.openapi.diff.compare.schemadiffresult.SchemaDiffResult Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of openapi-diff Show documentation
Show all versions of openapi-diff Show documentation
Utility for comparing two OpenAPI specifications.
package com.qdesrame.openapi.diff.compare.schemadiffresult;
import com.qdesrame.openapi.diff.compare.MapKeyDiff;
import com.qdesrame.openapi.diff.compare.OpenApiDiff;
import com.qdesrame.openapi.diff.model.ChangedSchema;
import com.qdesrame.openapi.diff.model.ListDiff;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.media.Schema;
import lombok.Getter;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@Getter
public class SchemaDiffResult {
protected ChangedSchema changedSchema;
protected OpenApiDiff openApiDiff;
public SchemaDiffResult(OpenApiDiff openApiDiff) {
this.openApiDiff = openApiDiff;
this.changedSchema = new ChangedSchema();
}
public SchemaDiffResult(String type, OpenApiDiff openApiDiff) {
this(openApiDiff);
this.changedSchema.setType(type);
}
public Optional diff(Components leftComponents, Components rightComponents, Schema left, Schema right) {
changedSchema.setOldSchema(left);
changedSchema.setNewSchema(right);
changedSchema.setChangeDeprecated(!Boolean.TRUE.equals(left.getDeprecated()) && Boolean.TRUE.equals(right.getDeprecated()));
changedSchema.setChangeDescription(!Objects.equals(left.getDescription(), right.getDescription()));
changedSchema.setChangeTitle(!Objects.equals(left.getTitle(), right.getTitle()));
changedSchema.setChangeRequired(ListDiff.diff(left.getRequired(), right.getRequired()));
changedSchema.setChangeDefault(!Objects.equals(left.getDefault(), right.getDefault()));
changedSchema.setChangeEnum(ListDiff.diff(left.getEnum(), right.getEnum()));
changedSchema.setChangeFormat(!Objects.equals(left.getFormat(), right.getFormat()));
changedSchema.setChangeReadOnly(!Boolean.TRUE.equals(left.getReadOnly()) && Boolean.TRUE.equals(right.getReadOnly()));
changedSchema.setChangeWriteOnly(!Boolean.TRUE.equals(left.getWriteOnly()) && Boolean.TRUE.equals(right.getWriteOnly()));
changedSchema.setChangedMaxLength(!Objects.equals(left.getMaxLength(), right.getMaxLength()));
Map leftProperties = null == left ? null : left.getProperties();
Map rightProperties = null == right ? null : right.getProperties();
MapKeyDiff propertyDiff = MapKeyDiff.diff(leftProperties, rightProperties);
Map increasedProp = propertyDiff.getIncreased();
Map missingProp = propertyDiff.getMissing();
for (String key : propertyDiff.getSharedKey()) {
// openApiDiff.getSchemaDiff().diff(leftProperties.get(key), rightProperties.get(key))
// .ifPresent(resultSchema -> );
Optional resultSchema = openApiDiff.getSchemaDiff().diff(leftProperties.get(key), rightProperties.get(key));
if (resultSchema.isPresent() && resultSchema.get().isDiff()) {
changedSchema.getChangedProperties().put(key, resultSchema.get());
}
}
changedSchema.getIncreasedProperties().putAll(increasedProp);
changedSchema.getMissingProperties().putAll(missingProp);
return changedSchema.isDiff()? Optional.of(changedSchema): Optional.empty();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy