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 <[email protected]>
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",