aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormark.j.leonard <mark.j.leonard@gmail.com>2018-07-06 14:16:22 +0100
committermark.j.leonard <mark.j.leonard@gmail.com>2018-07-06 14:16:28 +0100
commiteac1772091f6776ff33f4f8fff4da2d4a3afe85c (patch)
treeed3dae36859e2bec23f14b0c16b0f776fd9f3f41
parent5d7c9960d7fd51e79b19adafcc2b2625ea474ed6 (diff)
Refactor Widget class to reduce complexity
Remove a large switch statement to reduce Cyclomatic Complexity and thus remove an oustanding Sonar code smell. Replace the switch with a Map so that a look-up can be implemented. Issue-ID: AAI-1242 Change-Id: I5b396216a28b77dcb3953eb4897a5397c98d119d Signed-off-by: mark.j.leonard <mark.j.leonard@gmail.com>
-rw-r--r--src/main/java/org/onap/aai/babel/xml/generator/model/VServerWidget.java4
-rw-r--r--src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java109
2 files changed, 51 insertions, 62 deletions
diff --git a/src/main/java/org/onap/aai/babel/xml/generator/model/VServerWidget.java b/src/main/java/org/onap/aai/babel/xml/generator/model/VServerWidget.java
index 86f255f..dabeecd 100644
--- a/src/main/java/org/onap/aai/babel/xml/generator/model/VServerWidget.java
+++ b/src/main/java/org/onap/aai/babel/xml/generator/model/VServerWidget.java
@@ -1,5 +1,5 @@
/**
- * ============LICENSE_START=======================================================
+ * ============LICENSE_START=======================================================
* org.onap.aai
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
@@ -29,7 +29,7 @@ import org.onap.aai.babel.xml.generator.types.ModelWidget;
@ModelWidget(type = ModelType.WIDGET, name = "vserver")
public class VServerWidget extends Widget {
- /** Instantiates a new V server widget. */
+ /** Instantiates a new vserver widget. */
public VServerWidget() {
addWidget(new FlavorWidget());
addWidget(new ImageWidget());
diff --git a/src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java b/src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java
index 7f39438..75beb4f 100644
--- a/src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java
+++ b/src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java
@@ -20,16 +20,21 @@
*/
package org.onap.aai.babel.xml.generator.model;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
import java.util.Collections;
+import java.util.EnumMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Properties;
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.ArtifactType;
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;
+import org.onap.aai.cl.api.Logger;
public abstract class Widget extends Model {
@@ -39,8 +44,30 @@ public abstract class Widget extends Model {
SERVICE, VF, VFC, VSERVER, VOLUME, FLAVOR, TENANT, VOLUME_GROUP, LINT, L3_NET, VFMODULE, IMAGE, OAM_NETWORK, ALLOTTED_RESOURCE, TUNNEL_XCONNECT, CONFIGURATION;
}
+ private static Logger log = LogHelper.INSTANCE;
+
private Set<String> keys = new HashSet<>();
+ private static EnumMap<Widget.Type, Class<? extends Widget>> typeToWidget = new EnumMap<>(Widget.Type.class);
+ static {
+ typeToWidget.put(Type.SERVICE, ServiceWidget.class);
+ typeToWidget.put(Type.VF, VfWidget.class);
+ typeToWidget.put(Type.VFC, VfcWidget.class);
+ typeToWidget.put(Type.VSERVER, VServerWidget.class);
+ typeToWidget.put(Type.VOLUME, VolumeWidget.class);
+ typeToWidget.put(Type.FLAVOR, FlavorWidget.class);
+ typeToWidget.put(Type.TENANT, TenantWidget.class);
+ typeToWidget.put(Type.VOLUME_GROUP, VolumeGroupWidget.class);
+ typeToWidget.put(Type.LINT, LIntfWidget.class);
+ typeToWidget.put(Type.L3_NET, L3NetworkWidget.class);
+ typeToWidget.put(Type.VFMODULE, VfModuleWidget.class);
+ typeToWidget.put(Type.IMAGE, ImageWidget.class);
+ typeToWidget.put(Type.OAM_NETWORK, OamNetwork.class);
+ typeToWidget.put(Type.ALLOTTED_RESOURCE, AllotedResourceWidget.class);
+ typeToWidget.put(Type.TUNNEL_XCONNECT, TunnelXconnectWidget.class);
+ typeToWidget.put(Type.CONFIGURATION, ConfigurationWidget.class);
+ }
+
/**
* Gets widget.
*
@@ -49,42 +76,17 @@ public abstract class Widget extends Model {
* @return the widget
*/
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();
- case CONFIGURATION:
- return new ConfigurationWidget();
- default:
- return null;
+ Widget widget = null;
+ Class<? extends Widget> clazz = typeToWidget.get(type);
+ if (clazz != null) {
+ try {
+ widget = clazz.getConstructor().newInstance();
+ } catch (InstantiationException | java.lang.IllegalAccessException | IllegalArgumentException
+ | InvocationTargetException | NoSuchMethodException | SecurityException e) {
+ log.error(ApplicationMsgs.INVALID_CSAR_FILE, e);
+ }
}
+ return widget;
}
public String getId() {
@@ -134,23 +136,23 @@ public abstract class Widget extends Model {
}
/**
- * Equals.
+ * Equals method that compares Widget IDs.
*
* @param obj
- * Object
- * @return the boolean
+ * 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) {
@@ -158,32 +160,19 @@ 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
* @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(Model.GENERATOR_AAI_ERROR_UNSUPPORTED_WIDGET_OPERATION);