diff options
author | mark.j.leonard <mark.j.leonard@gmail.com> | 2018-07-06 14:16:22 +0100 |
---|---|---|
committer | mark.j.leonard <mark.j.leonard@gmail.com> | 2018-07-06 14:16:28 +0100 |
commit | eac1772091f6776ff33f4f8fff4da2d4a3afe85c (patch) | |
tree | ed3dae36859e2bec23f14b0c16b0f776fd9f3f41 | |
parent | 5d7c9960d7fd51e79b19adafcc2b2625ea474ed6 (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.java | 4 | ||||
-rw-r--r-- | src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java | 109 |
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); |