diff --git a/ercoremodel/src/main/java/uk/co/compendiumdev/thingifier/core/query/QueryFilterParams.java b/ercoremodel/src/main/java/uk/co/compendiumdev/thingifier/core/query/QueryFilterParams.java
index 95480fd7..bef3ecfb 100644
--- a/ercoremodel/src/main/java/uk/co/compendiumdev/thingifier/core/query/QueryFilterParams.java
+++ b/ercoremodel/src/main/java/uk/co/compendiumdev/thingifier/core/query/QueryFilterParams.java
@@ -39,6 +39,16 @@ public void add(FilterBy aFilterBy) {
filterBys.add(aFilterBy);
}
+ public void addAll(final QueryFilterParams params) {
+ if (params == null) {
+ return;
+ }
+
+ for (FilterBy filterBy : params.toList()) {
+ add(new FilterBy(filterBy.fieldName, filterBy.filterOperation + filterBy.fieldValue));
+ }
+ }
+
public FilterBy get(int i) {
return filterBys.get(i);
}
diff --git a/pom.xml b/pom.xml
index d9c97fca..606a48cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
UTF-8
1.5.6-SNAPSHOT
- 2.2.27
+ 2.2.52
2.8.6
3.53.2.0
2.6
diff --git a/swaggerizer/src/test/java/uk/co/compendiumdev/thingifier/swaggerizer/SwaggerizerTest.java b/swaggerizer/src/test/java/uk/co/compendiumdev/thingifier/swaggerizer/SwaggerizerTest.java
index 47e8fee1..c58e36f0 100644
--- a/swaggerizer/src/test/java/uk/co/compendiumdev/thingifier/swaggerizer/SwaggerizerTest.java
+++ b/swaggerizer/src/test/java/uk/co/compendiumdev/thingifier/swaggerizer/SwaggerizerTest.java
@@ -1,5 +1,8 @@
package uk.co.compendiumdev.thingifier.swaggerizer;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import uk.co.compendiumdev.thingifier.Thingifier;
import uk.co.compendiumdev.thingifier.api.docgen.RoutingDefinition;
@@ -26,6 +29,53 @@ public void canCreateSwagger() {
apiDefn.addServer("http://localhost:4567", "local execution");
apiDefn.setVersion("1.0.1");
- System.out.println(new Swaggerizer(apiDefn).asJson());
+ String swagger = new Swaggerizer(apiDefn).asJson();
+
+ Assertions.assertTrue(openApiVersion(swagger).startsWith("3.1."));
+ Assertions.assertTrue(swagger.contains("\"x-query-operation\""));
+ Assertions.assertTrue(swagger.contains("application/x-www-form-urlencoded"));
+ }
+
+ @Test
+ public void canCreateOpenApi30Swagger() {
+ Thingifier t = new TodoListThingifierTestModel().get();
+
+ ThingifierApiDocumentationDefn apiDefn = new ThingifierApiDocumentationDefn();
+ apiDefn.setThingifier(t);
+ apiDefn.setVersion("1.0.1");
+
+ String swagger = new Swaggerizer(apiDefn).asJson(OpenApiSpecificationVersion.OPENAPI_3_0);
+
+ Assertions.assertTrue(openApiVersion(swagger).startsWith("3.0."));
+ Assertions.assertTrue(swagger.contains("\"x-query-operation\""));
+ Assertions.assertTrue(swagger.contains("application/x-www-form-urlencoded"));
+ }
+
+ @Test
+ public void canCreateOpenApi32Swagger() {
+ Thingifier t = new TodoListThingifierTestModel().get();
+
+ ThingifierApiDocumentationDefn apiDefn = new ThingifierApiDocumentationDefn();
+ apiDefn.setThingifier(t);
+ apiDefn.setVersion("1.0.1");
+
+ String swagger = new Swaggerizer(apiDefn).asJson(OpenApiSpecificationVersion.OPENAPI_3_2);
+ JsonObject document = JsonParser.parseString(swagger).getAsJsonObject();
+ JsonObject todos = document.getAsJsonObject("paths").getAsJsonObject("/todos");
+ JsonObject query = todos.getAsJsonObject("query");
+
+ Assertions.assertEquals("3.2.0", openApiVersion(swagger));
+ Assertions.assertTrue(todos.has("query"));
+ Assertions.assertFalse(swagger.contains("\"x-query-operation\""));
+ Assertions.assertFalse(swagger.contains("\"x-http-method\""));
+ Assertions.assertFalse(swagger.contains("\"x-query-content-types\""));
+ Assertions.assertTrue(
+ query.getAsJsonObject("requestBody")
+ .getAsJsonObject("content")
+ .has("application/x-www-form-urlencoded"));
+ }
+
+ private String openApiVersion(final String swagger) {
+ return JsonParser.parseString(swagger).getAsJsonObject().get("openapi").getAsString();
}
}
diff --git a/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/ApiDocumentationPage.java b/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/ApiDocumentationPage.java
index c6b15375..59c9dab3 100644
--- a/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/ApiDocumentationPage.java
+++ b/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/ApiDocumentationPage.java
@@ -52,6 +52,9 @@ private void appendHeader(final StringBuilder html) {
html.append(" Swagger UI\n");
html.append(" Download OpenAPI\n");
html.append(" Raw OpenAPI JSON\n");
+ html.append(" OpenAPI 3.1 JSON\n");
+ html.append(" OpenAPI 3.2 JSON\n");
+ html.append(" OpenAPI 3.0 JSON\n");
html.append(" \n");
html.append("
").append(escape(title())).append(" API Documentation
\n");
if (!description().isEmpty()) {
diff --git a/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/CrudUiController.java b/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/CrudUiController.java
index 1191a8a7..58dd7c95 100644
--- a/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/CrudUiController.java
+++ b/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/CrudUiController.java
@@ -2,6 +2,7 @@
import java.util.LinkedHashMap;
import java.util.Map;
+import uk.co.compendiumdev.thingifier.swaggerizer.OpenApiSpecificationVersion;
import uk.co.compendiumdev.thingifier.yaml.ThingifierYamlException;
public final class CrudUiController {
@@ -188,6 +189,11 @@ public UiHttpResponse openApiJson() {
200, new OpenApiDocumentation(workspace.snapshot()).openApiJson());
}
+ public UiHttpResponse openApiJson(final OpenApiSpecificationVersion version) {
+ return UiHttpResponse.json(
+ 200, new OpenApiDocumentation(workspace.snapshot()).openApiJson(version));
+ }
+
public UiHttpResponse downloadOpenApi(final boolean permissive) {
OpenApiDocumentation openApi = new OpenApiDocumentation(workspace.snapshot());
Map headers = new LinkedHashMap<>();
diff --git a/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/OpenApiDocumentation.java b/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/OpenApiDocumentation.java
index 145705a3..1140b6c2 100644
--- a/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/OpenApiDocumentation.java
+++ b/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/OpenApiDocumentation.java
@@ -2,6 +2,7 @@
import java.util.Locale;
import uk.co.compendiumdev.thingifier.api.docgen.ThingifierApiDocumentationDefn;
+import uk.co.compendiumdev.thingifier.swaggerizer.OpenApiSpecificationVersion;
import uk.co.compendiumdev.thingifier.swaggerizer.Swaggerizer;
public final class OpenApiDocumentation {
@@ -15,11 +16,16 @@ public OpenApiDocumentation(final WorkspaceSnapshot snapshot) {
}
public String openApiJson() {
- return new Swaggerizer(apiDefinition()).asJson();
+ return openApiJson(OpenApiSpecificationVersion.OPENAPI_3_1);
+ }
+
+ public String openApiJson(final OpenApiSpecificationVersion version) {
+ return new Swaggerizer(apiDefinition()).asJson(version);
}
public String permissiveOpenApiJson() {
- return new Swaggerizer(apiDefinition()).asJson(true);
+ return new Swaggerizer(apiDefinition())
+ .asJson(OpenApiSpecificationVersion.OPENAPI_3_1, true);
}
public String downloadFilename(final boolean permissive) {
diff --git a/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/SwaggerUiPage.java b/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/SwaggerUiPage.java
index 0b3f3b50..44372170 100644
--- a/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/SwaggerUiPage.java
+++ b/thingifier-crud-ui/src/main/java/uk/co/compendiumdev/thingifier/crudui/SwaggerUiPage.java
@@ -33,7 +33,13 @@ public String html() {
+ "