Load type mappings from a group configuration file
[aai/babel.git] / src / main / java / org / onap / aai / babel / xml / generator / model / Model.java
index 956db40..0e2b8d5 100644 (file)
@@ -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,7 +20,6 @@
  */
 package org.onap.aai.babel.xml.generator.model;
 
-import java.lang.reflect.InvocationTargetException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -30,6 +29,7 @@ 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.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.types.ModelType;
@@ -41,21 +41,6 @@ public abstract class Model {
 
     private static Logger log = LogHelper.INSTANCE;
 
-    private static Map<String, Class<? extends Model>> 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);
-    }
-
     private enum ModelIdentification {
         ID("vfModuleModelInvariantUUID", "serviceInvariantUUID", "resourceInvariantUUID", "invariantUUID",
                 "providing_service_invariant_uuid") {
@@ -154,18 +139,37 @@ public abstract class Model {
 
     private static Optional<Model> getModelFromType(String typePrefix) {
         Optional<Model> modelToBeReturned = Optional.empty();
-        Class<? extends Model> clazz = typeToModel.get(typePrefix);
+        Class<? extends Model> clazz = WidgetConfigurationUtil.getModelFromType(typePrefix);
         if (clazz != null) {
             try {
                 modelToBeReturned = Optional.ofNullable(clazz.getConstructor().newInstance());
-            } catch (InstantiationException | java.lang.IllegalAccessException | IllegalArgumentException
-                    | InvocationTargetException | NoSuchMethodException | SecurityException e) {
+            } catch (Exception e) {
                 log.error(ApplicationMsgs.INVALID_CSAR_FILE, e);
             }
         }
         return modelToBeReturned;
     }
 
+    /**
+     * Gets the object (model) corresponding to the supplied TOSCA type information, prioritising the metadata
+     * information.
+     *
+     * @param toscaType
+     *            the TOSCA type
+     * @param metaDataType
+     *            the type from the TOSCA metadata
+     * @return the model for the type, or null
+     */
+    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);
@@ -178,8 +182,8 @@ public abstract class Model {
      * @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);
+        org.onap.aai.babel.xml.generator.types.Model model =
+                this.getClass().getAnnotation(org.onap.aai.babel.xml.generator.types.Model.class);
         return model.cardinality();
     }
 
@@ -189,8 +193,8 @@ 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();
     }
 
@@ -239,8 +243,8 @@ public abstract class Model {
      * @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);
+        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();
     }
 
@@ -250,8 +254,8 @@ public abstract class Model {
      * @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);
+        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();
     }
 
@@ -290,4 +294,5 @@ public abstract class Model {
             throw new IllegalAccessException(GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);
         }
     }
+
 }