Skip to content

Commit 4d0f20d

Browse files
committed
Update data model to manage diff context && to return result instead of boolean
1 parent 7b1935e commit 4d0f20d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+732
-421
lines changed

src/main/java/com/qdesrame/openapi/diff/Main.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,10 @@ public static void main(String... args) {
131131
}
132132
}
133133
if (line.hasOption("state")) {
134-
System.out.println(result.isDiff() ? result.isDiffBackwardCompatible() ? "compatible" : "incompatible" : "no_changes");
134+
System.out.println(result.isChanged().getValue());
135135
System.exit(0);
136136
} else {
137-
System.exit(result.isDiff() ? 1 : 0);
137+
System.exit(result.isUnchanged() ? 0 : 1);
138138
}
139139
} catch (ParseException e) {
140140
// oops, something went wrong

src/main/java/com/qdesrame/openapi/diff/compare/ApiResponseDiff.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.qdesrame.openapi.diff.model.ChangedApiResponse;
44
import com.qdesrame.openapi.diff.model.ChangedResponse;
5+
import com.qdesrame.openapi.diff.model.DiffContext;
56
import io.swagger.v3.oas.models.responses.ApiResponse;
67
import io.swagger.v3.oas.models.responses.ApiResponses;
78

@@ -10,6 +11,8 @@
1011
import java.util.Map;
1112
import java.util.Optional;
1213

14+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
15+
1316
/**
1417
* Created by adarsh.sharma on 04/01/18.
1518
*/
@@ -20,19 +23,20 @@ public ApiResponseDiff(OpenApiDiff openApiDiff) {
2023
this.openApiDiff = openApiDiff;
2124
}
2225

23-
public Optional<ChangedApiResponse> diff(ApiResponses left, ApiResponses right) {
26+
public Optional<ChangedApiResponse> diff(ApiResponses left, ApiResponses right, DiffContext context) {
2427
MapKeyDiff<String, ApiResponse> responseMapKeyDiff = MapKeyDiff.diff(left, right);
25-
ChangedApiResponse changedApiResponse = new ChangedApiResponse(left, right);
28+
ChangedApiResponse changedApiResponse = new ChangedApiResponse(left, right, context);
2629
changedApiResponse.setAddResponses(responseMapKeyDiff.getIncreased());
2730
changedApiResponse.setMissingResponses(responseMapKeyDiff.getMissing());
2831
List<String> sharedResponseCodes = responseMapKeyDiff.getSharedKey();
29-
32+
context.setRequest(false);
33+
context.setResponse(true);
3034
Map<String, ChangedResponse> resps = new HashMap<>();
3135
for (String responseCode : sharedResponseCodes) {
32-
openApiDiff.getResponseDiff().diff(left.get(responseCode), right.get(responseCode))
36+
openApiDiff.getResponseDiff().diff(left.get(responseCode), right.get(responseCode), context)
3337
.ifPresent(changedResponse -> resps.put(responseCode, changedResponse));
3438
}
3539
changedApiResponse.setChangedResponses(resps);
36-
return changedApiResponse.isDiff() ? Optional.of(changedApiResponse) : Optional.empty();
40+
return isChanged(changedApiResponse);
3741
}
3842
}

src/main/java/com/qdesrame/openapi/diff/compare/ContentDiff.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
import com.qdesrame.openapi.diff.model.ChangedContent;
44
import com.qdesrame.openapi.diff.model.ChangedMediaType;
5+
import com.qdesrame.openapi.diff.model.DiffContext;
56
import io.swagger.v3.oas.models.media.Content;
67
import io.swagger.v3.oas.models.media.MediaType;
78

89
import java.util.*;
910

11+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
12+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isUnchanged;
13+
1014
public class ContentDiff implements Comparable<Content> {
1115

1216
private OpenApiDiff openApiDiff;
@@ -20,8 +24,8 @@ public boolean compare(Content left, Content right) {
2024
return false;
2125
}
2226

23-
public Optional<ChangedContent> diff(Content left, Content right) {
24-
ChangedContent changedContent = new ChangedContent(left, right);
27+
public Optional<ChangedContent> diff(Content left, Content right, DiffContext context) {
28+
ChangedContent changedContent = new ChangedContent(left, right, context);
2529

2630
MapKeyDiff<String, MediaType> mediaTypeDiff = MapKeyDiff.diff(left, right);
2731
changedContent.setIncreased(mediaTypeDiff.getIncreased());
@@ -31,13 +35,13 @@ public Optional<ChangedContent> diff(Content left, Content right) {
3135
for (String mediaTypeKey : sharedMediaTypes) {
3236
MediaType oldMediaType = left.get(mediaTypeKey);
3337
MediaType newMediaType = right.get(mediaTypeKey);
34-
ChangedMediaType changedMediaType = new ChangedMediaType(oldMediaType.getSchema(), newMediaType.getSchema());
35-
openApiDiff.getSchemaDiff().diff(new HashSet<>(), oldMediaType.getSchema(), newMediaType.getSchema()).ifPresent(changedMediaType::setChangedSchema);
36-
if (changedMediaType.isDiff()) {
38+
ChangedMediaType changedMediaType = new ChangedMediaType(oldMediaType.getSchema(), newMediaType.getSchema(), context);
39+
openApiDiff.getSchemaDiff().diff(new HashSet<>(), oldMediaType.getSchema(), newMediaType.getSchema(), context).ifPresent(changedMediaType::setChangedSchema);
40+
if (!isUnchanged(changedMediaType)) {
3741
changedMediaTypes.put(mediaTypeKey, changedMediaType);
3842
}
3943
}
4044
changedContent.setChanged(changedMediaTypes);
41-
return changedContent.isDiff() ? Optional.of(changedContent) : Optional.empty();
45+
return isChanged(changedContent);
4246
}
4347
}

src/main/java/com/qdesrame/openapi/diff/compare/HeaderDiff.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.qdesrame.openapi.diff.compare;
22

33
import com.qdesrame.openapi.diff.model.ChangedHeader;
4+
import com.qdesrame.openapi.diff.model.DiffContext;
45
import com.qdesrame.openapi.diff.utils.RefPointer;
56
import com.qdesrame.openapi.diff.utils.RefType;
67
import io.swagger.v3.oas.models.Components;
@@ -10,6 +11,8 @@
1011
import java.util.Objects;
1112
import java.util.Optional;
1213

14+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
15+
1316
/**
1417
* Created by adarsh.sharma on 28/12/17.
1518
*/
@@ -25,26 +28,26 @@ public HeaderDiff(OpenApiDiff openApiDiff) {
2528
this.rightComponents = openApiDiff.getNewSpecOpenApi() != null ? openApiDiff.getNewSpecOpenApi().getComponents() : null;
2629
}
2730

28-
public Optional<ChangedHeader> diff(Header left, Header right) {
29-
return cachedDiff(new HashSet<>(), left, right, left.get$ref(), right.get$ref());
31+
public Optional<ChangedHeader> diff(Header left, Header right, DiffContext context) {
32+
return cachedDiff(new HashSet<>(), left, right, left.get$ref(), right.get$ref(), context);
3033
}
3134

3235
@Override
33-
protected Optional<ChangedHeader> computeDiff(HashSet<String> refSet, Header left, Header right) {
36+
protected Optional<ChangedHeader> computeDiff(HashSet<String> refSet, Header left, Header right, DiffContext context) {
3437
left = refPointer.resolveRef(leftComponents, left, left.get$ref());
3538
right = refPointer.resolveRef(rightComponents, right, right.get$ref());
3639

37-
ChangedHeader changedHeader = new ChangedHeader(left, right);
40+
ChangedHeader changedHeader = new ChangedHeader(left, right, context);
3841

3942
changedHeader.setChangeDescription(!Objects.equals(left.getDescription(), right.getDescription()));
4043
changedHeader.setChangeRequired(getBooleanDiff(left.getRequired(), right.getRequired()));
4144
changedHeader.setChangeDeprecated(!Boolean.TRUE.equals(left.getDeprecated()) && Boolean.TRUE.equals(right.getDeprecated()));
4245
changedHeader.setChangeStyle(!Objects.equals(left.getStyle(), right.getStyle()));
4346
changedHeader.setChangeExplode(getBooleanDiff(left.getExplode(), right.getExplode()));
44-
openApiDiff.getSchemaDiff().diff(new HashSet<>(), left.getSchema(), right.getSchema()).ifPresent(changedHeader::setChangedSchema);
45-
openApiDiff.getContentDiff().diff(left.getContent(), right.getContent()).ifPresent(changedHeader::setChangedContent);
47+
openApiDiff.getSchemaDiff().diff(new HashSet<>(), left.getSchema(), right.getSchema(), context).ifPresent(changedHeader::setChangedSchema);
48+
openApiDiff.getContentDiff().diff(left.getContent(), right.getContent(), context).ifPresent(changedHeader::setChangedContent);
4649

47-
return changedHeader.isDiff() ? Optional.of(changedHeader) : Optional.empty();
50+
return isChanged(changedHeader);
4851
}
4952

5053
private boolean getBooleanDiff(Boolean left, Boolean right) {

src/main/java/com/qdesrame/openapi/diff/compare/HeadersDiff.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
import com.qdesrame.openapi.diff.model.ChangedHeader;
44
import com.qdesrame.openapi.diff.model.ChangedHeaders;
5+
import com.qdesrame.openapi.diff.model.DiffContext;
56
import io.swagger.v3.oas.models.headers.Header;
67

78
import java.util.HashMap;
89
import java.util.List;
910
import java.util.Map;
1011
import java.util.Optional;
1112

13+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
14+
1215
/**
1316
* Created by adarsh.sharma on 28/12/17.
1417
*/
@@ -19,8 +22,8 @@ public HeadersDiff(OpenApiDiff openApiDiff) {
1922
this.openApiDiff = openApiDiff;
2023
}
2124

22-
public Optional<ChangedHeaders> diff(Map<String, Header> left, Map<String, Header> right) {
23-
ChangedHeaders changedHeaders = new ChangedHeaders(left, right);
25+
public Optional<ChangedHeaders> diff(Map<String, Header> left, Map<String, Header> right, DiffContext context) {
26+
ChangedHeaders changedHeaders = new ChangedHeaders(left, right, context);
2427
MapKeyDiff<String, Header> headerMapDiff = MapKeyDiff.diff(left, right);
2528
changedHeaders.setIncreased(headerMapDiff.getIncreased());
2629
changedHeaders.setMissing(headerMapDiff.getMissing());
@@ -30,11 +33,11 @@ public Optional<ChangedHeaders> diff(Map<String, Header> left, Map<String, Heade
3033
for (String headerKey : sharedHeaderKeys) {
3134
Header oldHeader = left.get(headerKey);
3235
Header newHeader = right.get(headerKey);
33-
openApiDiff.getHeaderDiff().diff(oldHeader, newHeader)
36+
openApiDiff.getHeaderDiff().diff(oldHeader, newHeader, context)
3437
.ifPresent(changedHeader -> changed.put(headerKey, changedHeader));
3538
}
3639
changedHeaders.setChanged(changed);
3740

38-
return changedHeaders.isDiff() ? Optional.of(changedHeaders) : Optional.empty();
41+
return isChanged(changedHeaders);
3942
}
4043
}

src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowDiff.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import java.util.Objects;
77
import java.util.Optional;
88

9+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
10+
911
/**
1012
* Created by adarsh.sharma on 12/01/18.
1113
*/
@@ -24,6 +26,6 @@ public Optional<ChangedOAuthFlow> diff(OAuthFlow left, OAuthFlow right) {
2426
changedOAuthFlow.setChangedRefreshUrl(!Objects.equals(left.getRefreshUrl(), right.getRefreshUrl()));
2527
}
2628

27-
return changedOAuthFlow.isDiff() ? Optional.of(changedOAuthFlow) : Optional.empty();
29+
return isChanged(changedOAuthFlow);
2830
}
2931
}

src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowsDiff.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import java.util.Optional;
77

8+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
9+
810
/**
911
* Created by adarsh.sharma on 12/01/18.
1012
*/
@@ -23,6 +25,6 @@ public Optional<ChangedOAuthFlows> diff(OAuthFlows left, OAuthFlows right) {
2325
openApiDiff.getoAuthFlowDiff().diff(left.getClientCredentials(), right.getClientCredentials()).ifPresent(changedOAuthFlows::setChangedClientCredentialOAuthFlow);
2426
openApiDiff.getoAuthFlowDiff().diff(left.getAuthorizationCode(), right.getAuthorizationCode()).ifPresent(changedOAuthFlows::setChangedAuthorizationCodeOAuthFlow);
2527
}
26-
return changedOAuthFlows.isDiff() ? Optional.of(changedOAuthFlows) : Optional.empty();
28+
return isChanged(changedOAuthFlows);
2729
}
2830
}

src/main/java/com/qdesrame/openapi/diff/compare/OperationDiff.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
import com.qdesrame.openapi.diff.model.ChangedOperation;
44
import com.qdesrame.openapi.diff.model.ChangedParameters;
5+
import com.qdesrame.openapi.diff.model.DiffContext;
56
import io.swagger.v3.oas.models.Operation;
6-
import io.swagger.v3.oas.models.PathItem;
77
import io.swagger.v3.oas.models.parameters.Parameter;
88

99
import java.util.List;
1010
import java.util.Map;
1111
import java.util.Optional;
1212

13+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
14+
1315
/**
1416
* Created by adarsh.sharma on 04/01/18.
1517
*/
@@ -20,34 +22,34 @@ public OperationDiff(OpenApiDiff openApiDiff) {
2022
this.openApiDiff = openApiDiff;
2123
}
2224

23-
public Optional<ChangedOperation> diff(String pathUrl, PathItem.HttpMethod method, Map<String, String> pathParameters, Operation oldOperation, Operation newOperation) {
24-
ChangedOperation changedOperation = new ChangedOperation(pathUrl, method, oldOperation, newOperation);
25+
public Optional<ChangedOperation> diff(Operation oldOperation, Operation newOperation, DiffContext context) {
26+
ChangedOperation changedOperation = new ChangedOperation(context.getUrl(), context.getMethod(), oldOperation, newOperation);
2527

2628
changedOperation.setSummary(newOperation.getSummary());
2729
changedOperation.setDeprecated(!Boolean.TRUE.equals(oldOperation.getDeprecated()) && Boolean.TRUE.equals(newOperation.getDeprecated()));
2830

2931
if (oldOperation.getRequestBody() != null || newOperation.getRequestBody() != null) {
30-
openApiDiff.getRequestBodyDiff().diff(oldOperation.getRequestBody(), newOperation.getRequestBody())
32+
openApiDiff.getRequestBodyDiff().diff(oldOperation.getRequestBody(), newOperation.getRequestBody(), context)
3133
.ifPresent(changedOperation::setChangedRequestBody);
3234
}
3335

34-
openApiDiff.getParametersDiff().diff(oldOperation.getParameters(), newOperation.getParameters())
36+
openApiDiff.getParametersDiff().diff(oldOperation.getParameters(), newOperation.getParameters(), context)
3537
.ifPresent(params -> {
36-
removePathParameters(pathParameters, params);
38+
removePathParameters(context.getParameters(), params);
3739
changedOperation.setChangedParameters(params);
3840
});
3941

4042
if (oldOperation.getResponses() != null || newOperation.getResponses() != null) {
41-
openApiDiff.getApiResponseDiff().diff(oldOperation.getResponses(), newOperation.getResponses())
43+
openApiDiff.getApiResponseDiff().diff(oldOperation.getResponses(), newOperation.getResponses(), context)
4244
.ifPresent(changedOperation::setChangedApiResponse);
4345
}
4446

4547
if (oldOperation.getSecurity() != null || newOperation.getSecurity() != null) {
46-
openApiDiff.getSecurityRequirementsDiff().diff(oldOperation.getSecurity(), newOperation.getSecurity())
48+
openApiDiff.getSecurityRequirementsDiff().diff(oldOperation.getSecurity(), newOperation.getSecurity(), context)
4749
.ifPresent(changedOperation::setChangedSecurityRequirements);
4850
}
4951

50-
return changedOperation.isDiff() ? Optional.of(changedOperation) : Optional.empty();
52+
return isChanged(changedOperation);
5153
}
5254

5355
public void removePathParameters(Map<String, String> pathParameters, ChangedParameters params) {

src/main/java/com/qdesrame/openapi/diff/compare/ParameterDiff.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.qdesrame.openapi.diff.model.ChangedParameter;
44
import com.qdesrame.openapi.diff.model.ChangedSchema;
5+
import com.qdesrame.openapi.diff.model.DiffContext;
56
import com.qdesrame.openapi.diff.utils.RefPointer;
67
import com.qdesrame.openapi.diff.utils.RefType;
78
import io.swagger.v3.oas.models.Components;
@@ -11,6 +12,8 @@
1112
import java.util.Objects;
1213
import java.util.Optional;
1314

15+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
16+
1417
public class ParameterDiff extends ReferenceDiffCache<Parameter, ChangedParameter> {
1518

1619
private Components leftComponents;
@@ -24,13 +27,13 @@ public ParameterDiff(OpenApiDiff openApiDiff) {
2427
this.rightComponents = openApiDiff.getNewSpecOpenApi() != null ? openApiDiff.getNewSpecOpenApi().getComponents() : null;
2528
}
2629

27-
public Optional<ChangedParameter> diff(Parameter left, Parameter right) {
28-
return cachedDiff(new HashSet<>(), left, right, left.get$ref(), right.get$ref());
30+
public Optional<ChangedParameter> diff(Parameter left, Parameter right, DiffContext context) {
31+
return cachedDiff(new HashSet<>(), left, right, left.get$ref(), right.get$ref(), context);
2932
}
3033

3134
@Override
32-
protected Optional<ChangedParameter> computeDiff(HashSet<String> refSet, Parameter left, Parameter right) {
33-
ChangedParameter changedParameter = new ChangedParameter(right.getName(), right.getIn());
35+
protected Optional<ChangedParameter> computeDiff(HashSet<String> refSet, Parameter left, Parameter right, DiffContext context) {
36+
ChangedParameter changedParameter = new ChangedParameter(right.getName(), right.getIn(), context);
3437
left = refPointer.resolveRef(this.leftComponents, left, left.get$ref());
3538
right = refPointer.resolveRef(this.rightComponents, right, right.get$ref());
3639

@@ -43,14 +46,14 @@ protected Optional<ChangedParameter> computeDiff(HashSet<String> refSet, Paramet
4346
changedParameter.setChangeAllowEmptyValue(getBooleanDiff(left.getAllowEmptyValue(), right.getAllowEmptyValue()));
4447
changedParameter.setChangeStyle(!Objects.equals(left.getStyle(), right.getStyle()));
4548
changedParameter.setChangeExplode(getBooleanDiff(left.getExplode(), right.getExplode()));
46-
Optional<ChangedSchema> changedSchema = openApiDiff.getSchemaDiff().diff(refSet, left.getSchema(), right.getSchema());
49+
Optional<ChangedSchema> changedSchema = openApiDiff.getSchemaDiff().diff(refSet, left.getSchema(), right.getSchema(), context);
4750
if (changedSchema.isPresent()) {
4851
changedParameter.setChangedSchema(changedSchema.get());
4952
}
50-
openApiDiff.getContentDiff().diff(left.getContent(), right.getContent())
53+
openApiDiff.getContentDiff().diff(left.getContent(), right.getContent(), context)
5154
.ifPresent(changedParameter::setChangedContent);
5255

53-
return changedParameter.isDiff() ? Optional.of(changedParameter) : Optional.empty();
56+
return isChanged(changedParameter);
5457
}
5558

5659
private boolean getBooleanDiff(Boolean left, Boolean right) {

src/main/java/com/qdesrame/openapi/diff/compare/ParametersDiff.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.qdesrame.openapi.diff.compare;
22

33
import com.qdesrame.openapi.diff.model.ChangedParameters;
4+
import com.qdesrame.openapi.diff.model.DiffContext;
45
import com.qdesrame.openapi.diff.utils.RefPointer;
56
import com.qdesrame.openapi.diff.utils.RefType;
67
import io.swagger.v3.oas.models.Components;
@@ -11,6 +12,8 @@
1112
import java.util.Objects;
1213
import java.util.Optional;
1314

15+
import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
16+
1417
/**
1518
* compare two parameter
1619
*
@@ -37,8 +40,8 @@ public static boolean same(Parameter left, Parameter right) {
3740
return Objects.equals(left.getName(), right.getName()) && Objects.equals(left.getIn(), right.getIn());
3841
}
3942

40-
public Optional<ChangedParameters> diff(List<Parameter> left, List<Parameter> right) {
41-
ChangedParameters changedParameters = new ChangedParameters(left, right != null ? new ArrayList<>(right) : null);
43+
public Optional<ChangedParameters> diff(List<Parameter> left, List<Parameter> right, DiffContext context) {
44+
ChangedParameters changedParameters = new ChangedParameters(left, right != null ? new ArrayList<>(right) : null, context);
4245
if (null == left) left = new ArrayList<>();
4346
if (null == right) right = new ArrayList<>();
4447

@@ -51,11 +54,11 @@ public Optional<ChangedParameters> diff(List<Parameter> left, List<Parameter> ri
5154
} else {
5255
Parameter rightPara = rightParam.get();
5356
right.remove(rightPara);
54-
openApiDiff.getParameterDiff().diff(leftPara, rightPara).ifPresent(changedParameters.getChanged()::add);
57+
openApiDiff.getParameterDiff().diff(leftPara, rightPara, context).ifPresent(changedParameters.getChanged()::add);
5558
}
5659
}
5760
changedParameters.getIncreased().addAll(right);
5861

59-
return changedParameters.isDiff() ? Optional.of(changedParameters) : Optional.empty();
62+
return isChanged(changedParameters);
6063
}
6164
}

0 commit comments

Comments
 (0)