Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 11 additions & 20 deletions src/main/java/com/qdesrame/openapi/diff/compare/OpenApiDiff.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public class OpenApiDiff {
private OpenAPI newSpecOpenApi;
private List<Endpoint> newEndpoints;
private List<Endpoint> missingEndpoints;
private List<ChangedEndpoint> changedEndpoints;
private List<ChangedOperation> changedOperations;

/**
* compare two openapi doc
Expand Down Expand Up @@ -109,30 +109,30 @@ private ChangedOpenApi compare() {
this.newEndpoints = EndpointUtils.convert2EndpointList(pathDiff.getIncreased());
this.missingEndpoints = EndpointUtils.convert2EndpointList(pathDiff.getMissing());

this.changedEndpoints = new ArrayList<>();
this.changedOperations = new ArrayList<>();

List<String> sharedKey = pathDiff.getSharedKey();
for (String pathUrl : sharedKey) {
PathItem oldPath = oldPaths.get(pathUrl);
PathItem newPath = newPaths.get(pathUrl);
ChangedEndpoint changedEndpoint = new ChangedEndpoint(pathUrl, oldPath, newPath);

Map<PathItem.HttpMethod, Operation> oldOperationMap = oldPath.readOperationsMap();
Map<PathItem.HttpMethod, Operation> newOperationMap = newPath.readOperationsMap();
MapKeyDiff<PathItem.HttpMethod, Operation> operationDiff = MapKeyDiff.diff(oldOperationMap,
newOperationMap);
Map<PathItem.HttpMethod, Operation> increasedOperation = operationDiff.getIncreased();
Map<PathItem.HttpMethod, Operation> missingOperation = operationDiff.getMissing();
changedEndpoint.setNewOperations(increasedOperation);
changedEndpoint.setMissingOperations(missingOperation);

this.newEndpoints.addAll(EndpointUtils.convert2Endpoints(pathUrl, increasedOperation));
this.missingEndpoints.addAll(EndpointUtils.convert2Endpoints(pathUrl, missingOperation));

List<PathItem.HttpMethod> sharedMethods = operationDiff.getSharedKey();
Map<PathItem.HttpMethod, ChangedOperation> operas = new HashMap<>();

ChangedOperation changedOperation;
for (PathItem.HttpMethod method : sharedMethods) {
Operation oldOperation = oldOperationMap.get(method);
Operation newOperation = newOperationMap.get(method);
changedOperation = new ChangedOperation(oldOperation, newOperation);
changedOperation = new ChangedOperation(pathUrl, method, oldOperation, newOperation);
changedOperation.setSummary(newOperation.getSummary());
changedOperation.setDeprecated(!Boolean.TRUE.equals(oldOperation.getDeprecated()) && Boolean.TRUE.equals(newOperation.getDeprecated()));

Expand Down Expand Up @@ -175,19 +175,10 @@ private ChangedOpenApi compare() {
changedApiResponse.setChangedResponses(resps);

if (changedOperation.isDiff()) {
operas.put(method, changedOperation);
changedOperations.add(changedOperation);
}
}
changedEndpoint.setChangedOperations(operas);

this.newEndpoints.addAll(EndpointUtils.convert2EndpointList(changedEndpoint.getPathUrl(),
changedEndpoint.getNewOperations()));
this.missingEndpoints.addAll(EndpointUtils.convert2EndpointList(changedEndpoint.getPathUrl(),
changedEndpoint.getMissingOperations()));

if (changedEndpoint.isDiff()) {
changedEndpoints.add(changedEndpoint);
}
}

return getChangedOpenApi();
Expand All @@ -198,7 +189,7 @@ private ChangedOpenApi getChangedOpenApi() {
changedOpenApi.setNewEndpoints(newEndpoints);
changedOpenApi.setNewSpecOpenApi(newSpecOpenApi);
changedOpenApi.setOldSpecOpenApi(oldSpecOpenApi);
changedOpenApi.setChangedEndpoints(changedEndpoints);
changedOpenApi.setChangedOperations(changedOperations);
return changedOpenApi;
}

Expand Down Expand Up @@ -234,8 +225,8 @@ public List<Endpoint> getMissingEndpoints() {
return missingEndpoints;
}

public List<ChangedEndpoint> getChangedEndpoints() {
return changedEndpoints;
public List<ChangedOperation> getChangedOperations() {
return changedOperations;
}

}
89 changes: 0 additions & 89 deletions src/main/java/com/qdesrame/openapi/diff/model/ChangedEndpoint.java

This file was deleted.

23 changes: 12 additions & 11 deletions src/main/java/com/qdesrame/openapi/diff/model/ChangedOpenApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.qdesrame.openapi.diff.utils.EndpointUtils;
import io.swagger.v3.oas.models.OpenAPI;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
* Created by adarsh.sharma on 22/12/17.
Expand All @@ -15,7 +15,7 @@ public class ChangedOpenApi implements Changed {

private List<Endpoint> newEndpoints;
private List<Endpoint> missingEndpoints;
private List<ChangedEndpoint> changedEndpoints;
private List<ChangedOperation> changedOperations;

public OpenAPI getOldSpecOpenApi() {
return oldSpecOpenApi;
Expand Down Expand Up @@ -50,29 +50,30 @@ public void setMissingEndpoints(List<Endpoint> missingEndpoints) {
}

public List<Endpoint> getDeprecatedEndpoints() {
return changedEndpoints.stream()
.map(c -> EndpointUtils.convert2EndpointList(c.getPathUrl(), c.getDeprecatedOperations()))
.collect(ArrayList::new, List::addAll, List::addAll);
return changedOperations.stream()
.filter(c -> c.isDeprecated())
.map(c -> EndpointUtils.convert2Endpoint(c.getPathUrl(), c.getHttpMethod(), c.getNewOperation()))
.collect(Collectors.toList());
}

public List<ChangedEndpoint> getChangedEndpoints() {
return changedEndpoints;
public List<ChangedOperation> getChangedOperations() {
return changedOperations;
}

public void setChangedEndpoints(List<ChangedEndpoint> changedEndpoints) {
this.changedEndpoints = changedEndpoints;
public void setChangedOperations(List<ChangedOperation> changedOperations) {
this.changedOperations = changedOperations;
}

@Override
public boolean isDiff() {
return newEndpoints.size() > 0
|| missingEndpoints.size() > 0
|| changedEndpoints.size() > 0;
|| changedOperations.size() > 0;
}

public boolean isDiffBackwardCompatible() {
return missingEndpoints.size() == 0
&& changedEndpoints.stream().allMatch(c -> c.isDiffBackwardCompatible());
&& changedOperations.stream().allMatch(c -> c.isDiffBackwardCompatible());
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package com.qdesrame.openapi.diff.model;

import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;


public class ChangedOperation implements Changed {

private String pathUrl;
private PathItem.HttpMethod httpMethod;
private Operation oldOperation;
private Operation newOperation;
private String summary;
Expand All @@ -12,11 +16,21 @@ public class ChangedOperation implements Changed {
private ChangedContent requestChangedContent;
private ChangedApiResponse changedApiResponse;

public ChangedOperation(Operation oldOperation, Operation newOperation) {
public ChangedOperation(String pathUrl, PathItem.HttpMethod httpMethod, Operation oldOperation, Operation newOperation) {
this.httpMethod = httpMethod;
this.pathUrl = pathUrl;
this.oldOperation = oldOperation;
this.newOperation = newOperation;
}

public String getPathUrl() {
return pathUrl;
}

public PathItem.HttpMethod getHttpMethod() {
return httpMethod;
}

public Operation getOldOperation() {
return oldOperation;
}
Expand Down
48 changes: 21 additions & 27 deletions src/main/java/com/qdesrame/openapi/diff/output/HtmlRender.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.qdesrame.openapi.diff.output;

import com.qdesrame.openapi.diff.model.*;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.media.MediaType;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.responses.ApiResponse;
import j2html.tags.ContainerTag;

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import static j2html.TagCreator.*;

Expand Down Expand Up @@ -38,8 +36,8 @@ public String render(ChangedOpenApi diff) {
List<Endpoint> deprecatedEndpoints = diff.getDeprecatedEndpoints();
ContainerTag ol_deprecatedEndpoint = ol_deprecatedEndpoint(deprecatedEndpoints);

List<ChangedEndpoint> changedEndpoints = diff.getChangedEndpoints();
ContainerTag ol_changed = ol_changed(changedEndpoints);
List<ChangedOperation> changedOperations = diff.getChangedOperations();
ContainerTag ol_changed = ol_changed(changedOperations);

return renderHtml(ol_newEndpoint, ol_missingEndpoint, ol_deprecatedEndpoint, ol_changed);
}
Expand Down Expand Up @@ -114,31 +112,27 @@ private ContainerTag li_deprecatedEndpoint(String method, String path,
del().withText(path)).with(span(" " + desc));
}

private ContainerTag ol_changed(List<ChangedEndpoint> changedEndpoints) {
if (null == changedEndpoints) return ol();
private ContainerTag ol_changed(List<ChangedOperation> changedOperations) {
if (null == changedOperations) return ol();
ContainerTag ol = ol();
for (ChangedEndpoint changedEndpoint : changedEndpoints) {
String pathUrl = changedEndpoint.getPathUrl();
Map<PathItem.HttpMethod, ChangedOperation> changedOperations = changedEndpoint.getChangedOperations();
for (Entry<PathItem.HttpMethod, ChangedOperation> entry : changedOperations.entrySet()) {
String method = entry.getKey().toString();
ChangedOperation changedOperation = entry.getValue();
String desc = changedOperation.getSummary();

ContainerTag ul_detail = ul().withClass("detail");
if (changedOperation.isDiffParam()) {
ul_detail.with(li().with(h3("Parameters")).with(ul_param(changedOperation.getChangedParameters())));
}
if (changedOperation.isDiffRequest()) {
ul_detail.with(li().with(h3("Request")).with(ul_request(changedOperation.getRequestChangedContent())));
} else {
}
if (changedOperation.isDiffResponse()) {
ul_detail.with(li().with(h3("Response")).with(ul_response(changedOperation.getChangedApiResponse())));
}
ol.with(li().with(span(method).withClass(method)).withText(pathUrl + " ").with(span(desc))
.with(ul_detail));
for (ChangedOperation changedOperation : changedOperations) {
String pathUrl = changedOperation.getPathUrl();
String method = changedOperation.getHttpMethod().toString();
String desc = changedOperation.getSummary();

ContainerTag ul_detail = ul().withClass("detail");
if (changedOperation.isDiffParam()) {
ul_detail.with(li().with(h3("Parameters")).with(ul_param(changedOperation.getChangedParameters())));
}
if (changedOperation.isDiffRequest()) {
ul_detail.with(li().with(h3("Request")).with(ul_request(changedOperation.getRequestChangedContent())));
} else {
}
if (changedOperation.isDiffResponse()) {
ul_detail.with(li().with(h3("Response")).with(ul_response(changedOperation.getChangedApiResponse())));
}
ol.with(li().with(span(method).withClass(method)).withText(pathUrl + " ").with(span(desc))
.with(ul_detail));
}
return ol;
}
Expand Down
Loading