com.deepoove.swagger.diff.SwaggerDiff Maven / Gradle / Ivy
package com.deepoove.swagger.diff;
import java.io.IOException;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.deepoove.swagger.diff.compare.SpecificationDiff;
import com.deepoove.swagger.diff.model.ChangedEndpoint;
import com.deepoove.swagger.diff.model.ChangedExtensionGroup;
import com.deepoove.swagger.diff.model.Endpoint;
import com.fasterxml.jackson.databind.JsonNode;
import io.swagger.models.Swagger;
import io.swagger.models.auth.AuthorizationValue;
import io.swagger.parser.SwaggerCompatConverter;
import io.swagger.parser.SwaggerParser;
public class SwaggerDiff {
public static final String SWAGGER_VERSION_V2 = "2.0";
private static Logger logger = LoggerFactory.getLogger(SwaggerDiff.class);
private Swagger oldSpecSwagger;
private Swagger newSpecSwagger;
private List newEndpoints;
private List missingEndpoints;
private List changedEndpoints;
private ChangedExtensionGroup changedVendorExtensions;
/**
* compare two swagger 1.x doc
*
* @param oldSpec
* old api-doc location:Json or Http
* @param newSpec
* new api-doc location:Json or Http
*/
public static SwaggerDiff compareV1(String oldSpec, String newSpec) {
return compareV1(oldSpec, newSpec, false);
}
public static SwaggerDiff compareV1(String oldSpec, String newSpec, boolean withExtensions) {
return compare(oldSpec, newSpec, null, null, withExtensions);
}
/**
* compare two swagger v2.0 doc
*
* @param oldSpec
* old api-doc location:Json or Http
* @param newSpec
* new api-doc location:Json or Http
*/
public static SwaggerDiff compareV2(String oldSpec, String newSpec) {
return compareV2(oldSpec, newSpec, false);
}
public static SwaggerDiff compareV2(String oldSpec, String newSpec, boolean withExtensions) {
return compare(oldSpec, newSpec, null, SWAGGER_VERSION_V2, withExtensions);
}
/**
* Compare two swagger v2.0 docs by JsonNode
*
* @param oldSpec
* old Swagger specification document in v2.0 format as a JsonNode
* @param newSpec
* new Swagger specification document in v2.0 format as a JsonNode
*/
public static SwaggerDiff compareV2(JsonNode oldSpec, JsonNode newSpec) {
return compareV2(oldSpec, newSpec, false);
}
public static SwaggerDiff compareV2(JsonNode oldSpec, JsonNode newSpec, boolean withExtensions) {
return new SwaggerDiff(oldSpec, newSpec).compare(withExtensions);
}
public static SwaggerDiff compare(String oldSpec, String newSpec,
List auths, String version, boolean withExtensions) {
return new SwaggerDiff(oldSpec, newSpec, auths, version).compare(withExtensions);
}
/**
* @param oldSpec
* @param newSpec
* @param auths
* @param version
*/
private SwaggerDiff(String oldSpec, String newSpec, List auths,
String version) {
if (SWAGGER_VERSION_V2.equals(version)) {
SwaggerParser swaggerParser = new SwaggerParser();
oldSpecSwagger = swaggerParser.read(oldSpec, auths, true);
newSpecSwagger = swaggerParser.read(newSpec, auths, true);
} else {
SwaggerCompatConverter swaggerCompatConverter = new SwaggerCompatConverter();
try {
oldSpecSwagger = swaggerCompatConverter.read(oldSpec, auths);
newSpecSwagger = swaggerCompatConverter.read(newSpec, auths);
} catch (IOException e) {
logger.error("cannot read api-doc from spec[version_v1.x]", e);
return;
}
}
if (null == oldSpecSwagger || null == newSpecSwagger) { throw new RuntimeException(
"cannot read api-doc from spec."); }
}
private SwaggerDiff(JsonNode oldSpec, JsonNode newSpec) {
SwaggerParser swaggerParser = new SwaggerParser();
oldSpecSwagger = swaggerParser.read(oldSpec, true);
newSpecSwagger = swaggerParser.read(newSpec, true);
if (null == oldSpecSwagger || null == newSpecSwagger) { throw new RuntimeException(
"cannot read api-doc from spec."); }
}
private SwaggerDiff compare(boolean withExtensions) {
SpecificationDiff diff = SpecificationDiff.diff(oldSpecSwagger, newSpecSwagger, withExtensions);
this.newEndpoints = diff.getNewEndpoints();
this.missingEndpoints = diff.getMissingEndpoints();
this.changedEndpoints = diff.getChangedEndpoints();
this.changedVendorExtensions = diff;
return this;
}
public List getNewEndpoints() {
return newEndpoints;
}
public List getMissingEndpoints() {
return missingEndpoints;
}
public List getChangedEndpoints() {
return changedEndpoints;
}
public ChangedExtensionGroup getChangedVendorExtensions() {
return changedVendorExtensions;
}
public String getOldVersion() {
return oldSpecSwagger.getInfo().getVersion();
}
public String getNewVersion() {
return newSpecSwagger.getInfo().getVersion();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy