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",

Reply via email to