
com.qdesrame.openapi.diff.compare.ParametersDiff 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;
import com.qdesrame.openapi.diff.model.ChangedParameters;
import com.qdesrame.openapi.diff.utils.RefPointer;
import com.qdesrame.openapi.diff.utils.RefType;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.parameters.Parameter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* compare two parameter
*
* @author QDesrame
*/
public class ParametersDiff {
private Components leftComponents;
private Components rightComponents;
private OpenApiDiff openApiDiff;
private static RefPointer refPointer = new RefPointer<>(RefType.PARAMETERS);
public ParametersDiff(OpenApiDiff openApiDiff) {
this.openApiDiff = openApiDiff;
this.leftComponents = openApiDiff.getOldSpecOpenApi() != null ? openApiDiff.getOldSpecOpenApi().getComponents() : null;
this.rightComponents = openApiDiff.getNewSpecOpenApi() != null ? openApiDiff.getNewSpecOpenApi().getComponents() : null;
}
public static Optional contains(Components components, List parameters, Parameter parameter) {
return parameters.stream().filter(param -> same(refPointer.resolveRef(components, param, param.get$ref()), parameter)).findFirst();
}
public static boolean same(Parameter left, Parameter right) {
return Objects.equals(left.getName(), right.getName()) && Objects.equals(left.getIn(), right.getIn());
}
public Optional diff(List left, List right) {
ChangedParameters changedParameters = new ChangedParameters(left, right != null ? new ArrayList<>(right) : null);
if (null == left) left = new ArrayList<>();
if (null == right) right = new ArrayList<>();
for (Parameter leftPara : left) {
leftPara = refPointer.resolveRef(leftComponents, leftPara, leftPara.get$ref());
Optional rightParam = contains(rightComponents, right, leftPara);
if (!rightParam.isPresent()) {
changedParameters.getMissing().add(leftPara);
} else {
Parameter rightPara = rightParam.get();
right.remove(rightPara);
openApiDiff.getParameterDiff().diff(leftPara, rightPara).ifPresent(changedParameters.getChanged()::add);
}
}
changedParameters.getIncreased().addAll(right);
return changedParameters.isDiff() ? Optional.of(changedParameters) : Optional.empty();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy