diff --git a/.circleci/config.yml b/.circleci/config.yml
index e58107c83..a68ccb056 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -14,17 +14,23 @@ jobs:
- restore_cache:
key: openapi-diff-{{ checksum "pom.xml" }}
- - run: mvn dependency:go-offline
+ - run: ./mvnw package -X
- save_cache:
paths:
- ~/.m2
key: openapi-diff-{{ checksum "pom.xml" }}
- - run: mvn package -X
-
+ - run:
+ name: Save test results
+ command: |
+ mkdir -p ~/test-results/junit/
+ find . -type f -regex ".*/target/surefire-reports/.*xml" -exec cp {} ~/test-results/junit/ \;
+ when: always
- store_test_results:
- path: target/surefire-reports
+ path: ~/test-results
- store_artifacts:
- path: target/openapi-diff-*-SNAPSHOT.jar
\ No newline at end of file
+ path: core/target/openapi-diff-*-SNAPSHOT.jar
+ - store_artifacts:
+ path: cli/target/openapi-diff-*-SNAPSHOT.jar
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 000000000..67c3b85f3
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,8 @@
+version: 2
+updates:
+- package-ecosystem: maven
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
new file mode 100644
index 000000000..d573da07c
--- /dev/null
+++ b/.github/workflows/maven.yml
@@ -0,0 +1,33 @@
+name: Test
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+jobs:
+ build:
+ runs-on: 'ubuntu-latest'
+ strategy:
+ fail-fast: false
+ matrix:
+ java_version: ['8', '11', '14']
+ env:
+ JAVA_OPTS: "-XX:+TieredCompilation -XX:TieredStopAtLevel=1"
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up JDK
+ uses: joschi/setup-jdk@v1
+ with:
+ java-version: ${{ matrix.java_version }}
+ - uses: actions/cache@v1
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Build with Maven
+ run: ./mvnw -V -B -ff install '-DskipTests=true' '-Dmaven.javadoc.skip=true'
+ - name: Run tests
+ run: ./mvnw -V -B -ff verify
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 000000000..c6feb8bb6
Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 000000000..72853742a
--- /dev/null
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1 @@
+distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 809c84b11..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-language: java
-script: mvn clean install
diff --git a/Dockerfile b/Dockerfile
index 16abb03f2..1be25c916 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,18 +1,10 @@
-FROM maven:3.5-jdk-8-alpine as build
-WORKDIR /app
-COPY ./ /app
-RUN mvn install -q && \
- mvn package -q && \
- ls /app/target/ && \
- MVN_VERSION=$(mvn -q \
- -Dexec.executable="echo" \
- -Dexec.args='${project.version}' \
- --non-recursive \
- org.codehaus.mojo:exec-maven-plugin:1.6.0:exec) && \
- mv /app/target/openapi-diff-${MVN_VERSION}-jar-with-dependencies.jar /app/openapi-diff.jar
+FROM openjdk:8-jdk-alpine AS build
+WORKDIR /build
+COPY ./ /build
+RUN ./mvnw -V -B -ff -P docker package -q
FROM openjdk:8-jre-alpine
WORKDIR /app
-COPY --from=0 /app/openapi-diff.jar /app
+COPY --from=build /build/cli/target/openapi-diff-jar-with-dependencies.jar /app/openapi-diff.jar
ENTRYPOINT ["java", "-jar", "/app/openapi-diff.jar"]
CMD ["--help"]
diff --git a/README.md b/README.md
index e260bda17..3d08121d3 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,63 @@
# OpenAPI-diff
-Compare two OpenAPI specifications(3.x) and render the difference to html file or markdown file.
+Compare two OpenAPI specifications (3.x) and render the difference to HTML plaintext, or Markdown files.
-[](https://circleci.com/gh/quen2404/openapi-diff/tree/master)
+[](https://github.com/joschi/openapi-diff/actions?query=branch%3Amaster+workflow%3ATest+)
# Requirements
-`jdk1.8+`
+
+* Java 8
# Feature
-* Supports OpenAPi spec v3.0.
-* Depth comparison of parameters, responses, endpoint, http method(GET,POST,PUT,DELETE...)
+
+* Supports OpenAPI spec v3.0.
+* Depth comparison of parameters, responses, endpoint, http method (GET,POST,PUT,DELETE...)
* Supports swagger api Authorization
* Render difference of property with Expression Language
-* html & markdown render
+* HTML & Markdown render
# Maven
-Available on [Maven Central](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.qdesrame%22%20AND%20a%3A%22openapi-diff%22)
+Available on [Maven Central](https://search.maven.org/artifact/com.github.joschi.openapi-diff/core)
```xml
- com.qdesrame
- openapi-diff
- 1.2.0
+ com.github.joschi.openapi-diff
+ core
+ ${openapi-diff-version}
```
# Docker
-Available on [Docker Hub](https://hub.docker.com/r/quen2404/openapi-diff/) as `quen2404/openapi-diff`.
+Available on [Docker Hub](https://hub.docker.com/r/joschi/openapi-diff/) as `joschi/openapi-diff`.
+
+```bash
+# docker run joschi/openapi-diff:latest
+usage: openapi-diff
+ --debug Print debugging information
+ --error Print error information
+ --fail-on-changed Fail if API changed but is backward
+ compatible
+ --fail-on-incompatible Fail only if API changes broke backward
+ compatibility
+ -h,--help print this message
+ --header use given header for authorisation
+ --html export diff as html in given file
+ --info Print additional information
+ -l,--log use given level for log (TRACE, DEBUG,
+ INFO, WARN, ERROR, OFF). Default: ERROR
+ --markdown export diff as markdown in given file
+ --off No information printed
+ --query use query param for authorisation
+ --state Only output diff state: no_changes,
+ incompatible, compatible
+ --text export diff as text in given file
+ --trace be extra verbose
+ --version print the version information and exit
+ --warn Print warning information
+```
+
## Build the image
@@ -42,19 +71,20 @@ You can replace the local image name `local-openapi-diff` by any name of your ch
## Run an instance
-In this example the `$(pwd)/src/test/resources` directory is mounted in the `/specs` directory of the container
+In this example the `$(pwd)/core/src/test/resources` directory is mounted in the `/specs` directory of the container
in readonly mode (`ro`).
```bash
docker run -t \
- -v $(pwd)/src/test/resources:/specs:ro \
- quen2404/openapi-diff /specs/path_1.yaml /specs/path_2.yaml
+ -v $(pwd)/core/src/test/resources:/specs:ro \
+ joschi/openapi-diff /specs/path_1.yaml /specs/path_2.yaml
```
-The remote name `quen2404/openapi-diff` can be replaced with `local-openapi-diff` or the name you gave to your local image.
+The remote name `joschi/openapi-diff` can be replaced with `local-openapi-diff` or the name you gave to your local image.
# Usage
-OpenDiff can read swagger api spec from json file or http.
+
+openapi-diff can read OpenAPI specs from JSON files or HTTP URLs.
## Command Line
@@ -70,13 +100,12 @@ usage: openapi-diff
-l,--log use given level for log (TRACE, DEBUG,
INFO, WARN, ERROR, OFF). Default: ERROR
--markdown export diff as markdown in given file
- -o,--output use given format (html, markdown) for
- output in file
--off No information printed
--query use query param for authorisation
--state Only output diff state: no_changes,
incompatible, compatible
--fail-on-incompatible Fail only if API changes broke backward compatibility
+ --fail-on-changed Fail if API changed but is backward compatible
--trace be extra verbose
--version print the version information and exit
--warn Print warning information
@@ -100,6 +129,7 @@ public class Main {
### Render difference
---
#### HTML
+
```java
String html = new HtmlRender("Changelog",
"http://deepoove.com/swagger-diff/stylesheets/demo.css")
@@ -117,6 +147,7 @@ try {
```
#### Markdown
+
```java
String render = new MarkdownRender().render(diff);
try {
@@ -131,11 +162,13 @@ try {
```
### Extensions
+
This project uses Java Service Provider Inteface (SPI) so additional extensions can be added.
-To build your own extension, you simply need to create a `src/main/resources/META-INF/services/com.qdesrame.openapi.diff.compare.ExtensionDiff` file with the full classname of your implementation. Your class must also implement the `com.qdesrame.openapi.diff.compare.ExtensionDiff` interface. Then, including your library with the `openapi-diff` module will cause it to be triggered automatically.
+To build your own extension, you simply need to create a `src/main/resources/META-INF/services/com.qdesrame.openapi.diff.core.compare.ExtensionDiff` file with the full classname of your implementation. Your class must also implement the `com.qdesrame.openapi.diff.core.compare.ExtensionDiff` interface. Then, including your library with the `openapi-diff` module will cause it to be triggered automatically.
+
+# Examples
-# Example
### CLI Output
```text
@@ -234,6 +267,7 @@ To build your own extension, you simply need to create a `src/main/resources/MET
```
### Markdown
+
```markdown
### What's New
---
@@ -308,10 +342,12 @@ To build your own extension, you simply need to create a `src/main/resources/MET
```
# License
+
openapi-diff is released under the Apache License 2.0.
# Thanks
-* Adarsh Sharma / [adarshsharma](https://github.com/adarshsharma)
+* Adarsh Sharma / [adarshsharma](https://github.com/adarshsharma)
+* Quentin Desramé / [quen2404](https://github.com/quen2404)
* [Sayi](https://github.com/Sayi) for his project [swagger-diff](https://github.com/Sayi/swagger-diff)
which was a source of inspiration for this tool
diff --git a/cli/pom.xml b/cli/pom.xml
new file mode 100644
index 000000000..a2522bb74
--- /dev/null
+++ b/cli/pom.xml
@@ -0,0 +1,67 @@
+
+ 4.0.0
+
+
+ com.github.joschi.openapi-diff
+ parent
+ 2.0.0-SNAPSHOT
+
+
+ cli
+ jar
+
+ openapi-diff-cli
+ CLI for openapi-diff
+
+
+
+ com.github.joschi.openapi-diff
+ core
+ 2.0.0-SNAPSHOT
+
+
+ commons-cli
+ commons-cli
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ jar-with-dependencies
+
+
+
+ com.qdesrame.openapi.diff.cli.Main
+
+
+ openapi-diff
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+
+
diff --git a/src/main/java/com/qdesrame/openapi/diff/Main.java b/cli/src/main/java/com/qdesrame/openapi/diff/cli/Main.java
similarity index 74%
rename from src/main/java/com/qdesrame/openapi/diff/Main.java
rename to cli/src/main/java/com/qdesrame/openapi/diff/cli/Main.java
index 4a254fc39..f84517c4e 100644
--- a/src/main/java/com/qdesrame/openapi/diff/Main.java
+++ b/cli/src/main/java/com/qdesrame/openapi/diff/cli/Main.java
@@ -1,12 +1,19 @@
-package com.qdesrame.openapi.diff;
+package com.qdesrame.openapi.diff.cli;
-import com.qdesrame.openapi.diff.model.ChangedOpenApi;
-import com.qdesrame.openapi.diff.output.ConsoleRender;
-import com.qdesrame.openapi.diff.output.HtmlRender;
-import com.qdesrame.openapi.diff.output.MarkdownRender;
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.output.ConsoleRender;
+import com.qdesrame.openapi.diff.core.output.HtmlRender;
+import com.qdesrame.openapi.diff.core.output.MarkdownRender;
import java.io.File;
import java.io.IOException;
-import org.apache.commons.cli.*;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.log4j.Level;
@@ -33,6 +40,11 @@ public static void main(String... args) {
.longOpt("fail-on-incompatible")
.desc("Fail only if API changes broke backward compatibility")
.build());
+ options.addOption(
+ Option.builder()
+ .longOpt("fail-on-changed")
+ .desc("Fail if API changed but is backward compatible")
+ .build());
options.addOption(Option.builder().longOpt("trace").desc("be extra verbose").build());
options.addOption(
Option.builder().longOpt("debug").desc("Print debugging information").build());
@@ -66,15 +78,6 @@ public static void main(String... args) {
.argName("property=value")
.desc("use query param for authorisation")
.build());
- options.addOption(
- Option.builder("o")
- .longOpt("output")
- .hasArgs()
- .numberOfArgs(2)
- .valueSeparator()
- .argName("format=file")
- .desc("use given format (html, markdown) for output in file")
- .build());
options.addOption(
Option.builder()
.longOpt("markdown")
@@ -89,6 +92,13 @@ public static void main(String... args) {
.argName("file")
.desc("export diff as html in given file")
.build());
+ options.addOption(
+ Option.builder()
+ .longOpt("text")
+ .hasArg()
+ .argName("file")
+ .desc("export diff as text in given file")
+ .build());
final String message = "Hello logging!";
// create the parser
@@ -148,45 +158,29 @@ public static void main(String... args) {
if (!logLevel.equals("OFF")) {
System.out.println(consoleRender.render(result));
}
- HtmlRender htmlRender = new HtmlRender();
- MarkdownRender mdRender = new MarkdownRender();
- String output = null;
- String outputFile = null;
if (line.hasOption("html")) {
- output = htmlRender.render(result);
- outputFile = line.getOptionValue("html");
+ HtmlRender htmlRender = new HtmlRender();
+ String output = htmlRender.render(result);
+ String outputFile = line.getOptionValue("html");
+ writeOutput(output, outputFile);
}
if (line.hasOption("markdown")) {
- output = mdRender.render(result);
- outputFile = line.getOptionValue("markdown");
+ MarkdownRender mdRender = new MarkdownRender();
+ String output = mdRender.render(result);
+ String outputFile = line.getOptionValue("markdown");
+ writeOutput(output, outputFile);
}
- if (line.hasOption("output")) {
- String[] outputValues = line.getOptionValues("output");
- if (outputValues[0].equalsIgnoreCase("markdown")) {
- output = mdRender.render(result);
- } else if (outputValues[0].equalsIgnoreCase("html")) {
- output = htmlRender.render(result);
- } else {
- throw new ParseException("Invalid output format");
- }
- outputFile = outputValues[1];
- }
- if (output != null && outputFile != null) {
- File file = new File(outputFile);
- logger.debug("Output file: {}", file.getAbsolutePath());
- try {
- FileUtils.writeStringToFile(file, output);
- } catch (IOException e) {
- logger.error("Impossible to write output to file {}", outputFile, e);
- System.exit(2);
- }
+ if (line.hasOption("text")) {
+ String output = consoleRender.render(result);
+ String outputFile = line.getOptionValue("text");
+ writeOutput(output, outputFile);
}
if (line.hasOption("state")) {
System.out.println(result.isChanged().getValue());
System.exit(0);
} else if (line.hasOption("fail-on-incompatible")) {
System.exit(result.isCompatible() ? 0 : 1);
- } else {
+ } else if (line.hasOption("fail-on-changed")) {
System.exit(result.isUnchanged() ? 0 : 1);
}
} catch (ParseException e) {
@@ -204,6 +198,17 @@ public static void main(String... args) {
}
}
+ private static void writeOutput(String output, String outputFile) {
+ File file = new File(outputFile);
+ logger.debug("Output file: {}", file.getAbsolutePath());
+ try {
+ FileUtils.writeStringToFile(file, output);
+ } catch (IOException e) {
+ logger.error("Impossible to write output to file {}", outputFile, e);
+ System.exit(2);
+ }
+ }
+
public static void printHelp(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("openapi-diff ", options);
diff --git a/src/main/resources/log4j.properties b/cli/src/main/resources/log4j.properties
similarity index 100%
rename from src/main/resources/log4j.properties
rename to cli/src/main/resources/log4j.properties
diff --git a/core/pom.xml b/core/pom.xml
new file mode 100644
index 000000000..63074e15d
--- /dev/null
+++ b/core/pom.xml
@@ -0,0 +1,66 @@
+
+ 4.0.0
+
+
+ com.github.joschi.openapi-diff
+ parent
+ 2.0.0-SNAPSHOT
+
+
+ core
+ jar
+
+ openapi-diff-core
+ Library for comparing two OpenAPI specifications.
+
+
+
+ io.swagger.parser.v3
+ swagger-parser-v3
+
+
+ io.swagger.parser.v3
+ swagger-parser
+
+
+ io.swagger.parser.v3
+ swagger-parser-v2-converter
+
+
+ com.j2html
+ j2html
+
+
+ org.apache.commons
+ commons-collections4
+
+
+ org.slf4j
+ slf4j-api
+
+
+ commons-httpclient
+ commons-httpclient
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+ org.slf4j
+ slf4j-simple
+ test
+
+
+
diff --git a/src/main/java/com/qdesrame/openapi/diff/OpenApiCompare.java b/core/src/main/java/com/qdesrame/openapi/diff/core/OpenApiCompare.java
similarity index 90%
rename from src/main/java/com/qdesrame/openapi/diff/OpenApiCompare.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/OpenApiCompare.java
index eb9eefff9..a48f5d7dd 100644
--- a/src/main/java/com/qdesrame/openapi/diff/OpenApiCompare.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/OpenApiCompare.java
@@ -1,9 +1,9 @@
-package com.qdesrame.openapi.diff;
+package com.qdesrame.openapi.diff.core;
-import com.qdesrame.openapi.diff.compare.OpenApiDiff;
-import com.qdesrame.openapi.diff.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.compare.OpenApiDiff;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.parser.OpenAPIV3Parser;
import io.swagger.v3.parser.core.models.AuthorizationValue;
import io.swagger.v3.parser.core.models.ParseOptions;
import java.io.File;
@@ -11,7 +11,7 @@
public class OpenApiCompare {
- private static OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
+ private static OpenAPIParser openApiParser = new OpenAPIParser();
private static ParseOptions options = new ParseOptions();
static {
@@ -113,6 +113,6 @@ private static OpenAPI readContent(String content, List auth
}
private static OpenAPI readLocation(String location, List auths) {
- return openApiParser.read(location, auths, options);
+ return openApiParser.readLocation(location, auths, options).getOpenAPI();
}
}
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ApiResponseDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ApiResponseDiff.java
similarity index 82%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ApiResponseDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ApiResponseDiff.java
index 03b0216ae..b64913a23 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ApiResponseDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ApiResponseDiff.java
@@ -1,10 +1,10 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedApiResponse;
-import com.qdesrame.openapi.diff.model.ChangedResponse;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedApiResponse;
+import com.qdesrame.openapi.diff.core.model.ChangedResponse;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.responses.ApiResponses;
import java.util.LinkedHashMap;
diff --git a/core/src/main/java/com/qdesrame/openapi/diff/core/compare/CacheKey.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/CacheKey.java
new file mode 100644
index 000000000..ccf034282
--- /dev/null
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/CacheKey.java
@@ -0,0 +1,12 @@
+package com.qdesrame.openapi.diff.core.compare;
+
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import lombok.Value;
+
+@Value
+public class CacheKey {
+
+ String left;
+ String right;
+ DiffContext context;
+}
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/Comparable.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/Comparable.java
similarity index 60%
rename from src/main/java/com/qdesrame/openapi/diff/compare/Comparable.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/Comparable.java
index 79ffb7ec8..34133e0fc 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/Comparable.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/Comparable.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
public interface Comparable {
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ContentDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ContentDiff.java
similarity index 81%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ContentDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ContentDiff.java
index 67eeda204..ecaff7781 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ContentDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ContentDiff.java
@@ -1,11 +1,11 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isUnchanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isUnchanged;
-import com.qdesrame.openapi.diff.model.ChangedContent;
-import com.qdesrame.openapi.diff.model.ChangedMediaType;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedContent;
+import com.qdesrame.openapi.diff.core.model.ChangedMediaType;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.media.MediaType;
import java.util.*;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ExtensionDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionDiff.java
similarity index 59%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ExtensionDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionDiff.java
index e838f118a..485d965d0 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ExtensionDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionDiff.java
@@ -1,8 +1,8 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import com.qdesrame.openapi.diff.model.Change;
-import com.qdesrame.openapi.diff.model.Changed;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.Change;
+import com.qdesrame.openapi.diff.core.model.Changed;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
public interface ExtensionDiff {
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ExtensionsDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionsDiff.java
similarity index 86%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ExtensionsDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionsDiff.java
index 0b2690b4b..7a27c0862 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ExtensionsDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionsDiff.java
@@ -1,12 +1,12 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
-import static com.qdesrame.openapi.diff.utils.Copy.copyMap;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.Copy.copyMap;
-import com.qdesrame.openapi.diff.model.Change;
-import com.qdesrame.openapi.diff.model.Changed;
-import com.qdesrame.openapi.diff.model.ChangedExtensions;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.Change;
+import com.qdesrame.openapi.diff.core.model.Changed;
+import com.qdesrame.openapi.diff.core.model.ChangedExtensions;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import java.util.*;
import java.util.function.Function;
@@ -29,9 +29,7 @@ public boolean isParentApplicable(
if (extensions.size() == 0) {
return true;
}
- return extensions
- .entrySet()
- .stream()
+ return extensions.entrySet().stream()
.map(
entry ->
executeExtension(
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/HeaderDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeaderDiff.java
similarity index 88%
rename from src/main/java/com/qdesrame/openapi/diff/compare/HeaderDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeaderDiff.java
index fc37f8f38..b7e391033 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/HeaderDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeaderDiff.java
@@ -1,11 +1,11 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedHeader;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.ChangedHeader;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.headers.Header;
import java.util.HashSet;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/HeadersDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeadersDiff.java
similarity index 80%
rename from src/main/java/com/qdesrame/openapi/diff/compare/HeadersDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeadersDiff.java
index 6bc6ede80..e78d4eba5 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/HeadersDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeadersDiff.java
@@ -1,10 +1,10 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedHeader;
-import com.qdesrame.openapi.diff.model.ChangedHeaders;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedHeader;
+import com.qdesrame.openapi.diff.core.model.ChangedHeaders;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.headers.Header;
import java.util.LinkedHashMap;
import java.util.List;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ListDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ListDiff.java
similarity index 86%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ListDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ListDiff.java
index 748ecb0aa..db794db4f 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ListDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ListDiff.java
@@ -1,9 +1,7 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import com.qdesrame.openapi.diff.model.ChangedList;
-import lombok.Getter;
+import com.qdesrame.openapi.diff.core.model.ChangedList;
-@Getter
public class ListDiff {
public static , X> K diff(K instance) {
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/MapKeyDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/MapKeyDiff.java
similarity index 96%
rename from src/main/java/com/qdesrame/openapi/diff/compare/MapKeyDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/MapKeyDiff.java
index f1bdf775d..d63de1278 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/MapKeyDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/MapKeyDiff.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
import java.util.ArrayList;
import java.util.LinkedHashMap;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/MetadataDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/MetadataDiff.java
similarity index 76%
rename from src/main/java/com/qdesrame/openapi/diff/compare/MetadataDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/MetadataDiff.java
index d8d418135..684a8442b 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/MetadataDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/MetadataDiff.java
@@ -1,9 +1,9 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedMetadata;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedMetadata;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.Components;
import java.util.Optional;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowDiff.java
similarity index 87%
rename from src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowDiff.java
index d3d5b8f71..264419bb6 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowDiff.java
@@ -1,9 +1,9 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
import static java.util.Optional.ofNullable;
-import com.qdesrame.openapi.diff.model.ChangedOAuthFlow;
+import com.qdesrame.openapi.diff.core.model.ChangedOAuthFlow;
import io.swagger.v3.oas.models.security.OAuthFlow;
import java.util.Map;
import java.util.Objects;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowsDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowsDiff.java
similarity index 89%
rename from src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowsDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowsDiff.java
index ae2f84fc7..49c6ce7fe 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowsDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowsDiff.java
@@ -1,9 +1,9 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
import static java.util.Optional.ofNullable;
-import com.qdesrame.openapi.diff.model.ChangedOAuthFlows;
+import com.qdesrame.openapi.diff.core.model.ChangedOAuthFlows;
import io.swagger.v3.oas.models.security.OAuthFlows;
import java.util.Map;
import java.util.Optional;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/OpenApiDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OpenApiDiff.java
similarity index 86%
rename from src/main/java/com/qdesrame/openapi/diff/compare/OpenApiDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/OpenApiDiff.java
index 5b89c8274..af6c06248 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/OpenApiDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OpenApiDiff.java
@@ -1,10 +1,14 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.compare.PathsDiff.valOrEmpty;
+import static com.qdesrame.openapi.diff.core.compare.PathsDiff.valOrEmpty;
-import com.qdesrame.openapi.diff.model.*;
-import com.qdesrame.openapi.diff.model.ChangedExtensions;
-import com.qdesrame.openapi.diff.utils.EndpointUtils;
+import com.qdesrame.openapi.diff.core.model.ChangedExtensions;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.model.ChangedOperation;
+import com.qdesrame.openapi.diff.core.model.ChangedPath;
+import com.qdesrame.openapi.diff.core.model.ChangedPaths;
+import com.qdesrame.openapi.diff.core.model.Endpoint;
+import com.qdesrame.openapi.diff.core.utils.EndpointUtils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.security.SecurityRequirement;
@@ -22,7 +26,7 @@ public class OpenApiDiff {
public static final String SWAGGER_VERSION_V2 = "2.0";
- private static Logger logger = LoggerFactory.getLogger(OpenApiDiff.class);
+ private static final Logger logger = LoggerFactory.getLogger(OpenApiDiff.class);
private PathsDiff pathsDiff;
private PathDiff pathDiff;
@@ -44,8 +48,8 @@ public class OpenApiDiff {
private ExtensionsDiff extensionsDiff;
private MetadataDiff metadataDiff;
- private OpenAPI oldSpecOpenApi;
- private OpenAPI newSpecOpenApi;
+ private final OpenAPI oldSpecOpenApi;
+ private final OpenAPI newSpecOpenApi;
private List newEndpoints;
private List missingEndpoints;
private List changedOperations;
@@ -138,27 +142,19 @@ private void preProcess(OpenAPI openApi) {
.values()
.forEach(
pathItem ->
- pathItem
- .readOperationsMap()
- .values()
- .stream()
+ pathItem.readOperationsMap().values().stream()
.filter(operation -> operation.getSecurity() != null)
.forEach(
operation ->
operation.setSecurity(
- operation
- .getSecurity()
- .stream()
+ operation.getSecurity().stream()
.distinct()
.collect(Collectors.toList()))));
paths
.values()
.forEach(
pathItem ->
- pathItem
- .readOperationsMap()
- .values()
- .stream()
+ pathItem.readOperationsMap().values().stream()
.filter(operation -> operation.getSecurity() == null)
.forEach(operation -> operation.setSecurity(distinctSecurityRequirements)));
}
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/OperationDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OperationDiff.java
similarity index 90%
rename from src/main/java/com/qdesrame/openapi/diff/compare/OperationDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/OperationDiff.java
index 4c3de2cf8..9ad0ba6e0 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/OperationDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OperationDiff.java
@@ -1,10 +1,10 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedOperation;
-import com.qdesrame.openapi.diff.model.ChangedParameters;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedOperation;
+import com.qdesrame.openapi.diff.core.model.ChangedParameters;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.parameters.Parameter;
import java.util.List;
@@ -84,8 +84,7 @@ public void removePathParameters(Map pathParameters, ChangedPara
}
public void removePathParameter(String name, List parameters) {
- parameters
- .stream()
+ parameters.stream()
.filter(p -> "path".equals(p.getIn()) && name.equals(p.getName()))
.findFirst()
.ifPresent(parameters::remove);
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ParameterDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParameterDiff.java
similarity index 89%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ParameterDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParameterDiff.java
index 7a9d9b970..14c4fca0e 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ParameterDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParameterDiff.java
@@ -1,11 +1,11 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedParameter;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.ChangedParameter;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.parameters.Parameter;
import java.util.HashSet;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ParametersDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParametersDiff.java
similarity index 86%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ParametersDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParametersDiff.java
index 33f6fb1d8..98097ce68 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ParametersDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParametersDiff.java
@@ -1,11 +1,11 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedParameters;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.ChangedParameters;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.parameters.Parameter;
import java.util.ArrayList;
@@ -39,8 +39,7 @@ public ParametersDiff(OpenApiDiff openApiDiff) {
public static Optional contains(
Components components, List parameters, Parameter parameter) {
- return parameters
- .stream()
+ return parameters.stream()
.filter(param -> same(refPointer.resolveRef(components, param, param.get$ref()), parameter))
.findFirst();
}
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/PathDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathDiff.java
similarity index 86%
rename from src/main/java/com/qdesrame/openapi/diff/compare/PathDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathDiff.java
index ef0e0e60a..5017dac7f 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/PathDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathDiff.java
@@ -1,9 +1,9 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedPath;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedPath;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import java.util.List;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/PathsDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathsDiff.java
similarity index 89%
rename from src/main/java/com/qdesrame/openapi/diff/compare/PathsDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathsDiff.java
index f057d9a3b..2f0a25632 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/PathsDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathsDiff.java
@@ -1,9 +1,9 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedPaths;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedPaths;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.Paths;
import java.util.*;
@@ -42,9 +42,7 @@ public Optional diff(
PathItem leftPath = left.get(url);
String template = normalizePath(url);
Optional result =
- right
- .keySet()
- .stream()
+ right.keySet().stream()
.filter(s -> normalizePath(s).equals(template))
.findFirst();
if (result.isPresent()) {
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ReferenceDiffCache.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ReferenceDiffCache.java
similarity index 94%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ReferenceDiffCache.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ReferenceDiffCache.java
index e15f04222..a8ff0eac6 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ReferenceDiffCache.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ReferenceDiffCache.java
@@ -1,6 +1,6 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/RequestBodyDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/RequestBodyDiff.java
similarity index 89%
rename from src/main/java/com/qdesrame/openapi/diff/compare/RequestBodyDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/RequestBodyDiff.java
index 731873947..fb9be20fe 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/RequestBodyDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/RequestBodyDiff.java
@@ -1,12 +1,12 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
import static java.util.Optional.ofNullable;
-import com.qdesrame.openapi.diff.model.ChangedRequestBody;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.ChangedRequestBody;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.parameters.RequestBody;
import java.util.HashSet;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ResponseDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ResponseDiff.java
similarity index 86%
rename from src/main/java/com/qdesrame/openapi/diff/compare/ResponseDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ResponseDiff.java
index a6ded3578..4a87865ba 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/ResponseDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ResponseDiff.java
@@ -1,11 +1,11 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedResponse;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.ChangedResponse;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.responses.ApiResponse;
import java.util.HashSet;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SchemaDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SchemaDiff.java
similarity index 95%
rename from src/main/java/com/qdesrame/openapi/diff/compare/SchemaDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SchemaDiff.java
index 8642c91f6..f88c1bf54 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/SchemaDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SchemaDiff.java
@@ -1,14 +1,14 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
import static java.util.Optional.ofNullable;
-import com.qdesrame.openapi.diff.compare.schemadiffresult.ArraySchemaDiffResult;
-import com.qdesrame.openapi.diff.compare.schemadiffresult.ComposedSchemaDiffResult;
-import com.qdesrame.openapi.diff.compare.schemadiffresult.SchemaDiffResult;
-import com.qdesrame.openapi.diff.model.ChangedSchema;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.compare.schemadiffresult.ArraySchemaDiffResult;
+import com.qdesrame.openapi.diff.core.compare.schemadiffresult.ComposedSchemaDiffResult;
+import com.qdesrame.openapi.diff.core.compare.schemadiffresult.SchemaDiffResult;
+import com.qdesrame.openapi.diff.core.model.ChangedSchema;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.media.ArraySchema;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityDiffInfo.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityDiffInfo.java
similarity index 81%
rename from src/main/java/com/qdesrame/openapi/diff/compare/SecurityDiffInfo.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityDiffInfo.java
index 510227ca6..cd052df4c 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityDiffInfo.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityDiffInfo.java
@@ -1,19 +1,17 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import com.qdesrame.openapi.diff.model.ChangedList;
+import com.qdesrame.openapi.diff.core.model.ChangedList;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import java.util.List;
import java.util.Optional;
import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
-/** Created by adarsh.sharma on 11/01/18. */
-@Getter
-@Setter
+@Data
@AllArgsConstructor
public class SecurityDiffInfo {
+
private String ref;
private SecurityScheme securityScheme;
private List scopes;
@@ -30,8 +28,7 @@ public static SecurityRequirement getSecurityRequirement(
public static Optional> containsList(
List> securityRequirements, List leftSecurities) {
- return securityRequirements
- .stream()
+ return securityRequirements.stream()
.filter(rightSecurities -> sameList(leftSecurities, rightSecurities))
.findFirst();
}
@@ -44,14 +41,20 @@ public static boolean sameList(
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
SecurityDiffInfo that = (SecurityDiffInfo) o;
if (securityScheme != null
? !securityScheme.equals(that.securityScheme)
- : that.securityScheme != null) return false;
+ : that.securityScheme != null) {
+ return false;
+ }
return scopes != null ? scopes.equals(that.scopes) : that.scopes == null;
}
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementDiff.java
similarity index 90%
rename from src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementDiff.java
index 6b9e3a806..74607ccd9 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementDiff.java
@@ -1,10 +1,10 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedSecurityRequirement;
-import com.qdesrame.openapi.diff.model.ChangedSecurityScheme;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedSecurityRequirement;
+import com.qdesrame.openapi.diff.core.model.ChangedSecurityScheme;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
@@ -30,9 +30,7 @@ public SecurityRequirementDiff(OpenApiDiff openApiDiff) {
public static SecurityRequirement getCopy(LinkedHashMap> right) {
SecurityRequirement newSecurityRequirement = new SecurityRequirement();
- right
- .entrySet()
- .stream()
+ right.entrySet().stream()
.forEach(e -> newSecurityRequirement.put(e.getKey(), new ArrayList<>(e.getValue())));
return newSecurityRequirement;
}
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementsDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementsDiff.java
similarity index 88%
rename from src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementsDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementsDiff.java
index 0472cea92..cdb5ae31d 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementsDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementsDiff.java
@@ -1,12 +1,12 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedSecurityRequirement;
-import com.qdesrame.openapi.diff.model.ChangedSecurityRequirements;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.ChangedSecurityRequirement;
+import com.qdesrame.openapi.diff.core.model.ChangedSecurityRequirements;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
@@ -39,8 +39,7 @@ public SecurityRequirementsDiff(OpenApiDiff openApiDiff) {
public Optional contains(
List securityRequirements, SecurityRequirement left) {
- return securityRequirements
- .stream()
+ return securityRequirements.stream()
.filter(rightSecurities -> same(left, rightSecurities))
.findFirst();
}
@@ -63,9 +62,7 @@ public boolean same(SecurityRequirement left, SecurityRequirement right) {
private List> getListOfSecuritySchemes(
Components components, SecurityRequirement securityRequirement) {
- return securityRequirement
- .keySet()
- .stream()
+ return securityRequirement.keySet().stream()
.map(
x -> {
SecurityScheme result = components.getSecuritySchemes().get(x);
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SecuritySchemeDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecuritySchemeDiff.java
similarity index 93%
rename from src/main/java/com/qdesrame/openapi/diff/compare/SecuritySchemeDiff.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecuritySchemeDiff.java
index 5749a46b4..e4270c530 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/SecuritySchemeDiff.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecuritySchemeDiff.java
@@ -1,10 +1,10 @@
-package com.qdesrame.openapi.diff.compare;
+package com.qdesrame.openapi.diff.core.compare;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
-import com.qdesrame.openapi.diff.model.ChangedSecurityScheme;
-import com.qdesrame.openapi.diff.model.ChangedSecuritySchemeScopes;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.ChangedSecurityScheme;
+import com.qdesrame.openapi.diff.core.model.ChangedSecuritySchemeScopes;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.security.SecurityScheme;
import java.util.HashSet;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ArraySchemaDiffResult.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ArraySchemaDiffResult.java
similarity index 82%
rename from src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ArraySchemaDiffResult.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ArraySchemaDiffResult.java
index 63cbfb54a..34bdb7e34 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ArraySchemaDiffResult.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ArraySchemaDiffResult.java
@@ -1,8 +1,8 @@
-package com.qdesrame.openapi.diff.compare.schemadiffresult;
+package com.qdesrame.openapi.diff.core.compare.schemadiffresult;
-import com.qdesrame.openapi.diff.compare.OpenApiDiff;
-import com.qdesrame.openapi.diff.model.ChangedSchema;
-import com.qdesrame.openapi.diff.model.DiffContext;
+import com.qdesrame.openapi.diff.core.compare.OpenApiDiff;
+import com.qdesrame.openapi.diff.core.model.ChangedSchema;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ComposedSchemaDiffResult.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ComposedSchemaDiffResult.java
similarity index 77%
rename from src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ComposedSchemaDiffResult.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ComposedSchemaDiffResult.java
index 5121072ca..163581570 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ComposedSchemaDiffResult.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ComposedSchemaDiffResult.java
@@ -1,12 +1,12 @@
-package com.qdesrame.openapi.diff.compare.schemadiffresult;
+package com.qdesrame.openapi.diff.core.compare.schemadiffresult;
-import com.qdesrame.openapi.diff.compare.MapKeyDiff;
-import com.qdesrame.openapi.diff.compare.OpenApiDiff;
-import com.qdesrame.openapi.diff.model.ChangedOneOfSchema;
-import com.qdesrame.openapi.diff.model.ChangedSchema;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.compare.MapKeyDiff;
+import com.qdesrame.openapi.diff.core.compare.OpenApiDiff;
+import com.qdesrame.openapi.diff.core.model.ChangedOneOfSchema;
+import com.qdesrame.openapi.diff.core.model.ChangedSchema;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.media.ComposedSchema;
import io.swagger.v3.oas.models.media.Discriminator;
@@ -42,15 +42,15 @@ public , X> Optional diff(
Discriminator leftDis = leftComposedSchema.getDiscriminator();
Discriminator rightDis = rightComposedSchema.getDiscriminator();
- if (leftDis == null
- || rightDis == null
- || leftDis.getPropertyName() == null
- || rightDis.getPropertyName() == null) {
- throw new IllegalArgumentException(
- "discriminator or property not found for oneOf schema");
- } else if (!leftDis.getPropertyName().equals(rightDis.getPropertyName())
- || (CollectionUtils.isEmpty(leftComposedSchema.getOneOf())
- || CollectionUtils.isEmpty(rightComposedSchema.getOneOf()))) {
+ if ((leftDis == null && rightDis != null)
+ || (leftDis != null && rightDis == null)
+ || (leftDis != null
+ && rightDis != null
+ && ((leftDis.getPropertyName() == null && rightDis.getPropertyName() != null)
+ || (leftDis.getPropertyName() != null && rightDis.getPropertyName() == null)
+ || (leftDis.getPropertyName() != null
+ && rightDis.getPropertyName() != null
+ && !leftDis.getPropertyName().equals(rightDis.getPropertyName()))))) {
changedSchema.setOldSchema(left);
changedSchema.setNewSchema(right);
changedSchema.setDiscriminatorPropertyChanged(true);
@@ -109,15 +109,14 @@ private Map getMapping(ComposedSchema composedSchema) {
reverseMapping.put(ref, schemaName);
}
- if (composedSchema.getDiscriminator().getMapping() != null) {
+ if (composedSchema.getDiscriminator() != null
+ && composedSchema.getDiscriminator().getMapping() != null) {
for (String ref : composedSchema.getDiscriminator().getMapping().keySet()) {
reverseMapping.put(composedSchema.getDiscriminator().getMapping().get(ref), ref);
}
}
- return reverseMapping
- .entrySet()
- .stream()
+ return reverseMapping.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
}
}
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/SchemaDiffResult.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/SchemaDiffResult.java
similarity index 91%
rename from src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/SchemaDiffResult.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/SchemaDiffResult.java
index 772a2998e..eae8efa35 100644
--- a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/SchemaDiffResult.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/SchemaDiffResult.java
@@ -1,15 +1,15 @@
-package com.qdesrame.openapi.diff.compare.schemadiffresult;
+package com.qdesrame.openapi.diff.core.compare.schemadiffresult;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged;
import static java.util.Optional.ofNullable;
-import com.qdesrame.openapi.diff.compare.ListDiff;
-import com.qdesrame.openapi.diff.compare.MapKeyDiff;
-import com.qdesrame.openapi.diff.compare.OpenApiDiff;
-import com.qdesrame.openapi.diff.model.Change;
-import com.qdesrame.openapi.diff.model.ChangedSchema;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.model.schema.*;
+import com.qdesrame.openapi.diff.core.compare.ListDiff;
+import com.qdesrame.openapi.diff.core.compare.MapKeyDiff;
+import com.qdesrame.openapi.diff.core.compare.OpenApiDiff;
+import com.qdesrame.openapi.diff.core.model.Change;
+import com.qdesrame.openapi.diff.core.model.ChangedSchema;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.schema.*;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.media.Schema;
import java.util.*;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/Change.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Change.java
similarity index 59%
rename from src/main/java/com/qdesrame/openapi/diff/model/Change.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/Change.java
index fb2345a6e..db87ae77e 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/Change.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Change.java
@@ -1,18 +1,13 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
-import lombok.Getter;
+import lombok.Value;
-@Getter
+@Value
public class Change {
- private final T oldValue;
- private final T newValue;
- private final Type type;
- private Change(T oldValue, T newValue, Type type) {
- this.oldValue = oldValue;
- this.newValue = newValue;
- this.type = type;
- }
+ T oldValue;
+ T newValue;
+ Type type;
public static Change changed(T oldValue, T newValue) {
return new Change<>(oldValue, newValue, Type.CHANGED);
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/Changed.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Changed.java
similarity index 92%
rename from src/main/java/com/qdesrame/openapi/diff/model/Changed.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/Changed.java
index 543a0ab79..bc5bc828f 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/Changed.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Changed.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import java.util.Optional;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedApiResponse.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedApiResponse.java
similarity index 91%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedApiResponse.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedApiResponse.java
index 0a32379f1..9b98dad81 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedApiResponse.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedApiResponse.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.responses.ApiResponses;
@@ -7,15 +7,13 @@
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 22/12/17. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedApiResponse implements ComposedChanged {
+
private final ApiResponses oldApiResponses;
private final ApiResponses newApiResponses;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedContent.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedContent.java
similarity index 90%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedContent.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedContent.java
index 2502ad27b..26afee7ee 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedContent.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedContent.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.media.MediaType;
@@ -6,15 +6,13 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 22/12/17. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedContent implements ComposedChanged {
+
private final Content oldContent;
private final Content newContent;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedExtensions.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedExtensions.java
similarity index 88%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedExtensions.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedExtensions.java
index 5d0fabbe7..62fd7a44d 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedExtensions.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedExtensions.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import java.util.Collection;
import java.util.LinkedHashMap;
@@ -6,14 +6,11 @@
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.experimental.Accessors;
+import lombok.Data;
-@Getter
-@Setter
-@Accessors
+@Data
public class ChangedExtensions implements ComposedChanged {
+
private final Map oldExtensions;
private final Map newExtensions;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedHeader.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeader.java
similarity index 88%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedHeader.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeader.java
index db4441f24..64a14ad15 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedHeader.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeader.java
@@ -1,17 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.headers.Header;
import java.util.Arrays;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 28/12/17. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedHeader implements ComposedChanged {
+
private final Header oldHeader;
private final Header newHeader;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedHeaders.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeaders.java
similarity index 88%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedHeaders.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeaders.java
index e0790cddc..b76a2ee65 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedHeaders.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeaders.java
@@ -1,18 +1,16 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.headers.Header;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 28/12/17. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedHeaders implements ComposedChanged {
+
private final Map oldHeaders;
private final Map newHeaders;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedList.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedList.java
similarity index 92%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedList.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedList.java
index 365dc28a6..31455e685 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedList.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedList.java
@@ -1,16 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public abstract class ChangedList implements Changed {
+
protected DiffContext context;
protected List oldValue;
protected List newValue;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedMediaType.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMediaType.java
similarity index 88%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedMediaType.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMediaType.java
index 0181b6867..c0b11b279 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedMediaType.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMediaType.java
@@ -1,16 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.media.Schema;
import java.util.Collections;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedMediaType implements ComposedChanged {
+
private final Schema oldSchema;
private final Schema newSchema;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedMetadata.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMetadata.java
similarity index 77%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedMetadata.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMetadata.java
index 424771d6e..edd6b2e81 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedMetadata.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMetadata.java
@@ -1,12 +1,10 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import java.util.Objects;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedMetadata implements Changed {
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlow.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlow.java
similarity index 85%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlow.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlow.java
index 0fa6955f7..92638d812 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlow.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlow.java
@@ -1,17 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.security.OAuthFlow;
import java.util.Collections;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 12/01/18. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedOAuthFlow implements ComposedChanged {
+
private OAuthFlow oldOAuthFlow;
private OAuthFlow newOAuthFlow;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlows.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlows.java
similarity index 87%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlows.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlows.java
index f498af44d..168ed71c6 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlows.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlows.java
@@ -1,17 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.security.OAuthFlows;
import java.util.Arrays;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 12/01/18. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedOAuthFlows implements ComposedChanged {
+
private final OAuthFlows oldOAuthFlows;
private final OAuthFlows newOAuthFlows;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOneOfSchema.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOneOfSchema.java
similarity index 88%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOneOfSchema.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOneOfSchema.java
index 57b4b9ca3..2d28fa4f1 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOneOfSchema.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOneOfSchema.java
@@ -1,18 +1,16 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.media.Schema;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 22/12/17. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedOneOfSchema implements ComposedChanged {
+
private final Map oldMapping;
private final Map newMapping;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOpenApi.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOpenApi.java
similarity index 83%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOpenApi.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOpenApi.java
index 265577879..66a199c8a 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOpenApi.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOpenApi.java
@@ -1,19 +1,17 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
-import com.qdesrame.openapi.diff.utils.EndpointUtils;
+import com.qdesrame.openapi.diff.core.utils.EndpointUtils;
import io.swagger.v3.oas.models.OpenAPI;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 22/12/17. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedOpenApi implements ComposedChanged {
+
private OpenAPI oldSpecOpenApi;
private OpenAPI newSpecOpenApi;
@@ -23,8 +21,7 @@ public class ChangedOpenApi implements ComposedChanged {
private ChangedExtensions changedExtensions;
public List getDeprecatedEndpoints() {
- return changedOperations
- .stream()
+ return changedOperations.stream()
.filter(ChangedOperation::isDeprecated)
.map(
c ->
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOperation.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOperation.java
similarity index 91%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOperation.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOperation.java
index a21e5660b..781439318 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOperation.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOperation.java
@@ -1,19 +1,18 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
-import static com.qdesrame.openapi.diff.model.Changed.result;
+import static com.qdesrame.openapi.diff.core.model.Changed.result;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import java.util.Arrays;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedOperation implements ComposedChanged {
+
private Operation oldOperation;
private Operation newOperation;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedParameter.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameter.java
similarity index 93%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedParameter.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameter.java
index e212dee74..b52cbfad0 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedParameter.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameter.java
@@ -1,16 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.parameters.Parameter;
import java.util.Arrays;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedParameter implements ComposedChanged {
+
private final DiffContext context;
private Parameter oldParameter;
private Parameter newParameter;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedParameters.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameters.java
similarity index 81%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedParameters.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameters.java
index 6d522e07e..b8d8a06fe 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedParameters.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameters.java
@@ -1,14 +1,12 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.parameters.Parameter;
import java.util.ArrayList;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedParameters implements ComposedChanged {
private final List oldParameterList;
@@ -39,7 +37,12 @@ public DiffResult isCoreChanged() {
if (increased.isEmpty() && missing.isEmpty()) {
return DiffResult.NO_CHANGES;
}
- if (increased.stream().noneMatch(Parameter::getRequired) && missing.isEmpty()) {
+ if (increased.stream()
+ .noneMatch(
+ p -> {
+ return p.getRequired() != null && p.getRequired();
+ })
+ && missing.isEmpty()) {
return DiffResult.COMPATIBLE;
}
return DiffResult.INCOMPATIBLE;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedPath.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPath.java
similarity index 93%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedPath.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPath.java
index e1f4426f7..8406632b1 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedPath.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPath.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
@@ -8,14 +8,13 @@
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedPath implements ComposedChanged {
+
private final String pathUrl;
private final PathItem oldPath;
private final PathItem newPath;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedPaths.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPaths.java
similarity index 91%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedPaths.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPaths.java
index c3991b5d8..4ae8c41dd 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedPaths.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPaths.java
@@ -1,16 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.PathItem;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
-@Getter
-@Setter
+@Data
public class ChangedPaths implements ComposedChanged {
+
private final Map oldPathMap;
private final Map newPathMap;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedRequestBody.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedRequestBody.java
similarity index 87%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedRequestBody.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedRequestBody.java
index 7bab24076..b0111e024 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedRequestBody.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedRequestBody.java
@@ -1,17 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.parameters.RequestBody;
import java.util.Arrays;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 27/12/17. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedRequestBody implements ComposedChanged {
+
private final RequestBody oldRequestBody;
private final RequestBody newRequestBody;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedResponse.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedResponse.java
similarity index 90%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedResponse.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedResponse.java
index 0a85ef97e..8f23fb573 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedResponse.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedResponse.java
@@ -1,16 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.responses.ApiResponse;
import java.util.Arrays;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedResponse implements ComposedChanged {
+
private final ApiResponse oldApiResponse;
private final ApiResponse newApiResponse;
private final DiffContext context;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSchema.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSchema.java
similarity index 77%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSchema.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSchema.java
index ea3d1b2e2..722e3d99e 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSchema.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSchema.java
@@ -1,21 +1,24 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
-import com.qdesrame.openapi.diff.model.schema.*;
+import com.qdesrame.openapi.diff.core.model.schema.ChangedEnum;
+import com.qdesrame.openapi.diff.core.model.schema.ChangedMaxLength;
+import com.qdesrame.openapi.diff.core.model.schema.ChangedReadOnly;
+import com.qdesrame.openapi.diff.core.model.schema.ChangedRequired;
+import com.qdesrame.openapi.diff.core.model.schema.ChangedWriteOnly;
+import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.media.Schema;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 22/12/17. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedSchema implements ComposedChanged {
+
protected DiffContext context;
protected Schema oldSchema;
protected Schema newSchema;
@@ -76,10 +79,9 @@ public DiffResult isCoreChanged() {
&& !discriminatorPropertyChanged) {
return DiffResult.NO_CHANGES;
}
- boolean compatibleForRequest = (oldSchema != null || newSchema == null);
boolean compatibleForResponse =
missingProperties.isEmpty() && (oldSchema == null || newSchema != null);
- if ((context.isRequest() && compatibleForRequest
+ if ((context.isRequest() && compatibleForRequest()
|| context.isResponse() && compatibleForResponse)
&& !changedType
&& !discriminatorPropertyChanged) {
@@ -87,4 +89,14 @@ public DiffResult isCoreChanged() {
}
return DiffResult.INCOMPATIBLE;
}
+
+ private boolean compatibleForRequest() {
+ if (PathItem.HttpMethod.PUT.equals(context.getMethod())) {
+ if (increasedProperties.size() > 0) {
+ return false;
+ }
+ }
+
+ return (oldSchema != null || newSchema == null);
+ }
}
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirement.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirement.java
similarity index 91%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirement.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirement.java
index a1361db09..5d950f061 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirement.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirement.java
@@ -1,17 +1,15 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import java.util.ArrayList;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
-/** Created by adarsh.sharma on 06/01/18. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedSecurityRequirement implements ComposedChanged {
+
private SecurityRequirement oldSecurityRequirement;
private SecurityRequirement newSecurityRequirement;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirements.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirements.java
similarity index 92%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirements.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirements.java
index 61e6d7f02..81b935bf8 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirements.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirements.java
@@ -1,18 +1,16 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import java.util.ArrayList;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
import org.apache.commons.collections4.CollectionUtils;
-/** Created by adarsh.sharma on 06/01/18. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedSecurityRequirements implements ComposedChanged {
+
private List oldSecurityRequirements;
private List newSecurityRequirements;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityScheme.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityScheme.java
similarity index 94%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityScheme.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityScheme.java
index 62c2ae136..c7ea64bd1 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityScheme.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityScheme.java
@@ -1,17 +1,16 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.security.SecurityScheme;
import java.util.Arrays;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
import lombok.experimental.Accessors;
/** Created by adarsh.sharma on 11/01/18. */
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
public class ChangedSecurityScheme implements ComposedChanged {
+
private SecurityScheme oldSecurityScheme;
private SecurityScheme newSecurityScheme;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecuritySchemeScopes.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecuritySchemeScopes.java
similarity index 81%
rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSecuritySchemeScopes.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecuritySchemeScopes.java
index 418046ca0..82a216c53 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecuritySchemeScopes.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecuritySchemeScopes.java
@@ -1,9 +1,7 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import java.util.List;
-import lombok.Getter;
-@Getter
public class ChangedSecuritySchemeScopes extends ChangedList {
public ChangedSecuritySchemeScopes(List oldValue, List newValue) {
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ComposedChanged.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ComposedChanged.java
similarity index 87%
rename from src/main/java/com/qdesrame/openapi/diff/model/ComposedChanged.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ComposedChanged.java
index f0aa5af0a..cd338a3f0 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/ComposedChanged.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ComposedChanged.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import java.util.List;
import java.util.Objects;
@@ -16,8 +16,7 @@ public interface ComposedChanged extends Changed {
default DiffResult isChanged() {
DiffResult elementsResult =
DiffResult.fromWeight(
- getChangedElements()
- .stream()
+ getChangedElements().stream()
.filter(Objects::nonNull)
.map(Changed::isChanged)
.mapToInt(DiffResult::getWeight)
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/DiffContext.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffContext.java
similarity index 98%
rename from src/main/java/com/qdesrame/openapi/diff/model/DiffContext.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffContext.java
index c38516b63..391be8a53 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/DiffContext.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffContext.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.PathItem;
import java.util.HashMap;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/DiffResult.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffResult.java
similarity index 95%
rename from src/main/java/com/qdesrame/openapi/diff/model/DiffResult.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffResult.java
index 7b7f66b55..ff707bfca 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/DiffResult.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffResult.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import static java.lang.String.format;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/Endpoint.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Endpoint.java
similarity index 77%
rename from src/main/java/com/qdesrame/openapi/diff/model/Endpoint.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/Endpoint.java
index 0c1b0f048..bc940c33c 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/Endpoint.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Endpoint.java
@@ -1,12 +1,10 @@
-package com.qdesrame.openapi.diff.model;
+package com.qdesrame.openapi.diff.core.model;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
-@Getter
-@Setter
+@Data
public class Endpoint {
private String pathUrl;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedEnum.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedEnum.java
similarity index 66%
rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedEnum.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedEnum.java
index 06ba01982..8d5480a85 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedEnum.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedEnum.java
@@ -1,12 +1,10 @@
-package com.qdesrame.openapi.diff.model.schema;
+package com.qdesrame.openapi.diff.core.model.schema;
-import com.qdesrame.openapi.diff.model.ChangedList;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.model.DiffResult;
+import com.qdesrame.openapi.diff.core.model.ChangedList;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.DiffResult;
import java.util.List;
-import lombok.Getter;
-@Getter
public class ChangedEnum extends ChangedList {
public ChangedEnum(List oldValue, List newValue, DiffContext context) {
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedMaxLength.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedMaxLength.java
similarity index 50%
rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedMaxLength.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedMaxLength.java
index 915d78560..31780dc66 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedMaxLength.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedMaxLength.java
@@ -1,20 +1,17 @@
-package com.qdesrame.openapi.diff.model.schema;
+package com.qdesrame.openapi.diff.core.model.schema;
-import com.qdesrame.openapi.diff.model.Changed;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.model.DiffResult;
+import com.qdesrame.openapi.diff.core.model.Changed;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.DiffResult;
import java.util.Objects;
+import lombok.Value;
+@Value
public class ChangedMaxLength implements Changed {
- private final Integer oldValue;
- private final Integer newValue;
- private final DiffContext context;
- public ChangedMaxLength(Integer oldValue, Integer newValue, DiffContext context) {
- this.oldValue = oldValue;
- this.newValue = newValue;
- this.context = context;
- }
+ Integer oldValue;
+ Integer newValue;
+ DiffContext context;
@Override
public DiffResult isChanged() {
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedReadOnly.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedReadOnly.java
similarity index 82%
rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedReadOnly.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedReadOnly.java
index 815e8cbe7..433684ac9 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedReadOnly.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedReadOnly.java
@@ -1,8 +1,8 @@
-package com.qdesrame.openapi.diff.model.schema;
+package com.qdesrame.openapi.diff.core.model.schema;
-import com.qdesrame.openapi.diff.model.Changed;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.model.DiffResult;
+import com.qdesrame.openapi.diff.core.model.Changed;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.DiffResult;
import java.util.Objects;
import java.util.Optional;
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedRequired.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedRequired.java
similarity index 67%
rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedRequired.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedRequired.java
index 9774b8fb1..bd4756dad 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedRequired.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedRequired.java
@@ -1,12 +1,10 @@
-package com.qdesrame.openapi.diff.model.schema;
+package com.qdesrame.openapi.diff.core.model.schema;
-import com.qdesrame.openapi.diff.model.ChangedList;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.model.DiffResult;
+import com.qdesrame.openapi.diff.core.model.ChangedList;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.DiffResult;
import java.util.List;
-import lombok.Getter;
-@Getter
public class ChangedRequired extends ChangedList {
public ChangedRequired(List oldValue, List newValue, DiffContext context) {
diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedWriteOnly.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedWriteOnly.java
similarity index 82%
rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedWriteOnly.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedWriteOnly.java
index 5f525662a..358fb3622 100644
--- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedWriteOnly.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedWriteOnly.java
@@ -1,8 +1,8 @@
-package com.qdesrame.openapi.diff.model.schema;
+package com.qdesrame.openapi.diff.core.model.schema;
-import com.qdesrame.openapi.diff.model.Changed;
-import com.qdesrame.openapi.diff.model.DiffContext;
-import com.qdesrame.openapi.diff.model.DiffResult;
+import com.qdesrame.openapi.diff.core.model.Changed;
+import com.qdesrame.openapi.diff.core.model.DiffContext;
+import com.qdesrame.openapi.diff.core.model.DiffResult;
import java.util.Objects;
import java.util.Optional;
diff --git a/src/main/java/com/qdesrame/openapi/diff/output/ConsoleRender.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java
similarity index 94%
rename from src/main/java/com/qdesrame/openapi/diff/output/ConsoleRender.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java
index 7fe4d8a08..499dff44e 100644
--- a/src/main/java/com/qdesrame/openapi/diff/output/ConsoleRender.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java
@@ -1,10 +1,10 @@
-package com.qdesrame.openapi.diff.output;
+package com.qdesrame.openapi.diff.core.output;
-import static com.qdesrame.openapi.diff.model.Changed.result;
+import static com.qdesrame.openapi.diff.core.model.Changed.result;
-import com.qdesrame.openapi.diff.model.*;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.*;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.Parameter;
@@ -213,12 +213,19 @@ private String properties(
String propPrefix, String title, Map properties, DiffContext context) {
StringBuilder sb = new StringBuilder();
if (properties != null) {
- properties.forEach(
- (key, value) -> sb.append(property(propPrefix + key, title, resolve(value))));
+ properties.forEach((key, value) -> sb.append(resolveProperty(propPrefix, value, key, title)));
}
return sb.toString();
}
+ private String resolveProperty(String propPrefix, Schema value, String key, String title) {
+ try {
+ return property(propPrefix + key, title, resolve(value));
+ } catch (Exception e) {
+ return property(propPrefix + key, title, type(value));
+ }
+ }
+
protected String property(String name, String title, Schema schema) {
return property(name, title, type(schema));
}
@@ -234,7 +241,9 @@ protected Schema resolve(Schema schema) {
protected String type(Schema schema) {
String result = "object";
- if (schema instanceof ArraySchema) {
+ if (schema == null) {
+ result = "no schema";
+ } else if (schema instanceof ArraySchema) {
result = "array";
} else if (schema.getType() != null) {
result = schema.getType();
diff --git a/src/main/java/com/qdesrame/openapi/diff/output/HtmlRender.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/HtmlRender.java
similarity index 93%
rename from src/main/java/com/qdesrame/openapi/diff/output/HtmlRender.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/output/HtmlRender.java
index 756bc045a..cc585e446 100644
--- a/src/main/java/com/qdesrame/openapi/diff/output/HtmlRender.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/HtmlRender.java
@@ -1,11 +1,11 @@
-package com.qdesrame.openapi.diff.output;
+package com.qdesrame.openapi.diff.core.output;
-import static com.qdesrame.openapi.diff.model.Changed.result;
+import static com.qdesrame.openapi.diff.core.model.Changed.result;
import static j2html.TagCreator.*;
-import com.qdesrame.openapi.diff.model.*;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.*;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.MediaType;
import io.swagger.v3.oas.models.media.Schema;
@@ -269,7 +269,16 @@ private void properties(
Map properties,
DiffContext context) {
if (properties != null) {
- properties.forEach((key, value) -> property(output, propPrefix + key, title, resolve(value)));
+ properties.forEach((key, value) -> resolveProperty(output, propPrefix, key, value, title));
+ }
+ }
+
+ private void resolveProperty(
+ ContainerTag output, String propPrefix, String key, Schema value, String title) {
+ try {
+ property(output, propPrefix + key, title, resolve(value));
+ } catch (Exception e) {
+ property(output, propPrefix + key, title, type(value));
}
}
@@ -288,7 +297,9 @@ protected Schema resolve(Schema schema) {
protected String type(Schema schema) {
String result = "object";
- if (schema instanceof ArraySchema) {
+ if (schema == null) {
+ result = "no schema";
+ } else if (schema instanceof ArraySchema) {
result = "array";
} else if (schema.getType() != null) {
result = schema.getType();
@@ -347,7 +358,10 @@ private ContainerTag li_changedParam(ChangedParameter changeParam) {
return li_deprecatedParam(changeParam);
}
boolean changeRequired = changeParam.isChangeRequired();
- boolean changeDescription = changeParam.getDescription().isDifferent();
+ boolean changeDescription =
+ Optional.ofNullable(changeParam.getDescription())
+ .map(ChangedMetadata::isDifferent)
+ .orElse(false);
Parameter rightParam = changeParam.getNewParameter();
Parameter leftParam = changeParam.getNewParameter();
ContainerTag li = li().withText(changeParam.getName() + " in " + changeParam.getIn());
diff --git a/src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/MarkdownRender.java
similarity index 94%
rename from src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/output/MarkdownRender.java
index 9e1729e70..88e8801b7 100644
--- a/src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/MarkdownRender.java
@@ -1,12 +1,12 @@
-package com.qdesrame.openapi.diff.output;
+package com.qdesrame.openapi.diff.core.output;
-import static com.qdesrame.openapi.diff.model.Changed.result;
-import static com.qdesrame.openapi.diff.utils.ChangedUtils.isUnchanged;
+import static com.qdesrame.openapi.diff.core.model.Changed.result;
+import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isUnchanged;
import static java.lang.String.format;
-import com.qdesrame.openapi.diff.model.*;
-import com.qdesrame.openapi.diff.utils.RefPointer;
-import com.qdesrame.openapi.diff.utils.RefType;
+import com.qdesrame.openapi.diff.core.model.*;
+import com.qdesrame.openapi.diff.core.utils.RefPointer;
+import com.qdesrame.openapi.diff.core.utils.RefType;
import io.swagger.v3.oas.models.headers.Header;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.ComposedSchema;
@@ -63,8 +63,7 @@ protected String sectionTitle(String title) {
protected String listEndpoints(String title, List endpoints) {
if (null == endpoints || endpoints.size() == 0) return "";
StringBuilder sb = new StringBuilder(sectionTitle(title));
- endpoints
- .stream()
+ endpoints.stream()
.map(e -> itemEndpoint(e.getMethod().toString(), e.getPathUrl(), e.getSummary()))
.forEach(sb::append);
return sb.toString();
@@ -85,8 +84,7 @@ protected String titleH5(String title) {
protected String listEndpoints(List changedOperations) {
if (null == changedOperations || changedOperations.size() == 0) return "";
StringBuilder sb = new StringBuilder(sectionTitle("What's Changed"));
- changedOperations
- .stream()
+ changedOperations.stream()
.map(
operation -> {
StringBuilder details =
@@ -122,10 +120,7 @@ protected String responses(ChangedApiResponse changedApiResponse) {
StringBuilder sb = new StringBuilder("\n");
sb.append(listResponse("New response", changedApiResponse.getIncreased()));
sb.append(listResponse("Deleted response", changedApiResponse.getMissing()));
- changedApiResponse
- .getChanged()
- .entrySet()
- .stream()
+ changedApiResponse.getChanged().entrySet().stream()
.map(e -> this.itemResponse(e.getKey(), e.getValue()))
.forEach(sb::append);
return sb.toString();
@@ -133,9 +128,7 @@ protected String responses(ChangedApiResponse changedApiResponse) {
protected String listResponse(String title, Map responses) {
StringBuilder sb = new StringBuilder();
- responses
- .entrySet()
- .stream()
+ responses.entrySet().stream()
.map(e -> this.itemResponse(title, e.getKey(), e.getValue()))
.forEach(sb::append);
return sb.toString();
@@ -177,10 +170,7 @@ protected String headers(ChangedHeaders headers) {
if (headers != null) {
sb.append(listHeader("New header", headers.getIncreased()))
.append(listHeader("Deleted header", headers.getMissing()));
- headers
- .getChanged()
- .entrySet()
- .stream()
+ headers.getChanged().entrySet().stream()
.map(e -> this.itemHeader(e.getKey(), e.getValue()))
.forEach(sb::append);
}
@@ -189,9 +179,7 @@ protected String headers(ChangedHeaders headers) {
protected String listHeader(String title, Map headers) {
StringBuilder sb = new StringBuilder();
- headers
- .entrySet()
- .stream()
+ headers.entrySet().stream()
.map(e -> this.itemHeader(title, e.getKey(), e.getValue()))
.forEach(sb::append);
return sb.toString();
@@ -225,10 +213,7 @@ protected String bodyContent(String prefix, ChangedContent changedContent) {
} else {
deepness = 0;
}
- changedContent
- .getChanged()
- .entrySet()
- .stream()
+ changedContent.getChanged().entrySet().stream()
.map(e -> this.itemContent(deepness, e.getKey(), e.getValue()))
.forEach(e -> sb.append(prefix).append(e));
return sb.toString();
@@ -240,9 +225,7 @@ protected String bodyContent(ChangedContent changedContent) {
protected String listContent(String prefix, String title, Map mediaTypes) {
StringBuilder sb = new StringBuilder();
- mediaTypes
- .entrySet()
- .stream()
+ mediaTypes.entrySet().stream()
.map(e -> this.itemContent(title, e.getKey(), e.getValue()))
.forEach(e -> sb.append(prefix).append(e));
return sb.toString();
@@ -340,18 +323,14 @@ protected String schema(int deepness, ComposedSchema schema, DiffContext context
StringBuilder sb = new StringBuilder();
if (schema.getAllOf() != null && schema.getAllOf() != null) {
LOGGER.debug("All of schema");
- schema
- .getAllOf()
- .stream()
+ schema.getAllOf().stream()
.map(this::resolve)
.forEach(composedChild -> sb.append(schema(deepness, composedChild, context)));
}
if (schema.getOneOf() != null && schema.getOneOf() != null) {
LOGGER.debug("One of schema");
sb.append(format("%sOne of:\n\n", indent(deepness)));
- schema
- .getOneOf()
- .stream()
+ schema.getOneOf().stream()
.map(this::resolve)
.forEach(composedChild -> sb.append(schema(deepness + 1, composedChild, context)));
}
@@ -402,7 +381,7 @@ protected String properties(
if (properties != null) {
properties.forEach(
(key, value) -> {
- sb.append(property(deepness, title, key, resolve(value)));
+ sb.append(resolveProperty(deepness, value, key, title));
if (showContent) {
sb.append(schema(deepness + 1, resolve(value), context));
}
@@ -411,6 +390,14 @@ protected String properties(
return sb.toString();
}
+ private String resolveProperty(int deepness, Schema value, String key, String title) {
+ try {
+ return property(deepness, title, key, resolve(value));
+ } catch (Exception e) {
+ return property(deepness, title, key, type(value), "");
+ }
+ }
+
protected String property(int deepness, String name, ChangedSchema schema) {
StringBuilder sb = new StringBuilder();
String type = type(schema.getNewSchema());
diff --git a/core/src/main/java/com/qdesrame/openapi/diff/core/output/Render.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/Render.java
new file mode 100644
index 000000000..9e2368480
--- /dev/null
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/Render.java
@@ -0,0 +1,8 @@
+package com.qdesrame.openapi.diff.core.output;
+
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+
+public interface Render {
+
+ String render(ChangedOpenApi diff);
+}
diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/ChangedUtils.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/ChangedUtils.java
similarity index 82%
rename from src/main/java/com/qdesrame/openapi/diff/utils/ChangedUtils.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/ChangedUtils.java
index 85628c2b7..f392d2bea 100644
--- a/src/main/java/com/qdesrame/openapi/diff/utils/ChangedUtils.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/ChangedUtils.java
@@ -1,6 +1,6 @@
-package com.qdesrame.openapi.diff.utils;
+package com.qdesrame.openapi.diff.core.utils;
-import com.qdesrame.openapi.diff.model.Changed;
+import com.qdesrame.openapi.diff.core.model.Changed;
import java.util.Optional;
public class ChangedUtils {
diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/Copy.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/Copy.java
similarity index 84%
rename from src/main/java/com/qdesrame/openapi/diff/utils/Copy.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/Copy.java
index d798ab64d..0704413ce 100644
--- a/src/main/java/com/qdesrame/openapi/diff/utils/Copy.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/Copy.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.utils;
+package com.qdesrame.openapi.diff.core.utils;
import java.util.LinkedHashMap;
import java.util.Map;
diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/EndpointUtils.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/EndpointUtils.java
similarity index 95%
rename from src/main/java/com/qdesrame/openapi/diff/utils/EndpointUtils.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/EndpointUtils.java
index 392f61cda..f1b5b57ae 100644
--- a/src/main/java/com/qdesrame/openapi/diff/utils/EndpointUtils.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/EndpointUtils.java
@@ -1,6 +1,6 @@
-package com.qdesrame.openapi.diff.utils;
+package com.qdesrame.openapi.diff.core.utils;
-import com.qdesrame.openapi.diff.model.Endpoint;
+import com.qdesrame.openapi.diff.core.model.Endpoint;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import java.util.ArrayList;
diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/RefPointer.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefPointer.java
similarity index 97%
rename from src/main/java/com/qdesrame/openapi/diff/utils/RefPointer.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefPointer.java
index a1382bfa8..8eda2b800 100644
--- a/src/main/java/com/qdesrame/openapi/diff/utils/RefPointer.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefPointer.java
@@ -1,4 +1,4 @@
-package com.qdesrame.openapi.diff.utils;
+package com.qdesrame.openapi.diff.core.utils;
import io.swagger.v3.oas.models.Components;
import java.util.Map;
diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/RefType.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefType.java
similarity index 72%
rename from src/main/java/com/qdesrame/openapi/diff/utils/RefType.java
rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefType.java
index 7b1f6b8b6..44b34e68f 100644
--- a/src/main/java/com/qdesrame/openapi/diff/utils/RefType.java
+++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefType.java
@@ -1,8 +1,7 @@
-package com.qdesrame.openapi.diff.utils;
+package com.qdesrame.openapi.diff.core.utils;
import lombok.Getter;
-/** Created by adarsh.sharma on 07/01/18. */
@Getter
public enum RefType {
REQUEST_BODIES("requestBodies"),
@@ -17,5 +16,5 @@ public enum RefType {
this.name = name;
}
- private String name;
+ private final String name;
}
diff --git a/src/main/resources/demo.css b/core/src/main/resources/demo.css
similarity index 100%
rename from src/main/resources/demo.css
rename to core/src/main/resources/demo.css
diff --git a/src/main/resources/template.html b/core/src/main/resources/template.html
similarity index 100%
rename from src/main/resources/template.html
rename to core/src/main/resources/template.html
diff --git a/src/test/java/com/qdesrame/openapi/test/AddPropDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/AddPropDiffTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/AddPropDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/AddPropDiffTest.java
diff --git a/core/src/test/java/com/qdesrame/openapi/test/AddPropPutDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/AddPropPutDiffTest.java
new file mode 100644
index 000000000..70852e888
--- /dev/null
+++ b/core/src/test/java/com/qdesrame/openapi/test/AddPropPutDiffTest.java
@@ -0,0 +1,22 @@
+package com.qdesrame.openapi.test;
+
+import static com.qdesrame.openapi.test.TestUtils.assertOpenApiAreEquals;
+import static com.qdesrame.openapi.test.TestUtils.assertOpenApiBackwardIncompatible;
+
+import org.junit.jupiter.api.Test;
+
+/** Created by trohrberg on 23/03/19. */
+public class AddPropPutDiffTest {
+ private final String OPENAPI_DOC1 = "add-prop-put-1.yaml";
+ private final String OPENAPI_DOC2 = "add-prop-put-2.yaml";
+
+ @Test
+ public void testDiffSame() {
+ assertOpenApiAreEquals(OPENAPI_DOC1, OPENAPI_DOC1);
+ }
+
+ @Test
+ public void testDiffDifferent() {
+ assertOpenApiBackwardIncompatible(OPENAPI_DOC1, OPENAPI_DOC2);
+ }
+}
diff --git a/src/test/java/com/qdesrame/openapi/test/AllOfDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/AllOfDiffTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/AllOfDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/AllOfDiffTest.java
diff --git a/src/test/java/com/qdesrame/openapi/test/ArrayDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/ArrayDiffTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/ArrayDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/ArrayDiffTest.java
diff --git a/src/test/java/com/qdesrame/openapi/test/BackwardCompatibilityTest.java b/core/src/test/java/com/qdesrame/openapi/test/BackwardCompatibilityTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/BackwardCompatibilityTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/BackwardCompatibilityTest.java
diff --git a/core/src/test/java/com/qdesrame/openapi/test/ConsoleRenderTest.java b/core/src/test/java/com/qdesrame/openapi/test/ConsoleRenderTest.java
new file mode 100644
index 000000000..705897c50
--- /dev/null
+++ b/core/src/test/java/com/qdesrame/openapi/test/ConsoleRenderTest.java
@@ -0,0 +1,18 @@
+package com.qdesrame.openapi.test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.output.ConsoleRender;
+import org.junit.jupiter.api.Test;
+
+public class ConsoleRenderTest {
+ @Test
+ public void renderDoesNotFailWhenPropertyHasBeenRemoved() {
+ ConsoleRender render = new ConsoleRender();
+ ChangedOpenApi diff =
+ OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml");
+ assertThat(render.render(diff)).isNotBlank();
+ }
+}
diff --git a/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java
similarity index 88%
rename from src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java
index f075124f8..e0ca1c549 100644
--- a/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java
+++ b/core/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java
@@ -2,8 +2,8 @@
import static org.assertj.core.api.Assertions.assertThat;
-import com.qdesrame.openapi.diff.OpenApiCompare;
-import com.qdesrame.openapi.diff.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
import org.junit.jupiter.api.Test;
public class ContentDiffTest {
diff --git a/core/src/test/java/com/qdesrame/openapi/test/HtmlRenderTest.java b/core/src/test/java/com/qdesrame/openapi/test/HtmlRenderTest.java
new file mode 100644
index 000000000..c0b29c6e4
--- /dev/null
+++ b/core/src/test/java/com/qdesrame/openapi/test/HtmlRenderTest.java
@@ -0,0 +1,18 @@
+package com.qdesrame.openapi.test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.output.HtmlRender;
+import org.junit.jupiter.api.Test;
+
+public class HtmlRenderTest {
+ @Test
+ public void renderDoesNotFailWhenPropertyHasBeenRemoved() {
+ HtmlRender render = new HtmlRender();
+ ChangedOpenApi diff =
+ OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml");
+ assertThat(render.render(diff)).isNotBlank();
+ }
+}
diff --git a/core/src/test/java/com/qdesrame/openapi/test/MarkdownRenderTest.java b/core/src/test/java/com/qdesrame/openapi/test/MarkdownRenderTest.java
new file mode 100644
index 000000000..54e6978f1
--- /dev/null
+++ b/core/src/test/java/com/qdesrame/openapi/test/MarkdownRenderTest.java
@@ -0,0 +1,18 @@
+package com.qdesrame.openapi.test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.output.MarkdownRender;
+import org.junit.jupiter.api.Test;
+
+public class MarkdownRenderTest {
+ @Test
+ public void renderDoesNotFailWhenPropertyHasBeenRemoved() {
+ MarkdownRender render = new MarkdownRender();
+ ChangedOpenApi diff =
+ OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml");
+ assertThat(render.render(diff)).isNotBlank();
+ }
+}
diff --git a/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java
similarity index 78%
rename from src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java
index 5f6779454..16a4eb5c4 100644
--- a/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java
+++ b/core/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java
@@ -16,6 +16,8 @@ public class OneOfDiffTest {
private final String OPENAPI_DOC5 = "composed_schema_2.yaml";
private final String OPENAPI_DOC6 = "oneOf_discriminator-changed_1.yaml";
private final String OPENAPI_DOC7 = "oneOf_discriminator-changed_2.yaml";
+ private final String OPENAPI_DOC8 = "oneOf_discriminator-missing_1.yaml";
+ private final String OPENAPI_DOC9 = "oneOf_discriminator-missing_2.yaml";
@Test
public void testDiffSame() {
@@ -42,4 +44,14 @@ public void testOneOfDiscrimitatorChanged() {
// The oneOf 'discriminator' changed: 'realtype' -> 'othertype':
assertOpenApiBackwardIncompatible(OPENAPI_DOC6, OPENAPI_DOC7);
}
+
+ @Test
+ public void testOneOfDiscrimitatorMissingSameOrder() {
+ assertOpenApiAreEquals(OPENAPI_DOC8, OPENAPI_DOC8);
+ }
+
+ @Test
+ public void testOneOfDiscrimitatorMissingDifferentOrder() {
+ assertOpenApiAreEquals(OPENAPI_DOC8, OPENAPI_DOC9);
+ }
}
diff --git a/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java
similarity index 90%
rename from src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java
index 379737bc3..896c38bcd 100644
--- a/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java
+++ b/core/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java
@@ -3,12 +3,12 @@
import static com.qdesrame.openapi.test.TestUtils.assertOpenApiAreEquals;
import static org.assertj.core.api.Assertions.assertThat;
-import com.qdesrame.openapi.diff.OpenApiCompare;
-import com.qdesrame.openapi.diff.model.ChangedOpenApi;
-import com.qdesrame.openapi.diff.model.ChangedOperation;
-import com.qdesrame.openapi.diff.model.Endpoint;
-import com.qdesrame.openapi.diff.output.HtmlRender;
-import com.qdesrame.openapi.diff.output.MarkdownRender;
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.model.ChangedOperation;
+import com.qdesrame.openapi.diff.core.model.Endpoint;
+import com.qdesrame.openapi.diff.core.output.HtmlRender;
+import com.qdesrame.openapi.diff.core.output.MarkdownRender;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
diff --git a/src/test/java/com/qdesrame/openapi/test/ParameterDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/ParameterDiffTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/ParameterDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/ParameterDiffTest.java
diff --git a/src/test/java/com/qdesrame/openapi/test/PathDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/PathDiffTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/PathDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/PathDiffTest.java
diff --git a/src/test/java/com/qdesrame/openapi/test/RecursiveSchemaTest.java b/core/src/test/java/com/qdesrame/openapi/test/RecursiveSchemaTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/RecursiveSchemaTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/RecursiveSchemaTest.java
diff --git a/src/test/java/com/qdesrame/openapi/test/ReferenceDiffCacheTest.java b/core/src/test/java/com/qdesrame/openapi/test/ReferenceDiffCacheTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/ReferenceDiffCacheTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/ReferenceDiffCacheTest.java
diff --git a/src/test/java/com/qdesrame/openapi/test/RequestDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/RequestDiffTest.java
similarity index 100%
rename from src/test/java/com/qdesrame/openapi/test/RequestDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/RequestDiffTest.java
diff --git a/core/src/test/java/com/qdesrame/openapi/test/ResponseAddedContentSchemaTest.java b/core/src/test/java/com/qdesrame/openapi/test/ResponseAddedContentSchemaTest.java
new file mode 100644
index 000000000..baaf2a10f
--- /dev/null
+++ b/core/src/test/java/com/qdesrame/openapi/test/ResponseAddedContentSchemaTest.java
@@ -0,0 +1,47 @@
+package com.qdesrame.openapi.test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.model.ChangedResponse;
+import com.qdesrame.openapi.diff.core.output.ConsoleRender;
+import com.qdesrame.openapi.diff.core.output.HtmlRender;
+import com.qdesrame.openapi.diff.core.output.MarkdownRender;
+import io.swagger.v3.oas.models.media.Content;
+import java.util.Map;
+import org.junit.jupiter.api.Test;
+
+public class ResponseAddedContentSchemaTest {
+
+ private final String OPENAPI_DOC1 = "response_schema_added_1.yaml";
+ private final String OPENAPI_DOC2 = "response_schema_added_2.yaml";
+
+ @Test
+ public void testDiffDifferent() {
+ ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
+
+ assertThat(changedOpenApi.getNewEndpoints()).isEmpty();
+ assertThat(changedOpenApi.getMissingEndpoints()).isEmpty();
+ assertThat(changedOpenApi.getChangedOperations()).isNotEmpty();
+
+ Map changedResponses =
+ changedOpenApi.getChangedOperations().get(0).getApiResponses().getChanged();
+ assertThat(changedResponses).containsKey("200");
+
+ ChangedResponse changedResponse = changedResponses.get("200");
+ Content oldContent = changedResponse.getOldApiResponse().getContent();
+ Content newContent = changedResponse.getNewApiResponse().getContent();
+ assertThat(oldContent.get("application/json").getSchema()).isNull();
+ assertThat(newContent.get("application/json").getSchema()).isNotNull();
+ }
+
+ @Test
+ public void testDiffCanBeRendered() {
+ ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2);
+
+ assertThat(new ConsoleRender().render(changedOpenApi)).isNotBlank();
+ assertThat(new HtmlRender().render(changedOpenApi)).isNotBlank();
+ assertThat(new MarkdownRender().render(changedOpenApi)).isNotBlank();
+ }
+}
diff --git a/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java
similarity index 83%
rename from src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java
index 7a1462a46..17947e792 100644
--- a/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java
+++ b/core/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java
@@ -2,10 +2,10 @@
import static org.assertj.core.api.Assertions.assertThat;
-import com.qdesrame.openapi.diff.OpenApiCompare;
-import com.qdesrame.openapi.diff.model.ChangedHeaders;
-import com.qdesrame.openapi.diff.model.ChangedOpenApi;
-import com.qdesrame.openapi.diff.model.ChangedResponse;
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedHeaders;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.model.ChangedResponse;
import java.util.Map;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java
similarity index 92%
rename from src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java
rename to core/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java
index b8532a814..4c78ae39c 100644
--- a/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java
+++ b/core/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java
@@ -3,8 +3,8 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import com.qdesrame.openapi.diff.OpenApiCompare;
-import com.qdesrame.openapi.diff.model.*;
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.*;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import org.junit.jupiter.api.Test;
@@ -21,9 +21,7 @@ public void testDiffDifferent() {
assertThat(changedOpenApi.getChangedOperations().size() == 3);
ChangedOperation changedOperation1 =
- changedOpenApi
- .getChangedOperations()
- .stream()
+ changedOpenApi.getChangedOperations().stream()
.filter(x -> x.getPathUrl().equals("/pet/{petId}"))
.findFirst()
.get();
@@ -51,9 +49,7 @@ public void testDiffDifferent() {
.isEqualTo("read:pets"));
ChangedOperation changedOperation2 =
- changedOpenApi
- .getChangedOperations()
- .stream()
+ changedOpenApi.getChangedOperations().stream()
.filter(x -> x.getPathUrl().equals("/pet3"))
.findFirst()
.get();
@@ -73,9 +69,7 @@ public void testDiffDifferent() {
assertThat(changedImplicitOAuthFlow2.isAuthorizationUrl()).isTrue();
ChangedOperation changedOperation3 =
- changedOpenApi
- .getChangedOperations()
- .stream()
+ changedOpenApi.getChangedOperations().stream()
.filter(x -> x.getPathUrl().equals("/pet/findByStatus2"))
.findFirst()
.get();
diff --git a/core/src/test/java/com/qdesrame/openapi/test/Swagger2CompatibilityTest.java b/core/src/test/java/com/qdesrame/openapi/test/Swagger2CompatibilityTest.java
new file mode 100644
index 000000000..6b8487231
--- /dev/null
+++ b/core/src/test/java/com/qdesrame/openapi/test/Swagger2CompatibilityTest.java
@@ -0,0 +1,22 @@
+package com.qdesrame.openapi.test;
+
+import static com.qdesrame.openapi.test.TestUtils.assertOpenApiAreEquals;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+@Disabled
+public class Swagger2CompatibilityTest {
+ private final String SWAGGER_DOC1 = "petstore_swagger2.yaml";
+ private final String OPENAPI_DOC2 = "petstore_openapi3.yaml";
+
+ @Test
+ public void testEqual() {
+ assertOpenApiAreEquals(SWAGGER_DOC1, SWAGGER_DOC1);
+ }
+
+ @Test
+ public void testSwagger2ToOpenapi3() {
+ assertOpenApiAreEquals(SWAGGER_DOC1, OPENAPI_DOC2);
+ }
+}
diff --git a/src/test/java/com/qdesrame/openapi/test/TestUtils.java b/core/src/test/java/com/qdesrame/openapi/test/TestUtils.java
similarity index 93%
rename from src/test/java/com/qdesrame/openapi/test/TestUtils.java
rename to core/src/test/java/com/qdesrame/openapi/test/TestUtils.java
index aaa947d14..c58f50e69 100644
--- a/src/test/java/com/qdesrame/openapi/test/TestUtils.java
+++ b/core/src/test/java/com/qdesrame/openapi/test/TestUtils.java
@@ -3,8 +3,8 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.slf4j.LoggerFactory.getLogger;
-import com.qdesrame.openapi.diff.OpenApiCompare;
-import com.qdesrame.openapi.diff.model.ChangedOpenApi;
+import com.qdesrame.openapi.diff.core.OpenApiCompare;
+import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
import org.slf4j.Logger;
public class TestUtils {
diff --git a/src/test/resources/add-prop-1.yaml b/core/src/test/resources/add-prop-1.yaml
similarity index 100%
rename from src/test/resources/add-prop-1.yaml
rename to core/src/test/resources/add-prop-1.yaml
diff --git a/src/test/resources/add-prop-2.yaml b/core/src/test/resources/add-prop-2.yaml
similarity index 100%
rename from src/test/resources/add-prop-2.yaml
rename to core/src/test/resources/add-prop-2.yaml
diff --git a/core/src/test/resources/add-prop-put-1.yaml b/core/src/test/resources/add-prop-put-1.yaml
new file mode 100644
index 000000000..e764df63f
--- /dev/null
+++ b/core/src/test/resources/add-prop-put-1.yaml
@@ -0,0 +1,71 @@
+openapi: 3.0.0
+servers:
+ - description: SwaggerHub API Auto Mocking
+ url: https://virtserver.swaggerhub.com/anshul10s/pet-store/1.0.0
+info:
+ description: |
+ This is a sample Petstore server. You can find
+ out more about Swagger at
+ [http://swagger.io](http://swagger.io) or on
+ [irc.freenode.net, #swagger](http://swagger.io/irc/).
+ version: "1.0.0"
+ title: Swagger Petstore
+ termsOfService: 'http://swagger.io/terms/'
+ contact:
+ email: apiteam@swagger.io
+ license:
+ name: Apache 2.0
+ url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
+tags:
+ - name: pet
+ description: Everything about your Pets
+ externalDocs:
+ description: Find out more
+ url: 'http://swagger.io'
+ - name: store
+ description: Access to Petstore orders
+ - name: user
+ description: Operations about user
+ externalDocs:
+ description: Find out more about our store
+ url: 'http://swagger.io'
+paths:
+ /store/inventory/{id}:
+ put:
+ tags:
+ - store
+ summary: Updates the inventory with the given id
+ description: Updates the inventory with the given id and returns it
+ operationId: putInventory
+ parameters:
+ - name: id
+ in: path
+ description: Unique Id of the inventory
+ required: true
+ example: a-b-c-d
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inventory'
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inventory'
+externalDocs:
+ description: Find out more about Swagger
+ url: 'http://swagger.io'
+components:
+ schemas:
+ Inventory:
+ type: object
+ properties:
+ id:
+ type: string
+ details:
+ type: count
\ No newline at end of file
diff --git a/core/src/test/resources/add-prop-put-2.yaml b/core/src/test/resources/add-prop-put-2.yaml
new file mode 100644
index 000000000..392301c8f
--- /dev/null
+++ b/core/src/test/resources/add-prop-put-2.yaml
@@ -0,0 +1,73 @@
+openapi: 3.0.0
+servers:
+ - description: SwaggerHub API Auto Mocking
+ url: https://virtserver.swaggerhub.com/anshul10s/pet-store/1.0.0
+info:
+ description: |
+ This is a sample Petstore server. You can find
+ out more about Swagger at
+ [http://swagger.io](http://swagger.io) or on
+ [irc.freenode.net, #swagger](http://swagger.io/irc/).
+ version: "1.0.0"
+ title: Swagger Petstore
+ termsOfService: 'http://swagger.io/terms/'
+ contact:
+ email: apiteam@swagger.io
+ license:
+ name: Apache 2.0
+ url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
+tags:
+ - name: pet
+ description: Everything about your Pets
+ externalDocs:
+ description: Find out more
+ url: 'http://swagger.io'
+ - name: store
+ description: Access to Petstore orders
+ - name: user
+ description: Operations about user
+ externalDocs:
+ description: Find out more about our store
+ url: 'http://swagger.io'
+paths:
+ /store/inventory/{id}:
+ put:
+ tags:
+ - store
+ summary: Updates the inventory with the given id
+ description: Updates the inventory with the given id and returns it
+ operationId: putInventory
+ parameters:
+ - name: id
+ in: path
+ description: Unique Id of the inventory
+ required: true
+ example: a-b-c-d
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inventory'
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Inventory'
+externalDocs:
+ description: Find out more about Swagger
+ url: 'http://swagger.io'
+components:
+ schemas:
+ Inventory:
+ type: object
+ properties:
+ id:
+ type: string
+ details:
+ type: count
+ extra_info:
+ type: string
\ No newline at end of file
diff --git a/src/test/resources/allOf_diff_1.yaml b/core/src/test/resources/allOf_diff_1.yaml
similarity index 100%
rename from src/test/resources/allOf_diff_1.yaml
rename to core/src/test/resources/allOf_diff_1.yaml
diff --git a/src/test/resources/allOf_diff_2.yaml b/core/src/test/resources/allOf_diff_2.yaml
similarity index 100%
rename from src/test/resources/allOf_diff_2.yaml
rename to core/src/test/resources/allOf_diff_2.yaml
diff --git a/src/test/resources/allOf_diff_3.yaml b/core/src/test/resources/allOf_diff_3.yaml
similarity index 100%
rename from src/test/resources/allOf_diff_3.yaml
rename to core/src/test/resources/allOf_diff_3.yaml
diff --git a/src/test/resources/allOf_diff_4.yaml b/core/src/test/resources/allOf_diff_4.yaml
similarity index 100%
rename from src/test/resources/allOf_diff_4.yaml
rename to core/src/test/resources/allOf_diff_4.yaml
diff --git a/src/test/resources/array_diff_1.yaml b/core/src/test/resources/array_diff_1.yaml
similarity index 100%
rename from src/test/resources/array_diff_1.yaml
rename to core/src/test/resources/array_diff_1.yaml
diff --git a/src/test/resources/array_diff_2.yaml b/core/src/test/resources/array_diff_2.yaml
similarity index 100%
rename from src/test/resources/array_diff_2.yaml
rename to core/src/test/resources/array_diff_2.yaml
diff --git a/src/test/resources/backwardCompatibility/bc_1.yaml b/core/src/test/resources/backwardCompatibility/bc_1.yaml
similarity index 100%
rename from src/test/resources/backwardCompatibility/bc_1.yaml
rename to core/src/test/resources/backwardCompatibility/bc_1.yaml
diff --git a/src/test/resources/backwardCompatibility/bc_2.yaml b/core/src/test/resources/backwardCompatibility/bc_2.yaml
similarity index 99%
rename from src/test/resources/backwardCompatibility/bc_2.yaml
rename to core/src/test/resources/backwardCompatibility/bc_2.yaml
index f8c6d7dc0..179f3ca3f 100644
--- a/src/test/resources/backwardCompatibility/bc_2.yaml
+++ b/core/src/test/resources/backwardCompatibility/bc_2.yaml
@@ -36,9 +36,6 @@ paths:
summary: Add a new pet to the store
description: ''
operationId: addPet
- responses:
- '405':
- description: Invalid input
requestBody:
$ref: '#/components/requestBodies/Pet'
responses:
@@ -48,6 +45,8 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/MyResponseType'
+ '405':
+ description: Invalid input
/pet/findByStatus:
get:
tags:
diff --git a/src/test/resources/backwardCompatibility/bc_3.yaml b/core/src/test/resources/backwardCompatibility/bc_3.yaml
similarity index 99%
rename from src/test/resources/backwardCompatibility/bc_3.yaml
rename to core/src/test/resources/backwardCompatibility/bc_3.yaml
index 456fc0553..30a68ced7 100644
--- a/src/test/resources/backwardCompatibility/bc_3.yaml
+++ b/core/src/test/resources/backwardCompatibility/bc_3.yaml
@@ -36,9 +36,6 @@ paths:
summary: Add a new pet to the store
description: ''
operationId: addPet
- responses:
- '405':
- description: Invalid input
requestBody:
$ref: '#/components/requestBodies/Pet'
responses:
@@ -48,6 +45,8 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/MyResponseType'
+ '405':
+ description: Invalid input
get:
tags:
- pet
diff --git a/src/test/resources/backwardCompatibility/bc_4.yaml b/core/src/test/resources/backwardCompatibility/bc_4.yaml
similarity index 99%
rename from src/test/resources/backwardCompatibility/bc_4.yaml
rename to core/src/test/resources/backwardCompatibility/bc_4.yaml
index 5de739f84..4e6ee3e18 100644
--- a/src/test/resources/backwardCompatibility/bc_4.yaml
+++ b/core/src/test/resources/backwardCompatibility/bc_4.yaml
@@ -36,9 +36,6 @@ paths:
summary: Add a new pet to the store
description: ''
operationId: addPet
- responses:
- '405':
- description: Invalid input
requestBody:
$ref: '#/components/requestBodies/Pet'
responses:
@@ -48,6 +45,8 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/MyResponseType'
+ '405':
+ description: Invalid input
/pet/findByStatus:
get:
tags:
diff --git a/src/test/resources/backwardCompatibility/bc_5.yaml b/core/src/test/resources/backwardCompatibility/bc_5.yaml
similarity index 100%
rename from src/test/resources/backwardCompatibility/bc_5.yaml
rename to core/src/test/resources/backwardCompatibility/bc_5.yaml
diff --git a/src/test/resources/composed_schema_1.yaml b/core/src/test/resources/composed_schema_1.yaml
similarity index 100%
rename from src/test/resources/composed_schema_1.yaml
rename to core/src/test/resources/composed_schema_1.yaml
diff --git a/src/test/resources/composed_schema_2.yaml b/core/src/test/resources/composed_schema_2.yaml
similarity index 100%
rename from src/test/resources/composed_schema_2.yaml
rename to core/src/test/resources/composed_schema_2.yaml
diff --git a/src/test/resources/content_diff_1.yaml b/core/src/test/resources/content_diff_1.yaml
similarity index 100%
rename from src/test/resources/content_diff_1.yaml
rename to core/src/test/resources/content_diff_1.yaml
diff --git a/src/test/resources/content_diff_2.yaml b/core/src/test/resources/content_diff_2.yaml
similarity index 100%
rename from src/test/resources/content_diff_2.yaml
rename to core/src/test/resources/content_diff_2.yaml
diff --git a/src/test/resources/header_1.yaml b/core/src/test/resources/header_1.yaml
similarity index 100%
rename from src/test/resources/header_1.yaml
rename to core/src/test/resources/header_1.yaml
diff --git a/src/test/resources/header_2.yaml b/core/src/test/resources/header_2.yaml
similarity index 100%
rename from src/test/resources/header_2.yaml
rename to core/src/test/resources/header_2.yaml
diff --git a/core/src/test/resources/missing_property_1.yaml b/core/src/test/resources/missing_property_1.yaml
new file mode 100644
index 000000000..070fc748f
--- /dev/null
+++ b/core/src/test/resources/missing_property_1.yaml
@@ -0,0 +1,31 @@
+openapi: 3.0.1
+info:
+ title: Title
+ version: 1.0.0
+ description: Description
+paths:
+ /:
+ get:
+ summary: Simple GET
+ operationId: simpleGet
+ responses:
+ default:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Wrapper'
+ description: Simple GET
+components:
+ schemas:
+ Wrapper:
+ type: object
+ properties:
+ id:
+ type: string
+ childProperty:
+ $ref: '#/components/schemas/ChildProperty'
+ ChildProperty:
+ type: object
+ properties:
+ id:
+ type: string
\ No newline at end of file
diff --git a/core/src/test/resources/missing_property_2.yaml b/core/src/test/resources/missing_property_2.yaml
new file mode 100644
index 000000000..f84504c52
--- /dev/null
+++ b/core/src/test/resources/missing_property_2.yaml
@@ -0,0 +1,24 @@
+openapi: 3.0.1
+info:
+ title: Title
+ version: 1.0.0
+ description: Description
+paths:
+ /:
+ get:
+ summary: Simple GET
+ operationId: simpleGet
+ responses:
+ default:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Wrapper'
+ description: Simple GET
+components:
+ schemas:
+ Wrapper:
+ type: object
+ properties:
+ id:
+ type: string
\ No newline at end of file
diff --git a/src/test/resources/oneOf_diff_1.yaml b/core/src/test/resources/oneOf_diff_1.yaml
similarity index 100%
rename from src/test/resources/oneOf_diff_1.yaml
rename to core/src/test/resources/oneOf_diff_1.yaml
diff --git a/src/test/resources/oneOf_diff_2.yaml b/core/src/test/resources/oneOf_diff_2.yaml
similarity index 100%
rename from src/test/resources/oneOf_diff_2.yaml
rename to core/src/test/resources/oneOf_diff_2.yaml
diff --git a/src/test/resources/oneOf_diff_3.yaml b/core/src/test/resources/oneOf_diff_3.yaml
similarity index 100%
rename from src/test/resources/oneOf_diff_3.yaml
rename to core/src/test/resources/oneOf_diff_3.yaml
diff --git a/src/test/resources/oneOf_discriminator-changed_1.yaml b/core/src/test/resources/oneOf_discriminator-changed_1.yaml
similarity index 100%
rename from src/test/resources/oneOf_discriminator-changed_1.yaml
rename to core/src/test/resources/oneOf_discriminator-changed_1.yaml
diff --git a/src/test/resources/oneOf_discriminator-changed_2.yaml b/core/src/test/resources/oneOf_discriminator-changed_2.yaml
similarity index 100%
rename from src/test/resources/oneOf_discriminator-changed_2.yaml
rename to core/src/test/resources/oneOf_discriminator-changed_2.yaml
diff --git a/core/src/test/resources/oneOf_discriminator-missing_1.yaml b/core/src/test/resources/oneOf_discriminator-missing_1.yaml
new file mode 100644
index 000000000..f541d12ee
--- /dev/null
+++ b/core/src/test/resources/oneOf_discriminator-missing_1.yaml
@@ -0,0 +1,44 @@
+openapi: 3.0.1
+info:
+ title: oneOf test for issue 29
+ version: '1.0'
+servers:
+ - url: 'http://localhost:8000/'
+paths:
+ /state:
+ post:
+ operationId: update
+ requestBody:
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/A'
+ - $ref: '#/components/schemas/B'
+ required: true
+ responses:
+ '201':
+ description: OK
+components:
+ schemas:
+ A:
+ type: object
+ properties:
+ realtype:
+ type: string
+ othertype:
+ type: string
+ message:
+ type: string
+ B:
+ type: object
+ properties:
+ realtype:
+ type: string
+ othertype:
+ type: string
+ description:
+ type: string
+ code:
+ type: integer
+ format: int32
\ No newline at end of file
diff --git a/core/src/test/resources/oneOf_discriminator-missing_2.yaml b/core/src/test/resources/oneOf_discriminator-missing_2.yaml
new file mode 100644
index 000000000..ea456bb79
--- /dev/null
+++ b/core/src/test/resources/oneOf_discriminator-missing_2.yaml
@@ -0,0 +1,44 @@
+openapi: 3.0.1
+info:
+ title: oneOf test for issue 29
+ version: '1.0'
+servers:
+ - url: 'http://localhost:8000/'
+paths:
+ /state:
+ post:
+ operationId: update
+ requestBody:
+ content:
+ application/json:
+ schema:
+ oneOf:
+ - $ref: '#/components/schemas/B'
+ - $ref: '#/components/schemas/A'
+ required: true
+ responses:
+ '201':
+ description: OK
+components:
+ schemas:
+ A:
+ type: object
+ properties:
+ realtype:
+ type: string
+ othertype:
+ type: string
+ message:
+ type: string
+ B:
+ type: object
+ properties:
+ realtype:
+ type: string
+ othertype:
+ type: string
+ description:
+ type: string
+ code:
+ type: integer
+ format: int32
\ No newline at end of file
diff --git a/src/test/resources/parameters_diff.yaml b/core/src/test/resources/parameters_diff.yaml
similarity index 100%
rename from src/test/resources/parameters_diff.yaml
rename to core/src/test/resources/parameters_diff.yaml
diff --git a/src/test/resources/parameters_diff_1.yaml b/core/src/test/resources/parameters_diff_1.yaml
similarity index 100%
rename from src/test/resources/parameters_diff_1.yaml
rename to core/src/test/resources/parameters_diff_1.yaml
diff --git a/src/test/resources/parameters_diff_2.yaml b/core/src/test/resources/parameters_diff_2.yaml
similarity index 100%
rename from src/test/resources/parameters_diff_2.yaml
rename to core/src/test/resources/parameters_diff_2.yaml
diff --git a/src/test/resources/path_1.yaml b/core/src/test/resources/path_1.yaml
similarity index 100%
rename from src/test/resources/path_1.yaml
rename to core/src/test/resources/path_1.yaml
diff --git a/src/test/resources/path_2.yaml b/core/src/test/resources/path_2.yaml
similarity index 100%
rename from src/test/resources/path_2.yaml
rename to core/src/test/resources/path_2.yaml
diff --git a/src/test/resources/path_3.yaml b/core/src/test/resources/path_3.yaml
similarity index 100%
rename from src/test/resources/path_3.yaml
rename to core/src/test/resources/path_3.yaml
diff --git a/core/src/test/resources/petstore_openapi3.yaml b/core/src/test/resources/petstore_openapi3.yaml
new file mode 100644
index 000000000..264dbeabf
--- /dev/null
+++ b/core/src/test/resources/petstore_openapi3.yaml
@@ -0,0 +1,109 @@
+openapi: "3.0.0"
+info:
+ version: 1.0.0
+ title: Swagger Petstore
+ license:
+ name: MIT
+servers:
+ - url: http://petstore.swagger.io/v1
+paths:
+ /pets:
+ get:
+ summary: List all pets
+ operationId: listPets
+ tags:
+ - pets
+ parameters:
+ - name: limit
+ in: query
+ description: How many items to return at one time (max 100)
+ required: false
+ schema:
+ type: integer
+ format: int32
+ responses:
+ '200':
+ description: A paged array of pets
+ headers:
+ x-next:
+ description: A link to the next page of responses
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Pets"
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+ post:
+ summary: Create a pet
+ operationId: createPets
+ tags:
+ - pets
+ responses:
+ '201':
+ description: Null response
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+ /pets/{petId}:
+ get:
+ summary: Info for a specific pet
+ operationId: showPetById
+ tags:
+ - pets
+ parameters:
+ - name: petId
+ in: path
+ required: true
+ description: The id of the pet to retrieve
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Expected response to a valid request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Pets"
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+components:
+ schemas:
+ Pet:
+ required:
+ - id
+ - name
+ properties:
+ id:
+ type: integer
+ format: int64
+ name:
+ type: string
+ tag:
+ type: string
+ Pets:
+ type: array
+ items:
+ $ref: "#/components/schemas/Pet"
+ Error:
+ required:
+ - code
+ - message
+ properties:
+ code:
+ type: integer
+ format: int32
+ message:
+ type: string
diff --git a/core/src/test/resources/petstore_swagger2.yaml b/core/src/test/resources/petstore_swagger2.yaml
new file mode 100644
index 000000000..ecd195aa6
--- /dev/null
+++ b/core/src/test/resources/petstore_swagger2.yaml
@@ -0,0 +1,101 @@
+swagger: "2.0"
+info:
+ version: 1.0.0
+ title: Swagger Petstore
+ license:
+ name: MIT
+host: petstore.swagger.io
+basePath: /v1
+schemes:
+ - http
+consumes:
+ - application/json
+produces:
+ - application/json
+paths:
+ /pets:
+ get:
+ summary: List all pets
+ operationId: listPets
+ tags:
+ - pets
+ parameters:
+ - name: limit
+ in: query
+ description: How many items to return at one time (max 100)
+ required: false
+ type: integer
+ format: int32
+ responses:
+ "200":
+ description: A paged array of pets
+ headers:
+ x-next:
+ type: string
+ description: A link to the next page of responses
+ schema:
+ $ref: '#/definitions/Pets'
+ default:
+ description: unexpected error
+ schema:
+ $ref: '#/definitions/Error'
+ post:
+ summary: Create a pet
+ operationId: createPets
+ tags:
+ - pets
+ responses:
+ "201":
+ description: Null response
+ default:
+ description: unexpected error
+ schema:
+ $ref: '#/definitions/Error'
+ /pets/{petId}:
+ get:
+ summary: Info for a specific pet
+ operationId: showPetById
+ tags:
+ - pets
+ parameters:
+ - name: petId
+ in: path
+ required: true
+ description: The id of the pet to retrieve
+ type: string
+ responses:
+ "200":
+ description: Expected response to a valid request
+ schema:
+ $ref: '#/definitions/Pets'
+ default:
+ description: unexpected error
+ schema:
+ $ref: '#/definitions/Error'
+definitions:
+ Pet:
+ required:
+ - id
+ - name
+ properties:
+ id:
+ type: integer
+ format: int64
+ name:
+ type: string
+ tag:
+ type: string
+ Pets:
+ type: array
+ items:
+ $ref: '#/definitions/Pet'
+ Error:
+ required:
+ - code
+ - message
+ properties:
+ code:
+ type: integer
+ format: int32
+ message:
+ type: string
\ No newline at end of file
diff --git a/src/test/resources/petstore_v2_1.yaml b/core/src/test/resources/petstore_v2_1.yaml
similarity index 100%
rename from src/test/resources/petstore_v2_1.yaml
rename to core/src/test/resources/petstore_v2_1.yaml
diff --git a/src/test/resources/petstore_v2_2.yaml b/core/src/test/resources/petstore_v2_2.yaml
similarity index 100%
rename from src/test/resources/petstore_v2_2.yaml
rename to core/src/test/resources/petstore_v2_2.yaml
diff --git a/src/test/resources/petstore_v2_empty.yaml b/core/src/test/resources/petstore_v2_empty.yaml
similarity index 100%
rename from src/test/resources/petstore_v2_empty.yaml
rename to core/src/test/resources/petstore_v2_empty.yaml
diff --git a/src/test/resources/recursive_model_1.yaml b/core/src/test/resources/recursive_model_1.yaml
similarity index 100%
rename from src/test/resources/recursive_model_1.yaml
rename to core/src/test/resources/recursive_model_1.yaml
diff --git a/src/test/resources/recursive_model_2.yaml b/core/src/test/resources/recursive_model_2.yaml
similarity index 100%
rename from src/test/resources/recursive_model_2.yaml
rename to core/src/test/resources/recursive_model_2.yaml
diff --git a/src/test/resources/request_diff_1.yaml b/core/src/test/resources/request_diff_1.yaml
similarity index 100%
rename from src/test/resources/request_diff_1.yaml
rename to core/src/test/resources/request_diff_1.yaml
diff --git a/src/test/resources/request_diff_2.yaml b/core/src/test/resources/request_diff_2.yaml
similarity index 100%
rename from src/test/resources/request_diff_2.yaml
rename to core/src/test/resources/request_diff_2.yaml
diff --git a/core/src/test/resources/response_schema_added_1.yaml b/core/src/test/resources/response_schema_added_1.yaml
new file mode 100644
index 000000000..d4050c576
--- /dev/null
+++ b/core/src/test/resources/response_schema_added_1.yaml
@@ -0,0 +1,106 @@
+openapi: "3.0.0"
+info:
+ version: 1.0.0
+ title: Swagger Petstore
+ license:
+ name: MIT
+servers:
+ - url: http://petstore.swagger.io/v1
+paths:
+ /pets:
+ get:
+ summary: List all pets
+ operationId: listPets
+ tags:
+ - pets
+ parameters:
+ - name: limit
+ in: query
+ description: How many items to return at one time (max 100)
+ required: false
+ schema:
+ type: integer
+ format: int32
+ responses:
+ '200':
+ description: A paged array of pets
+ headers:
+ x-next:
+ description: A link to the next page of responses
+ schema:
+ type: string
+ content:
+ application/json: {}
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+ post:
+ summary: Create a pet
+ operationId: createPets
+ tags:
+ - pets
+ responses:
+ '201':
+ description: Null response
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+ /pets/{petId}:
+ get:
+ summary: Info for a specific pet
+ operationId: showPetById
+ tags:
+ - pets
+ parameters:
+ - name: petId
+ in: path
+ required: true
+ description: The id of the pet to retrieve
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Expected response to a valid request
+ content:
+ application/json:
+ $ref: "#/components/schemas/Pets"
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+components:
+ schemas:
+ Pet:
+ required:
+ - id
+ - name
+ properties:
+ id:
+ type: integer
+ format: int64
+ name:
+ type: string
+ tag:
+ type: string
+ Pets:
+ type: array
+ items:
+ $ref: "#/components/schemas/Pet"
+ Error:
+ required:
+ - code
+ - message
+ properties:
+ code:
+ type: integer
+ format: int32
+ message:
+ type: string
diff --git a/core/src/test/resources/response_schema_added_2.yaml b/core/src/test/resources/response_schema_added_2.yaml
new file mode 100644
index 000000000..264dbeabf
--- /dev/null
+++ b/core/src/test/resources/response_schema_added_2.yaml
@@ -0,0 +1,109 @@
+openapi: "3.0.0"
+info:
+ version: 1.0.0
+ title: Swagger Petstore
+ license:
+ name: MIT
+servers:
+ - url: http://petstore.swagger.io/v1
+paths:
+ /pets:
+ get:
+ summary: List all pets
+ operationId: listPets
+ tags:
+ - pets
+ parameters:
+ - name: limit
+ in: query
+ description: How many items to return at one time (max 100)
+ required: false
+ schema:
+ type: integer
+ format: int32
+ responses:
+ '200':
+ description: A paged array of pets
+ headers:
+ x-next:
+ description: A link to the next page of responses
+ schema:
+ type: string
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Pets"
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+ post:
+ summary: Create a pet
+ operationId: createPets
+ tags:
+ - pets
+ responses:
+ '201':
+ description: Null response
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+ /pets/{petId}:
+ get:
+ summary: Info for a specific pet
+ operationId: showPetById
+ tags:
+ - pets
+ parameters:
+ - name: petId
+ in: path
+ required: true
+ description: The id of the pet to retrieve
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Expected response to a valid request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Pets"
+ default:
+ description: unexpected error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+components:
+ schemas:
+ Pet:
+ required:
+ - id
+ - name
+ properties:
+ id:
+ type: integer
+ format: int64
+ name:
+ type: string
+ tag:
+ type: string
+ Pets:
+ type: array
+ items:
+ $ref: "#/components/schemas/Pet"
+ Error:
+ required:
+ - code
+ - message
+ properties:
+ code:
+ type: integer
+ format: int32
+ message:
+ type: string
diff --git a/src/test/resources/schema_diff_cache_1.yaml b/core/src/test/resources/schema_diff_cache_1.yaml
similarity index 99%
rename from src/test/resources/schema_diff_cache_1.yaml
rename to core/src/test/resources/schema_diff_cache_1.yaml
index a1c61848c..558ea7ffb 100644
--- a/src/test/resources/schema_diff_cache_1.yaml
+++ b/core/src/test/resources/schema_diff_cache_1.yaml
@@ -36,9 +36,6 @@ paths:
summary: Add a new pet to the store
description: ''
operationId: addPet
- responses:
- '405':
- description: Invalid input
requestBody:
$ref: '#/components/requestBodies/Pet'
responses:
@@ -48,6 +45,8 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/MyResponseType'
+ '405':
+ description: Invalid input
get:
tags:
- pet
diff --git a/src/test/resources/security_diff_1.yaml b/core/src/test/resources/security_diff_1.yaml
similarity index 100%
rename from src/test/resources/security_diff_1.yaml
rename to core/src/test/resources/security_diff_1.yaml
diff --git a/src/test/resources/security_diff_2.yaml b/core/src/test/resources/security_diff_2.yaml
similarity index 100%
rename from src/test/resources/security_diff_2.yaml
rename to core/src/test/resources/security_diff_2.yaml
diff --git a/src/test/resources/security_diff_3.yaml b/core/src/test/resources/security_diff_3.yaml
similarity index 100%
rename from src/test/resources/security_diff_3.yaml
rename to core/src/test/resources/security_diff_3.yaml
diff --git a/mvnw b/mvnw
new file mode 100755
index 000000000..fc7efd17d
--- /dev/null
+++ b/mvnw
@@ -0,0 +1,234 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ #
+ # Look for the Apple JDKs first to preserve the existing behaviour, and then look
+ # for the new JDKs provided by Oracle.
+ #
+ if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
+ #
+ # Apple JDKs
+ #
+ export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
+ fi
+
+ if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
+ #
+ # Apple JDKs
+ #
+ export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
+ fi
+
+ if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
+ #
+ # Oracle JDKs
+ #
+ export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
+ fi
+
+ if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
+ #
+ # Apple JDKs
+ #
+ export JAVA_HOME=`/usr/libexec/java_home`
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Migwn, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+ # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="`which java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+fi
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+ local basedir=$(pwd)
+ local wdir=$(pwd)
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ wdir=$(cd "$wdir/.."; pwd)
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CMD_LINE_ARGS
+
diff --git a/mvnw.cmd b/mvnw.cmd
new file mode 100644
index 000000000..001048081
--- /dev/null
+++ b/mvnw.cmd
@@ -0,0 +1,145 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+set MAVEN_CMD_LINE_ARGS=%MAVEN_CONFIG% %*
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+
+set WRAPPER_JAR=""%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar""
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/pom.xml b/pom.xml
index 6651ef43f..56c26bdc8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,14 +7,18 @@
7
- com.qdesrame
- openapi-diff
+
+ core
+ cli
+
+
+ com.github.joschi.openapi-diff
+ parent
2.0.0-SNAPSHOT
- jar
+ pom
- openapi-diff
- Utility for comparing two OpenAPI specifications.
- http://maven.apache.org
+ openapi-diff-parent
+ Parent POM for OpenAPI-Diff
@@ -28,12 +32,17 @@
qdesrame
quen2404@gmail.com
+
+ Jochen Schalanda
+ jochen@schalanda.name
+ https://github.com/joschi
+
- scm:git:http://github.com/quen2404/openapi-diff.git
- scm:git:http://github.com/quen2404/openapi-diff.git
- https://github.com/quen2404/openapi-diff
+ scm:git:https://github.com/joschi/openapi-diff.git
+ scm:git:https://github.com/joschi/openapi-diff.git
+ https://github.com/joschi/openapi-diff
HEAD
@@ -51,88 +60,109 @@
+ 1.8
+ 1.8
UTF-8
+ UTF-8
github
- 2.22.2
- 5.5.2
- 1.3.2
- 3.14.0
+
+ 2.0.21
+ 1.7.30
-
-
- io.swagger.parser.v3
- swagger-parser-v3
- 2.0.17
-
-
- com.j2html
- j2html
- 1.4.0
-
-
- org.junit.jupiter
- junit-jupiter-engine
- ${junit.jupiter.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-api
- ${junit.jupiter.version}
- test
-
-
- org.junit.platform
- junit-platform-runner
- ${junit.platform.version}
- test
-
-
- org.junit.platform
- junit-platform-launcher
- ${junit.platform.version}
- test
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
- org.apache.commons
- commons-collections4
- 4.4
-
-
- commons-cli
- commons-cli
- 1.4
-
-
- org.slf4j
- slf4j-api
- 1.7.30
-
-
- org.slf4j
- slf4j-log4j12
- 1.7.30
-
-
- commons-httpclient
- commons-httpclient
- 3.1
-
-
- org.projectlombok
- lombok
- 1.18.10
-
-
+
+
+
+ org.junit
+ junit-bom
+ 5.6.2
+ pom
+ import
+
+
+ io.swagger.parser.v3
+ swagger-parser-v3
+ ${swagger-parser.version}
+
+
+ io.swagger.parser.v3
+ swagger-parser
+ ${swagger-parser.version}
+
+
+ io.swagger.parser.v3
+ swagger-parser-v2-converter
+ ${swagger-parser.version}
+
+
+ com.j2html
+ j2html
+ 1.4.0
+
+
+ org.apache.commons
+ commons-collections4
+ 4.4
+
+
+ commons-cli
+ commons-cli
+ 1.4
+
+
+ org.apache.commons
+ commons-lang3
+ 3.11
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ org.slf4j
+ slf4j-log4j12
+ ${slf4j.version}
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.1
+
+
+ org.projectlombok
+ lombok
+ 1.18.12
+ provided
+
+
+ org.assertj
+ assertj-core
+ 3.16.1
+ test
+
+
+ org.slf4j
+ slf4j-simple
+ ${slf4j.version}
+ test
+
+
+
+
+
+ docker
+
+ true
+ true
+ true
+ true
+ true
+ true
+
+
release-sign-artifacts
@@ -148,12 +178,10 @@
maven-gpg-plugin
1.6
-
-
- --pinentry-mode
- loopback
-
-
+
+ --pinentry-mode
+ loopback
+
@@ -170,20 +198,68 @@
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.1
+
+
+ org.apache.maven.plugins
+ maven-release-plugin
+ 2.5.3
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.2.0
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.3.0
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
+
+ com.coveo
+ fmt-maven-plugin
+ 2.9.1
+
+
+ io.github.phillipuniverse
+ githook-maven-plugin
+ 1.0.5
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.6
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 2.8.2
+
+
+
+ org.apache.maven.plugins
maven-compiler-plugin
-
- 1.8
- 1.8
- UTF-8
-
- 3.8.1
org.apache.maven.plugins
maven-source-plugin
- 3.1.0
package
@@ -196,21 +272,15 @@
org.apache.maven.plugins
maven-release-plugin
- 2.5.3
-
@{project.version}
true
- releases
-
-
+ release
-
org.apache.maven.plugins
maven-javadoc-plugin
- 3.1.1
true
true
@@ -227,58 +297,13 @@
-
- maven-assembly-plugin
-
-
-
- com.qdesrame.openapi.diff.Main
-
-
-
- jar-with-dependencies
-
-
-
-
- make-assembly
- package
-
- single
-
-
-
-
org.apache.maven.plugins
maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
-
- **/Test*.java
- **/*Test.java
- **/*Tests.java
- **/*TestCase.java
-
- false
-
-
-
- org.junit.platform
- junit-platform-surefire-provider
- ${junit.platform.version}
-
-
- org.junit.jupiter
- junit-jupiter-engine
- ${junit.jupiter.version}
-
-
com.coveo
fmt-maven-plugin
- 2.9
@@ -290,7 +315,6 @@
io.github.phillipuniverse
githook-maven-plugin
- 1.0.4
diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/CacheKey.java b/src/main/java/com/qdesrame/openapi/diff/compare/CacheKey.java
deleted file mode 100644
index 7ce970da2..000000000
--- a/src/main/java/com/qdesrame/openapi/diff/compare/CacheKey.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.qdesrame.openapi.diff.compare;
-
-import com.qdesrame.openapi.diff.model.DiffContext;
-import lombok.Getter;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-
-@Getter
-public final class CacheKey {
- private final String left;
- private final String right;
- private final DiffContext context;
-
- public CacheKey(final String left, final String right, final DiffContext context) {
- this.left = left;
- this.right = right;
- this.context = context;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
-
- if (o == null || getClass() != o.getClass()) return false;
-
- CacheKey cacheKey = (CacheKey) o;
-
- return new EqualsBuilder()
- .append(left, cacheKey.left)
- .append(right, cacheKey.right)
- .append(context, cacheKey.context)
- .isEquals();
- }
-
- @Override
- public int hashCode() {
- return new HashCodeBuilder(17, 37).append(left).append(right).append(context).toHashCode();
- }
-}
diff --git a/src/main/java/com/qdesrame/openapi/diff/output/Render.java b/src/main/java/com/qdesrame/openapi/diff/output/Render.java
deleted file mode 100644
index bf866312a..000000000
--- a/src/main/java/com/qdesrame/openapi/diff/output/Render.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.qdesrame.openapi.diff.output;
-
-import com.qdesrame.openapi.diff.model.ChangedOpenApi;
-
-public interface Render {
-
- String render(ChangedOpenApi diff);
-}