import com.google.gson.JsonObject;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.LinkedHashMap;
+import java.util.Map;
import java.util.Map.Entry;
import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElement;
import org.onap.policy.clamp.clds.tosca.update.elements.ToscaElementProperty;
private static final String TITLE = "title";
private static final String TYPE = "type";
- private LinkedHashMap<String, ToscaElement> components;
- private LinkedHashMap<String, JsonTemplate> templates;
+ private Map<String, ToscaElement> components;
+ private Map<String, JsonTemplate> templates;
private ToscaMetadataParser metadataParser;
* @param metadataParser The metadata parser to use for metadata section
* @param serviceModel The service model for clamp enrichment
*/
- public ToscaConverterToJsonSchema(LinkedHashMap<String, ToscaElement> toscaElementsMap,
- LinkedHashMap<String, JsonTemplate> jsonSchemaTemplates, ToscaMetadataParser metadataParser,
+ public ToscaConverterToJsonSchema(Map<String, ToscaElement> toscaElementsMap,
+ Map<String, JsonTemplate> jsonSchemaTemplates, ToscaMetadataParser metadataParser,
Service serviceModel) {
this.components = toscaElementsMap;
this.templates = jsonSchemaTemplates;
for (String propertyField : toscaElementProperty.getItems().keySet()) {
switch (propertyField) {
case TYPE:
- if (currentPropertyJsonTemplate.hasFields(propertyField)) {
- String fieldtype = (String) toscaElementProperty.getItems().get(propertyField);
- switch (fieldtype.toLowerCase()) {
- case LIST:
- propertiesInJson.addProperty(TYPE, ARRAY);
- break;
- case MAP:
- propertiesInJson.addProperty(TYPE, OBJECT);
- break;
- case "scalar-unit.time":
- case "scalar-unit.frequency":
- case "scalar-unit.size":
- propertiesInJson.addProperty(TYPE, "string");
- break;
- case "timestamp":
- propertiesInJson.addProperty(TYPE, "string");
- propertiesInJson.addProperty(FORMAT, "date-time");
- break;
- case "float":
- propertiesInJson.addProperty(TYPE, "number");
- break;
- case "range":
- propertiesInJson.addProperty(TYPE, "integer");
- if (!checkConstraintPresence(toscaElementProperty, "greater_than")
- && currentPropertyJsonTemplate.hasFields("exclusiveMinimum")) {
- propertiesInJson.addProperty("exclusiveMinimum", false);
- }
- if (!checkConstraintPresence(toscaElementProperty, "less_than")
- && currentPropertyJsonTemplate.hasFields("exclusiveMaximum")) {
- propertiesInJson.addProperty("exclusiveMaximum", false);
- }
- break;
- default:
- propertiesInJson.addProperty(TYPE, currentPropertyJsonTemplate.getName());
- break;
- }
- }
+ parseType(toscaElementProperty, propertyField, propertiesInJson, currentPropertyJsonTemplate);
break;
case METADATA:
if (metadataParser != null) {
currentPropertyJsonTemplate);
break;
case ENTRY_SCHEMA:
- // Here, a way to check if entry is a component (datatype) or a simple string
- if (getToscaElement(this.extractSpecificFieldFromMap(toscaElementProperty, ENTRY_SCHEMA)) != null) {
- String nameComponent = this.extractSpecificFieldFromMap(toscaElementProperty, ENTRY_SCHEMA);
- var child = new ToscaConverterToJsonSchema(components, templates, metadataParser, serviceModel);
- var propertiesContainer = new JsonObject();
-
- if (((String) toscaElementProperty.getItems().get(TYPE)).equals(MAP)) {
- JsonObject componentAsProperty = child.getJsonSchemaOfToscaElement(nameComponent);
- propertiesContainer.add(nameComponent, componentAsProperty);
- if (currentPropertyJsonTemplate.hasFields(PROPERTIES)) {
- propertiesInJson.add(PROPERTIES, propertiesContainer);
- }
- } else {
- JsonObject componentAsItem = child.getJsonSchemaOfToscaElement(nameComponent);
- if (currentPropertyJsonTemplate.hasFields(PROPERTIES)) {
- propertiesInJson.add("items", componentAsItem);
- propertiesInJson.addProperty(FORMAT, "tabs-top");
- }
- }
- } else if (toscaElementProperty.getItems().get(TYPE).equals(LIST)) {
- // Native cases
- var itemContainer = new JsonObject();
- String valueInEntrySchema =
- this.extractSpecificFieldFromMap(toscaElementProperty, ENTRY_SCHEMA);
- itemContainer.addProperty(TYPE, valueInEntrySchema);
- propertiesInJson.add("items", itemContainer);
- propertiesInJson.addProperty(FORMAT, "tabs-top");
- }
-
- // MAP Case, for now nothing
-
+ parseEntrySchema(toscaElementProperty, propertiesInJson, currentPropertyJsonTemplate);
break;
default:
// Each classical field : type, description, default..
return propertiesInJson;
}
+ private void parseType(ToscaElementProperty toscaElementProperty, String propertyField, JsonObject propertiesInJson,
+ JsonTemplate currentPropertyJsonTemplate) {
+ if (currentPropertyJsonTemplate.hasFields(propertyField)) {
+ String fieldtype = (String) toscaElementProperty.getItems().get(propertyField);
+ switch (fieldtype.toLowerCase()) {
+ case LIST:
+ propertiesInJson.addProperty(TYPE, ARRAY);
+ break;
+ case MAP:
+ propertiesInJson.addProperty(TYPE, OBJECT);
+ break;
+ case "scalar-unit.time":
+ case "scalar-unit.frequency":
+ case "scalar-unit.size":
+ propertiesInJson.addProperty(TYPE, "string");
+ break;
+ case "timestamp":
+ propertiesInJson.addProperty(TYPE, "string");
+ propertiesInJson.addProperty(FORMAT, "date-time");
+ break;
+ case "float":
+ propertiesInJson.addProperty(TYPE, "number");
+ break;
+ case "range":
+ propertiesInJson.addProperty(TYPE, "integer");
+ if (!checkConstraintPresence(toscaElementProperty, "greater_than")
+ && currentPropertyJsonTemplate.hasFields("exclusiveMinimum")) {
+ propertiesInJson.addProperty("exclusiveMinimum", false);
+ }
+ if (!checkConstraintPresence(toscaElementProperty, "less_than")
+ && currentPropertyJsonTemplate.hasFields("exclusiveMaximum")) {
+ propertiesInJson.addProperty("exclusiveMaximum", false);
+ }
+ break;
+ default:
+ propertiesInJson.addProperty(TYPE, currentPropertyJsonTemplate.getName());
+ break;
+ }
+ }
+ }
+
+ private void parseEntrySchema(ToscaElementProperty toscaElementProperty, JsonObject propertiesInJson,
+ JsonTemplate currentPropertyJsonTemplate) {
+ // Here, a way to check if entry is a component (datatype) or a simple string
+ if (getToscaElement(this.extractSpecificFieldFromMap(toscaElementProperty, ENTRY_SCHEMA)) != null) {
+ String nameComponent = this.extractSpecificFieldFromMap(toscaElementProperty, ENTRY_SCHEMA);
+ var child = new ToscaConverterToJsonSchema(components, templates, metadataParser, serviceModel);
+ var propertiesContainer = new JsonObject();
+
+ if (((String) toscaElementProperty.getItems().get(TYPE)).equals(MAP)) {
+ JsonObject componentAsProperty = child.getJsonSchemaOfToscaElement(nameComponent);
+ propertiesContainer.add(nameComponent, componentAsProperty);
+ if (currentPropertyJsonTemplate.hasFields(PROPERTIES)) {
+ propertiesInJson.add(PROPERTIES, propertiesContainer);
+ }
+ } else {
+ JsonObject componentAsItem = child.getJsonSchemaOfToscaElement(nameComponent);
+ if (currentPropertyJsonTemplate.hasFields(PROPERTIES)) {
+ propertiesInJson.add("items", componentAsItem);
+ propertiesInJson.addProperty(FORMAT, "tabs-top");
+ }
+ }
+ } else if (toscaElementProperty.getItems().get(TYPE).equals(LIST)) {
+ // Native cases
+ var itemContainer = new JsonObject();
+ String valueInEntrySchema =
+ this.extractSpecificFieldFromMap(toscaElementProperty, ENTRY_SCHEMA);
+ itemContainer.addProperty(TYPE, valueInEntrySchema);
+ propertiesInJson.add("items", itemContainer);
+ propertiesInJson.addProperty(FORMAT, "tabs-top");
+ }
+
+ // MAP Case, for now nothing
+ }
+
/**
* Look for a matching Component for the name parameter, in the components list.
*
*/
@SuppressWarnings("unchecked")
public String extractSpecificFieldFromMap(ToscaElementProperty toscaElementProperty, String fieldName) {
- LinkedHashMap<String, String> entrySchemaFields =
- (LinkedHashMap<String, String>) toscaElementProperty.getItems().get(fieldName);
+ Map<String, String> entrySchemaFields =
+ (Map<String, String>) toscaElementProperty.getItems().get(fieldName);
return entrySchemaFields.get(TYPE);
}
@SuppressWarnings("unchecked")
ArrayList<Object> constraints = (ArrayList<Object>) toscaElementProperty.getItems().get(CONSTRAINTS);
for (Object constraint : constraints) {
- if (constraint instanceof LinkedHashMap
- && ((LinkedHashMap<?, ?>) constraint).containsKey(nameConstraint)) {
+ if (constraint instanceof Map
+ && ((Map<?, ?>) constraint).containsKey(nameConstraint)) {
presentConstraint = true;
}
}
* ============LICENSE_START=======================================================
* ONAP CLAMP
* ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights
+ * Copyright (C) 2020, 2021 AT&T Intellectual Property. All rights
* reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
import org.onap.policy.clamp.loop.service.Service;
public class JsonTemplateManager {
- private LinkedHashMap<String, JsonTemplate> jsonSchemaTemplates;
- private LinkedHashMap<String, ToscaElement> toscaElements;
+ private Map<String, JsonTemplate> jsonSchemaTemplates;
+ private Map<String, ToscaElement> toscaElements;
/**
* Constructor.
}
// GETTERS & SETTERS
- public LinkedHashMap<String, ToscaElement> getToscaElements() {
+ public Map<String, ToscaElement> getToscaElements() {
return toscaElements;
}
- public void setToscaElements(LinkedHashMap<String, ToscaElement> toscaElements) {
+ public void setToscaElements(Map<String, ToscaElement> toscaElements) {
this.toscaElements = toscaElements;
}
- public LinkedHashMap<String, JsonTemplate> getJsonSchemaTemplates() {
+ public Map<String, JsonTemplate> getJsonSchemaTemplates() {
return jsonSchemaTemplates;
}
- public void setJsonSchemaTemplates(LinkedHashMap<String, JsonTemplate> jsonSchemaTemplates) {
+ public void setJsonSchemaTemplates(Map<String, JsonTemplate> jsonSchemaTemplates) {
this.jsonSchemaTemplates = jsonSchemaTemplates;
}
* @param jsonTemplates The template properties as String
* @return a map
*/
- @SuppressWarnings("unused")
- private LinkedHashMap<String, JsonTemplate> initializeTemplates(String jsonTemplates) {
+ private Map<String, JsonTemplate> initializeTemplates(String jsonTemplates) {
- LinkedHashMap<String, JsonTemplate> generatedTemplates = new LinkedHashMap<>();
+ Map<String, JsonTemplate> generatedTemplates = new LinkedHashMap<>();
JsonObject templates = JsonUtils.GSON.fromJson(jsonTemplates, JsonObject.class);
for (Map.Entry<String, JsonElement> templateAsJson : templates.entrySet()) {