diff --git a/core/src/main/java/io/smallrye/openapi/api/models/ComponentsImpl.java b/core/src/main/java/io/smallrye/openapi/api/models/ComponentsImpl.java index cceb4e47c..aad573f24 100644 --- a/core/src/main/java/io/smallrye/openapi/api/models/ComponentsImpl.java +++ b/core/src/main/java/io/smallrye/openapi/api/models/ComponentsImpl.java @@ -4,6 +4,7 @@ import java.util.Map; import org.eclipse.microprofile.openapi.models.Components; +import org.eclipse.microprofile.openapi.models.PathItem; import org.eclipse.microprofile.openapi.models.callbacks.Callback; import org.eclipse.microprofile.openapi.models.examples.Example; import org.eclipse.microprofile.openapi.models.headers.Header; @@ -30,6 +31,7 @@ public class ComponentsImpl extends ExtensibleImpl implements Compon private Map securitySchemes; private Map links; private Map callbacks; + private Map pathItems; /** * @see org.eclipse.microprofile.openapi.models.Components#getSchemas() @@ -338,4 +340,25 @@ public void removeCallback(String key) { ModelUtil.remove(this.callbacks, key); } + @Override + public Map getPathItems() { + return ModelUtil.unmodifiableMap(this.pathItems); + } + + @Override + public void setPathItems(Map pathItems) { + this.pathItems = ModelUtil.replace(pathItems, LinkedHashMap::new); + } + + @Override + public Components addPathItem(String name, PathItem pathItem) { + this.pathItems = ModelUtil.add(name, pathItem, this.pathItems, LinkedHashMap::new); + return this; + } + + @Override + public void removePathItem(String name) { + ModelUtil.remove(this.pathItems, name); + } + } \ No newline at end of file diff --git a/core/src/main/java/io/smallrye/openapi/api/models/PathItemImpl.java b/core/src/main/java/io/smallrye/openapi/api/models/PathItemImpl.java index 851318635..b28d51876 100644 --- a/core/src/main/java/io/smallrye/openapi/api/models/PathItemImpl.java +++ b/core/src/main/java/io/smallrye/openapi/api/models/PathItemImpl.java @@ -10,6 +10,7 @@ import org.eclipse.microprofile.openapi.models.parameters.Parameter; import org.eclipse.microprofile.openapi.models.servers.Server; +import io.smallrye.openapi.runtime.io.ReferenceType; import io.smallrye.openapi.runtime.util.ModelUtil; /** @@ -44,6 +45,9 @@ public String getRef() { */ @Override public void setRef(String ref) { + if (ref != null && !ref.contains("/")) { + ref = ReferenceType.PATH_ITEMS.referenceOf(ref); + } this.ref = ref; } diff --git a/core/src/main/java/io/smallrye/openapi/runtime/io/ComponentsIO.java b/core/src/main/java/io/smallrye/openapi/runtime/io/ComponentsIO.java index 4fce121e3..9a5071117 100644 --- a/core/src/main/java/io/smallrye/openapi/runtime/io/ComponentsIO.java +++ b/core/src/main/java/io/smallrye/openapi/runtime/io/ComponentsIO.java @@ -20,6 +20,7 @@ public class ComponentsIO extends ModelIO context) { super(context, Names.COMPONENTS, Names.create(Components.class)); @@ -64,6 +65,7 @@ public Components readObject(O node) { components.setResponses(apiResponseIO().readMap(jsonIO().getValue(node, PROP_RESPONSES))); components.setSchemas(schemaIO().readMap(jsonIO().getValue(node, PROP_SCHEMAS))); components.setSecuritySchemes(securitySchemeIO().readMap(jsonIO().getValue(node, PROP_SECURITY_SCHEMES))); + components.setPathItems(pathItemIO().readMap(jsonIO().getValue(node, PROP_PATH_ITEMS))); components.setExtensions(extensionIO().readMap(node)); return components; } @@ -79,6 +81,7 @@ public Optional write(Components model) { setIfPresent(node, PROP_SECURITY_SCHEMES, securitySchemeIO().write(model.getSecuritySchemes())); setIfPresent(node, PROP_LINKS, linkIO().write(model.getLinks())); setIfPresent(node, PROP_CALLBACKS, callbackIO().write(model.getCallbacks())); + setIfPresent(node, PROP_PATH_ITEMS, pathItemIO().write(model.getPathItems())); setAllIfPresent(node, extensionIO().write(model)); return node; }).map(jsonIO()::buildObject); diff --git a/core/src/main/java/io/smallrye/openapi/runtime/io/ReferenceType.java b/core/src/main/java/io/smallrye/openapi/runtime/io/ReferenceType.java index 444b85ef7..f982ce0fa 100644 --- a/core/src/main/java/io/smallrye/openapi/runtime/io/ReferenceType.java +++ b/core/src/main/java/io/smallrye/openapi/runtime/io/ReferenceType.java @@ -20,7 +20,8 @@ public enum ReferenceType { RESPONSE("responses"), PARAMETER("parameters"), EXAMPLE("examples"), - REQUEST_BODY("requestBodies"); + REQUEST_BODY("requestBodies"), + PATH_ITEMS("pathItems"); private static final Pattern COMPONENT_KEY_PATTERN = Pattern.compile("^[a-zA-Z0-9\\.\\-_]+$"); public static final String PROP_ANNOTATION = "ref";