diff options
19 files changed, 294 insertions, 251 deletions
diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/AbstractResolver.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/AbstractResolver.java index 78dd780d4..2f1050fb8 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/AbstractResolver.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/AbstractResolver.java @@ -32,21 +32,25 @@ import org.onap.appc.rankingframework.RankedAttributesResolver; abstract class AbstractResolver { private static final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractResolver.class); + private static final long INTERVAL_MULTIPLIER = 1000L; private long interval; - - private volatile long lastUpdate = 0l; + private volatile long lastUpdate = 0L; private volatile boolean isUpdateInProgress = false; private volatile RankedAttributesResolver<FlowKey> dgResolver; - private final ReentrantLock INIT_LOCK = new ReentrantLock(); + private final ReentrantLock initLock = new ReentrantLock(); AbstractResolver(int interval) { - this.interval = interval * 1000l; + this.interval = interval * INTERVAL_MULTIPLIER; } private RankedAttributesResolver<FlowKey> createResolver(String resolverType) { AbstractResolverDataReader reader = ResolverDataReaderFactory.createResolverDataReader(resolverType); + + if (reader == null) { + throw new DataReaderException("Cannot read data since reader is null"); + } return reader.read(); } @@ -55,29 +59,25 @@ abstract class AbstractResolver { } protected RankedAttributesResolver<FlowKey> resolver(String resolverType) { - /* * In general case, the method implementation is non-blocking. The first * thread that identifies data expiration will be used to refresh it. In * meanwhile, any other thread will get the old instance without waiting * for the updated one. The only exception is the very first time when * previous instance doesn't exist - in such a cases all the threads - * will be waiting on INIT_LOCK while one of them initializes the + * will be waiting on initLock while one of them initializes the * resolver instance. NOTE: The initialization is intentionally * implemented in lazy manner to make sure the bundle is initialized * properly on startup regardless whether or not the data is correct. * Afterwards, the resolver may be instantiated as many times as needed. */ - try { - if (dgResolver == null) { - INIT_LOCK.lock(); + initLock.lock(); if (dgResolver != null) { - INIT_LOCK.unlock(); + initLock.unlock(); } } - if (!isUpdateInProgress && isExpired()) { boolean doUpgrade = false; @@ -88,30 +88,29 @@ abstract class AbstractResolver { doUpgrade = true; } } - if (doUpgrade) { - logger.info("DG resolver configuration data has expired - initiating refresh"); - - try { - RankedAttributesResolver<FlowKey> temp = createResolver(resolverType); - dgResolver = temp; - lastUpdate = System.currentTimeMillis(); - - logger.info("DG resolver configuration data has been refreshed successfully"); - } finally { - isUpdateInProgress = false; - } + tryRefreshConfig(resolverType); } } } finally { - if (INIT_LOCK.isHeldByCurrentThread()) { - INIT_LOCK.unlock(); + if (initLock.isHeldByCurrentThread()) { + initLock.unlock(); } } - return dgResolver; } + private void tryRefreshConfig(String resolverType) { + try { + dgResolver = createResolver(resolverType); + lastUpdate = System.currentTimeMillis(); + + logger.info("DG resolver configuration data has been refreshed successfully"); + } finally { + isUpdateInProgress = false; + } + } + protected abstract FlowKey resolve(final String... args); } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/Constants.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/Constants.java index 9009f3c62..1e62dcc66 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/Constants.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/Constants.java @@ -52,12 +52,31 @@ class Constants { public static final String CVAAS_FILE_NAME = "cvaas-file-name"; public static final String CVAAS_FILE_CONTENT = "cvaas-file-content"; + // DG Resolver Constants + public static final String IN_PARAM_VNF_TYPE = "vnfType"; + public static final String IN_PARAM_VNFC_TYPE = "vnfcType"; + public static final String IN_PARAM_ACTION = "action"; + public static final String IN_PARAM_API_VERSION = "api-ver"; + + public static final String OUT_PARAM_DG_NAME = "dg_name"; + public static final String OUT_PARAM_DG_VERSION = "dg_version"; + public static final String OUT_PARAM_DG_MODULE = "dg_module"; + + public static final String TABLE_NAME = "VNFC_DG_MAPPING"; + public static final String TABLE_COLUMN_VNF_TYPE = "VNF_TYPE"; + public static final String TABLE_COLUMN_VNFC_TYPE = "VNFC_TYPE"; + public static final String TABLE_COLUMN_ACTION = "ACTION"; + public static final String TABLE_COLUMN_API_VERSION = "API_VERSION"; + public static final String TABLE_COLUMN_DG_NAME = "DG_NAME"; + public static final String TABLE_COLUMN_DG_VERSION = "DG_VERSION"; + public static final String TABLE_COLUMN_DG_MODULE = "DG_MODULE"; + enum LegacyAttributes { - Action("org.onap.appc.action"), + ACTION("org.onap.appc.action"), VMID("org.onap.appc.vmid"), - IdentityURL("org.onap.appc.identity.url"), - TenantID("org.onap.appc.tenant.id"), - SkipHypervisorCheck("org.onap.appc.skiphypervisorcheck"); + IDENTITY_URL("org.onap.appc.identity.url"), + TENANT_ID("org.onap.appc.tenant.id"), + SKIP_HYPERVISOR_CHECK("org.onap.appc.skiphypervisorcheck"); private String value; @@ -70,15 +89,13 @@ class Constants { } } - ; - enum LCMAttributes { - Action("input.action"), - Payload("input.payload"), + ACTION("input.action"), + PAYLOAD("input.payload"), VMID("vm-id"), - IdentityURL("identity-url"), - TenantID("tenant.id"), - SkipHypervisorCheck("skip-hypervisor-check"); + IDENTITY_URL("identity-url"), + TENANT_ID("tenant.id"), + SKIP_HYPERVISOR_CHECK("skip-hypervisor-check"); private String value; @@ -90,25 +107,4 @@ class Constants { return value; } } - - ; - - // DG Resolver Constants - public static final String IN_PARAM_VNF_TYPE = "vnfType"; - public static final String IN_PARAM_VNFC_TYPE = "vnfcType"; - public static final String IN_PARAM_ACTION = "action"; - public static final String IN_PARAM_API_VERSION = "api-ver"; - - public static final String OUT_PARAM_DG_NAME = "dg_name"; - public static final String OUT_PARAM_DG_VERSION = "dg_version"; - public static final String OUT_PARAM_DG_MODULE = "dg_module"; - - public static final String TABLE_NAME = "VNFC_DG_MAPPING"; - public static final String TABLE_COLUMN_VNF_TYPE = "VNF_TYPE"; - public static final String TABLE_COLUMN_VNFC_TYPE = "VNFC_TYPE"; - public static final String TABLE_COLUMN_ACTION = "ACTION"; - public static final String TABLE_COLUMN_API_VERSION = "API_VERSION"; - public static final String TABLE_COLUMN_DG_NAME = "DG_NAME"; - public static final String TABLE_COLUMN_DG_VERSION = "DG_VERSION"; - public static final String TABLE_COLUMN_DG_MODULE = "DG_MODULE"; } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DCAEReporterPluginImpl.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DCAEReporterPluginImpl.java index f0e7674ee..c66a54ad4 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DCAEReporterPluginImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DCAEReporterPluginImpl.java @@ -37,6 +37,9 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicContext; public class DCAEReporterPluginImpl implements DCAEReporterPlugin { + private static final String ATTR_API_VERSION = "input.common-header.api-ver"; + private static final String ATTR_REQUEST_ID = "input.common-header.request-id"; + private static final String PARAM_EVENT_TOPIC_NAME = "event-topic-name"; private EventSender eventSender; public DCAEReporterPluginImpl() { @@ -54,7 +57,9 @@ public class DCAEReporterPluginImpl implements DCAEReporterPlugin { @Override public void report(Map<String, String> params, SvcLogicContext ctx) throws APPCException { - String errorDescription, apiVersion, eventId; + String errorDescription; + String apiVersion; + String eventId; Integer errorCode = readErrorCode(params, ctx); errorDescription = params.get(Constants.EVENT_MESSAGE); @@ -62,13 +67,13 @@ public class DCAEReporterPluginImpl implements DCAEReporterPlugin { if (StringUtils.isEmpty(errorDescription)) { reportLegacy(params, ctx); } else { - apiVersion = ctx.getAttribute("input.common-header.api-ver"); - eventId = ctx.getAttribute("input.common-header.request-id"); + apiVersion = ctx.getAttribute(ATTR_API_VERSION); + eventId = ctx.getAttribute(ATTR_REQUEST_ID); EventMessage eventMessage = new EventMessage(new EventHeader( (new java.util.Date()).toString(), apiVersion, eventId), new EventStatus(errorCode, errorDescription)); - String eventWriteTopic = params.get("event-topic-name"); + String eventWriteTopic = params.get(PARAM_EVENT_TOPIC_NAME); if (!StringUtils.isEmpty(eventWriteTopic) && eventWriteTopic != null) { eventSender.sendEvent(MessageDestination.DCAE, eventMessage, eventWriteTopic); } else { @@ -93,15 +98,18 @@ public class DCAEReporterPluginImpl implements DCAEReporterPlugin { @Override public void reportSuccess(Map<String, String> params, SvcLogicContext ctx) throws APPCException { Integer successReportCode = 500; - String successDescription, apiVersion, eventId; + String successDescription; + String apiVersion; + String eventId; + successDescription = params.get(Constants.EVENT_MESSAGE); if (StringUtils.isEmpty(successDescription)) { successDescription = params.get(Constants.DG_OUTPUT_STATUS_MESSAGE); } - apiVersion = ctx.getAttribute("input.common-header.api-ver"); - eventId = ctx.getAttribute("input.common-header.request-id"); + apiVersion = ctx.getAttribute(ATTR_API_VERSION); + eventId = ctx.getAttribute(ATTR_REQUEST_ID); if (null == successDescription) { successDescription = "Success"; @@ -109,7 +117,7 @@ public class DCAEReporterPluginImpl implements DCAEReporterPlugin { EventMessage eventMessage = new EventMessage(new EventHeader( (new java.util.Date()).toString(), apiVersion, eventId), new EventStatus(successReportCode, successDescription)); - String eventWriteTopic = params.get("event-topic-name"); + String eventWriteTopic = params.get(PARAM_EVENT_TOPIC_NAME); if (!StringUtils.isEmpty(eventWriteTopic) && eventWriteTopic != null) { eventSender.sendEvent(MessageDestination.DCAE, eventMessage, eventWriteTopic); } else { @@ -118,18 +126,20 @@ public class DCAEReporterPluginImpl implements DCAEReporterPlugin { } private void reportLegacy(Map<String, String> params, SvcLogicContext ctx) throws APPCException { - String errorDescription, apiVersion, eventId; + String errorDescription; + String apiVersion; + String eventId; Integer errorCode = readErrorCode(params, ctx); errorDescription = getErrorDescriptionAndAddToCtx(params, ctx); - apiVersion = ctx.getAttribute("input.common-header.api-ver"); - eventId = ctx.getAttribute("input.common-header.request-id"); + apiVersion = ctx.getAttribute(ATTR_API_VERSION); + eventId = ctx.getAttribute(ATTR_REQUEST_ID); EventMessage eventMessage = new EventMessage(new EventHeader( (new java.util.Date()).toString(), apiVersion, eventId), new EventStatus(errorCode, errorDescription)); - String eventWriteTopic = params.get("event-topic-name"); + String eventWriteTopic = params.get(PARAM_EVENT_TOPIC_NAME); if (!StringUtils.isEmpty(eventWriteTopic) && eventWriteTopic != null) { eventSender.sendEvent(MessageDestination.DCAE, eventMessage, eventWriteTopic); } else { @@ -140,6 +150,7 @@ public class DCAEReporterPluginImpl implements DCAEReporterPlugin { private String getErrorDescriptionAndAddToCtx(Map<String, String> params, SvcLogicContext ctx) { String errorDescription; errorDescription = params.get(Constants.DG_OUTPUT_STATUS_MESSAGE); + if (StringUtils.isEmpty(errorDescription)) { errorDescription = ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE); } @@ -162,5 +173,4 @@ public class DCAEReporterPluginImpl implements DCAEReporterPlugin { ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, errorDescriptionFromCtx + " | " + errorDescription); } } - } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DataReaderException.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DataReaderException.java index f12a83b04..742ff123d 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DataReaderException.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DataReaderException.java @@ -29,4 +29,8 @@ public class DataReaderException extends RuntimeException { public DataReaderException(Throwable cause) { super(cause); } + + public DataReaderException(String message) { + super(message); + } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DgResolverException.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DgResolverException.java new file mode 100644 index 000000000..260fd7752 --- /dev/null +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DgResolverException.java @@ -0,0 +1,12 @@ +package org.onap.appc.dg.common.impl; + +public class DgResolverException extends RuntimeException{ + + public DgResolverException(String message) { + super(message); + } + + public DgResolverException(Throwable cause) { + super(cause); + } +} diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DgResolverPluginImpl.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DgResolverPluginImpl.java index 5b98dd941..ade2cbb16 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DgResolverPluginImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/DgResolverPluginImpl.java @@ -33,33 +33,40 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicContext; public class DgResolverPluginImpl implements DgResolverPlugin { + private static final String PARAM_DG_RESOLUTION_TYPE = "DGResolutionType"; + @Override public void resolveDg(Map<String, String> params, SvcLogicContext ctx) throws APPCException { - String DGName, DGVersion, DGModule = null; + String dgName; + String dgVersion; + String dgModule; + String prefix = params.containsKey("prefix") ? params.get("prefix") + "." : ""; - AbstractResolver resolver = ResolverFactory.createResolver(params.get("DGResolutionType")); + AbstractResolver resolver = ResolverFactory.createResolver(params.get(PARAM_DG_RESOLUTION_TYPE)); FlowKey flowKey = null; try { + if (resolver == null) + throw new DgResolverException("Couldn't create resolver of type: " + PARAM_DG_RESOLUTION_TYPE); - if (params.get("DGResolutionType").equalsIgnoreCase("VNFC")) { + if ("VNFC".equalsIgnoreCase(params.get(PARAM_DG_RESOLUTION_TYPE))) { flowKey = resolver .resolve(params.get(Constants.IN_PARAM_ACTION), params.get(Constants.IN_PARAM_VNF_TYPE), params.get(Constants.IN_PARAM_VNFC_TYPE), params.get(Constants.IN_PARAM_API_VERSION)); - } else if (params.get("DGResolutionType").equalsIgnoreCase("VNF")) { + } else if ("VNF".equalsIgnoreCase(params.get(PARAM_DG_RESOLUTION_TYPE))) { flowKey = resolver .resolve(params.get(Constants.IN_PARAM_ACTION), params.get(Constants.IN_PARAM_VNF_TYPE), params.get("vnfVersion"), params.get(Constants.IN_PARAM_API_VERSION)); } if (flowKey != null) { - DGName = flowKey.name(); - ctx.setAttribute(prefix + Constants.OUT_PARAM_DG_NAME, DGName); - DGVersion = flowKey.version(); - ctx.setAttribute(prefix + Constants.OUT_PARAM_DG_VERSION, DGVersion); - DGModule = flowKey.module(); - ctx.setAttribute(prefix + Constants.OUT_PARAM_DG_MODULE, DGModule); + dgName = flowKey.name(); + ctx.setAttribute(prefix + Constants.OUT_PARAM_DG_NAME, dgName); + dgVersion = flowKey.version(); + ctx.setAttribute(prefix + Constants.OUT_PARAM_DG_VERSION, dgVersion); + dgModule = flowKey.module(); + ctx.setAttribute(prefix + Constants.OUT_PARAM_DG_MODULE, dgModule); } else { - throw new RuntimeException(params.get("DGResolutionType") + " DG not found for vnf type :" + params + throw new DgResolverException(params.get(PARAM_DG_RESOLUTION_TYPE) + " DG not found for vnf type :" + params .get(Constants.IN_PARAM_VNF_TYPE) + " vnfc type : " + params.get(Constants.IN_PARAM_VNFC_TYPE) + " action : " + params.get(Constants.IN_PARAM_ACTION) @@ -69,7 +76,7 @@ public class DgResolverPluginImpl implements DgResolverPlugin { String msg = EELFResourceManager .format(Msg.FAILURE_RETRIEVE_VNFC_DG, params.get(Constants.IN_PARAM_VNFC_TYPE), e.getMessage()); ctx.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg); - throw new RuntimeException(e); + throw new DgResolverException(e); } } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/IntermediateMessageSenderImpl.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/IntermediateMessageSenderImpl.java index d9caf8f19..4010fd758 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/IntermediateMessageSenderImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/IntermediateMessageSenderImpl.java @@ -29,6 +29,7 @@ import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Properties; @@ -47,12 +48,12 @@ import org.osgi.framework.ServiceReference; public class IntermediateMessageSenderImpl implements IntermediateMessageSender { + private final EELFLogger logger = EELFManager.getInstance().getLogger(IntermediateMessageSenderImpl.class); - private Producer producer; - - private Configuration configuration; + private static final String PARAM_MESSAGE = "message"; + private static final String ATTR_REQUEST_ID = "input.common-header.request-id"; - private final EELFLogger logger = EELFManager.getInstance().getLogger(IntermediateMessageSenderImpl.class); + private Producer producer; private static final String STATUS = "STATUS"; private static final String FAILURE = "FAILURE"; @@ -63,8 +64,7 @@ public class IntermediateMessageSenderImpl implements IntermediateMessageSender private static final String MSO = "MSO"; public void init() { - configuration = ConfigurationFactory.getConfiguration(); - Properties properties = configuration.getProperties(); + Properties properties = ConfigurationFactory.getConfiguration().getProperties(); String writeTopic = properties.getProperty("appc.LCM.topic.write"); String apiKey = properties.getProperty("appc.LCM.client.key"); @@ -76,9 +76,7 @@ public class IntermediateMessageSenderImpl implements IntermediateMessageSender Set<String> pool = new HashSet<>(); if (!StringUtils.isEmpty(hostNames)) { - for (String name : hostNames.split(",")) { - pool.add(name); - } + pool.addAll(Arrays.asList(hostNames.split(","))); } BundleContext ctx = FrameworkUtil.getBundle(IntermediateMessageSenderImpl.class).getBundleContext(); @@ -111,11 +109,11 @@ public class IntermediateMessageSenderImpl implements IntermediateMessageSender private void validateInputs(Map<String, String> params, SvcLogicContext context) throws APPCException { String code = params.get("code"); - String message = params.get("message"); + String message = params.get(PARAM_MESSAGE); if (StringUtils.isEmpty(code) || StringUtils.isEmpty(message)) { throw new APPCException("code or message is empty"); } - String requestId = context.getAttribute("input.common-header.request-id"); + String requestId = context.getAttribute(ATTR_REQUEST_ID); if (StringUtils.isEmpty(requestId)) { throw new APPCException("requestId is empty"); } @@ -145,7 +143,7 @@ public class IntermediateMessageSenderImpl implements IntermediateMessageSender } private String getCorrelationId(SvcLogicContext context) { - String requestId = context.getAttribute("input.common-header.request-id"); + String requestId = context.getAttribute(ATTR_REQUEST_ID); String subRequestId = context.getAttribute("input.common-header.sub-request-id"); return requestId + (StringUtils.isEmpty(subRequestId) ? "" : ("-" + subRequestId)); } @@ -154,7 +152,7 @@ public class IntermediateMessageSenderImpl implements IntermediateMessageSender ObjectMapper objectMapper = new ObjectMapper(); ObjectNode status = objectMapper.createObjectNode(); status.put("code", params.get("code")); - status.put("message", params.get("message")); + status.put(PARAM_MESSAGE, params.get(PARAM_MESSAGE)); return status; } @@ -164,7 +162,7 @@ public class IntermediateMessageSenderImpl implements IntermediateMessageSender commonHeader.put("api-ver", context.getAttribute("input.common-header.api-ver")); commonHeader.put("timestamp", context.getAttribute("input.common-header.timestamp")); commonHeader.put("originator-id", context.getAttribute("input.common-header.originator-id")); - commonHeader.put("request-id", context.getAttribute("input.common-header.request-id")); + commonHeader.put("request-id", context.getAttribute(ATTR_REQUEST_ID)); commonHeader.put("sub-request-id", context.getAttribute("input.common-header.sub-request-id")); return commonHeader; } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/JsonDgUtilImpl.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/JsonDgUtilImpl.java index 3d43dc1cd..16488e242 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/JsonDgUtilImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/JsonDgUtilImpl.java @@ -47,11 +47,8 @@ public class JsonDgUtilImpl implements JsonDgUtil { private static final EELFLogger logger = EELFManager.getInstance().getLogger(JsonDgUtilImpl.class); - private static final ThreadLocal<SimpleDateFormat> DATE_TIME_PARSER_THREAD_LOCAL = new ThreadLocal<SimpleDateFormat>() { - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - } - }; + private static final ThreadLocal<SimpleDateFormat> DATE_TIME_PARSER_THREAD_LOCAL = ThreadLocal + .withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); @Override public void flatAndAddToContext(Map<String, String> params, SvcLogicContext ctx) throws APPCException { @@ -69,11 +66,7 @@ public class JsonDgUtilImpl implements JsonDgUtil { } if (!StringUtils.isEmpty(payload)) { Map<String, String> flatMap = JsonUtil.convertJsonStringToFlatMap(payload); - if (flatMap != null && flatMap.size() > 0) { - for (Map.Entry<String, String> entry : flatMap.entrySet()) { - ctx.setAttribute(entry.getKey(), entry.getValue()); - } - } + tryUpdateContext(ctx, flatMap); } else { logger.warn("input payload param value is empty (\"\") or null"); } @@ -85,6 +78,14 @@ public class JsonDgUtilImpl implements JsonDgUtil { } } + private void tryUpdateContext(SvcLogicContext ctx, Map<String, String> flatMap) { + if (flatMap != null && flatMap.size() > 0) { + for (Map.Entry<String, String> entry : flatMap.entrySet()) { + ctx.setAttribute(entry.getKey(), entry.getValue()); + } + } + } + @Override public void generateOutputPayloadFromContext(Map<String, String> params, SvcLogicContext ctx) throws APPCException { if (logger.isTraceEnabled()) { @@ -95,30 +96,12 @@ public class JsonDgUtilImpl implements JsonDgUtil { try { Set<String> keys = ctx.getAttributeKeySet(); ObjectMapper objectMapper = new ObjectMapper(); - ObjectNode JsonNode = objectMapper.createObjectNode(); + ObjectNode jsonNode = objectMapper.createObjectNode(); for (String key : keys) { - if (key.startsWith(Constants.OUTPUT_PAYLOAD + ".")) { - String objkey = key.replaceFirst(Constants.OUTPUT_PAYLOAD + ".", ""); - if (objkey.contains("[") && objkey.contains("]")) { - ArrayNode arrayNode; - String arrayKey = objkey.substring(0, objkey.indexOf('[')); - int arrayIndex = Integer - .parseInt(objkey.substring(objkey.indexOf('[') + 1, objkey.indexOf(']'))); - if (JsonNode.has(arrayKey)) { - arrayNode = (ArrayNode) JsonNode.get(arrayKey); - arrayNode.insert(arrayIndex, ctx.getAttribute(key)); - } else { - arrayNode = objectMapper.createArrayNode(); - arrayNode.insert(arrayIndex, ctx.getAttribute(key)); - JsonNode.put(arrayKey, arrayNode); - } - } else { - JsonNode.put(objkey, ctx.getAttribute(key)); - } - } + updateJsonNode(ctx, objectMapper, jsonNode, key); } - if (JsonNode.size() > 0) { - ctx.setAttribute(Constants.OUTPUT_PAYLOAD, objectMapper.writeValueAsString(JsonNode)); + if (jsonNode.size() > 0) { + ctx.setAttribute(Constants.OUTPUT_PAYLOAD, objectMapper.writeValueAsString(jsonNode)); } } catch (Exception e) { logger.error(e.toString()); @@ -128,6 +111,28 @@ public class JsonDgUtilImpl implements JsonDgUtil { } + private void updateJsonNode(SvcLogicContext ctx, ObjectMapper objectMapper, ObjectNode jsonNode, String key) { + if (key.startsWith(Constants.OUTPUT_PAYLOAD + ".")) { + String objkey = key.replaceFirst(Constants.OUTPUT_PAYLOAD + ".", ""); + if (objkey.contains("[") && objkey.contains("]")) { + ArrayNode arrayNode; + String arrayKey = objkey.substring(0, objkey.indexOf('[')); + int arrayIndex = Integer + .parseInt(objkey.substring(objkey.indexOf('[') + 1, objkey.indexOf(']'))); + if (jsonNode.has(arrayKey)) { + arrayNode = (ArrayNode) jsonNode.get(arrayKey); + arrayNode.insert(arrayIndex, ctx.getAttribute(key)); + } else { + arrayNode = objectMapper.createArrayNode(); + arrayNode.insert(arrayIndex, ctx.getAttribute(key)); + jsonNode.put(arrayKey, arrayNode); + } + } else { + jsonNode.put(objkey, ctx.getAttribute(key)); + } + } + } + @Override public void cvaasFileNameAndFileContentToContext(Map<String, String> params, SvcLogicContext ctx) throws APPCException { diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/LegacyUtilImpl.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/LegacyUtilImpl.java index 400dadb34..8da7d5d92 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/LegacyUtilImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/LegacyUtilImpl.java @@ -35,31 +35,33 @@ public class LegacyUtilImpl implements LegacyUtil { @Override public void prepareRequest(Map<String, String> params, SvcLogicContext ctx) throws APPCException { - ctx.setAttribute(Constants.LegacyAttributes.Action.getValue(), - ctx.getAttribute(Constants.LCMAttributes.Action.getValue()).toLowerCase()); + ctx.setAttribute(Constants.LegacyAttributes.ACTION.getValue(), + ctx.getAttribute(Constants.LCMAttributes.ACTION.getValue()).toLowerCase()); - String payloadStr = ctx.getAttribute(Constants.LCMAttributes.Payload.getValue()); + String payloadStr = ctx.getAttribute(Constants.LCMAttributes.PAYLOAD.getValue()); Map<String, String> payloads = JSONUtil.extractPlainValues(payloadStr, - Constants.LCMAttributes.VMID.getValue(), Constants.LCMAttributes.IdentityURL.getValue(), - Constants.LCMAttributes.TenantID.getValue(), - Constants.LCMAttributes.SkipHypervisorCheck.getValue()); + Constants.LCMAttributes.VMID.getValue(), Constants.LCMAttributes.IDENTITY_URL.getValue(), + Constants.LCMAttributes.TENANT_ID.getValue(), + Constants.LCMAttributes.SKIP_HYPERVISOR_CHECK.getValue()); ctx.setAttribute(Constants.LegacyAttributes.VMID.getValue(), payloads.get(Constants.LCMAttributes.VMID.getValue())); - ctx.setAttribute(Constants.LegacyAttributes.IdentityURL.getValue(), - payloads.get(Constants.LCMAttributes.IdentityURL.getValue())); - ctx.setAttribute(Constants.LegacyAttributes.TenantID.getValue(), - payloads.get(Constants.LCMAttributes.TenantID.getValue())); - ctx.setAttribute(Constants.LegacyAttributes.SkipHypervisorCheck.getValue(), - payloads.get(Constants.LCMAttributes.SkipHypervisorCheck.getValue())); + ctx.setAttribute(Constants.LegacyAttributes.IDENTITY_URL.getValue(), + payloads.get(Constants.LCMAttributes.IDENTITY_URL.getValue())); + ctx.setAttribute(Constants.LegacyAttributes.TENANT_ID.getValue(), + payloads.get(Constants.LCMAttributes.TENANT_ID.getValue())); + ctx.setAttribute(Constants.LegacyAttributes.SKIP_HYPERVISOR_CHECK.getValue(), + payloads.get(Constants.LCMAttributes.SKIP_HYPERVISOR_CHECK.getValue())); } @Override public void convertPositiveResponse(Map<String, String> params, SvcLogicContext ctx) throws APPCException { + /*TODO implement this method*/ } @Override public void convertNegativeResponse(Map<String, String> params, SvcLogicContext ctx) throws APPCException { + /*TODO implement this method*/ } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/OutputMessagePluginImpl.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/OutputMessagePluginImpl.java index cd385c9d2..f6e24b5d9 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/OutputMessagePluginImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/OutputMessagePluginImpl.java @@ -35,7 +35,8 @@ public class OutputMessagePluginImpl implements OutputMessagePlugin { @Override public void outputMessageBuilder(Map<String, String> params, SvcLogicContext ctx) throws APPCException { - String errorDescription, eventDescription; + String errorDescription; + String eventDescription; //making output.status.message errorDescription = params.get(Constants.ATTRIBUTE_ERROR_MESSAGE); @@ -52,23 +53,22 @@ public class OutputMessagePluginImpl implements OutputMessagePlugin { } } - public static void addToContextIfNotContains(String errorDescription, String eventDescription, + private static void addToContextIfNotContains(String errorDescription, String eventDescription, SvcLogicContext ctx) { if (!isEmpty(errorDescription)) { - if (isEmpty(ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE))) { - ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, errorDescription); - } else if (!ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE).contains(errorDescription)) { - ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, - ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE) + " | " + errorDescription); - } + updateContext(errorDescription, ctx); } if (!isEmpty(eventDescription)) { - if (isEmpty(ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE))) { - ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, eventDescription); - } else if (!ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE).contains(eventDescription)) { - ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, - ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE) + " | " + eventDescription); - } + updateContext(eventDescription, ctx); + } + } + + private static void updateContext(String eventDescription, SvcLogicContext ctx) { + if (isEmpty(ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE))) { + ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, eventDescription); + } else if (!ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE).contains(eventDescription)) { + ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, + ctx.getAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE) + " | " + eventDescription); } } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/ResolverDataReaderFactory.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/ResolverDataReaderFactory.java index 15e4ab681..c71614766 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/ResolverDataReaderFactory.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/ResolverDataReaderFactory.java @@ -31,20 +31,24 @@ public class ResolverDataReaderFactory { private static final Configuration configuration = ConfigurationFactory.getConfiguration(); - private static class ReferenceHolder { - - private static final AbstractResolverDataReader VNFC_RESOLVER_DATA_READER = new VNFCResolverDataReader(); - - private static final AbstractResolverDataReader VNF_RESOLVER_DATA_READER = new VNFResolverDataReader(); - } + private ResolverDataReaderFactory() {} public static AbstractResolverDataReader createResolverDataReader(String resolverType) { - if (resolverType.equalsIgnoreCase("VNF")) { + if ("VNF".equalsIgnoreCase(resolverType)) { return ReferenceHolder.VNF_RESOLVER_DATA_READER; - } else if (resolverType.equalsIgnoreCase("VNFC")) { + } else if ("VNFC".equalsIgnoreCase(resolverType)) { return ReferenceHolder.VNFC_RESOLVER_DATA_READER; } else { return null; } } + + private static class ReferenceHolder { + + private static final AbstractResolverDataReader VNFC_RESOLVER_DATA_READER = new VNFCResolverDataReader(); + + private static final AbstractResolverDataReader VNF_RESOLVER_DATA_READER = new VNFResolverDataReader(); + + private ReferenceHolder() {} + } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/ResolverFactory.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/ResolverFactory.java index be71dae8d..6474836dc 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/ResolverFactory.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/ResolverFactory.java @@ -31,21 +31,25 @@ public class ResolverFactory { private static final Configuration configuration = ConfigurationFactory.getConfiguration(); - private static class ReferenceHolder { - - private static final AbstractResolver VNFC_RESOLVER = new VNFCResolver( - configuration.getIntegerProperty("org.onap.appc.workflow.resolver.refresh_interval", 300)); - private static final AbstractResolver VNF_RESOLVER = new VNFResolver( - configuration.getIntegerProperty("org.onap.appc.workflow.resolver.refresh_interval", 300)); - } + private ResolverFactory() {} public static AbstractResolver createResolver(String resolverType) { - if (resolverType.equalsIgnoreCase("VNF")) { + if ("VNF".equalsIgnoreCase(resolverType)) { return ReferenceHolder.VNF_RESOLVER; - } else if (resolverType.equalsIgnoreCase("VNFC")) { + } else if ("VNFC".equalsIgnoreCase(resolverType)) { return ReferenceHolder.VNFC_RESOLVER; } else { return null; } } + + private static class ReferenceHolder { + + private static final AbstractResolver VNFC_RESOLVER = new VNFCResolver( + configuration.getIntegerProperty("org.onap.appc.workflow.resolver.refresh_interval", 300)); + private static final AbstractResolver VNF_RESOLVER = new VNFResolver( + configuration.getIntegerProperty("org.onap.appc.workflow.resolver.refresh_interval", 300)); + + private ReferenceHolder(){} + } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VNFCResolver.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VNFCResolver.java index a6b5e656f..5766e8de2 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VNFCResolver.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VNFCResolver.java @@ -24,6 +24,7 @@ package org.onap.appc.dg.common.impl; +import java.util.Arrays; import org.onap.appc.rankingframework.RankedAttributesContext; @@ -36,34 +37,28 @@ public class VNFCResolver extends AbstractResolver { @Override protected FlowKey resolve(String... args) { if (args.length != 4) { - throw new IllegalStateException(args.toString()); + throw new IllegalStateException(Arrays.toString(args)); } return resolve(args[0], args[1], args[2], args[3]); } - protected FlowKey resolve(final String action, final String vnfType, final String vnfcType, + private FlowKey resolve(final String action, final String vnfType, final String vnfcType, final String apiVersion) { - RankedAttributesContext context = new RankedAttributesContext() { - @Override - public Object getAttributeValue(String name) { - switch (name) { - case "action": - return action; - case "api_version": - return apiVersion; - case "vnf_type": - return vnfType; - case "vnfc_type": - return vnfcType; - default: - throw new IllegalStateException(name); - } + RankedAttributesContext context = name -> { + switch (name) { + case "action": + return action; + case "api_version": + return apiVersion; + case "vnf_type": + return vnfType; + case "vnfc_type": + return vnfcType; + default: + throw new IllegalStateException(name); } }; - - FlowKey wfKey = resolver("VNFC").resolve(context); - - return wfKey; + return resolver("VNFC").resolve(context); } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VNFResolver.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VNFResolver.java index 10d4fffc3..37033703f 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VNFResolver.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VNFResolver.java @@ -37,29 +37,22 @@ public class VNFResolver extends AbstractResolver { return resolve(args[0], args[1], args[2], args[3]); } - - protected FlowKey resolve(final String action, final String vnfType, final String vnfVersion, + private FlowKey resolve(final String action, final String vnfType, final String vnfVersion, final String apiVersion) { - RankedAttributesContext context = new RankedAttributesContext() { - @Override - public Object getAttributeValue(String name) { - switch (name) { - case "action": - return action; - case "api_version": - return apiVersion; - case "vnf_type": - return vnfType; - case "vnf_version": - return vnfVersion; - default: - throw new IllegalStateException(name); - } + RankedAttributesContext context = name -> { + switch (name) { + case "action": + return action; + case "api_version": + return apiVersion; + case "vnf_type": + return vnfType; + case "vnf_version": + return vnfVersion; + default: + throw new IllegalStateException(name); } }; - - FlowKey wfKey = resolver("VNF").resolve(context); - - return wfKey; + return resolver("VNF").resolve(context); } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VnfExecutionFlowImpl.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VnfExecutionFlowImpl.java index fe7545d0f..7be6f098c 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VnfExecutionFlowImpl.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VnfExecutionFlowImpl.java @@ -84,23 +84,24 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow { DependencyManager dependencyManager = DependencyModelFactory.createDependencyManager(); dependencyModel = dependencyManager.getVnfcDependencyModel( modelIdentifier, DependencyTypes.findByString(dependencyType)); + } catch (DependencyModelNotFound e) { String msg = EELFResourceManager - .format(Msg.DEPENDENCY_MODEL_NOT_FOUND, params.get(Constants.VNF_TYPE), e.getMessage()); - logger.error(msg); + .format(Msg.DEPENDENCY_MODEL_NOT_FOUND, params.get(Constants.VNF_TYPE)); + logger.error(msg, e); context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg); context.setAttribute("dependencyModelFound", "false"); return; } catch (InvalidDependencyModelException e) { String msg = EELFResourceManager - .format(Msg.INVALID_DEPENDENCY_MODEL, params.get(Constants.VNF_TYPE), e.getMessage()); - logger.error(msg); + .format(Msg.INVALID_DEPENDENCY_MODEL, params.get(Constants.VNF_TYPE)); + logger.error(msg, e); context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg); - throw new RuntimeException(e.getMessage(), e); + throw new VnfExecutionInternalException(e); } catch (APPCException e) { logger.error(e.getMessage()); context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, e.getMessage()); - throw new RuntimeException(e.getMessage(), e); + throw new VnfExecutionInternalException(e); } catch (RuntimeException e) { logger.error(e.getMessage()); context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, e.getMessage()); @@ -112,19 +113,16 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow { logger.debug("Dependency Model = " + dependencyModel); } logger.info("Building Inventory Model from DG context"); - InventoryModel inventoryModel = null; + InventoryModel inventoryModel; try { inventoryModel = readInventoryModel(context); } catch (APPCException e) { logger.error(e.getMessage()); context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, e.getMessage()); - throw new RuntimeException(e.getMessage(), e); + throw new VnfExecutionInternalException(e); } if (logger.isDebugEnabled()) { logger.debug("Inventory Model = " + inventoryModel); - } - - if (logger.isDebugEnabled()) { logger.debug("Validating inventory model with dependency model"); } try { @@ -132,7 +130,7 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow { } catch (APPCException e) { logger.error(e.getMessage()); context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, e.getMessage()); - throw new RuntimeException(e.getMessage(), e); + throw new VnfExecutionInternalException(e); } logger.info("Creating flow builder"); FlowBuilder flowBuilder = FlowBuilderFactory.getInstance().getFlowBuilder( @@ -147,7 +145,7 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow { .format(Msg.INVALID_DEPENDENCY_MODEL, params.get(Constants.VNF_TYPE), e.getMessage()); logger.error(msg); context.setAttribute(Constants.ATTRIBUTE_ERROR_MESSAGE, msg); - throw new RuntimeException(e.getMessage(), e); + throw new VnfExecutionInternalException(e); } // remove VNFCs from the flow model where vserver list is empty @@ -172,15 +170,19 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow { throw new APPCException("Flow Strategy from the input : " + flowStrategy + " is invalid."); } String vnfType = params.get(Constants.VNF_TYPE); - if (vnfType == null || vnfType.length() == 0) { + if (nullOrEmpty(vnfType)) { throw new APPCException("Vnf Type is not passed in the input"); } String vnfVersion = params.get(Constants.VNF_VERION); - if (vnfVersion == null || vnfVersion.length() == 0) { + if (nullOrEmpty(vnfVersion)) { throw new APPCException("Vnf Version not found"); } } + private boolean nullOrEmpty(String vnfType) { + return vnfType == null || vnfType.isEmpty(); + } + private void logContext(SvcLogicContext context) { for (String key : context.getAttributeKeySet()) { logger.debug(key + " = " + context.getAttribute(key) + "\n"); @@ -219,7 +221,7 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow { String vnfcName = context.getAttribute(VNF_VNFC + i + "].name"); String vnfcType = context.getAttribute(VNF_VNFC + i + "].type"); String vmCountStr = context.getAttribute(VNF_VNFC + i + "].vm_count"); - if (vnfcType == null || vnfcType.length() == 0) { + if (nullOrEmpty(vnfcType)) { throw new APPCException("Could not retrieve VNFC Type from DG Context for vnf.vnfc[" + i + "].type"); } Integer vmCount = Integer.parseInt(vmCountStr); @@ -288,7 +290,7 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow { } else { Set<String> difference = new HashSet<>(dependencyModelMandatoryVnfcSet); difference.removeAll(inventoryModelVnfcsSet); - if (difference.size() > 0) { + if (!difference.isEmpty()) { logger.error("Inventory model is missing following mandatory vnfc type(s): " + difference); throw new APPCException("Inventory model is missing following mandatory vnfc type(s): " + difference); } @@ -301,15 +303,18 @@ public class VnfExecutionFlowImpl implements VnfExecutionFlow { Iterator<Vnfc> vnfcIterator = flowIterator.next().iterator(); while (vnfcIterator.hasNext()) { Vnfc vnfc = vnfcIterator.next(); - if (vnfc.getVserverList().size() == 0) { - if (logger.isDebugEnabled()) { - logger.debug("No vservers present for Vnfc type: " + vnfc.getVnfcType() - + ". Hence, removing it from the flow model."); - } - vnfcIterator.remove(); - } + tryRemoveInterator(vnfcIterator, vnfc); } } } + private void tryRemoveInterator(Iterator<Vnfc> vnfcIterator, Vnfc vnfc) { + if (vnfc.getVserverList().isEmpty()) { + if (logger.isDebugEnabled()) { + logger.debug("No vservers present for Vnfc type: " + vnfc.getVnfcType() + + ". Hence, removing it from the flow model."); + } + vnfcIterator.remove(); + } + } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VnfExecutionInternalException.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VnfExecutionInternalException.java new file mode 100644 index 000000000..2b5ab7ab6 --- /dev/null +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/impl/VnfExecutionInternalException.java @@ -0,0 +1,8 @@ +package org.onap.appc.dg.common.impl; + +public class VnfExecutionInternalException extends RuntimeException{ + + public VnfExecutionInternalException(Throwable cause) { + super(cause); + } +} diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/objects/ConnectionDetails.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/objects/ConnectionDetails.java index 40f5cba11..e5e5c001e 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/objects/ConnectionDetails.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/objects/ConnectionDetails.java @@ -63,5 +63,4 @@ public class ConnectionDetails { public void setPassword(String password) { this.password = password; } - } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/utils/JAXBUtil.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/utils/JAXBUtil.java index 38012b1bd..7f3cf3927 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/utils/JAXBUtil.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/utils/JAXBUtil.java @@ -36,6 +36,8 @@ import java.io.InputStreamReader; public class JAXBUtil { + private JAXBUtil() {} + public static <T> T toObject(String xml, Class<T> type) throws JAXBException { //create JAXB context @@ -48,6 +50,5 @@ public class JAXBUtil { BufferedReader reader = new BufferedReader(new InputStreamReader(xmlInputStream)); return type.cast(unmarshaller.unmarshal(reader)); - } } diff --git a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/utils/JSONUtil.java b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/utils/JSONUtil.java index 388295a7d..6b77d6cd1 100644 --- a/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/utils/JSONUtil.java +++ b/appc-dg/appc-dg-shared/appc-dg-common/src/main/java/org/onap/appc/dg/common/utils/JSONUtil.java @@ -29,6 +29,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.io.Reader; +import java.io.UncheckedIOException; import java.util.*; @@ -36,12 +37,14 @@ public class JSONUtil { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private JSONUtil() {} + public static <T> T fromJson(String json, Class<T> clazz) { try { return OBJECT_MAPPER.readValue(json, clazz); } catch (IOException e) { - throw new RuntimeException(e); + throw new UncheckedIOException(e); } } @@ -50,7 +53,7 @@ public class JSONUtil { try { return OBJECT_MAPPER.readValue(reader, clazz); } catch (IOException e) { - throw new RuntimeException(e); + throw new UncheckedIOException(e); } } @@ -59,25 +62,23 @@ public class JSONUtil { try { return OBJECT_MAPPER.writeValueAsString(object); } catch (IOException e) { - throw new RuntimeException(e); + throw new UncheckedIOException(e); } } - public static Map<String,String> extractPlainValues(String json, String ... names) { - if (null == names) return Collections.emptyMap(); - Map<String,String> values = new HashMap<>(); + public static Map<String, String> extractPlainValues(String json, String... names) { + if (null == names) { + return Collections.emptyMap(); + } + Map<String, String> values = new HashMap<>(); try { final JsonNode jsonNode = OBJECT_MAPPER.readTree(json); for (String name : names) { values.put(name, jsonNode.path(name).asText()); } } catch (IOException e) { - throw new RuntimeException(e); + throw new UncheckedIOException(e); } return values; } - - - - } |