X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Faai%2Fbabel%2Fxml%2Fgenerator%2Fmodel%2FModel.java;h=7b2fc42259756e0242750705e13cd82cbe8f5b68;hb=e4cc64bb1b7c0acba0fe11160469c03b94bd5be2;hp=dcd5d15cb07f61c68d32463f6666ff76461c486e;hpb=80a8e4b685a16ef58603fc487d7c0c2adf427b02;p=aai%2Fbabel.git diff --git a/src/main/java/org/onap/aai/babel/xml/generator/model/Model.java b/src/main/java/org/onap/aai/babel/xml/generator/model/Model.java index dcd5d15..7b2fc42 100644 --- a/src/main/java/org/onap/aai/babel/xml/generator/model/Model.java +++ b/src/main/java/org/onap/aai/babel/xml/generator/model/Model.java @@ -1,5 +1,5 @@ /** - * ============LICENSE_START======================================================= + * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. @@ -20,99 +20,186 @@ */ 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.logging.ApplicationMsgs; +import org.onap.aai.babel.logging.LogHelper; 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.types.ModelType; +import org.onap.aai.cl.api.Logger; public abstract class Model { + public static final String GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION = "Operation Not Supported for Widgets"; - protected Set resources = new HashSet<>(); - protected Set widgets = new HashSet<>(); + private static Logger log = LogHelper.INSTANCE; + + private static Map> typeToModel = new HashMap<>(); + static { + typeToModel.put("org.openecomp.resource.vf.allottedResource", AllotedResource.class); + typeToModel.put("org.openecomp.resource.vfc.AllottedResource", ProvidingService.class); + typeToModel.put("org.openecomp.resource.vfc", VServerWidget.class); + typeToModel.put("org.openecomp.resource.cp", LIntfWidget.class); + typeToModel.put("org.openecomp.cp", LIntfWidget.class); + typeToModel.put("org.openecomp.resource.vl", L3Network.class); + typeToModel.put("org.openecomp.resource.vf", VirtualFunction.class); + typeToModel.put("org.openecomp.groups.vfmodule", VfModule.class); + typeToModel.put("org.openecomp.groups.VfModule", VfModule.class); + typeToModel.put("org.openecomp.resource.vfc.nodes.heat.cinder", VolumeWidget.class); + typeToModel.put("org.openecomp.nodes.PortMirroringConfiguration", Configuration.class); + typeToModel.put("org.openecomp.resource.cr.Kk1806Cr1", CR.class); + } + + 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 propertyToModelIdent; + private String[] keys; + + ModelIdentification(String... keys) { + this.keys = keys; + } + + static { + Map mappings = new HashMap<>(); + for (ModelIdentification ident : ModelIdentification.values()) { + for (String key : ident.keys) { + mappings.put(key, ident); + } + } + propertyToModelIdent = Collections.unmodifiableMap(mappings); + } + + private static Optional 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 resources = new HashSet<>(); + protected Set 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; - case "org.openecomp.nodes.PortMirroringConfiguration": - modelToBeReturned = new Configuration(); - break; - default: - modelToBeReturned = null; - break; - } - typePrefix = typePrefix.substring(0, typePrefix.lastIndexOf('.')); + Model model = null; + if (toscaType != null && !toscaType.isEmpty()) { + model = getModelFromType(toscaType).orElseGet(() -> Model.getModelFromPrefix(toscaType)); } - - return modelToBeReturned; + return model; } - public abstract boolean addResource(Resource resource); + private static Model getModelFromPrefix(String toscaType) { + Model model = null; + int lastSeparator = toscaType.lastIndexOf('.'); + if (lastSeparator != -1) { + model = getModelFor(toscaType.substring(0, lastSeparator)); + } + return model; + } - public abstract boolean addWidget(Widget resource); + private static Optional getModelFromType(String typePrefix) { + Optional modelToBeReturned = Optional.empty(); + Class clazz = typeToModel.get(typePrefix); + if (clazz != null) { + try { + modelToBeReturned = Optional.ofNullable(clazz.getConstructor().newInstance()); + } catch (Exception e) { + log.error(ApplicationMsgs.INVALID_CSAR_FILE, e); + } + } + return modelToBeReturned; + } /** - * Gets widget version id. + * Gets the object (model) corresponding to the supplied TOSCA type information, prioritising the metadata + * information. * - * @return the widget version id + * @param toscaType + * the TOSCA type + * @param metaDataType + * the type from the TOSCA metadata + * @return the model for the type, or null */ - 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 static Model getModelFor(String toscaType, String metaDataType) { + if ("Configuration".equals(metaDataType)) { + return new Configuration(); + } else if ("CR".equals(metaDataType)) { + return new CR(); + } else { + return getModelFor(toscaType); + } } + public abstract boolean addResource(Resource resource); + + public abstract boolean addWidget(Widget resource); + + public abstract Widget.Type getWidgetType(); + /** - * Gets invariant id. + * Gets cardinality. * - * @return the invariant id + * @return the cardinality */ - 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 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(); } /** @@ -121,29 +208,33 @@ public abstract class Model { * @return the delete flag */ public boolean getDeleteFlag() { - org.onap.aai.babel.xml.generator.types.Model model = - this.getClass().getAnnotation(org.onap.aai.babel.xml.generator.types.Model.class); + org.onap.aai.babel.xml.generator.types.Model model = this.getClass() + .getAnnotation(org.onap.aai.babel.xml.generator.types.Model.class); 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. * @@ -161,72 +252,42 @@ public abstract class Model { } } - 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 modelIdentInfo) { Iterator 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 modelIdent = ModelIdentification.getModelIdentFromProperty(property); + if (modelIdent.isPresent()) { + modelIdent.get().populate(this, modelIdentInfo.get(property)); } } } @@ -248,4 +309,5 @@ public abstract class Model { throw new IllegalAccessException(GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION); } } + }