/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 European Software Marketing Ltd.
+ * Copyright © 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2019 European Software Marketing Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.onap.aai.babel.xml.generator.model;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
+import org.onap.aai.babel.xml.generator.data.WidgetConfigurationUtil;
import org.onap.aai.babel.xml.generator.error.IllegalAccessException;
-import org.onap.aai.babel.xml.generator.types.Cardinality;
+import org.onap.aai.babel.xml.generator.model.Widget.Type;
import org.onap.aai.babel.xml.generator.types.ModelType;
public abstract class Model {
+
public static final String GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION = "Operation Not Supported for Widgets";
- protected Set<Resource> resources = new HashSet<>();
- protected Set<Widget> widgets = new HashSet<>();
+ private enum ModelIdentification {
+ ID("vfModuleModelInvariantUUID", "serviceInvariantUUID", "resourceInvariantUUID", "invariantUUID",
+ "providing_service_invariant_uuid") {
+ @Override
+ public void populate(Model model, String value) {
+ model.modelId = value;
+ }
+ },
+ NAME_VERSION_ID("vfModuleModelUUID", "resourceUUID", "serviceUUID", "UUID", "providing_service_uuid") {
+ @Override
+ public void populate(Model model, String value) {
+ model.modelNameVersionId = value;
+ }
+ },
+ VERSION("vfModuleModelVersion", "serviceVersion", "resourceversion", "version") {
+ @Override
+ public void populate(Model model, String value) {
+ model.modelVersion = value;
+ }
+ },
+ NAME("vfModuleModelName", "serviceName", "resourceName", "name") {
+ @Override
+ public void populate(Model model, String value) {
+ model.modelName = value;
+ }
+ },
+ DESCRIPTION("serviceDescription", "resourceDescription", "vf_module_description", "description") {
+ @Override
+ public void populate(Model model, String value) {
+ model.modelDescription = value;
+ }
+ },
+ NAME_AND_DESCRIPTION("providing_service_name") {
+ @Override
+ public void populate(Model model, String value) {
+ model.modelName = model.modelDescription = value;
+ }
+ };
+
+ private static final Map<String, ModelIdentification> propertyToModelIdent;
+ private String[] keys;
+
+ ModelIdentification(String... keys) {
+ this.keys = keys;
+ }
+
+ static {
+ Map<String, ModelIdentification> mappings = new HashMap<>();
+ for (ModelIdentification ident : ModelIdentification.values()) {
+ for (String key : ident.keys) {
+ mappings.put(key, ident);
+ }
+ }
+ propertyToModelIdent = Collections.unmodifiableMap(mappings);
+ }
+
+ private static Optional<ModelIdentification> getModelIdentFromProperty(String property) {
+ return Optional.ofNullable(propertyToModelIdent.get(property));
+ }
+
+ public abstract void populate(Model model, String value);
+ }
+
private String modelId;
private String modelName;
- private String modelVersion;
private String modelNameVersionId;
+ private String modelVersion;
private String modelDescription;
+ protected Set<Resource> resources = new HashSet<>();
+ protected Set<Widget> widgets = new HashSet<>();
+
/**
* Gets the object (model) corresponding to the supplied TOSCA type.
*
- * @param toscaType the tosca type
+ * @param toscaType
+ * the tosca type
* @return the model for the type, or null
*/
- public static Model getModelFor(String toscaType) {
- Model modelToBeReturned = null;
- String typePrefix = toscaType;
- while (modelToBeReturned == null && typePrefix != null && typePrefix.lastIndexOf('.') != -1) {
- switch (typePrefix) {
- case "org.openecomp.resource.vf.allottedResource":
- modelToBeReturned = new AllotedResource();
- break;
- case "org.openecomp.resource.vfc.AllottedResource":
- modelToBeReturned = new ProvidingService();
- break;
- case "org.openecomp.resource.vfc":
- modelToBeReturned = new VServerWidget();
- break;
- case "org.openecomp.resource.cp":
- case "org.openecomp.cp":
- modelToBeReturned = new LIntfWidget();
- break;
- case "org.openecomp.resource.vl":
- modelToBeReturned = new L3Network();
- break;
- case "org.openecomp.resource.vf":
- modelToBeReturned = new VirtualFunction();
- break;
- case "org.openecomp.groups.vfmodule":
- case "org.openecomp.groups.VfModule":
- modelToBeReturned = new VfModule();
- break;
- case "org.openecomp.resource.vfc.nodes.heat.cinder":
- modelToBeReturned = new VolumeWidget();
- break;
- default:
- modelToBeReturned = null;
- break;
- }
- typePrefix = typePrefix.substring(0, typePrefix.lastIndexOf('.'));
+ public static Resource getModelFor(String toscaType) {
+ Resource resource = null;
+ if (toscaType != null && !toscaType.isEmpty()) {
+ resource = getModelFromType(toscaType).orElseGet(() -> Model.getModelFromPrefix(toscaType));
}
-
- return modelToBeReturned;
+ return resource;
}
- public abstract boolean addResource(Resource resource);
-
- public abstract boolean addWidget(Widget resource);
+ private static Resource getModelFromPrefix(String toscaType) {
+ Resource resource = null;
+ int lastSeparator = toscaType.lastIndexOf('.');
+ if (lastSeparator != -1) {
+ resource = getModelFor(toscaType.substring(0, lastSeparator));
+ }
+ return resource;
+ }
- /**
- * Gets widget version id.
- *
- * @return the widget version id
- */
- public String getWidgetId() {
- org.onap.aai.babel.xml.generator.types.Model model =
- this.getClass().getAnnotation(org.onap.aai.babel.xml.generator.types.Model.class);
- return Widget.getWidget(model.widget()).getId();
+ private static Optional<Resource> getModelFromType(String typePrefix) {
+ return WidgetConfigurationUtil.createModelFromType(typePrefix);
}
/**
- * Gets invariant id.
+ * Gets the object (model) corresponding to the supplied TOSCA type information, prioritising the metadata
+ * information.
*
- * @return the invariant id
+ * @param toscaType
+ * the TOSCA type
+ * @param metaDataType
+ * the type from the TOSCA metadata
+ * @return the model for the type, or null
*/
- public String getWidgetInvariantId() {
- org.onap.aai.babel.xml.generator.types.Model model =
- this.getClass().getAnnotation(org.onap.aai.babel.xml.generator.types.Model.class);
- return Widget.getWidget(model.widget()).getWidgetId();
+ public static Resource getModelFor(String toscaType, String metaDataType) {
+ if ("Configuration".equals(metaDataType)) {
+ return new Resource(Type.CONFIGURATION, true);
+ } else if ("CR".equals(metaDataType)) {
+ return new Resource(Type.CR, true);
+ } else {
+ return getModelFor(toscaType);
+ }
}
+ public abstract boolean addResource(Resource resource);
+
+ public abstract boolean addWidget(Widget resource);
+
+ public abstract Widget.Type getWidgetType();
+
+ public abstract Map<String, Object> getProperties();
+
+ public abstract boolean isResource();
+
/**
* Gets delete flag.
*
return model.dataDeleteFlag();
}
- /**
- * Gets cardinality.
- *
- * @return the cardinality
- */
- public Cardinality getCardinality() {
- org.onap.aai.babel.xml.generator.types.Model model =
- this.getClass().getAnnotation(org.onap.aai.babel.xml.generator.types.Model.class);
- return model.cardinality();
+ public String getModelDescription() {
+ return modelDescription;
}
- public abstract Widget.Type getWidgetType();
-
public String getModelId() {
checkSupported();
return modelId;
}
+ public String getModelName() {
+ return modelName;
+ }
+
+ public String getModelVersion() {
+ return modelVersion;
+ }
+
+ public String getModelNameVersionId() {
+ checkSupported();
+ return modelNameVersionId;
+ }
+
/**
* Gets model type.
*
}
}
- public String getModelName() {
- return modelName;
- }
-
- public String getModelVersion() {
- return modelVersion;
- }
-
- public String getModelNameVersionId() {
- checkSupported();
- return modelNameVersionId;
+ /**
+ * Gets widget version id.
+ *
+ * @return the widget version id
+ */
+ public String getWidgetId() {
+ org.onap.aai.babel.xml.generator.types.Model model =
+ this.getClass().getAnnotation(org.onap.aai.babel.xml.generator.types.Model.class);
+ return Widget.getWidget(model.widget()).getId();
}
- public String getModelDescription() {
- return modelDescription;
+ /**
+ * Gets invariant id.
+ *
+ * @return the invariant id
+ */
+ public String getWidgetInvariantId() {
+ org.onap.aai.babel.xml.generator.types.Model model =
+ this.getClass().getAnnotation(org.onap.aai.babel.xml.generator.types.Model.class);
+ return Widget.getWidget(model.widget()).getWidgetId();
}
/**
* Populate model identification information.
*
- * @param modelIdentInfo the model ident info
+ * @param modelIdentInfo
+ * the model ident info
*/
public void populateModelIdentificationInformation(Map<String, String> modelIdentInfo) {
Iterator<String> iter = modelIdentInfo.keySet().iterator();
String property;
while (iter.hasNext()) {
property = iter.next();
- switch (property) {
- case "vfModuleModelInvariantUUID":
- case "serviceInvariantUUID":
- case "resourceInvariantUUID":
- case "invariantUUID":
- case "providing_service_invariant_uuid":
- modelId = modelIdentInfo.get(property);
- break;
- case "vfModuleModelUUID":
- case "resourceUUID":
- case "serviceUUID":
- case "UUID":
- case "providing_service_uuid":
- modelNameVersionId = modelIdentInfo.get(property);
- break;
- case "vfModuleModelVersion":
- case "serviceVersion":
- case "resourceversion":
- case "version":
- modelVersion = modelIdentInfo.get(property);
- break;
- case "vfModuleModelName":
- case "serviceName":
- case "resourceName":
- case "name":
- modelName = modelIdentInfo.get(property);
- break;
- case "serviceDescription":
- case "resourceDescription":
- case "vf_module_description":
- case "description":
- modelDescription = modelIdentInfo.get(property);
- break;
- case "providing_service_name":
- modelName = modelIdentInfo.get(property);
- modelDescription = modelIdentInfo.get(property);
- break;
- default:
- break;
+ Optional<ModelIdentification> modelIdent = ModelIdentification.getModelIdentFromProperty(property);
+ if (modelIdent.isPresent()) {
+ modelIdent.get().populate(this, modelIdentInfo.get(property));
}
}
}
throw new IllegalAccessException(GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);
}
}
+
}