This is an automated email from the ASF dual-hosted git repository. jamesbognar pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/juneau.git
commit 49b93f9d98dde55f545c78672c95ed831ec58cc6 Author: James Bognar <[email protected]> AuthorDate: Wed Jul 22 14:26:31 2026 -0400 TODO-280: add missing collection-family API methods to DTO beans API-01 fix from the reactor quality grid: bring List/Map properties to the full 4-method family (setX(X...), setX(Collection<X>), addX(X...), addX(Collection<X>)) plus keyed Map single-entry adders across juneau-bean-mcp, juneau-bean-jsonapi, juneau-bean-jsonschema, and juneau-bean-openapi-v3. Pure-additive (new overloads only; no existing signature changed or removed); round-trip marshalling stays byte-identical. 21 files, 61 new methods. Co-authored-by: Cursor <[email protected]> --- .../juneau/bean/jsonapi/JsonApiDocument.java | 76 +++++++++ .../apache/juneau/bean/jsonapi/JsonApiError.java | 29 ++++ .../apache/juneau/bean/jsonapi/JsonApiLink.java | 15 ++ .../juneau/bean/jsonapi/JsonApiRelationship.java | 29 ++++ .../juneau/bean/jsonapi/JsonApiResource.java | 28 ++++ .../bean/jsonapi/JsonApiResourceIdentifier.java | 15 ++ .../apache/juneau/bean/jsonapi/JsonApiVersion.java | 15 ++ .../apache/juneau/bean/jsonschema/JsonSchema.java | 173 +++++++++++++++++++++ .../apache/juneau/bean/mcp/CallToolRequest.java | 15 ++ .../org/apache/juneau/bean/mcp/CallToolResult.java | 38 +++++ .../apache/juneau/bean/mcp/ClientCapabilities.java | 29 ++++ .../apache/juneau/bean/mcp/GetPromptRequest.java | 15 ++ .../apache/juneau/bean/mcp/GetPromptResult.java | 38 +++++ .../org/apache/juneau/bean/mcp/JsonSchema.java | 66 ++++++++ .../apache/juneau/bean/mcp/ListPromptsResult.java | 38 +++++ .../juneau/bean/mcp/ListResourcesResult.java | 38 +++++ .../apache/juneau/bean/mcp/ListToolsResult.java | 38 +++++ .../java/org/apache/juneau/bean/mcp/Prompt.java | 38 +++++ .../apache/juneau/bean/mcp/ReadResourceResult.java | 38 +++++ .../apache/juneau/bean/mcp/ServerCapabilities.java | 15 ++ .../org/apache/juneau/bean/openapi3/OpenApi.java | 22 +++ 21 files changed, 808 insertions(+) diff --git a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiDocument.java b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiDocument.java index 029efbd7f2..5d42ecf42a 100644 --- a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiDocument.java +++ b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiDocument.java @@ -129,6 +129,17 @@ public class JsonApiDocument { return this; } + /** + * Bean property setter: <property>errors</property>. + * + * @param value The new value for this property. + * @return This object. + */ + public JsonApiDocument setErrors(JsonApiError...value) { + errors = list(value); + return this; + } + /** * Bean property appender: <property>errors</property>. * @@ -142,6 +153,19 @@ public class JsonApiDocument { return this; } + /** + * Bean property appender: <property>errors</property>. + * + * @param value The error objects to append. + * @return This object. + */ + public JsonApiDocument addErrors(Collection<JsonApiError> value) { + if (errors == null) + errors = list(); + errors.addAll(value); + return this; + } + /** * Bean property getter: <property>meta</property>. * @@ -160,6 +184,20 @@ public class JsonApiDocument { return this; } + /** + * Convenience method to add a single meta entry. + * + * @param name The meta key. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The meta value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiDocument putMeta(String name, Object value) { + if (meta == null) + meta = map(); + meta.put(name, value); + return this; + } + /** * Bean property getter: <property>jsonapi</property>. * @@ -203,6 +241,20 @@ public class JsonApiDocument { return this; } + /** + * Convenience method to add a single link. + * + * @param name The link name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The link value (a {@link String} URL or a {@link JsonApiLink} object). Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiDocument putLink(String name, Object value) { + if (links == null) + links = map(); + links.put(name, value); + return this; + } + /** * Bean property getter: <property>included</property>. * @@ -221,6 +273,17 @@ public class JsonApiDocument { return this; } + /** + * Bean property setter: <property>included</property>. + * + * @param value The new value for this property. + * @return This object. + */ + public JsonApiDocument setIncluded(JsonApiResource...value) { + included = list(value); + return this; + } + /** * Bean property appender: <property>included</property>. * @@ -234,6 +297,19 @@ public class JsonApiDocument { return this; } + /** + * Bean property appender: <property>included</property>. + * + * @param value The resource objects to append. + * @return This object. + */ + public JsonApiDocument addIncluded(Collection<JsonApiResource> value) { + if (included == null) + included = list(); + included.addAll(value); + return this; + } + /** * Validates document-level invariants per the JSON:API spec. * diff --git a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiError.java b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiError.java index 9ad8666c60..1b02518d08 100644 --- a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiError.java +++ b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiError.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.jsonapi; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -92,6 +93,20 @@ public class JsonApiError { return this; } + /** + * Convenience method to add a single link. + * + * @param name The link name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The link value (a {@link String} URL or a {@link JsonApiLink} object). Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiError putLink(String name, Object value) { + if (links == null) + links = map(); + links.put(name, value); + return this; + } + /** * Bean property getter: <property>status</property>. * @@ -206,6 +221,20 @@ public class JsonApiError { return this; } + /** + * Convenience method to add a single meta entry. + * + * @param name The meta key. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The meta value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiError putMeta(String name, Object value) { + if (meta == null) + meta = map(); + meta.put(name, value); + return this; + } + @Override /* Overridden from Object */ public String toString() { return Json.of(this); diff --git a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiLink.java b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiLink.java index aae1f0d939..37ae2cb1a4 100644 --- a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiLink.java +++ b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiLink.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.jsonapi; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -193,6 +194,20 @@ public class JsonApiLink { return this; } + /** + * Convenience method to add a single meta entry. + * + * @param name The meta key. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The meta value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiLink putMeta(String name, Object value) { + if (meta == null) + meta = map(); + meta.put(name, value); + return this; + } + @Override /* Overridden from Object */ public String toString() { return Json.of(this); diff --git a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiRelationship.java b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiRelationship.java index e1e0bad022..d135b56988 100644 --- a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiRelationship.java +++ b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiRelationship.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.jsonapi; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -123,6 +124,20 @@ public class JsonApiRelationship { return this; } + /** + * Convenience method to add a single link. + * + * @param name The link name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The link value (a {@link String} URL or a {@link JsonApiLink} object). Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiRelationship putLink(String name, Object value) { + if (links == null) + links = map(); + links.put(name, value); + return this; + } + /** * Bean property getter: <property>meta</property>. * @@ -141,6 +156,20 @@ public class JsonApiRelationship { return this; } + /** + * Convenience method to add a single meta entry. + * + * @param name The meta key. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The meta value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiRelationship putMeta(String name, Object value) { + if (meta == null) + meta = map(); + meta.put(name, value); + return this; + } + @Override /* Overridden from Object */ public String toString() { return Json.of(this); diff --git a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiResource.java b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiResource.java index 9fcdc610bb..37de6a4566 100644 --- a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiResource.java +++ b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiResource.java @@ -207,6 +207,20 @@ public class JsonApiResource { return this; } + /** + * Convenience method to add a single link. + * + * @param name The link name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The link value (a {@link String} URL or a {@link JsonApiLink} object). Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiResource putLink(String name, Object value) { + if (links == null) + links = map(); + links.put(name, value); + return this; + } + /** * Bean property getter: <property>meta</property>. * @@ -225,6 +239,20 @@ public class JsonApiResource { return this; } + /** + * Convenience method to add a single meta entry. + * + * @param name The meta key. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The meta value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiResource putMeta(String name, Object value) { + if (meta == null) + meta = map(); + meta.put(name, value); + return this; + } + @Override /* Overridden from Object */ public String toString() { return Json.of(this); diff --git a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiResourceIdentifier.java b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiResourceIdentifier.java index 8d796b89fa..fd90a21d81 100644 --- a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiResourceIdentifier.java +++ b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiResourceIdentifier.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.jsonapi; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -113,6 +114,20 @@ public class JsonApiResourceIdentifier { return this; } + /** + * Convenience method to add a single meta entry. + * + * @param name The meta key. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The meta value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiResourceIdentifier putMeta(String name, Object value) { + if (meta == null) + meta = map(); + meta.put(name, value); + return this; + } + @Override /* Overridden from Object */ public String toString() { return Json.of(this); diff --git a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiVersion.java b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiVersion.java index 2e4e6f6516..91f7969deb 100644 --- a/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiVersion.java +++ b/juneau-bean/juneau-bean-jsonapi/src/main/java/org/apache/juneau/bean/jsonapi/JsonApiVersion.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.jsonapi; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -91,6 +92,20 @@ public class JsonApiVersion { return this; } + /** + * Convenience method to add a single meta entry. + * + * @param name The meta key. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The meta value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public JsonApiVersion putMeta(String name, Object value) { + if (meta == null) + meta = map(); + meta.put(name, value); + return this; + } + @Override /* Overridden from Object */ public String toString() { return Json.of(this); diff --git a/juneau-bean/juneau-bean-jsonschema/src/main/java/org/apache/juneau/bean/jsonschema/JsonSchema.java b/juneau-bean/juneau-bean-jsonschema/src/main/java/org/apache/juneau/bean/jsonschema/JsonSchema.java index 8dce1552b1..2a6ffdf1d7 100644 --- a/juneau-bean/juneau-bean-jsonschema/src/main/java/org/apache/juneau/bean/jsonschema/JsonSchema.java +++ b/juneau-bean/juneau-bean-jsonschema/src/main/java/org/apache/juneau/bean/jsonschema/JsonSchema.java @@ -437,6 +437,18 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property appender: <property>allOf</property>. + * + * @param value The collection of items to append to the <property>allOf</property> property on this bean. + * @return This object. + */ + public SELF addAllOf(Collection<JsonSchema<?>> value) { + setMasterOn(value); + this.allOf = addAll(this.allOf, value == null ? null : new ArrayList<>(value)); + return self(); + } + /** * Bean property appender: <property>anyOf</property>. * @@ -452,6 +464,20 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property appender: <property>anyOf</property>. + * + * @param value The collection of items to append to the <property>anyOf</property> property on this bean. + * @return This object. + */ + public SELF addAnyOf(Collection<JsonSchema<?>> value) { + if (this.anyOf == null) + this.anyOf = new LinkedList<>(); + setMasterOn(value); + this.anyOf.addAll(value); + return self(); + } + /** * Bean property appender: <property>$defs</property>. * @@ -540,6 +566,19 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property appender: <property>enum</property>. + * + * @param value The collection of items to append to the <property>enum</property> property on this bean. + * @return This object. + */ + public SELF addEnum(Collection<Object> value) { + if (this.enum_ == null) + this.enum_ = new LinkedList<>(); + this.enum_.addAll(value); + return self(); + } + /** * Bean property appender: <property>examples</property>. * @@ -554,6 +593,19 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property appender: <property>examples</property>. + * + * @param value The collection of items to append to the <property>examples</property> property on this bean. + * @return This object. + */ + public SELF addExamples(Collection<Object> value) { + if (this.examples == null) + this.examples = new LinkedList<>(); + this.examples.addAll(value); + return self(); + } + /** * Bean property appender: <property>items</property>. * @@ -583,6 +635,20 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property appender: <property>oneOf</property>. + * + * @param value The collection of items to append to the <property>oneOf</property> property on this bean. + * @return This object. + */ + public SELF addOneOf(Collection<JsonSchema<?>> value) { + if (this.oneOf == null) + this.oneOf = new LinkedList<>(); + setMasterOn(value); + this.oneOf.addAll(value); + return self(); + } + /** * Bean property appender: <property>patternProperties</property>. * @@ -605,6 +671,28 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property appender: <property>patternProperties</property>. + * + * <p> + * Unlike {@link #addPatternProperties(JsonSchemaProperty...)}, this keyed form does not require the value's + * <property>name</property> property to be pre-set — it is set automatically from {@code name}. + * + * @param name The key in the patternProperties map entry. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The value in the patternProperties map entry. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public SELF addPatternProperty(String name, JsonSchema<?> value) { + if (this.patternProperties == null) + this.patternProperties = map(); + if (value != null) { + setMasterOn(value); + value.setName(name); + } + this.patternProperties.put(name, value); + return self(); + } + /** * Bean property appender: <property>prefixItems</property>. * @@ -641,6 +729,28 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property appender: <property>properties</property>. + * + * <p> + * Unlike {@link #addProperties(JsonSchema...)}, this keyed form does not require the value's + * <property>name</property> property to be pre-set — it is set automatically from {@code name}. + * + * @param name The key in the properties map entry. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The value in the properties map entry. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object. + */ + public SELF addProperty(String name, JsonSchema<?> value) { + if (this.properties == null) + this.properties = map(); + if (value != null) { + setMasterOn(value); + value.setName(name); + } + this.properties.put(name, value); + return self(); + } + /** * Bean property appender: <property>required</property>. * @@ -1426,6 +1536,16 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property setter: <property>allOf</property>. + * + * @param value The new value for the <property>allOf</property> property on this bean. + * @return This object. + */ + public SELF setAllOf(JsonSchema<?>...value) { + return setAllOf(list(value)); + } + /** * Bean property setter: <property>anyOf</property>. * @@ -1438,6 +1558,16 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property setter: <property>anyOf</property>. + * + * @param value The new value for the <property>anyOf</property> property on this bean. + * @return This object. + */ + public SELF setAnyOf(JsonSchema<?>...value) { + return setAnyOf(list(value)); + } + /** * Bean property setter: <property>const</property>. * @@ -1632,6 +1762,16 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property setter: <property>enum</property>. + * + * @param value The new value for the <property>enum</property> property on this bean. + * @return This object. + */ + public SELF setEnum(Object...value) { + return setEnum(list(value)); + } + /** * Bean property setter: <property>examples</property>. * @@ -1646,6 +1786,19 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property setter: <property>examples</property>. + * + * <p> + * This property was added in Draft 06. + * + * @param value The new value for the <property>examples</property> property on this bean. + * @return This object. + */ + public SELF setExamples(Object...value) { + return setExamples(list(value)); + } + /** * Bean property setter: <property>exclusiveMaximum</property>. * @@ -1906,6 +2059,16 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property setter: <property>oneOf</property>. + * + * @param value The new value for the <property>oneOf</property> property on this bean. + * @return This object. + */ + public SELF setOneOf(JsonSchema<?>...value) { + return setOneOf(list(value)); + } + /** * Bean property setter: <property>pattern</property>. * @@ -2012,6 +2175,16 @@ public class JsonSchema<SELF extends JsonSchema<SELF>> { return self(); } + /** + * Bean property setter: <property>required</property>. + * + * @param value The new value for the <property>required</property> property on this bean. + * @return This object. + */ + public SELF setRequired(String...value) { + return setRequired(list(value)); + } + /** * Associates a schema map with this schema for resolving other schemas identified through <property>$ref</property> * properties. diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/CallToolRequest.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/CallToolRequest.java index 443c60cb74..e90ca0d5fa 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/CallToolRequest.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/CallToolRequest.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -70,4 +71,18 @@ public class CallToolRequest { arguments = value; return this; } + + /** + * Convenience method to add a single tool argument. + * + * @param name The argument name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The argument value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object (for method chaining). + */ + public CallToolRequest putArgument(String name, Object value) { + if (arguments == null) + arguments = map(); + arguments.put(name, value); + return this; + } } diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/CallToolResult.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/CallToolResult.java index 9b21dfb598..ffe1849ba0 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/CallToolResult.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/CallToolResult.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -51,6 +52,43 @@ public class CallToolResult { return this; } + /** + * Sets the content blocks. + * + * @param value The new value. Can be <jk>null</jk> to unset the property. + * @return This object (for method chaining). + */ + public CallToolResult setContent(Content...value) { + content = list(value); + return this; + } + + /** + * Appends to the content blocks. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public CallToolResult addContent(Content...value) { + if (content == null) + content = list(); + Collections.addAll(content, value); + return this; + } + + /** + * Appends to the content blocks. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public CallToolResult addContent(Collection<Content> value) { + if (content == null) + content = list(); + content.addAll(value); + return this; + } + /** * When {@code true}, the tool reported an application-level error. * diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ClientCapabilities.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ClientCapabilities.java index 73a74b3dc1..f7c55fd849 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ClientCapabilities.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ClientCapabilities.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -72,6 +73,20 @@ public class ClientCapabilities { return this; } + /** + * Convenience method to add a single sampling capability entry. + * + * @param name The entry name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The entry value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object (for method chaining). + */ + public ClientCapabilities putSampling(String name, Object value) { + if (sampling == null) + sampling = map(); + sampling.put(name, value); + return this; + } + /** * Experimental capability extensions. * @@ -91,4 +106,18 @@ public class ClientCapabilities { experimental = value; return this; } + + /** + * Convenience method to add a single experimental extension entry. + * + * @param name The extension name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The extension value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object (for method chaining). + */ + public ClientCapabilities putExperimental(String name, Object value) { + if (experimental == null) + experimental = map(); + experimental.put(name, value); + return this; + } } diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/GetPromptRequest.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/GetPromptRequest.java index 603bac1394..9e64bf226b 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/GetPromptRequest.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/GetPromptRequest.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -70,4 +71,18 @@ public class GetPromptRequest { arguments = value; return this; } + + /** + * Convenience method to add a single argument value. + * + * @param name The argument name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The argument value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object (for method chaining). + */ + public GetPromptRequest putArgument(String name, Object value) { + if (arguments == null) + arguments = map(); + arguments.put(name, value); + return this; + } } diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/GetPromptResult.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/GetPromptResult.java index bbda5ab018..ff18bea0fa 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/GetPromptResult.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/GetPromptResult.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -70,4 +71,41 @@ public class GetPromptResult { messages = value; return this; } + + /** + * Sets rendered messages. + * + * @param value The new value. Can be <jk>null</jk> to unset the property. + * @return This object (for method chaining). + */ + public GetPromptResult setMessages(PromptMessage...value) { + messages = list(value); + return this; + } + + /** + * Appends to the rendered messages. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public GetPromptResult addMessages(PromptMessage...value) { + if (messages == null) + messages = list(); + Collections.addAll(messages, value); + return this; + } + + /** + * Appends to the rendered messages. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public GetPromptResult addMessages(Collection<PromptMessage> value) { + if (messages == null) + messages = list(); + messages.addAll(value); + return this; + } } diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/JsonSchema.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/JsonSchema.java index ecac181488..babd42b2ec 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/JsonSchema.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/JsonSchema.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -78,6 +79,20 @@ public class JsonSchema { return this; } + /** + * Convenience method to add a single property schema. + * + * @param name The property name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The property schema. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object (for method chaining). + */ + public JsonSchema addProperty(String name, JsonSchema value) { + if (properties == null) + properties = map(); + properties.put(name, value); + return this; + } + /** * Required property names. * @@ -98,6 +113,43 @@ public class JsonSchema { return this; } + /** + * Sets required property names. + * + * @param value The new value. Can be <jk>null</jk> to unset the property. + * @return This object (for method chaining). + */ + public JsonSchema setRequired(String...value) { + required = list(value); + return this; + } + + /** + * Appends to the required property names. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public JsonSchema addRequired(String...value) { + if (required == null) + required = list(); + Collections.addAll(required, value); + return this; + } + + /** + * Appends to the required property names. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public JsonSchema addRequired(Collection<String> value) { + if (required == null) + required = list(); + required.addAll(value); + return this; + } + /** * {@code additionalProperties} keyword (boolean or nested schema). * @@ -157,4 +209,18 @@ public class JsonSchema { defs = value; return this; } + + /** + * Convenience method to add a single reusable sub-schema. + * + * @param name The sub-schema name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The sub-schema. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object (for method chaining). + */ + public JsonSchema addDef(String name, JsonSchema value) { + if (defs == null) + defs = map(); + defs.put(name, value); + return this; + } } diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListPromptsResult.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListPromptsResult.java index 412a3fa308..3b5865b144 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListPromptsResult.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListPromptsResult.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -51,6 +52,43 @@ public class ListPromptsResult { return this; } + /** + * Sets the prompt descriptors. + * + * @param value The new value. Can be <jk>null</jk> to unset the property. + * @return This object (for method chaining). + */ + public ListPromptsResult setPrompts(Prompt...value) { + prompts = list(value); + return this; + } + + /** + * Appends to the prompt descriptors. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public ListPromptsResult addPrompts(Prompt...value) { + if (prompts == null) + prompts = list(); + Collections.addAll(prompts, value); + return this; + } + + /** + * Appends to the prompt descriptors. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public ListPromptsResult addPrompts(Collection<Prompt> value) { + if (prompts == null) + prompts = list(); + prompts.addAll(value); + return this; + } + /** * Pagination cursor for the next page. * diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListResourcesResult.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListResourcesResult.java index 5d91db6ddf..afa987c4a9 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListResourcesResult.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListResourcesResult.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -51,6 +52,43 @@ public class ListResourcesResult { return this; } + /** + * Sets the resource descriptors. + * + * @param value The new value. Can be <jk>null</jk> to unset the property. + * @return This object (for method chaining). + */ + public ListResourcesResult setResources(Resource...value) { + resources = list(value); + return this; + } + + /** + * Appends to the resource descriptors. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public ListResourcesResult addResources(Resource...value) { + if (resources == null) + resources = list(); + Collections.addAll(resources, value); + return this; + } + + /** + * Appends to the resource descriptors. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public ListResourcesResult addResources(Collection<Resource> value) { + if (resources == null) + resources = list(); + resources.addAll(value); + return this; + } + /** * Pagination cursor for the next page. * diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListToolsResult.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListToolsResult.java index 62eef6c47b..307a7c3b97 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListToolsResult.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ListToolsResult.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -51,6 +52,43 @@ public class ListToolsResult { return this; } + /** + * Sets the tool descriptors. + * + * @param value The new value. Can be <jk>null</jk> to unset the property. + * @return This object (for method chaining). + */ + public ListToolsResult setTools(Tool...value) { + tools = list(value); + return this; + } + + /** + * Appends to the tool descriptors. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public ListToolsResult addTools(Tool...value) { + if (tools == null) + tools = list(); + Collections.addAll(tools, value); + return this; + } + + /** + * Appends to the tool descriptors. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public ListToolsResult addTools(Collection<Tool> value) { + if (tools == null) + tools = list(); + tools.addAll(value); + return this; + } + /** * Pagination cursor for the next page. * diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/Prompt.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/Prompt.java index e94f0fdeee..e27cc1ea4f 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/Prompt.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/Prompt.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -91,4 +92,41 @@ public class Prompt { arguments = value; return this; } + + /** + * Sets declared arguments. + * + * @param value The new value. Can be <jk>null</jk> to unset the property. + * @return This object (for method chaining). + */ + public Prompt setArguments(PromptArgument...value) { + arguments = list(value); + return this; + } + + /** + * Appends to the declared arguments. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public Prompt addArguments(PromptArgument...value) { + if (arguments == null) + arguments = list(); + Collections.addAll(arguments, value); + return this; + } + + /** + * Appends to the declared arguments. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public Prompt addArguments(Collection<PromptArgument> value) { + if (arguments == null) + arguments = list(); + arguments.addAll(value); + return this; + } } diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ReadResourceResult.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ReadResourceResult.java index 191a48f0d4..7f2abdbbfd 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ReadResourceResult.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ReadResourceResult.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -49,4 +50,41 @@ public class ReadResourceResult { contents = value; return this; } + + /** + * Sets resource bodies. + * + * @param value The new value. Can be <jk>null</jk> to unset the property. + * @return This object (for method chaining). + */ + public ReadResourceResult setContents(ResourceContents...value) { + contents = list(value); + return this; + } + + /** + * Appends to the resource bodies. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public ReadResourceResult addContents(ResourceContents...value) { + if (contents == null) + contents = list(); + Collections.addAll(contents, value); + return this; + } + + /** + * Appends to the resource bodies. + * + * @param value The values to append. + * @return This object (for method chaining). + */ + public ReadResourceResult addContents(Collection<ResourceContents> value) { + if (contents == null) + contents = list(); + contents.addAll(value); + return this; + } } diff --git a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ServerCapabilities.java b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ServerCapabilities.java index e62b872ead..37355e9133 100644 --- a/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ServerCapabilities.java +++ b/juneau-bean/juneau-bean-mcp/src/main/java/org/apache/juneau/bean/mcp/ServerCapabilities.java @@ -16,6 +16,7 @@ */ package org.apache.juneau.bean.mcp; +import static org.apache.juneau.commons.utils.CollectionUtils.*; import static org.apache.juneau.commons.utils.Shorts.*; import java.util.*; @@ -133,4 +134,18 @@ public class ServerCapabilities { experimental = value; return this; } + + /** + * Convenience method to add a single experimental extension entry. + * + * @param name The extension name. Can be <jk>null</jk> ({@link LinkedHashMap} tolerates a <jk>null</jk> key). + * @param value The extension value. Can be <jk>null</jk> (stored as <jk>null</jk>). + * @return This object (for method chaining). + */ + public ServerCapabilities putExperimental(String name, Object value) { + if (experimental == null) + experimental = map(); + experimental.put(name, value); + return this; + } } diff --git a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java index 30882d5b8f..f01e94dbb5 100644 --- a/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java +++ b/juneau-bean/juneau-bean-openapi-v3/src/main/java/org/apache/juneau/bean/openapi3/OpenApi.java @@ -460,6 +460,17 @@ public class OpenApi extends OpenApiElement { return this; } + /** + * Sets the security requirements list. + * + * @param value The new value for this property. + * @return This object. + */ + public OpenApi setSecurity(SecurityRequirement...value) { + setSecurity(toListBuilder(value, SecurityRequirement.class).sparse().build()); + return this; + } + /** * Sets the servers list. * @@ -473,6 +484,17 @@ public class OpenApi extends OpenApiElement { return this; } + /** + * Sets the servers list. + * + * @param value The new value for this property. + * @return This object. + */ + public OpenApi setServers(Server...value) { + setServers(toListBuilder(value, Server.class).sparse().build()); + return this; + } + /** * Sets the tags list. *
