This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new d5266e1 CAMEL-16557 - Catalog: add a free form key value map on components d5266e1 is described below commit d5266e19d7aabef26dd221db1e2238e2a7830151 Author: Peter Palaga <ppal...@redhat.com> AuthorDate: Tue Apr 27 16:53:09 2021 +0200 CAMEL-16557 - Catalog: add a free form key value map on components --- .../org/apache/camel/tooling/model/BaseModel.java | 17 +++++++++++++++++ .../org/apache/camel/tooling/model/JsonMapper.java | 4 ++++ .../camel/tooling/model/ApiComponentModelTest.java | 21 +++++++++++++++++++++ .../src/test/resources/twilio.json | 1 + 4 files changed, 43 insertions(+) diff --git a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseModel.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseModel.java index 6d94728..475bf13 100644 --- a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseModel.java +++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseModel.java @@ -18,7 +18,9 @@ package org.apache.camel.tooling.model; import java.util.ArrayList; import java.util.Comparator; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; public abstract class BaseModel<O extends BaseOptionModel> { @@ -34,6 +36,7 @@ public abstract class BaseModel<O extends BaseOptionModel> { protected final List<O> options = new ArrayList<>(); protected SupportLevel supportLevel; protected boolean nativeSupported; + protected Map<String, Object> metadata = new LinkedHashMap<>(); public static Comparator<BaseModel<?>> compareTitle() { return (m1, m2) -> m1.getTitle().compareToIgnoreCase(m2.getTitle()); @@ -152,4 +155,18 @@ public abstract class BaseModel<O extends BaseOptionModel> { this.nativeSupported = nativeSupported; } + /** + * @return a free form map of key value pair representing this {@link BaseModel}'s metadata + */ + public Map<String, Object> getMetadata() { + return metadata; + } + + /** + * @param metadata + */ + public void setMetadata(Map<String, Object> metadata) { + this.metadata = metadata; + } + } diff --git a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java index 4337470..d7223ce 100644 --- a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java +++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java @@ -385,6 +385,9 @@ public final class JsonMapper { if (model.isNativeSupported()) { obj.put("nativeSupported", model.isNativeSupported()); } + if (!model.getMetadata().isEmpty()) { + obj.put("metadata", model.getMetadata()); + } } private static void artifactToJson(ArtifactModel<?> model, JsonObject obj) { @@ -405,6 +408,7 @@ public final class JsonMapper { model.setJavaType(mobj.getString("javaType")); model.setSupportLevel(SupportLevel.safeValueOf(mobj.getString("supportLevel"))); model.setNativeSupported(mobj.getBooleanOrDefault("nativeSupported", false)); + model.setMetadata(mobj.getMapOrDefault("metadata", new JsonObject())); } private static void parseOption(JsonObject mp, BaseOptionModel option, String name) { diff --git a/tooling/camel-tooling-model/src/test/java/org/apache/camel/tooling/model/ApiComponentModelTest.java b/tooling/camel-tooling-model/src/test/java/org/apache/camel/tooling/model/ApiComponentModelTest.java index 2cac8ae..6905a63 100644 --- a/tooling/camel-tooling-model/src/test/java/org/apache/camel/tooling/model/ApiComponentModelTest.java +++ b/tooling/camel-tooling-model/src/test/java/org/apache/camel/tooling/model/ApiComponentModelTest.java @@ -20,6 +20,10 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -47,6 +51,23 @@ public class ApiComponentModelTest { Assertions.assertEquals("creator", amm.getName()); Assertions.assertEquals("Create a CallCreator to execute create", amm.getDescription()); Assertions.assertEquals(6, amm.getSignatures().size()); + + Map<String, Object> md = model.getMetadata(); + Assertions.assertNotNull(md); + Assertions.assertEquals("foo", md.get("string")); + Assertions.assertEquals(BigDecimal.valueOf(42), md.get("number")); + Assertions.assertEquals(Boolean.TRUE, md.get("boolean")); + Assertions.assertEquals(Arrays.asList("bar", "baz"), md.get("list")); + Assertions.assertEquals(new LinkedHashMap<String, Object>() { + { + put("k1", "v1"); + put("k2", "v2"); + } + }, md.get("map")); + + String serialized = JsonMapper.createParameterJsonSchema(model); + ComponentModel reloadedModel = JsonMapper.generateComponentModel(serialized); + Assertions.assertEquals(model.getMetadata(), reloadedModel.getMetadata()); } /** diff --git a/tooling/camel-tooling-model/src/test/resources/twilio.json b/tooling/camel-tooling-model/src/test/resources/twilio.json index 1d4cfcc..c11e567 100644 --- a/tooling/camel-tooling-model/src/test/resources/twilio.json +++ b/tooling/camel-tooling-model/src/test/resources/twilio.json @@ -9,6 +9,7 @@ "label": "api,messaging,cloud", "javaType": "org.apache.camel.component.twilio.TwilioComponent", "supportLevel": "Stable", + "metadata": { "string": "foo", "number": 42, "boolean": true, "list": [ "bar", "baz" ], "map": { "k1": "v1", "k2": "v2" } }, "groupId": "org.apache.camel", "artifactId": "camel-twilio", "version": "3.7.0-SNAPSHOT",