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=d4da6df69686f4edb23b28f7c484ceea569802e8;hb=1954294aed95c2db4eb2659dcef91248535de079;hp=262d29a2a5f85ffa9419449774fa5af4c2536c02;hpb=66b3afa06776e9944ad515206d281d67747c9770;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 262d29a..d4da6df 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 @@ -2,8 +2,8 @@ * ============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. @@ -20,98 +20,152 @@ */ 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.GeneratorConstants; +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 { - protected Set resources = new HashSet<>(); - protected Set widgets = new HashSet<>(); + public static final String GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION = "Operation Not Supported for Widgets"; + + 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; - 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 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 getProperties(); + + public abstract boolean isResource(); + /** * Gets delete flag. * @@ -123,24 +177,28 @@ public abstract class Model { 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. * @@ -158,72 +216,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)); } } } @@ -242,7 +270,8 @@ public abstract class Model { private void checkSupported() { if (this instanceof Widget) { - throw new IllegalAccessException(GeneratorConstants.GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION); + throw new IllegalAccessException(GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION); } } + }