
com.qdesrame.openapi.diff.model.ChangedSchema 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.model;
import io.swagger.v3.oas.models.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.collections4.CollectionUtils;
import java.util.HashMap;
import java.util.Map;
/**
* Created by adarsh.sharma on 22/12/17.
*/
@Getter
@Setter
public class ChangedSchema implements RequestResponseChanged {
protected Schema oldSchema;
protected Schema newSchema;
protected String type;
protected Map changedProperties;
protected Map increasedProperties;
protected Map missingProperties;
protected boolean changeDeprecated;
protected boolean changeDescription;
protected boolean changeTitle;
protected ListDiff changeRequired;
protected boolean changeDefault;
protected ListDiff changeEnum;
protected boolean changeFormat;
protected boolean changeReadOnly;
protected boolean changeWriteOnly;
protected boolean changedType;
protected boolean changedMaxLength;
protected boolean discriminatorPropertyChanged;
protected ChangedOneOfSchema changedOneOfSchema;
public ChangedSchema() {
increasedProperties = new HashMap<>();
missingProperties = new HashMap<>();
changedProperties = new HashMap<>();
}
@Override
public boolean isDiff() {
return Boolean.TRUE.equals(changedType)
|| changeWriteOnly
|| changedMaxLength
|| changeReadOnly
|| (changeEnum != null && (changeEnum.getIncreased().size() > 0 || changeEnum.getMissing().size() > 0))
|| changeFormat
|| increasedProperties.size() > 0
|| missingProperties.size() > 0
|| changedProperties.size() > 0
|| changeDeprecated
|| (changeRequired != null && changeRequired.getIncreased().size() > 0)
|| (changeRequired != null && changeRequired.getMissing().size() > 0)
|| discriminatorPropertyChanged
|| (changedOneOfSchema != null && changedOneOfSchema.isDiff());
}
@Override
public boolean isDiffBackwardCompatible(boolean isRequest) {
boolean backwardCompatibleForRequest = (changeEnum == null || changeEnum.getMissing().isEmpty()) &&
(changeRequired == null || CollectionUtils.isEmpty(changeRequired.getIncreased())) &&
(!changedMaxLength || newSchema.getMaxLength() == null ||
(oldSchema.getMaxLength() != null && oldSchema.getMaxLength()<= newSchema.getMaxLength()));
boolean backwardCompatibleForResponse = (changeEnum == null || changeEnum.getIncreased().isEmpty()) &&
missingProperties.isEmpty() &&
(!changedMaxLength || oldSchema.getMaxLength() == null ||
(newSchema.getMaxLength() != null && newSchema.getMaxLength() <= oldSchema.getMaxLength()));
return (isRequest && backwardCompatibleForRequest || !isRequest && backwardCompatibleForResponse )
&& !changedType
&& !discriminatorPropertyChanged
&& (changedOneOfSchema == null || changedOneOfSchema.isDiffBackwardCompatible(isRequest))
&& changedProperties.values().stream().allMatch(p -> p.isDiffBackwardCompatible(isRequest));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy