summaryrefslogtreecommitdiffstats
path: root/models-tosca/src
diff options
context:
space:
mode:
Diffstat (limited to 'models-tosca/src')
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java18
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifier.java50
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifierOptVersion.java58
-rw-r--r--models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeIdentifier.java50
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java4
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicy.java49
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifier.java62
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifierOptVersion.java71
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyTypeIdentifier.java63
-rw-r--r--models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaIdentifierTestBase.java81
10 files changed, 505 insertions, 1 deletions
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java
index 6463abc84..9c6a375de 100644
--- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicy.java
@@ -66,4 +66,22 @@ public class ToscaPolicy extends ToscaEntity {
}
}
}
+
+ /**
+ * Gets the identifier for this policy.
+ *
+ * @return this policy's identifier
+ */
+ public ToscaPolicyIdentifier getIdentifier() {
+ return new ToscaPolicyIdentifier(getName(), getVersion());
+ }
+
+ /**
+ * Gets the type identifier for this policy.
+ *
+ * @return this policy's type identifier
+ */
+ public ToscaPolicyTypeIdentifier getTypeIdentifier() {
+ return new ToscaPolicyTypeIdentifier(getType(), getTypeVersion());
+ }
}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifier.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifier.java
new file mode 100644
index 000000000..e55c6bd4d
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifier.java
@@ -0,0 +1,50 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+
+/**
+ * Identifies a policy. Both the name and version must be non-null.
+ */
+@Data
+@NoArgsConstructor
+public class ToscaPolicyIdentifier {
+
+ @NonNull
+ private String name;
+
+ @NonNull
+ private String version;
+
+
+ public ToscaPolicyIdentifier(@NonNull String name, @NonNull String version) {
+ this.name = name;
+ this.version = version;
+ }
+
+ public ToscaPolicyIdentifier(ToscaPolicyIdentifier source) {
+ this.name = source.name;
+ this.version = source.version;
+ }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifierOptVersion.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifierOptVersion.java
new file mode 100644
index 000000000..9350d1738
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifierOptVersion.java
@@ -0,0 +1,58 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+
+/**
+ * Policy identifier with an optional version; only the "name" is required.
+ */
+@Data
+@NoArgsConstructor
+public class ToscaPolicyIdentifierOptVersion {
+
+ @NonNull
+ private String name;
+
+ private String version;
+
+
+ public ToscaPolicyIdentifierOptVersion(@NonNull String name, String version) {
+ this.name = name;
+ this.version = version;
+ }
+
+ public ToscaPolicyIdentifierOptVersion(ToscaPolicyIdentifierOptVersion source) {
+ this.name = source.name;
+ this.version = source.version;
+ }
+
+ /**
+ * Determines if the version is null/missing.
+ *
+ * @return {@code true} if the version is null/missing, {@code false}
+ */
+ public boolean isNullVersion() {
+ return (version == null);
+ }
+}
diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeIdentifier.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeIdentifier.java
new file mode 100644
index 000000000..a10c3eb9c
--- /dev/null
+++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeIdentifier.java
@@ -0,0 +1,50 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+
+/**
+ * Identifies a policy type. Both the name and version must be non-null.
+ */
+@Data
+@NoArgsConstructor
+public class ToscaPolicyTypeIdentifier {
+
+ @NonNull
+ private String name;
+
+ @NonNull
+ private String version;
+
+
+ public ToscaPolicyTypeIdentifier(@NonNull String name, @NonNull String version) {
+ this.name = name;
+ this.version = version;
+ }
+
+ public ToscaPolicyTypeIdentifier(ToscaPolicyTypeIdentifier source) {
+ this.name = source.name;
+ this.version = source.version;
+ }
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java
index 96d82e7b3..15240665d 100644
--- a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java
@@ -59,7 +59,9 @@ public class TestPojos {
new FilterClassName(
org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter.class.getName()),
new FilterClassName(
- org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter.class.getName())
+ org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter.class.getName()),
+ new FilterClassName(
+ ToscaIdentifierTestBase.class.getName())
);
// @formatter:on
}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicy.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicy.java
new file mode 100644
index 000000000..881a69d07
--- /dev/null
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicy.java
@@ -0,0 +1,49 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ * Tests methods not tested by {@link TestPojos}.
+ */
+public class TestToscaPolicy {
+
+ @Test
+ public void testGetIdentifier_testGetTypeIdentifier() {
+ ToscaPolicy policy = new ToscaPolicy();
+
+ policy.setName("my_name");
+ policy.setVersion("1.2.3");
+ policy.setType("my_type");
+ policy.setTypeVersion("3.2.1");
+
+ ToscaPolicyIdentifier ident = policy.getIdentifier();
+ assertEquals("my_name", ident.getName());
+ assertEquals("1.2.3", ident.getVersion());
+
+ ToscaPolicyTypeIdentifier type = policy.getTypeIdentifier();
+ assertEquals("my_type", type.getName());
+ assertEquals("3.2.1", type.getVersion());
+ }
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifier.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifier.java
new file mode 100644
index 000000000..0dc9eb13c
--- /dev/null
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifier.java
@@ -0,0 +1,62 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ * Test the other constructors, as {@link TestPojos} tests the other methods.
+ */
+public class TestToscaPolicyIdentifier extends ToscaIdentifierTestBase<ToscaPolicyIdentifier> {
+ private static final String NAME = "my-name";
+ private static final String VERSION = "1.2.3";
+
+ public TestToscaPolicyIdentifier() {
+ super(ToscaPolicyIdentifier.class);
+ }
+
+ @Test
+ public void testAllArgsConstructor() {
+ assertThatThrownBy(() -> new ToscaPolicyIdentifier(null, VERSION)).isInstanceOf(NullPointerException.class);
+ assertThatThrownBy(() -> new ToscaPolicyIdentifier(NAME, null)).isInstanceOf(NullPointerException.class);
+
+ ToscaPolicyIdentifier orig = new ToscaPolicyIdentifier(NAME, VERSION);
+ assertEquals(NAME, orig.getName());
+ assertEquals(VERSION, orig.getVersion());
+ }
+
+ @Test
+ public void testCopyConstructor() {
+ assertThatThrownBy(() -> new ToscaPolicyIdentifier(null)).isInstanceOf(NullPointerException.class);
+
+ ToscaPolicyIdentifier orig = new ToscaPolicyIdentifier();
+
+ // verify with null values
+ assertEquals(orig.toString(), new ToscaPolicyIdentifier(orig).toString());
+
+ // verify with all values
+ orig = new ToscaPolicyIdentifier(NAME, VERSION);
+ assertEquals(orig.toString(), new ToscaPolicyIdentifier(orig).toString());
+ }
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifierOptVersion.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifierOptVersion.java
new file mode 100644
index 000000000..999dca565
--- /dev/null
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifierOptVersion.java
@@ -0,0 +1,71 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Test the other constructors, as {@link TestPojos} tests the other methods.
+ */
+public class TestToscaPolicyIdentifierOptVersion extends ToscaIdentifierTestBase<ToscaPolicyIdentifierOptVersion> {
+ private static final String NAME = "my-name";
+ private static final String VERSION = "1.2.3";
+
+ public TestToscaPolicyIdentifierOptVersion() {
+ super(ToscaPolicyIdentifierOptVersion.class);
+ }
+
+ @Test
+ public void testAllArgsConstructor_testIsNullVersion() {
+ assertThatThrownBy(() -> new ToscaPolicyIdentifierOptVersion(null, VERSION))
+ .isInstanceOf(NullPointerException.class);
+
+ // with null version
+ ToscaPolicyIdentifierOptVersion orig = new ToscaPolicyIdentifierOptVersion(NAME, null);
+ assertEquals(NAME, orig.getName());
+ assertEquals(null, orig.getVersion());
+ assertTrue(orig.isNullVersion());
+
+ orig = new ToscaPolicyIdentifierOptVersion(NAME, VERSION);
+ assertEquals(NAME, orig.getName());
+ assertEquals(VERSION, orig.getVersion());
+ assertFalse(orig.isNullVersion());
+ }
+
+ @Test
+ public void testCopyConstructor() throws Exception {
+ assertThatThrownBy(() -> new ToscaPolicyIdentifierOptVersion(null)).isInstanceOf(NullPointerException.class);
+
+ ToscaPolicyIdentifierOptVersion orig = new ToscaPolicyIdentifierOptVersion();
+
+ // verify with null values
+ assertEquals(orig.toString(), new ToscaPolicyIdentifierOptVersion(orig).toString());
+
+ // verify with all values
+ orig = makeIdent(NAME, VERSION);
+ assertEquals(orig.toString(), new ToscaPolicyIdentifierOptVersion(orig).toString());
+ }
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyTypeIdentifier.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyTypeIdentifier.java
new file mode 100644
index 000000000..778d60c09
--- /dev/null
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyTypeIdentifier.java
@@ -0,0 +1,63 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ * Test the other constructors, as {@link TestPojos} tests the other methods.
+ */
+public class TestToscaPolicyTypeIdentifier extends ToscaIdentifierTestBase<ToscaPolicyTypeIdentifier> {
+ private static final String NAME = "my-name";
+ private static final String VERSION = "1.2.3";
+
+ public TestToscaPolicyTypeIdentifier() {
+ super(ToscaPolicyTypeIdentifier.class);
+ }
+
+ @Test
+ public void testAllArgsConstructor() {
+ assertThatThrownBy(() -> new ToscaPolicyTypeIdentifier(null, VERSION)).isInstanceOf(NullPointerException.class);
+ assertThatThrownBy(() -> new ToscaPolicyTypeIdentifier(NAME, null)).isInstanceOf(NullPointerException.class);
+
+ ToscaPolicyTypeIdentifier orig = new ToscaPolicyTypeIdentifier(NAME, VERSION);
+ assertEquals(NAME, orig.getName());
+ assertEquals(VERSION, orig.getVersion());
+ }
+
+ @Test
+ public void testCopyConstructor() {
+ assertThatThrownBy(() -> new ToscaPolicyTypeIdentifier(null)).isInstanceOf(NullPointerException.class);
+
+ ToscaPolicyTypeIdentifier orig = new ToscaPolicyTypeIdentifier();
+
+ // verify with null values
+ assertEquals(orig.toString(), new ToscaPolicyTypeIdentifier(orig).toString());
+
+ // verify with all values
+ orig = new ToscaPolicyTypeIdentifier(NAME, VERSION);
+ assertEquals(orig.toString(), new ToscaPolicyTypeIdentifier(orig).toString());
+ }
+
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaIdentifierTestBase.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaIdentifierTestBase.java
new file mode 100644
index 000000000..5c935394b
--- /dev/null
+++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaIdentifierTestBase.java
@@ -0,0 +1,81 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Models
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+
+/**
+ * Super class to test identity keys.
+ *
+ * @param <T> type of key being tested
+ */
+public class ToscaIdentifierTestBase<T> {
+
+ private static final Coder coder = new StandardCoder();
+
+ private final Class<T> clazz;
+
+
+ /**
+ * Constructs the object.
+ * @param clazz the type of class being tested
+ */
+ public ToscaIdentifierTestBase(Class<T> clazz) {
+ this.clazz = clazz;
+ }
+
+ /**
+ * Makes an identifier. Uses JSON which does no error checking.
+ *
+ * @param name name to put into the identifier
+ * @param version version to put into the identifier
+ * @return a new identifier
+ * @throws CoderException if the JSON cannot be decoded
+ */
+ public T makeIdent(String name, String version) throws CoderException {
+ StringBuilder bldr = new StringBuilder();
+ bldr.append("{");
+
+ if (name != null) {
+ bldr.append("'name':'");
+ bldr.append(name);
+ bldr.append("'");
+ }
+
+ if (version != null) {
+ if (name != null) {
+ bldr.append(',');
+ }
+
+ bldr.append("'version':'");
+ bldr.append(version);
+ bldr.append("'");
+ }
+
+ bldr.append("}");
+
+ String json = bldr.toString().replace('\'', '"');
+
+ return coder.decode(json, clazz);
+ }
+}