Re-implement model type value for Resource Mapping
[aai/babel.git] / src / main / java / org / onap / aai / babel / xml / generator / model / Widget.java
index 545ad79..2decc8c 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 (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (c) 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.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-package org.onap.aai.babel.xml.generator.model;
 
-import static org.onap.aai.babel.xml.generator.data.GeneratorConstants.GENERATOR_AAI_CONFIGLPROP_NOT_FOUND;
+package org.onap.aai.babel.xml.generator.model;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Properties;
 import java.util.Set;
+import org.onap.aai.babel.xml.generator.XmlArtifactGenerationException;
 import org.onap.aai.babel.xml.generator.data.ArtifactType;
-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.ModelType;
-import org.onap.aai.babel.xml.generator.types.ModelWidget;
 
-public abstract class Widget extends Model {
+public class Widget extends Model {
+
+    public static final String GENERATOR_AAI_CONFIGLPROP_NOT_FOUND =
+            "Cannot generate artifacts. Widget configuration not found for %s";
+
+    public enum Type {
+        SERVICE, VF, VFC, VSERVER, VOLUME, FLAVOR, TENANT, VOLUME_GROUP, LINT, L3_NET, VFMODULE, IMAGE, OAM_NETWORK, ALLOTTED_RESOURCE, TUNNEL_XCONNECT, CONFIGURATION, CR, INSTANCE_GROUP;
+    }
 
     private Set<String> keys = new HashSet<>();
 
+    protected String name;
+    protected Type type;
+    protected boolean deleteFlag = false;
+
+    public Widget(Type widgetType, String name, boolean deleteFlag) {
+        type = widgetType;
+        this.name = name;
+        this.deleteFlag = deleteFlag;
+    }
+
     /**
-     * Gets widget.
-     *
-     * @param type the type
-     * @return the widget
+     * Copy Constructor.
+     * 
+     * @param baseWidget
+     * @throws XmlArtifactGenerationException
      */
-    public static Widget getWidget(Type type) {
-
-        switch (type) {
-            case SERVICE:
-                return new ServiceWidget();
-            case VF:
-                return new VfWidget();
-            case VFC:
-                return new VfcWidget();
-            case VSERVER:
-                return new VServerWidget();
-            case VOLUME:
-                return new VolumeWidget();
-            case FLAVOR:
-                return new FlavorWidget();
-            case TENANT:
-                return new TenantWidget();
-            case VOLUME_GROUP:
-                return new VolumeGroupWidget();
-            case LINT:
-                return new LIntfWidget();
-            case L3_NET:
-                return new L3NetworkWidget();
-            case VFMODULE:
-                return new VfModuleWidget();
-            case IMAGE:
-                return new ImageWidget();
-            case OAM_NETWORK:
-                return new OamNetwork();
-            case ALLOTTED_RESOURCE:
-                return new AllotedResourceWidget();
-            case TUNNEL_XCONNECT:
-                return new TunnelXconnectWidget();
-            default:
-                return null;
+    public Widget(Widget baseWidget) throws XmlArtifactGenerationException {
+        this(baseWidget.getWidgetType(), baseWidget.getName(), baseWidget.getDeleteFlag());
+        if (type == Type.VSERVER) {
+            widgets.add(getWidget(Type.FLAVOR));
+            widgets.add(getWidget(Type.IMAGE));
+            widgets.add(getWidget(Type.TENANT));
+            widgets.add(getWidget(Type.VFC));
         }
     }
 
     /**
-     * Gets id.
+     * Gets widget.
      *
-     * @return the id
+     * @param type
+     *            the type
+     * @return a new widget of the specified type
+     * @throws XmlArtifactGenerationException
+     *             if there is no configuration defined for the specified type
      */
+    public static Widget getWidget(Type type) throws XmlArtifactGenerationException {
+        Widget widget = WidgetConfigurationUtil.createWidgetFromType(type);
+        if (widget == null) {
+            throw new XmlArtifactGenerationException("No widget type is defined for " + type);
+        }
+        return widget;
+    }
+
     public String getId() {
-        Properties properties = WidgetConfigurationUtil.getConfig();
-        String id = properties.getProperty(ArtifactType.AAI.name() + ".model-version-id." + getName());
+        String id = WidgetConfigurationUtil.getConfig()
+                .getProperty(ArtifactType.AAI.name() + ".model-version-id." + getName());
         if (id == null) {
             throw new IllegalArgumentException(String.format(GENERATOR_AAI_CONFIGLPROP_NOT_FOUND,
                     ArtifactType.AAI.name() + ".model-version-id." + getName()));
@@ -98,13 +97,11 @@ public abstract class Widget extends Model {
     }
 
     public ModelType getType() {
-        ModelWidget widgetModel = this.getClass().getAnnotation(ModelWidget.class);
-        return widgetModel.type();
+        return ModelType.WIDGET;
     }
 
     public String getName() {
-        ModelWidget widgetModel = this.getClass().getAnnotation(ModelWidget.class);
-        return widgetModel.name();
+        return name;
     }
 
     /**
@@ -130,26 +127,27 @@ public abstract class Widget extends Model {
 
     @Override
     public Type getWidgetType() {
-        return null;
+        return type;
     }
 
     /**
-     * Equals.
+     * Equals method that compares Widget IDs.
      *
-     * @param obj Object
-     * @return the boolean
+     * @param obj
+     *            the Widget object to compare
+     * @return whether or not obj is equal to this Widget
      */
     @Override
     public boolean equals(Object obj) {
+        boolean isEqual = false;
         if (obj instanceof Widget) {
-            if (getId().equals(((Widget) obj).getId())) {
-                ((Widget) obj).keys.addAll(this.keys);
-                return true;
+            Widget other = (Widget) obj;
+            if (getId().equals(other.getId())) {
+                other.keys.addAll(this.keys);
+                isEqual = true;
             }
-            return false;
-        } else {
-            return false;
         }
+        return isEqual;
     }
 
     public void addKey(String key) {
@@ -157,55 +155,55 @@ public abstract class Widget extends Model {
     }
 
     /**
-     * Member of boolean.
+     * Determine whether one or more keys belonging to this Widget appear in the specified Collection.
      *
-     * @param keys the keys
+     * @param keys
+     *            the keys
      * @return the boolean
      */
-    public boolean memberOf(List<String> keys) {
+    public boolean memberOf(Collection<String> keys) {
         if (keys == null) {
             return false;
         }
         return !Collections.disjoint(this.keys, keys);
     }
 
-    /**
-     * All instances used boolean.
-     *
-     * @param collection the collection
-     * @return the boolean
-     */
-    public boolean allInstancesUsed(Set<String> collection) {
-        Set<String> keyCopy = new HashSet<>(keys);
-        keyCopy.removeAll(collection);
-        return keyCopy.isEmpty();
-    }
-
     @Override
     public boolean addResource(Resource resource) {
-        throw new IllegalAccessException(GeneratorConstants.GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);
+        throw new IllegalAccessException(Model.GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);
     }
 
     @Override
     public boolean addWidget(Widget widget) {
+        if (getWidgetType() == Type.VSERVER) {
+            return widgets.add(widget);
+        }
         return true;
     }
 
-    public enum Type {
-        SERVICE,
-        VF,
-        VFC,
-        VSERVER,
-        VOLUME,
-        FLAVOR,
-        TENANT,
-        VOLUME_GROUP,
-        LINT,
-        L3_NET,
-        VFMODULE,
-        IMAGE,
-        OAM_NETWORK,
-        ALLOTTED_RESOURCE,
-        TUNNEL_XCONNECT
+    @Override
+    public String toString() {
+        return getName() + " Widget keys=" + keys + ", resources=" + resources + ", widgets=" + widgets;
+    }
+
+    @Override
+    public boolean getDeleteFlag() {
+        return deleteFlag;
     }
+
+    @Override
+    public String getModelTypeName() {
+        throw new IllegalAccessException(GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);
+    }
+
+    @Override
+    public String getModelId() {
+        throw new IllegalAccessException(GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);
+    }
+
+    @Override
+    public String getModelNameVersionId() {
+        throw new IllegalAccessException(GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);
+    }
+
 }