diff --git a/core/src/main/java/io/smallrye/openapi/api/models/OpenAPIImpl.java b/core/src/main/java/io/smallrye/openapi/api/models/OpenAPIImpl.java index 93afcd468..4603b37da 100644 --- a/core/src/main/java/io/smallrye/openapi/api/models/OpenAPIImpl.java +++ b/core/src/main/java/io/smallrye/openapi/api/models/OpenAPIImpl.java @@ -1,11 +1,14 @@ package io.smallrye.openapi.api.models; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import org.eclipse.microprofile.openapi.models.Components; import org.eclipse.microprofile.openapi.models.ExternalDocumentation; import org.eclipse.microprofile.openapi.models.OpenAPI; +import org.eclipse.microprofile.openapi.models.PathItem; import org.eclipse.microprofile.openapi.models.Paths; import org.eclipse.microprofile.openapi.models.info.Info; import org.eclipse.microprofile.openapi.models.security.SecurityRequirement; @@ -26,6 +29,7 @@ public class OpenAPIImpl extends ExtensibleImpl implements OpenAPI, Mod private List security; private List tags; private Paths paths; + private Map webhooks; private Components components; /** @@ -226,4 +230,25 @@ public Components getComponents() { public void setComponents(Components components) { this.components = components; } + + @Override + public Map getWebhooks() { + return ModelUtil.unmodifiableMap(this.webhooks); + } + + @Override + public void setWebhooks(Map webhooks) { + this.webhooks = ModelUtil.replace(webhooks, LinkedHashMap::new); + } + + @Override + public OpenAPI addWebhook(String name, PathItem webhook) { + this.webhooks = ModelUtil.add(name, webhook, this.webhooks, LinkedHashMap::new); + return this; + } + + @Override + public void removeWebhook(String name) { + ModelUtil.remove(this.webhooks, name); + } } diff --git a/core/src/main/java/io/smallrye/openapi/runtime/io/OpenAPIDefinitionIO.java b/core/src/main/java/io/smallrye/openapi/runtime/io/OpenAPIDefinitionIO.java index bca861c21..ff002e10f 100644 --- a/core/src/main/java/io/smallrye/openapi/runtime/io/OpenAPIDefinitionIO.java +++ b/core/src/main/java/io/smallrye/openapi/runtime/io/OpenAPIDefinitionIO.java @@ -19,6 +19,7 @@ public class OpenAPIDefinitionIO extends Mo public static final String PROP_SECURITY_SETS = "securitySets"; public static final String PROP_SERVERS = "servers"; public static final String PROP_TAGS = "tags"; + public static final String PROP_WEBHOOKS = "webhooks"; public OpenAPIDefinitionIO(IOContext context) { super(context, Names.OPENAPI_DEFINITION, Names.create(OpenAPI.class)); @@ -60,6 +61,7 @@ public OpenAPI readObject(O node) { openApi.setExternalDocs(extDocIO().readValue(jsonIO().getValue(node, PROP_EXTERNAL_DOCS))); openApi.setComponents(componentsIO().readValue(jsonIO().getValue(node, PROP_COMPONENTS))); openApi.setPaths(pathsIO().readValue(jsonIO().getValue(node, PROP_PATHS))); + openApi.setWebhooks(pathItemIO().readMap(jsonIO().getValue(node, PROP_WEBHOOKS))); openApi.setExtensions(extensionIO().readMap(node)); return openApi; } @@ -74,6 +76,7 @@ public Optional write(OpenAPI model) { setIfPresent(node, PROP_SECURITY, securityIO().write(model.getSecurity())); setIfPresent(node, PROP_TAGS, tagIO().write(model.getTags())); setIfPresent(node, PROP_PATHS, pathsIO().write(model.getPaths())); + setIfPresent(node, PROP_WEBHOOKS, pathItemIO().write(model.getWebhooks())); setIfPresent(node, PROP_COMPONENTS, componentsIO().write(model.getComponents())); setAllIfPresent(node, extensionIO().write(model)); return node; diff --git a/core/src/main/java/io/smallrye/openapi/runtime/io/PathItemIO.java b/core/src/main/java/io/smallrye/openapi/runtime/io/PathItemIO.java index 80bb755d3..093f0f929 100644 --- a/core/src/main/java/io/smallrye/openapi/runtime/io/PathItemIO.java +++ b/core/src/main/java/io/smallrye/openapi/runtime/io/PathItemIO.java @@ -14,7 +14,7 @@ import io.smallrye.openapi.api.models.PathItemImpl; -public class PathItemIO extends ModelIO +public class PathItemIO extends MapModelIO implements ReferenceIO { private static final String PROP_DESCRIPTION = "description";