package org.onap.policy.clamp.acm.runtime.commissioning;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplates;
import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
private final ServiceTemplateProvider serviceTemplateProvider;
private final AutomationCompositionProvider acProvider;
- private final ObjectMapper mapper = new ObjectMapper();
private final ParticipantProvider participantProvider;
private final SupervisionHandler supervisionHandler;
+ private static final Map<String, String> sections = new HashMap<>();
+ private Gson gson = new Gson();
+
/**
* Create a commissioning provider.
*
this.acProvider = acProvider;
this.supervisionHandler = supervisionHandler;
this.participantProvider = participantProvider;
- mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
+ }
+
+ /**
+ * Event listener initiilize function called at ApplicationReadyEvent.
+ *
+ */
+ @EventListener(ApplicationReadyEvent.class)
+ public void initialize() {
+ GsonBuilder builder = new GsonBuilder();
+ builder.registerTypeAdapter(ToscaServiceTemplate.class,
+ (JsonSerializer<ToscaServiceTemplate>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.registerTypeAdapter(ToscaDataType.class,
+ (JsonSerializer<ToscaDataType>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.registerTypeAdapter(ToscaCapabilityType.class,
+ (JsonSerializer<ToscaCapabilityType>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.registerTypeAdapter(ToscaNodeType.class,
+ (JsonSerializer<ToscaNodeType>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.registerTypeAdapter(ToscaRelationshipType.class,
+ (JsonSerializer<ToscaRelationshipType>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.registerTypeAdapter(ToscaPolicyType.class,
+ (JsonSerializer<ToscaPolicyType>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.registerTypeAdapter(ToscaTopologyTemplate.class,
+ (JsonSerializer<ToscaTopologyTemplate>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.registerTypeAdapter(ToscaNodeTemplate.class,
+ (JsonSerializer<ToscaNodeTemplate>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.setPrettyPrinting();
+ gson = builder.create();
+
+ sections.put("data_types", gson.toJson(new ToscaDataType()));
+ sections.put("capability_types", gson.toJson(new ToscaCapabilityType()));
+ sections.put("node_types", gson.toJson(new ToscaNodeType()));
+ sections.put("relationship_types", gson.toJson(new ToscaRelationshipType()));
+ sections.put("policy_types", gson.toJson(new ToscaPolicyType()));
+ sections.put("topology_template", gson.toJson(new ToscaTopologyTemplate()));
+ sections.put("node_templates", gson.toJson(new ToscaNodeTemplate()));
+ sections.put("all", gson.toJson(new ToscaServiceTemplate()));
}
/**
template.put("node_types", fullTemplate.getNodeTypes());
template.put("topology_template", fullTemplate.getToscaTopologyTemplate());
- try {
- return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(template);
-
- } catch (JsonProcessingException e) {
- throw new PfModelException(Status.BAD_REQUEST, "Converion to Json Schema failed", e);
- }
+ return gson.toJson(template);
}
/**
* @return the specified tosca service template or section Json Schema
* @throws PfModelException on errors with retrieving the classes
*/
- @Transactional(readOnly = true)
public String getToscaServiceTemplateSchema(String section) throws PfModelException {
- var visitor = new SchemaFactoryWrapper();
-
- try {
- switch (section) {
- case "data_types":
- mapper.acceptJsonFormatVisitor(mapper.constructType(ToscaDataType.class), visitor);
- break;
- case "capability_types":
- mapper.acceptJsonFormatVisitor(mapper.constructType(ToscaCapabilityType.class), visitor);
- break;
- case "node_types":
- mapper.acceptJsonFormatVisitor(mapper.constructType(ToscaNodeType.class), visitor);
- break;
- case "relationship_types":
- mapper.acceptJsonFormatVisitor(mapper.constructType(ToscaRelationshipType.class), visitor);
- break;
- case "policy_types":
- mapper.acceptJsonFormatVisitor(mapper.constructType(ToscaPolicyType.class), visitor);
- break;
- case "topology_template":
- mapper.acceptJsonFormatVisitor(mapper.constructType(ToscaTopologyTemplate.class), visitor);
- break;
- case "node_templates":
- mapper.acceptJsonFormatVisitor(
- mapper.getTypeFactory().constructCollectionType(List.class, ToscaNodeTemplate.class), visitor);
- break;
- default:
- mapper.acceptJsonFormatVisitor(mapper.constructType(ToscaServiceTemplate.class), visitor);
- }
-
- var jsonSchema = visitor.finalSchema();
- return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonSchema);
- } catch (JsonProcessingException e) {
- throw new PfModelException(Status.BAD_REQUEST, "Converion to Json Schema failed", e);
- }
+ return sections.getOrDefault(section, sections.get("all"));
}
private List<ToscaServiceTemplate> filterToscaNodeTemplateInstance(List<ToscaServiceTemplate> serviceTemplates) {
import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_ST_TEMPLATE_YAML;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializer;
import java.util.List;
import java.util.Map;
import java.util.Objects;
class CommissioningProviderTest {
private static final Coder CODER = new StandardCoder();
- private final ObjectMapper mapper = new ObjectMapper();
/**
* Test the fetching of automation composition definitions (ToscaServiceTemplates).
when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
provider.createAutomationCompositionDefinitions(serviceTemplate);
+ provider.initialize();
- mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
-
- Map<String, Class<?>> sections = Map.of("all", ToscaServiceTemplate.class, "data_types", ToscaDataType.class,
- "capability_types", ToscaCapabilityType.class, "node_types", ToscaNodeType.class, "relationship_types",
+ final Map<String, Class<?>> sections = Map.of("all", ToscaServiceTemplate.class,
+ "data_types", ToscaDataType.class, "capability_types", ToscaCapabilityType.class,
+ "node_types", ToscaNodeType.class, "relationship_types",
ToscaRelationshipType.class, "policy_types", ToscaPolicyType.class, "topology_template",
ToscaTopologyTemplate.class, "node_templates", List.class);
+ String localServiceTemplateSchema = new String();
+ Gson gson = new Gson();
+ GsonBuilder builder = new GsonBuilder();
+ builder.registerTypeAdapter(ToscaTopologyTemplate.class,
+ (JsonSerializer<ToscaTopologyTemplate>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.setPrettyPrinting();
+ gson = builder.create();
+
for (Map.Entry<String, Class<?>> entry : sections.entrySet()) {
String returnedServiceTemplateSchema = provider.getToscaServiceTemplateSchema(entry.getKey());
assertThat(returnedServiceTemplateSchema).isNotNull();
- var visitor = new SchemaFactoryWrapper();
-
- if (entry.getKey().equals("node_templates")) {
- mapper.acceptJsonFormatVisitor(
- mapper.getTypeFactory().constructCollectionType(List.class, ToscaNodeTemplate.class), visitor);
- } else {
- mapper.acceptJsonFormatVisitor(mapper.constructType(entry.getValue()), visitor);
+ if (entry.getKey().equals("topology_template")) {
+ localServiceTemplateSchema = gson.toJson(new ToscaTopologyTemplate());
+ assertThat(localServiceTemplateSchema).isEqualTo(returnedServiceTemplateSchema);
}
-
- var jsonSchema = visitor.finalSchema();
- String localServiceTemplateSchema = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonSchema);
- assertThat(localServiceTemplateSchema).isEqualTo(returnedServiceTemplateSchema);
}
}
}
import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_ST_TEMPLATE_YAML;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializer;
import java.util.List;
import java.util.Map;
import javax.ws.rs.client.Entity;
Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/toscaservicetemplate");
Response rawresp = invocationBuilder.buildGet().invoke();
assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
- ToscaServiceTemplate template = rawresp.readEntity(ToscaServiceTemplate.class);
- assertNotNull(template);
- assertThat(template.getNodeTypes()).hasSize(7);
+ String template = rawresp.readEntity(String.class);
+ final JsonObject jsonObject = new JsonParser().parse(template).getAsJsonObject();
+
+ Gson gson = new Gson();
+ GsonBuilder builder = new GsonBuilder();
+ builder.registerTypeAdapter(ToscaNodeTemplate.class,
+ (JsonSerializer<ToscaNodeTemplate>) (src, typeOfSrc, context) -> new JsonPrimitive(src.toString()));
+ builder.setPrettyPrinting();
+ gson = builder.create();
+
+ ToscaNodeTemplate toscaNodeTemplate = gson.fromJson(jsonObject, ToscaNodeTemplate.class);
+ assertNotNull(toscaNodeTemplate);
}
@Test