From 02847bc3889fe3c3a419612ea7a94eca8794bdc6 Mon Sep 17 00:00:00 2001 From: "Determe, Sebastien (sd378r)" Date: Fri, 8 Sep 2017 17:48:10 +0200 Subject: [PATCH] Rework some sonar critical and major bugs Class renamed to AbstractModelELement, exceptions reworked and IT tests as well Change-Id: Ief2b09b0e36776519338834e2af61aa6e638ee91 Issue-Id: CLAMP-43 Signed-off-by: Determe, Sebastien (sd378r) --- .../clamp/clds/client/HolmesPolicyDelegate.java | 2 +- .../clds/client/HolmesPolicyDeleteDelegate.java | 2 +- .../org/onap/clamp/clds/client/PolicyClient.java | 157 ++++------ .../onap/clamp/clds/client/SdcCatalogServices.java | 344 ++++++++++++--------- .../clds/client/req/OperationalPolicyReq.java | 4 +- .../org/onap/clamp/clds/client/req/SdcReq.java | 34 +- .../onap/clamp/clds/config/CldsConfiguration.java | 9 +- .../clamp/clds/config/CldsUserJsonDecoder.java | 8 +- src/main/java/org/onap/clamp/clds/dao/CldsDao.java | 23 +- .../exception/policy/PolicyClientException.java | 61 ++++ .../clds/model/prop/AbstractModelElement.java | 280 +++++++++++++++++ .../org/onap/clamp/clds/model/prop/Collector.java | 2 +- .../org/onap/clamp/clds/model/prop/Global.java | 10 +- .../org/onap/clamp/clds/model/prop/Holmes.java | 2 +- .../clamp/clds/model/prop/ModelProperties.java | 14 +- .../org/onap/clamp/clds/model/prop/Policy.java | 2 +- .../onap/clamp/clds/model/prop/PolicyChain.java | 6 +- .../org/onap/clamp/clds/model/prop/PolicyItem.java | 12 +- .../onap/clamp/clds/model/prop/ResourceGroup.java | 4 +- .../clds/model/prop/ServiceConfiguration.java | 16 +- .../onap/clamp/clds/model/prop/StringMatch.java | 2 +- .../java/org/onap/clamp/clds/model/prop/Tca.java | 2 +- .../org/onap/clamp/clds/model/prop/TcaItem.java | 20 +- .../org/onap/clamp/clds/service/CldsService.java | 10 +- .../java/org/onap/clamp/clds/service/CldsUser.java | 2 +- .../org/onap/clamp/clds/client/req/SdcReqTest.java | 4 +- .../org/onap/clamp/clds/it/PolicyClientIT.java | 2 +- .../onap/clamp/clds/it/SdcCatalogServicesIT.java | 14 +- .../clamp/clds/model/prop/CustomModelElement.java | 2 +- 29 files changed, 699 insertions(+), 351 deletions(-) create mode 100644 src/main/java/org/onap/clamp/clds/exception/policy/PolicyClientException.java create mode 100644 src/main/java/org/onap/clamp/clds/model/prop/AbstractModelElement.java diff --git a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java index db7b5241..c42a22c6 100644 --- a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDelegate.java @@ -61,7 +61,7 @@ public class HolmesPolicyDelegate implements JavaDelegate { ModelProperties prop = ModelProperties.create(execution); Holmes holmes = prop.getType(Holmes.class); if (holmes.isFound()) { - String responseMessage = policyClient.sendMicroServiceInJson(holmes.getCorrelationLogic(), prop, + String responseMessage = policyClient.sendBasePolicyInOther(holmes.getCorrelationLogic(), prop, holmesPolicyRequestUuid); if (responseMessage != null) { execution.setVariable("holmesPolicyResponseMessage", responseMessage.getBytes()); diff --git a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDeleteDelegate.java b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDeleteDelegate.java index 46b33ffe..c3c91fa8 100644 --- a/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDeleteDelegate.java +++ b/src/main/java/org/onap/clamp/clds/client/HolmesPolicyDeleteDelegate.java @@ -55,7 +55,7 @@ public class HolmesPolicyDeleteDelegate implements JavaDelegate { if (holmes.isFound()) { prop.setCurrentModelElementId(holmes.getId()); - policyClient.deleteMicrosService(prop); + policyClient.deleteBasePolicy(prop); } } diff --git a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java index 2b49a8ff..2bd680af 100644 --- a/src/main/java/org/onap/clamp/clds/client/PolicyClient.java +++ b/src/main/java/org/onap/clamp/clds/client/PolicyClient.java @@ -31,13 +31,13 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.UUID; import javax.ws.rs.BadRequestException; +import org.onap.clamp.clds.exception.policy.PolicyClientException; import org.onap.clamp.clds.model.prop.ModelProperties; import org.onap.clamp.clds.model.refprop.RefProp; import org.onap.clamp.clds.util.LoggingUtils; @@ -47,6 +47,7 @@ import org.onap.policy.api.DeletePolicyCondition; import org.onap.policy.api.DeletePolicyParameters; import org.onap.policy.api.PolicyChangeResponse; import org.onap.policy.api.PolicyConfig; +import org.onap.policy.api.PolicyConfigException; import org.onap.policy.api.PolicyConfigType; import org.onap.policy.api.PolicyEngine; import org.onap.policy.api.PolicyEngineException; @@ -66,11 +67,11 @@ public class PolicyClient { protected static final String POLICY_PREFIX_BRMS_PARAM = "Config_BRMS_Param_"; protected static final String POLICY_PREFIX_MICROSERVICE = "Config_MS_"; - protected static final String LOG_POLICY_PREFIX = "Response is "; + protected static final String LOG_POLICY_PREFIX = "Response is "; protected static final EELFLogger logger = EELFManager.getInstance() .getLogger(PolicyClient.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @Value("${org.onap.clamp.config.files.cldsPolicyConfig:'classpath:/clds/clds-policy-config.properties'}") protected String cldsPolicyConfigFile; @@ -91,14 +92,10 @@ public class PolicyClient { * @param policyRequestUuid * PolicyRequest UUID * @return The response message of policy - * @throws IOException - * In case of issues with the Stream - * @throws PolicyEngineException - * In case of issues with the PolicyEngine class * */ public String sendBrmsPolicy(Map> attributes, ModelProperties prop, - String policyRequestUuid) throws PolicyEngineException, IOException { + String policyRequestUuid) { PolicyParameters policyParameters = new PolicyParameters(); @@ -136,13 +133,8 @@ public class PolicyClient { * @param policyRequestUuid * The policy Request UUID * @return The response message of policy - * @throws PolicyEngineException - * In case of issues with the policy engine class creation - * @throws IOException - * In case of issue with the Stream */ - public String sendMicroServiceInJson(String policyJson, ModelProperties prop, String policyRequestUuid) - throws IOException, PolicyEngineException { + public String sendMicroServiceInJson(String policyJson, ModelProperties prop, String policyRequestUuid) { PolicyParameters policyParameters = new PolicyParameters(); @@ -177,14 +169,9 @@ public class PolicyClient { * The ModelProperties * @param policyRequestUuid * The policy request UUID - * @return - * @throws IOException - * In case of issues with the policy engine class creation - * @throws PolicyEngineException - * In case of issue with the Stream + * @return The answer from policy call */ - public String sendBasePolicyInOther(String configBody, ModelProperties prop, String policyRequestUuid) - throws IOException, PolicyEngineException { + public String sendBasePolicyInOther(String configBody, ModelProperties prop, String policyRequestUuid) { PolicyParameters policyParameters = new PolicyParameters(); @@ -216,22 +203,15 @@ public class PolicyClient { * The PolicyParameters * @param prop * The ModelProperties - * @return THe response message of Policy - * @throws IOException - * In case of issues with the Stream - * @throws PolicyEngineException - * In case of issue when creating PolicyEngine class + * @return The response message of Policy + * @throws Exception */ - protected String send(PolicyParameters policyParameters, ModelProperties prop, String policyNamePrefix) - throws IOException, PolicyEngineException { + protected String send(PolicyParameters policyParameters, ModelProperties prop, String policyNamePrefix) { // Verify whether it is triggered by Validation Test button from UI if (prop.isTest()) { return "send not executed for test action"; } - PolicyEngine policyEngine = new PolicyEngine( - appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); - // API method to create or update Policy. PolicyChangeResponse response = null; String responseMessage = ""; @@ -241,22 +221,23 @@ public class PolicyClient { if (versions.isEmpty()) { LoggingUtils.setTargetContext("Policy", "createPolicy"); logger.info("Attempting to create policy for action=" + prop.getActionCd()); - response = policyEngine.createPolicy(policyParameters); + response = getPolicyEngine().createPolicy(policyParameters); responseMessage = response.getResponseMessage(); } else { LoggingUtils.setTargetContext("Policy", "updatePolicy"); logger.info("Attempting to update policy for action=" + prop.getActionCd()); - response = policyEngine.updatePolicy(policyParameters); + response = getPolicyEngine().updatePolicy(policyParameters); responseMessage = response.getResponseMessage(); } } catch (Exception e) { logger.error("Exception occurred during policy communication", e); + throw new PolicyClientException("Exception while communicating with Policy", e); } logger.info(LOG_POLICY_PREFIX + responseMessage); LoggingUtils.setTimeContext(startTime, new Date()); - if (response != null && response.getResponseCode() == 200) { + if (response.getResponseCode() == 200) { logger.info("Policy send successful"); metricsLogger.info("Policy send success"); } else { @@ -276,12 +257,8 @@ public class PolicyClient { * @param prop * The ModelProperties * @return The response message of policy - * @throws IOException - * In case of issues with the stream - * @throws PolicyEngineException - * In case of issues with the PolicyEngine creation */ - protected String push(String policyType, ModelProperties prop) throws PolicyEngineException, IOException { + protected String push(String policyType, ModelProperties prop) { // Verify whether it is triggered by Validation Test button from UI if (prop.isTest()) { return "push not executed for test action"; @@ -301,15 +278,12 @@ public class PolicyClient { pushPolicyParameters.setPdpGroup(refProp.getStringValue("policy.pdp.group")); pushPolicyParameters.setRequestID(null); - PolicyEngine policyEngine = new PolicyEngine( - appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); - // API method to create or update Policy. PolicyChangeResponse response = null; String responseMessage = ""; try { logger.info("Attempting to push policy..."); - response = policyEngine.pushPolicy(pushPolicyParameters); + response = getPolicyEngine().pushPolicy(pushPolicyParameters); responseMessage = response.getResponseMessage(); } catch (Exception e) { logger.error("Exception occurred during policy communication", e); @@ -335,13 +309,10 @@ public class PolicyClient { * @param prop * The ModelProperties * @return The response message from policy - * @throws IOException - * In case of issues with the stream - * @throws PolicyEngineException - * In case of issues with the PolicyEngine creation + * @throws PolicyConfigException + * In case of issues with policy engine */ - protected List getVersions(String policyNamePrefix, ModelProperties prop) - throws PolicyEngineException, IOException { + protected List getVersions(String policyNamePrefix, ModelProperties prop) throws PolicyConfigException { ArrayList versions = new ArrayList<>(); ConfigRequestParameters configRequestParameters = new ConfigRequestParameters(); @@ -356,46 +327,42 @@ public class PolicyClient { logger.info("policyName=" + policyName); configRequestParameters.setPolicyName(policyName); - PolicyEngine policyEngine = new PolicyEngine( - appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); - - try { - Collection response = policyEngine.getConfig(configRequestParameters); - Iterator itrResp = response.iterator(); - - while (itrResp.hasNext()) { - PolicyConfig policyConfig = itrResp.next(); - try { - Integer version = new Integer(policyConfig.getPolicyVersion()); - versions.add(version); - } catch (Exception e) { - // just print warning - if n;o policies, version may be null - logger.warn("Failed to parse due to an exception policyConfig.getPolicyVersion()=" - + policyConfig.getPolicyVersion(), e); - } - } - Collections.sort(versions); - logger.info("Policy versions.size()=" + versions.size()); - } catch (Exception e) { - // just print warning - if no policy version found - logger.warn("warning: policy not found...policy name - " + policyName, e); + Collection response = getPolicyEngine().getConfig(configRequestParameters); + for (PolicyConfig policyConfig : response) { + Integer version = Integer.valueOf(policyConfig.getPolicyVersion()); + versions.add(version); } + Collections.sort(versions); + logger.info("Policy versions.size()=" + versions.size()); return versions; } + /** + * This method create a new policy engine. + * + * @return A new policy engine + */ + private PolicyEngine getPolicyEngine() { + PolicyEngine policyEngine; + try { + policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); + } catch (IOException e1) { + throw new PolicyClientException("Exception when opening policy config file", e1); + } catch (PolicyEngineException e) { + throw new PolicyClientException("Exception when creating a new policy engine", e); + } + return policyEngine; + } + /** * Format and send delete Micro Service requests to Policy. * * @param prop * The ModelProperties * @return The response message from Policy - * @throws IOException - * In case of issues with the stream - * @throws PolicyEngineException - * In case of issues with the PolicyEngine creation */ - public String deleteMicrosService(ModelProperties prop) throws PolicyEngineException, IOException { + public String deleteMicrosService(ModelProperties prop) { String policyType = refProp.getStringValue("policy.ms.type"); return deletePolicy(prop, policyType); } @@ -403,12 +370,11 @@ public class PolicyClient { /** * This method delete the Base policy. * - * @param prop The model Properties + * @param prop + * The model Properties * @return A string with the answer from policy - * @throws PolicyEngineException In case of issues with the policy engine - * @throws IOException In case of issues with the stream */ - public String deleteBasePolicy(ModelProperties prop) throws PolicyEngineException, IOException { + public String deleteBasePolicy(ModelProperties prop) { return deletePolicy(prop, PolicyConfigType.Base.toString()); } @@ -418,12 +384,8 @@ public class PolicyClient { * @param prop * The ModelProperties * @return The response message from policy - * @throws IOException - * In case of issues with the stream - * @throws PolicyEngineException - * In case of issues with the PolicyEngine creation */ - public String deleteBrms(ModelProperties prop) throws PolicyEngineException, IOException { + public String deleteBrms(ModelProperties prop) { String policyType = refProp.getStringValue("policy.op.type"); return deletePolicy(prop, policyType); } @@ -435,12 +397,8 @@ public class PolicyClient { * The ModelProperties * * @return The response message from policy - * @throws IOException - * in case of issues with the Stream - * @throws PolicyEngineException - * In case of issues with the PolicyEngine class creation */ - protected String deletePolicy(ModelProperties prop, String policyType) throws PolicyEngineException, IOException { + protected String deletePolicy(ModelProperties prop, String policyType) { DeletePolicyParameters deletePolicyParameters = new DeletePolicyParameters(); if (prop.getPolicyUniqueId() != null && !prop.getPolicyUniqueId().isEmpty()) { @@ -454,16 +412,16 @@ public class PolicyClient { deletePolicyParameters.setPdpGroup(refProp.getStringValue("policy.pdp.group")); deletePolicyParameters.setPolicyType(policyType); // send delete request - String responseMessage = sendDeletePolicy(deletePolicyParameters, prop); + StringBuilder responseMessage = new StringBuilder(sendDeletePolicy(deletePolicyParameters, prop)); logger.info("Deleting policy from PAP..."); deletePolicyParameters.setPolicyComponent("PAP"); deletePolicyParameters.setDeleteCondition(DeletePolicyCondition.ALL); // send delete request - responseMessage = sendDeletePolicy(deletePolicyParameters, prop); + responseMessage.append(sendDeletePolicy(deletePolicyParameters, prop)); - return responseMessage; + return responseMessage.toString(); } /** @@ -474,26 +432,19 @@ public class PolicyClient { * @param prop * The ModelProperties * @return The response message from policy - * @throws IOException - * In case of issues with the stream - * @throws PolicyEngineException - * In case of issues with PolicyEngine class creation */ - protected String sendDeletePolicy(DeletePolicyParameters deletePolicyParameters, ModelProperties prop) - throws PolicyEngineException, IOException { + protected String sendDeletePolicy(DeletePolicyParameters deletePolicyParameters, ModelProperties prop) { // Verify whether it is triggered by Validation Test button from UI if (prop.isTest()) { return "delete not executed for test action"; } - PolicyEngine policyEngine = new PolicyEngine( - appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); // API method to create or update Policy. PolicyChangeResponse response = null; String responseMessage = ""; try { logger.info("Attempting to delete policy..."); - response = policyEngine.deletePolicy(deletePolicyParameters); + response = getPolicyEngine().deletePolicy(deletePolicyParameters); responseMessage = response.getResponseMessage(); } catch (Exception e) { logger.error("Exception occurred during policy communnication", e); diff --git a/src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java b/src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java index d418ea55..d3176715 100644 --- a/src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java +++ b/src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java @@ -25,7 +25,6 @@ package org.onap.clamp.clds.client; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; @@ -53,6 +52,7 @@ import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVRecord; import org.apache.commons.lang3.StringUtils; import org.onap.clamp.clds.client.req.SdcReq; +import org.onap.clamp.clds.exception.SdcCommunicationException; import org.onap.clamp.clds.model.CldsAlarmCondition; import org.onap.clamp.clds.model.CldsDBServiceCache; import org.onap.clamp.clds.model.CldsSdcArtifact; @@ -137,7 +137,7 @@ public class SdcCatalogServices { */ public List removeDuplicateServices(List rawCldsSdcServiceList) { List cldsSdcServiceInfoList = null; - if (rawCldsSdcServiceList != null && rawCldsSdcServiceList.size() > 0) { + if (rawCldsSdcServiceList != null && !rawCldsSdcServiceList.isEmpty()) { // sort list Collections.sort(rawCldsSdcServiceList); // and then take only the services with the max version (last in the @@ -165,7 +165,7 @@ public class SdcCatalogServices { */ public List removeDuplicateSdcResourceInstances(List rawCldsSdcResourceList) { List cldsSdcResourceList = null; - if (rawCldsSdcResourceList != null && rawCldsSdcResourceList.size() > 0) { + if (rawCldsSdcResourceList != null && !rawCldsSdcResourceList.isEmpty()) { // sort list Collections.sort(rawCldsSdcResourceList); // and then take only the resources with the max version (last in @@ -194,7 +194,7 @@ public class SdcCatalogServices { public List removeDuplicateSdcResourceBasicInfo( List rawCldsSdcResourceListBasicList) { List cldsSdcResourceBasicInfoList = null; - if (rawCldsSdcResourceListBasicList != null && rawCldsSdcResourceListBasicList.size() > 0) { + if (rawCldsSdcResourceListBasicList != null && !rawCldsSdcResourceListBasicList.isEmpty()) { // sort list Collections.sort(rawCldsSdcResourceListBasicList); // and then take only the resources with the max version (last in @@ -221,15 +221,13 @@ public class SdcCatalogServices { * @param invariantId * The invariant ID * @return The service UUID - * @throws IOException - * In case of issues with the JSON decoder */ - public String getServiceUuidFromServiceInvariantId(String invariantId) throws IOException { + public String getServiceUuidFromServiceInvariantId(String invariantId) { String serviceUuid = ""; String responseStr = getSdcServicesInformation(null); List rawCldsSdcServicesList = getCldsSdcServicesListFromJson(responseStr); List cldsSdcServicesList = removeDuplicateServices(rawCldsSdcServicesList); - if (cldsSdcServicesList != null && cldsSdcServicesList.size() > 0) { + if (cldsSdcServicesList != null && !cldsSdcServicesList.isEmpty()) { for (CldsSdcServiceInfo currCldsSdcServiceInfo : cldsSdcServicesList) { if (currCldsSdcServiceInfo != null && currCldsSdcServiceInfo.getInvariantUUID() != null && currCldsSdcServiceInfo.getInvariantUUID().equalsIgnoreCase(invariantId)) { @@ -245,32 +243,45 @@ public class SdcCatalogServices { * To get CldsAsdsServiceInfo class by parsing json string. * * @param jsonStr - * @return - * @throws IOException + * The Json string that must be decoded + * @return The list of CldsSdcServiceInfo, if there is a failure it return + * an empty list */ - public List getCldsSdcServicesListFromJson(String jsonStr) throws IOException { + public List getCldsSdcServicesListFromJson(String jsonStr) { ObjectMapper objectMapper = new ObjectMapper(); if (StringUtils.isBlank(jsonStr)) { - return null; + return new ArrayList<>(); + } + try { + return objectMapper.readValue(jsonStr, + objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcServiceInfo.class)); + } catch (IOException e) { + logger.error("Error when attempting to decode the JSON containing CldsSdcServiceInfo", e); + return new ArrayList<>(); } - return objectMapper.readValue(jsonStr, - objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcServiceInfo.class)); } /** * To get List of CldsSdcResourceBasicInfo class by parsing json string. * * @param jsonStr - * @return - * @throws IOException + * The JSOn string that must be decoded + * @return The list of CldsSdcResourceBasicInfo, an empty list in case of + * issues */ - public List getAllSdcResourcesListFromJson(String jsonStr) throws IOException { + public List getAllSdcResourcesListFromJson(String jsonStr) { ObjectMapper objectMapper = new ObjectMapper(); if (StringUtils.isBlank(jsonStr)) { - return null; + return new ArrayList<>(); + } + + try { + return objectMapper.readValue(jsonStr, + objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcResourceBasicInfo.class)); + } catch (IOException e) { + logger.error("Exception occurred when attempting to decode the list of CldsSdcResourceBasicInfo JSON", e); + return new ArrayList<>(); } - return objectMapper.readValue(jsonStr, - objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcResourceBasicInfo.class)); } /** @@ -290,76 +301,86 @@ public class SdcCatalogServices { * * @param jsonStr * @return - * @throws IOException */ - public CldsSdcServiceDetail getCldsSdcServiceDetailFromJson(String jsonStr) throws IOException { + public CldsSdcServiceDetail getCldsSdcServiceDetailFromJson(String jsonStr) { ObjectMapper objectMapper = new ObjectMapper(); - return objectMapper.readValue(jsonStr, CldsSdcServiceDetail.class); + try { + return objectMapper.readValue(jsonStr, CldsSdcServiceDetail.class); + } catch (IOException e) { + logger.error("Exception when attempting to decode the CldsSdcServiceDetail JSON", e); + return null; + } } /** - * To upload artifact to sdc based on serviceUUID and resourcename on url. + * To upload artifact to sdc based on serviceUUID and resource name on url. * * @param prop * @param userid * @param url - * @param formatttedSdcReq + * @param formattedSdcReq * @return - * @throws IOException */ - public String uploadArtifactToSdc(ModelProperties prop, String userid, String url, String formatttedSdcReq) - throws IOException { + public String uploadArtifactToSdc(ModelProperties prop, String userid, String url, String formatttedSdcReq) { // Verify whether it is triggered by Validation Test button from UI if (prop.isTest()) { return "sdc artifact upload not executed for test action"; } - logger.info("userid=" + userid); - String md5Text = SdcReq.calculateMD5ByString(formatttedSdcReq); - byte[] postData = SdcReq.stringToByteArray(formatttedSdcReq); - int postDataLength = postData.length; - HttpURLConnection conn = getSdcHttpUrlConnection(userid, postDataLength, url, md5Text); - try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) { - wr.write(postData); - } - boolean requestFailed = true; - int responseCode = conn.getResponseCode(); - logger.info("responseCode=" + responseCode); - if (responseCode == 200) { - requestFailed = false; - } + try { + logger.info("userid=" + userid); + String md5Text = SdcReq.calculateMD5ByString(formatttedSdcReq); + byte[] postData = SdcReq.stringToByteArray(formatttedSdcReq); + int postDataLength = postData.length; + HttpURLConnection conn = getSdcHttpUrlConnection(userid, postDataLength, url, md5Text); + try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) { + wr.write(postData); + } + boolean requestFailed = true; + int responseCode = conn.getResponseCode(); + logger.info("responseCode=" + responseCode); + if (responseCode == 200) { + requestFailed = false; + } - String responseStr = getResponse(conn); - if (responseStr != null) { - if (requestFailed) { + String responseStr = getResponse(conn); + if (responseStr != null && requestFailed) { logger.error("requestFailed - responseStr=" + responseStr); throw new BadRequestException(responseStr); } + return responseStr; + } catch (IOException e) { + logger.error("Exception when attempting to communicate with SDC", e); + throw new SdcCommunicationException("Exception when attempting to communicate with SDC", e); } - return responseStr; + } - private HttpURLConnection getSdcHttpUrlConnection(String userid, int postDataLength, String url, String md5Text) - throws IOException { - logger.info("userid=" + userid); - String basicAuth = SdcReq.getSdcBasicAuth(refProp); - String sdcXonapInstanceId = refProp.getStringValue("sdc.sdcX-InstanceID"); - URL urlObj = new URL(url); - HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); - conn.setDoOutput(true); - conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), sdcXonapInstanceId); - conn.setRequestProperty("Authorization", basicAuth); - conn.setRequestProperty("Content-Type", "application/json"); - conn.setRequestProperty("Content-MD5", md5Text); - conn.setRequestProperty("USER_ID", userid); - conn.setRequestMethod("POST"); - conn.setRequestProperty("charset", "utf-8"); - conn.setRequestProperty("Content-Length", Integer.toString(postDataLength)); - conn.setUseCaches(false); - conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId()); - return conn; + private HttpURLConnection getSdcHttpUrlConnection(String userid, int postDataLength, String url, String md5Text) { + try { + logger.info("userid=" + userid); + String basicAuth = SdcReq.getSdcBasicAuth(refProp); + String sdcXonapInstanceId = refProp.getStringValue("sdc.sdcX-InstanceID"); + URL urlObj = new URL(url); + HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); + conn.setDoOutput(true); + conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), sdcXonapInstanceId); + conn.setRequestProperty("Authorization", basicAuth); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("Content-MD5", md5Text); + conn.setRequestProperty("USER_ID", userid); + conn.setRequestMethod("POST"); + conn.setRequestProperty("charset", "utf-8"); + conn.setRequestProperty("Content-Length", Integer.toString(postDataLength)); + conn.setUseCaches(false); + conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId()); + return conn; + } catch (IOException e) { + logger.error("Exception when attempting to open connection with SDC", e); + throw new SdcCommunicationException("Exception when attempting to open connection with SDC", e); + } } - private String getResponse(HttpURLConnection conn) throws IOException { + private String getResponse(HttpURLConnection conn) { try (InputStream is = getInputStream(conn)) { if (is != null) { try (BufferedReader in = new BufferedReader(new InputStreamReader(is))) { @@ -370,29 +391,42 @@ public class SdcCatalogServices { } return response.toString(); } + } else { + return null; } + } catch (IOException e) { + logger.error("Exception when attempting to open SDC response", e); + throw new SdcCommunicationException("Exception when attempting to open SDC response", e); } - return null; } - private InputStream getInputStream(HttpURLConnection conn) throws IOException { - InputStream inStream = conn.getErrorStream(); - if (inStream == null) { - inStream = conn.getInputStream(); + private InputStream getInputStream(HttpURLConnection conn) { + try { + InputStream inStream = conn.getErrorStream(); + if (inStream == null) { + inStream = conn.getInputStream(); + } + return inStream; + } catch (IOException e) { + logger.error("Exception when attempting to open SDC error stream", e); + throw new SdcCommunicationException("Exception when attempting to open SDC error stream", e); } - return inStream; } - public CldsDBServiceCache getCldsDbServiceCacheUsingCldsServiceData(CldsServiceData cldsServiceData) - throws IOException { - CldsDBServiceCache cldsDbServiceCache = new CldsDBServiceCache(); - cldsDbServiceCache.setCldsDataInstream(cldsServiceData); - cldsDbServiceCache.setInvariantId(cldsServiceData.getServiceInvariantUUID()); - cldsDbServiceCache.setServiceId(cldsServiceData.getServiceUUID()); - return cldsDbServiceCache; + public CldsDBServiceCache getCldsDbServiceCacheUsingCldsServiceData(CldsServiceData cldsServiceData) { + try { + CldsDBServiceCache cldsDbServiceCache = new CldsDBServiceCache(); + cldsDbServiceCache.setCldsDataInstream(cldsServiceData); + cldsDbServiceCache.setInvariantId(cldsServiceData.getServiceInvariantUUID()); + cldsDbServiceCache.setServiceId(cldsServiceData.getServiceUUID()); + return cldsDbServiceCache; + } catch (IOException e) { + logger.error("Exception when getting service in cache", e); + throw new SdcCommunicationException("Exception when getting service in cache", e); + } } - public boolean isCldsSdcCacheDataExpired(CldsServiceData cldsServiceData) throws IOException { + public boolean isCldsSdcCacheDataExpired(CldsServiceData cldsServiceData) { boolean expired = false; if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) { String cachedServiceUuid = cldsServiceData.getServiceUUID(); @@ -408,7 +442,7 @@ public class SdcCatalogServices { return expired; } - public CldsServiceData getCldsServiceDataWithAlarmConditions(String invariantServiceUuid) throws IOException { + public CldsServiceData getCldsServiceDataWithAlarmConditions(String invariantServiceUuid) { String url = refProp.getStringValue("sdc.serviceUrl"); String catalogUrl = refProp.getStringValue("sdc.catalog.url"); String serviceUuid = getServiceUuidFromServiceInvariantId(invariantServiceUuid); @@ -417,7 +451,13 @@ public class SdcCatalogServices { ObjectMapper objectMapper = new ObjectMapper(); CldsServiceData cldsServiceData = new CldsServiceData(); if (responseStr != null) { - CldsSdcServiceDetail cldsSdcServiceDetail = objectMapper.readValue(responseStr, CldsSdcServiceDetail.class); + CldsSdcServiceDetail cldsSdcServiceDetail; + try { + cldsSdcServiceDetail = objectMapper.readValue(responseStr, CldsSdcServiceDetail.class); + } catch (IOException e) { + logger.error("Exception when decoding the CldsServiceData JSON from SDC", e); + throw new SdcCommunicationException("Exception when decoding the CldsServiceData JSON from SDC", e); + } cldsServiceData.setServiceUUID(cldsSdcServiceDetail.getUuid()); cldsServiceData.setServiceInvariantUUID(cldsSdcServiceDetail.getInvariantUUID()); @@ -448,11 +488,7 @@ public class SdcCatalogServices { return cldsServiceData; } - /** - * @param cldsVfDataList - * @throws IOException - */ - private void getAllVfcForVfList(List cldsVfDataList, String catalogUrl) throws IOException { + private void getAllVfcForVfList(List cldsVfDataList, String catalogUrl) { // todo : refact this.. if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) { List allVfResources = getAllSdcVForVfcResourcesBasedOnResourceType( @@ -511,9 +547,15 @@ public class SdcCatalogServices { } } - private List getVfcDataListFromVfResponse(String vfResponse) throws IOException { + private List getVfcDataListFromVfResponse(String vfResponse) { ObjectMapper mapper = new ObjectMapper(); - ObjectNode vfResponseNode = (ObjectNode) mapper.readTree(vfResponse); + ObjectNode vfResponseNode; + try { + vfResponseNode = (ObjectNode) mapper.readTree(vfResponse); + } catch (IOException e) { + logger.error("Exception when decoding the JSON list of CldsVfcData", e); + return new ArrayList<>(); + } ArrayNode vfcArrayNode = (ArrayNode) vfResponseNode.get("resources"); List cldsVfcDataList = new ArrayList<>(); if (vfcArrayNode != null) { @@ -572,10 +614,16 @@ public class SdcCatalogServices { return (id != null) ? id.replaceAll("\"", "") : ""; } - private List getAlarmCondtionsFromVfc(String vfcResponse) throws IOException { + private List getAlarmCondtionsFromVfc(String vfcResponse) { List cldsAlarmConditionList = new ArrayList<>(); ObjectMapper mapper = new ObjectMapper(); - ObjectNode vfcResponseNode = (ObjectNode) mapper.readTree(vfcResponse); + ObjectNode vfcResponseNode; + try { + vfcResponseNode = (ObjectNode) mapper.readTree(vfcResponse); + } catch (IOException e) { + logger.error("Exception when decoding the JSON list of CldsAlarmCondition", e); + return cldsAlarmConditionList; + } ArrayNode artifactsArrayNode = (ArrayNode) vfcResponseNode.get("artifacts"); if (artifactsArrayNode != null && artifactsArrayNode.size() > 0) { @@ -592,25 +640,36 @@ public class SdcCatalogServices { return cldsAlarmConditionList; } - private List parseCsvToGetAlarmConditions(String allAlarmCondsValues) throws IOException { - List cldsAlarmConditionList = new ArrayList<>(); - Reader alarmReader = new StringReader(allAlarmCondsValues); - Iterable records = CSVFormat.RFC4180.parse(alarmReader); - if (records != null) { - Iterator it = records.iterator(); - if (it.hasNext()) { - it.next(); + private List parseCsvToGetAlarmConditions(String allAlarmCondsValues) { + try { + List cldsAlarmConditionList = new ArrayList<>(); + Reader alarmReader = new StringReader(allAlarmCondsValues); + Iterable records = CSVFormat.RFC4180.parse(alarmReader); + if (records != null) { + Iterator it = records.iterator(); + if (it.hasNext()) { + it.next(); + } + it.forEachRemaining(record -> processRecord(cldsAlarmConditionList, record)); } - it.forEachRemaining(record -> processRecord(cldsAlarmConditionList, record)); + return cldsAlarmConditionList; + } catch (IOException e) { + logger.error("Exception when attempting to parse the CSV containing the alarm", e); + return new ArrayList<>(); } - return cldsAlarmConditionList; } // Method to get the artifact for any particular VF - private List getFieldPathFromVF(String vfResponse) throws JsonProcessingException, IOException { + private List getFieldPathFromVF(String vfResponse) { List cldsVfKPIDataList = new ArrayList<>(); ObjectMapper mapper = new ObjectMapper(); - ObjectNode vfResponseNode = (ObjectNode) mapper.readTree(vfResponse); + ObjectNode vfResponseNode; + try { + vfResponseNode = (ObjectNode) mapper.readTree(vfResponse); + } catch (IOException e) { + logger.error("Exception when decoding the JSON list of CldsVfKPIData", e); + return cldsVfKPIDataList; + } ArrayNode artifactsArrayNode = (ArrayNode) vfResponseNode.get("artifacts"); if (artifactsArrayNode != null && artifactsArrayNode.size() > 0) { @@ -621,7 +680,7 @@ public class SdcCatalogServices { String artifactName = ""; if (artifactNameNode != null) { artifactName = artifactNameNode.textValue(); - artifactName = artifactName.substring(artifactName.lastIndexOf(".") + 1); + artifactName = artifactName.substring(artifactName.lastIndexOf('.') + 1); } if (artifactUrlNode != null && artifactName != null && !artifactName.isEmpty() && artifactName.equalsIgnoreCase("csv")) { @@ -660,19 +719,24 @@ public class SdcCatalogServices { } // Method to get the artifactURL Data and set the CldsVfKPIData node - private List parseCsvToGetFieldPath(String allFieldPathValues) throws IOException { - List cldsVfKPIDataList = new ArrayList<>(); - Reader alarmReader = new StringReader(allFieldPathValues); - Iterable records = CSVFormat.RFC4180.parse(alarmReader); - if (records != null) { - for (CSVRecord record : records) { - CldsVfKPIData kpiData = this.convertCsvRecordToKpiData(record); - if (kpiData != null) { - cldsVfKPIDataList.add(kpiData); + private List parseCsvToGetFieldPath(String allFieldPathValues) { + try { + List cldsVfKPIDataList = new ArrayList<>(); + Reader alarmReader = new StringReader(allFieldPathValues); + Iterable records = CSVFormat.RFC4180.parse(alarmReader); + if (records != null) { + for (CSVRecord record : records) { + CldsVfKPIData kpiData = this.convertCsvRecordToKpiData(record); + if (kpiData != null) { + cldsVfKPIDataList.add(kpiData); + } } } + return cldsVfKPIDataList; + } catch (IOException e) { + logger.error("Exception when attempting to parse the CSV containing the alarm kpi data", e); + return new ArrayList<>(); } - return cldsVfKPIDataList; } private void processRecord(List cldsAlarmConditionList, CSVRecord record) { @@ -713,7 +777,6 @@ public class SdcCatalogServices { * @param url * @param alarmConditions * @return - * @throws IOException */ public String getCldsServicesOrResourcesBasedOnURL(String url, boolean alarmConditions) { try { @@ -736,7 +799,7 @@ public class SdcCatalogServices { String inputLine; while ((inputLine = in.readLine()) != null) { if (!inputLine.isEmpty()) { - response.append(inputLine); + response.append(inputLine); } if (alarmConditions) { response.append("\n"); @@ -757,9 +820,8 @@ public class SdcCatalogServices { * @param globalProps * @param cldsServiceData * @return - * @throws IOException */ - public String createPropertiesObjectByUUID(String globalProps, CldsServiceData cldsServiceData) throws IOException { + public String createPropertiesObjectByUUID(String globalProps, CldsServiceData cldsServiceData) { String totalPropsStr; ObjectMapper mapper = new ObjectMapper(); ObjectNode globalPropsJson; @@ -814,20 +876,29 @@ public class SdcCatalogServices { byIdObjectNode.putPOJO("byAlertDescription", alertDescObjectNodeByAlert); - globalPropsJson = (ObjectNode) mapper.readValue(globalProps, JsonNode.class); + globalPropsJson = decodeGlobalProp(globalProps, mapper); globalPropsJson.putPOJO("shared", byIdObjectNode); - logger.info("valuie of objNode:" + globalPropsJson); + logger.info("value of objNode:" + globalPropsJson); } else { /** * to create json with total properties when no serviceUUID passed */ - globalPropsJson = (ObjectNode) mapper.readValue(globalProps, JsonNode.class); + globalPropsJson = decodeGlobalProp(globalProps, mapper); } totalPropsStr = globalPropsJson.toString(); return totalPropsStr; } + private ObjectNode decodeGlobalProp(String globalProps, ObjectMapper mapper) { + try { + return (ObjectNode) mapper.readValue(globalProps, JsonNode.class); + } catch (IOException e) { + logger.error("Exception occurred during decoding of the global props, returning an empty objectNode", e); + return mapper.createObjectNode(); + } + } + /** * Method to get alarm conditions/alert description from Service Data. * @@ -981,13 +1052,13 @@ public class SdcCatalogServices { alertDescNode.put(currCldsAlarmCondition.getAlarmConditionKey(), currCldsAlarmCondition.getAlarmConditionKey()); } - } } + } vfcObjectNode.putPOJO("alarmCondition", alarmCondNode); vfcObjectNode.putPOJO("alertDescription", alertDescNode); vfcResourceUuidObjectNode.putPOJO(currCldsVfcData.getVfcInvariantResourceUUID(), vfcObjectNode); - } + } } } else { alarmCondNode.put("", ""); @@ -1050,12 +1121,11 @@ public class SdcCatalogServices { if (currCldsSdcResource != null && currCldsSdcResource.getArtifacts() != null && !currCldsSdcResource.getArtifacts().isEmpty()) { for (CldsSdcArtifact currCldsSdcArtifact : currCldsSdcResource.getArtifacts()) { - if (currCldsSdcArtifact != null && currCldsSdcArtifact.getArtifactName() != null) { - if (currCldsSdcArtifact.getArtifactName().equalsIgnoreCase(artifactName)) { - artifactUuid = currCldsSdcArtifact.getArtifactUUID(); - artifactExists = true; - break; - } + if (currCldsSdcArtifact != null && currCldsSdcArtifact.getArtifactName() != null + && currCldsSdcArtifact.getArtifactName().equalsIgnoreCase(artifactName)) { + artifactUuid = currCldsSdcArtifact.getArtifactUUID(); + artifactExists = true; + break; } } } @@ -1109,22 +1179,16 @@ public class SdcCatalogServices { * @param resourceType * The resourceType * @return The list of CldsSdcResourceBasicInfo - * @throws IOException - * In case of issues with the Streams */ - private List getAllSdcVForVfcResourcesBasedOnResourceType(String resourceType) - throws IOException { - List allSdcResourceVfcBasicInfo = new ArrayList(); + private List getAllSdcVForVfcResourcesBasedOnResourceType(String resourceType) { String catalogUrl = refProp.getStringValue("sdc.catalog.url"); String resourceUrl = catalogUrl + "resources?resourceType=" + resourceType; String allSdcVfcResources = getCldsServicesOrResourcesBasedOnURL(resourceUrl, false); - - allSdcResourceVfcBasicInfo = getAllSdcResourcesListFromJson(allSdcVfcResources); - return removeDuplicateSdcResourceBasicInfo(allSdcResourceVfcBasicInfo); + return removeDuplicateSdcResourceBasicInfo(getAllSdcResourcesListFromJson(allSdcVfcResources)); } private String getResourceUuidFromResourceInvariantUuid(String resourceInvariantUuid, - List resourceInfoList) throws IOException { + List resourceInfoList) { String resourceUuid = null; if (resourceInfoList != null && !resourceInfoList.isEmpty()) { for (CldsSdcResourceBasicInfo currResource : resourceInfoList) { @@ -1172,12 +1236,10 @@ public class SdcCatalogServices { * @param locationArtifactName * The location artifact name from where we can get the Artifact * UUID - * @throws IOException - * In case of issues with the streams * */ public void uploadToSdc(ModelProperties prop, String userid, List sdcReqUrlsList, String formattedSdcReq, - String formattedSdcLocationReq, String artifactName, String locationArtifactName) throws IOException { + String formattedSdcLocationReq, String artifactName, String locationArtifactName) { logger.info("userid=" + userid); String serviceInvariantUuid = getServiceInvariantUuidFromProps(prop); if (sdcReqUrlsList != null && !sdcReqUrlsList.isEmpty()) { diff --git a/src/main/java/org/onap/clamp/clds/client/req/OperationalPolicyReq.java b/src/main/java/org/onap/clamp/clds/client/req/OperationalPolicyReq.java index 2b1762a2..ad466ee7 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/OperationalPolicyReq.java +++ b/src/main/java/org/onap/clamp/clds/client/req/OperationalPolicyReq.java @@ -139,7 +139,7 @@ public class OperationalPolicyReq { logger.info("notificationTopic=" + notificationTopic); // format yaml - String yaml = tca.isFound() ? formateNodeBYaml(refProp, prop, modelElementId, policyChain) + String yaml = (tca != null && tca.isFound()) ? formateNodeBYaml(refProp, prop, modelElementId, policyChain) : formatYaml(refProp, prop, modelElementId, policyChain); ruleAttributes.put("templateName", templateName); @@ -425,7 +425,7 @@ public class OperationalPolicyReq { return new Resource[0]; } return stringList.stream().map(stringElem -> new Resource(stringElem, resourceType)).toArray(Resource[]::new); - } + } /** * Convert a List of policy result strings to an array of PolicyResult diff --git a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java index 93c56260..f8351ca5 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java +++ b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java @@ -46,7 +46,6 @@ import java.util.Map.Entry; import org.apache.commons.codec.digest.DigestUtils; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.onap.clamp.clds.client.SdcCatalogServices; -import org.onap.clamp.clds.exception.SdcCommunicationException; import org.onap.clamp.clds.model.CldsSdcResource; import org.onap.clamp.clds.model.CldsSdcServiceDetail; import org.onap.clamp.clds.model.prop.Global; @@ -251,13 +250,12 @@ public class SdcReq { * @param baseUrl * @param sdcCatalogServices * @return - * @throws Exception */ public static List getSdcReqUrlsList(ModelProperties prop, String baseUrl, SdcCatalogServices sdcCatalogServices, DelegateExecution execution) { // TODO : refact and regroup with very similar code List urlList = new ArrayList<>(); - try { + Global globalProps = prop.getGlobal(); if (globalProps != null) { if (globalProps.getService() != null) { @@ -266,30 +264,28 @@ public class SdcReq { List resourceVfList = globalProps.getResourceVf(); String serviceUUID = sdcCatalogServices.getServiceUuidFromServiceInvariantId(serviceInvariantUUID); String sdcServicesInformation = sdcCatalogServices.getSdcServicesInformation(serviceUUID); - CldsSdcServiceDetail CldsSdcServiceDetail = sdcCatalogServices + CldsSdcServiceDetail cldsSdcServiceDetail = sdcCatalogServices .getCldsSdcServiceDetailFromJson(sdcServicesInformation); - if (CldsSdcServiceDetail != null && resourceVfList != null) { - List CldsSdcResourcesList = CldsSdcServiceDetail.getResources(); - if (CldsSdcResourcesList != null && !CldsSdcResourcesList.isEmpty()) { - for (CldsSdcResource CldsSdcResource : CldsSdcResourcesList) { + if (cldsSdcServiceDetail != null && resourceVfList != null) { + List cldsSdcResourcesList = cldsSdcServiceDetail.getResources(); + if (cldsSdcResourcesList != null && !cldsSdcResourcesList.isEmpty()) { + for (CldsSdcResource CldsSdcResource : cldsSdcResourcesList) { if (CldsSdcResource != null && CldsSdcResource.getResoucreType() != null - && CldsSdcResource.getResoucreType().equalsIgnoreCase("VF")) { - if (resourceVfList.contains(CldsSdcResource.getResourceInvariantUUID())) { - String normalizedResourceInstanceName = normalizeResourceInstanceName( - CldsSdcResource.getResourceInstanceName()); - String svcUrl = baseUrl + "/" + serviceUUID + "/resourceInstances/" - + normalizedResourceInstanceName + "/artifacts"; - urlList.add(svcUrl); - } + && CldsSdcResource.getResoucreType().equalsIgnoreCase("VF") + && resourceVfList.contains(CldsSdcResource.getResourceInvariantUUID())) { + String normalizedResourceInstanceName = normalizeResourceInstanceName( + CldsSdcResource.getResourceInstanceName()); + String svcUrl = baseUrl + "/" + serviceUUID + "/resourceInstances/" + + normalizedResourceInstanceName + "/artifacts"; + urlList.add(svcUrl); + } } } } } } - } catch (IOException e) { - throw new SdcCommunicationException("Exception occurred during the SDC communication",e); - } + return urlList; } diff --git a/src/main/java/org/onap/clamp/clds/config/CldsConfiguration.java b/src/main/java/org/onap/clamp/clds/config/CldsConfiguration.java index 19c91643..eee17911 100644 --- a/src/main/java/org/onap/clamp/clds/config/CldsConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/config/CldsConfiguration.java @@ -23,7 +23,9 @@ package org.onap.clamp.clds.config; -import java.io.IOException; +import com.att.ajsc.common.AjscProvider; +import com.att.ajsc.common.AjscService; + import java.util.ArrayList; import java.util.List; @@ -55,9 +57,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; -import com.att.ajsc.common.AjscProvider; -import com.att.ajsc.common.AjscService; - @Configuration @Profile("clamp-default") public class CldsConfiguration { @@ -99,7 +98,7 @@ public class CldsConfiguration { } @Bean - public RefProp getRefProp() throws IOException { + public RefProp getRefProp() { return new RefProp(); } diff --git a/src/main/java/org/onap/clamp/clds/config/CldsUserJsonDecoder.java b/src/main/java/org/onap/clamp/clds/config/CldsUserJsonDecoder.java index 997a20f0..ecfb4aa1 100644 --- a/src/main/java/org/onap/clamp/clds/config/CldsUserJsonDecoder.java +++ b/src/main/java/org/onap/clamp/clds/config/CldsUserJsonDecoder.java @@ -23,13 +23,13 @@ package org.onap.clamp.clds.config; +import com.fasterxml.jackson.databind.ObjectMapper; + import java.io.IOException; import java.io.InputStream; import org.onap.clamp.clds.service.CldsUser; -import com.fasterxml.jackson.databind.ObjectMapper; - public class CldsUserJsonDecoder { /** @@ -43,4 +43,8 @@ public class CldsUserJsonDecoder { // the ObjectMapper readValue method closes the stream no need to do it return new ObjectMapper().readValue(cldsUsersFile, CldsUser[].class); } + + private CldsUserJsonDecoder() { + + } } diff --git a/src/main/java/org/onap/clamp/clds/dao/CldsDao.java b/src/main/java/org/onap/clamp/clds/dao/CldsDao.java index 3b69502a..3cc6a325 100644 --- a/src/main/java/org/onap/clamp/clds/dao/CldsDao.java +++ b/src/main/java/org/onap/clamp/clds/dao/CldsDao.java @@ -46,7 +46,6 @@ import org.onap.clamp.clds.model.CldsModelInstance; import org.onap.clamp.clds.model.CldsServiceData; import org.onap.clamp.clds.model.CldsTemplate; import org.onap.clamp.clds.model.ValueItem; -import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @@ -398,8 +397,8 @@ public class CldsDao { * @return model names */ public List getBpmnNames() { - String SQL = "SELECT model_name FROM model ORDER BY 1;"; - return jdbcTemplateObject.query(SQL, new ValueItemMapper()); + String sql = "SELECT model_name FROM model ORDER BY 1;"; + return jdbcTemplateObject.query(sql, new ValueItemMapper()); } /** @@ -435,8 +434,8 @@ public class CldsDao { * @return template names */ public List getTemplateNames() { - String SQL = "SELECT template_name FROM template ORDER BY 1;"; - return jdbcTemplateObject.query(SQL, new ValueItemMapper()); + String sql = "SELECT template_name FROM template ORDER BY 1;"; + return jdbcTemplateObject.query(sql, new ValueItemMapper()); } /** @@ -466,14 +465,10 @@ public class CldsDao { public CldsServiceData getCldsServiceCache(String invariantUUID) { CldsServiceData cldsServiceData = null; List cldsServiceDataList = new ArrayList<>(); - try { - String getCldsServiceSQL = "SELECT * , TIMESTAMPDIFF(SECOND, timestamp, CURRENT_TIMESTAMP()) FROM clds_service_cache where invariant_service_id = ? "; - cldsServiceData = jdbcTemplateObject.queryForObject(getCldsServiceSQL, new Object[] { invariantUUID }, - new CldsServiceDataMapper()); - logger.info("value of cldsServiceDataList: {}", cldsServiceDataList); - } catch (EmptyResultDataAccessException e) { - logger.info("cache row not found for invariantUUID: {}", invariantUUID); - } + String getCldsServiceSQL = "SELECT * , TIMESTAMPDIFF(SECOND, timestamp, CURRENT_TIMESTAMP()) FROM clds_service_cache where invariant_service_id = ? "; + cldsServiceData = jdbcTemplateObject.queryForObject(getCldsServiceSQL, new Object[] { invariantUUID }, + new CldsServiceDataMapper()); + logger.info("value of cldsServiceDataList: {}", cldsServiceDataList); return cldsServiceData; } @@ -499,7 +494,7 @@ public class CldsDao { } } - public void doHealthCheck() throws SQLException, IOException { + public void doHealthCheck() { jdbcTemplateObject.execute(HEALTHCHECK); } diff --git a/src/main/java/org/onap/clamp/clds/exception/policy/PolicyClientException.java b/src/main/java/org/onap/clamp/clds/exception/policy/PolicyClientException.java new file mode 100644 index 00000000..eaeb0b8f --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/exception/policy/PolicyClientException.java @@ -0,0 +1,61 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.exception.policy; + +/** + * New exception to Policy Client errors. + * + */ +public class PolicyClientException extends RuntimeException { + + /** + * Serial ID. + */ + private static final long serialVersionUID = -8379167975420213634L; + + /** + * This constructor can be used to create a new PolicyClientException. + * + * @param message + * A string message detailing the problem + * @param e + * The exception sent by the code + */ + public PolicyClientException(String message, Throwable e) { + super(message, e); + } + + /** + * This constructor can be used to create a new PolicyClientException. Use + * this constructor only if you are creating a new exception stack, not if + * an exception was already raised by another code. + * + * @param message + * A string message detailing the problem + */ + public PolicyClientException(String message) { + super(message); + } + +} diff --git a/src/main/java/org/onap/clamp/clds/model/prop/AbstractModelElement.java b/src/main/java/org/onap/clamp/clds/model/prop/AbstractModelElement.java new file mode 100644 index 00000000..a7dd5cbf --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/model/prop/AbstractModelElement.java @@ -0,0 +1,280 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.model.prop; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.fasterxml.jackson.databind.JsonNode; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Provide base ModelElement functionality. Perform base parsing of properties + * for a ModelElement (such as, Collector, StringMatch, Policy, Tca, Holmes, + * ...) + */ +public abstract class AbstractModelElement { + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractModelElement.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + + private final String type; + private final ModelBpmn modelBpmn; + private final String id; + protected String topicPublishes; + protected final JsonNode modelElementJsonNode; + private boolean isFound; + + private final ModelProperties modelProp; + + /** + * Perform base parsing of properties for a ModelElement (such as, + * Collector, StringMatch, Policy and Tca) + * + * @param type + * @param modelProp + * @param modelBpmn + * @param modelJson + */ + protected AbstractModelElement(String type, ModelProperties modelProp, ModelBpmn modelBpmn, JsonNode modelJson) { + this.type = type; + this.modelProp = modelProp; + this.modelBpmn = modelBpmn; + this.id = modelBpmn.getId(type); + this.modelElementJsonNode = modelJson.get(id); + this.isFound = modelBpmn.isModelElementTypeInList(type); + } + + /** + * topicSubscribes is the topicPublishes of the from Model Element (the + * previous one in the chain). + * + * @return the topicSubscribes + */ + public String getTopicSubscribes() { + // get fromId for this type + String fromId = modelBpmn.getFromId(type); + // find the type of the from model element + String fromType = modelBpmn.getType(fromId); + // get the model element for the type + AbstractModelElement me = modelProp.getModelElementByType(fromType); + // get the topic publishes for the model element + return me.topicPublishes; + } + + /** + * @return the topicPublishes + */ + public String getTopicPublishes() { + return topicPublishes; + } + + /** + * Return the value field of the json node element that has a name field + * equals to the given name. + * + * @param nodeIn + * @param name + * @return + */ + public static String getValueByName(JsonNode nodeIn, String name) { + String value = null; + if (nodeIn != null) { + for (JsonNode node : nodeIn) { + if (node.path("name").asText().equals(name)) { + JsonNode vnode = node.path("value"); + if (vnode.isArray()) { + // if array, assume value is in first element + value = vnode.path(0).asText(); + } else { + // otherwise, just return text + value = vnode.asText(); + } + } + } + } + if (value == null || value.length() == 0) { + logger.warn(name + "=" + value); + } else { + logger.debug(name + "=" + value); + } + return value; + } + + /** + * Return the value field of the json node element that has a name field + * that equals the given name. + * + * @param nodeIn + * @param name + * @return + */ + public static String getNodeValueByName(JsonNode nodeIn, String name) { + String value = null; + if (nodeIn != null) { + value = nodeIn.path(name).asText(); + } + if (value == null || value.length() == 0) { + logger.warn(name + "=" + value); + } else { + logger.debug(name + "=" + value); + } + return value; + } + + /** + * Return the value field of the json node element that has a name field + * that equals the given name. + * + * @param nodeIn + * @param name + * @return + */ + public static List getNodeValuesByName(JsonNode nodeIn, String name) { + List values = new ArrayList<>(); + if (nodeIn != null) { + Iterator i = nodeIn.iterator(); + while (i.hasNext()) { + JsonNode node = i.next(); + if (node.path("name").asText().equals(name)) { + JsonNode vnode = node.path("value"); + if (vnode.isArray()) { + // if array, assume value is in first element + values.add(vnode.path(0).asText()); + } else { + // otherwise, just return text + values.add(vnode.asText()); + } + } + } + } + return values; + } + + /** + * Return the int value field of the json node element that has a name field + * equals to the given name. + * + * @param nodeIn + * @param name + * @return + */ + public static Integer getIntValueByName(JsonNode nodeIn, String name) { + String value = getValueByName(nodeIn, name); + return Integer.valueOf(value); + } + + /** + * Return an array of values for the field of the json node element that has + * a name field equals to the given name. + * + * @param nodeIn + * @param name + * @return + */ + public static List getValuesByName(JsonNode nodeIn, String name) { + List values = null; + if (nodeIn != null) { + Iterator i = nodeIn.iterator(); + while (i.hasNext()) { + JsonNode node = i.next(); + if (node.path("name").asText().equals(name)) { + values = getValuesList(node); + } + } + } + if (values == null || values.isEmpty()) { + logger.warn(name + "=" + values); + } else { + logger.debug(name + "=" + values); + } + return values; + } + + /** + * Return an array of String values. + * + * @param nodeIn + * @return + */ + public static List getValuesList(JsonNode nodeIn) { + ArrayList al = new ArrayList<>(); + if (nodeIn != null) { + Iterator itr = nodeIn.path("value").elements(); + while (itr.hasNext()) { + JsonNode node = itr.next(); + al.add(node.asText()); + } + } + return al; + } + + /** + * Return the value field of the json node element that has a name field + * equals to the given name. + * + * @param name + * @return + */ + public String getValueByName(String name) { + return getValueByName(modelElementJsonNode, name); + } + + /** + * Return the int value field of the json node element that has a name field + * equals to the given name. + * + * @param name + * @return + */ + public Integer getIntValueByName(String name) { + return getIntValueByName(modelElementJsonNode, name); + } + + /** + * Return an array of values for the field of the json node element that has + * a name field equals to the given name. + * + * @param name + * @return + */ + public List getValuesByName(String name) { + return getValuesByName(modelElementJsonNode, name); + } + + /** + * @return the id + */ + public String getId() { + return id; + } + + /** + * @return the isFound + */ + public boolean isFound() { + return isFound; + } +} diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Collector.java b/src/main/java/org/onap/clamp/clds/model/prop/Collector.java index bcb9cf01..be30f3ec 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/Collector.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/Collector.java @@ -30,7 +30,7 @@ import com.fasterxml.jackson.databind.JsonNode; /** * Parse Collector json properties. */ -public class Collector extends ModelElement { +public class Collector extends AbstractModelElement { protected static final EELFLogger logger = EELFManager.getInstance().getLogger(Collector.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Global.java b/src/main/java/org/onap/clamp/clds/model/prop/Global.java index 2fb7d504..48c2fd9f 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/Global.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/Global.java @@ -54,11 +54,11 @@ public class Global { */ public Global(JsonNode modelJson) { JsonNode globalNode = modelJson.get("global"); - service = ModelElement.getValueByName(globalNode, "service"); - actionSet = ModelElement.getValueByName(globalNode, "actionSet"); - resourceVf = ModelElement.getValuesByName(globalNode, "vf"); - resourceVfc = ModelElement.getValuesByName(globalNode, "vfc"); - location = ModelElement.getValuesByName(globalNode, "location"); + service = AbstractModelElement.getValueByName(globalNode, "service"); + actionSet = AbstractModelElement.getValueByName(globalNode, "actionSet"); + resourceVf = AbstractModelElement.getValuesByName(globalNode, "vf"); + resourceVfc = AbstractModelElement.getValuesByName(globalNode, "vfc"); + location = AbstractModelElement.getValuesByName(globalNode, "location"); } /** diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Holmes.java b/src/main/java/org/onap/clamp/clds/model/prop/Holmes.java index 233f656e..4fa04075 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/Holmes.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/Holmes.java @@ -32,7 +32,7 @@ import com.fasterxml.jackson.databind.JsonNode; * [{"name":"correlationalLogic","value":"vcwx"},{"name":"operationalPolicy","value":"cccc"}] * */ -public class Holmes extends ModelElement { +public class Holmes extends AbstractModelElement { private static final String TYPE_HOLMES = "holmes"; diff --git a/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java b/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java index 9684eea8..ac25400d 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/ModelProperties.java @@ -62,13 +62,13 @@ public class ModelProperties { private Global global; - private final Map modelElements = new ConcurrentHashMap<>(); + private final Map modelElements = new ConcurrentHashMap<>(); private String currentModelElementId; private String policyUniqueId; private static final Object lock = new Object(); - private static Map, String> modelElementClasses = new ConcurrentHashMap<>(); + private static Map, String> modelElementClasses = new ConcurrentHashMap<>(); static { synchronized (lock) { @@ -119,7 +119,7 @@ public class ModelProperties { // Parse the list of base Model Elements and build up the // ModelElements modelElementClasses.entrySet().stream().parallel() - .filter(entry -> (ModelElement.class.isAssignableFrom(entry.getKey()) + .filter(entry -> (AbstractModelElement.class.isAssignableFrom(entry.getKey()) && missingTypes.contains(entry.getValue()))) .forEach(entry -> { try { @@ -183,8 +183,8 @@ public class ModelProperties { * @param type * @return */ - public ModelElement getModelElementByType(String type) { - ModelElement modelElement = modelElements.get(type); + public AbstractModelElement getModelElementByType(String type) { + AbstractModelElement modelElement = modelElements.get(type); if (modelElement == null) { throw new IllegalArgumentException("Invalid or not found ModelElement type: " + type); } @@ -338,14 +338,14 @@ public class ModelProperties { return global; } - public static final synchronized void registerModelElement(Class modelElementClass, + public static final synchronized void registerModelElement(Class modelElementClass, String type) { if (!modelElementClasses.containsKey(modelElementClass.getClass())) { modelElementClasses.put(modelElementClass, type); } } - public T getType(Class clazz) { + public T getType(Class clazz) { instantiateMissingModelElements(); String type = modelElementClasses.get(clazz); return (type != null ? (T) modelElements.get(type) : null); diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Policy.java b/src/main/java/org/onap/clamp/clds/model/prop/Policy.java index 452af20c..80d12aab 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/Policy.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/Policy.java @@ -48,7 +48,7 @@ import java.util.List; * ""]},{"name":"onOtherFailure","value":[""]},{"name":"policy_parent","value":[ * "vf3RtPi"]}]]}] */ -public class Policy extends ModelElement { +public class Policy extends AbstractModelElement { protected static final EELFLogger logger = EELFManager.getInstance().getLogger(Policy.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); diff --git a/src/main/java/org/onap/clamp/clds/model/prop/PolicyChain.java b/src/main/java/org/onap/clamp/clds/model/prop/PolicyChain.java index 6142e9e6..c8c2ef46 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/PolicyChain.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/PolicyChain.java @@ -63,13 +63,13 @@ public class PolicyChain { public PolicyChain(JsonNode node) { - policyId = ModelElement.getValueByName(node, "pid"); - timeout = ModelElement.getIntValueByName(node, "timeout"); + policyId = AbstractModelElement.getValueByName(node, "pid"); + timeout = AbstractModelElement.getIntValueByName(node, "timeout"); // process policy configurations JsonNode policyNode = node.get(node.size() - 1).get("policyConfigurations"); Iterator itr = policyNode.elements(); - policyItems = new ArrayList(); + policyItems = new ArrayList<>(); while (itr.hasNext()) { policyItems.add(new PolicyItem(itr.next())); } diff --git a/src/main/java/org/onap/clamp/clds/model/prop/PolicyItem.java b/src/main/java/org/onap/clamp/clds/model/prop/PolicyItem.java index d1729cda..c84affef 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/PolicyItem.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/PolicyItem.java @@ -64,12 +64,12 @@ public class PolicyItem implements Cloneable { * @param node */ public PolicyItem(JsonNode node) { - id = ModelElement.getValueByName(node, "_id"); - recipe = ModelElement.getValueByName(node, "recipe"); - maxRetries = ModelElement.getIntValueByName(node, "maxRetries"); - retryTimeLimit = ModelElement.getIntValueByName(node, "retryTimeLimit"); - parentPolicy = ModelElement.getValueByName(node, "parentPolicy"); - parentPolicyConditions = ModelElement.getValuesByName(node, "parentPolicyConditions"); + id = AbstractModelElement.getValueByName(node, "_id"); + recipe = AbstractModelElement.getValueByName(node, "recipe"); + maxRetries = AbstractModelElement.getIntValueByName(node, "maxRetries"); + retryTimeLimit = AbstractModelElement.getIntValueByName(node, "retryTimeLimit"); + parentPolicy = AbstractModelElement.getValueByName(node, "parentPolicy"); + parentPolicyConditions = AbstractModelElement.getValuesByName(node, "parentPolicyConditions"); } diff --git a/src/main/java/org/onap/clamp/clds/model/prop/ResourceGroup.java b/src/main/java/org/onap/clamp/clds/model/prop/ResourceGroup.java index 6e986bb0..7395ced0 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/ResourceGroup.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/ResourceGroup.java @@ -78,8 +78,8 @@ public class ResourceGroup { */ public ResourceGroup(JsonNode node) { - groupNumber = ModelElement.getValueByName(node, "rgname"); - policyId = ModelElement.getValueByName(node, "policyId"); + groupNumber = AbstractModelElement.getValueByName(node, "rgname"); + policyId = AbstractModelElement.getValueByName(node, "policyId"); // process Server_Configurations JsonNode serviceConfigurationsNode = node.get(node.size() - 1).get("serviceConfigurations"); diff --git a/src/main/java/org/onap/clamp/clds/model/prop/ServiceConfiguration.java b/src/main/java/org/onap/clamp/clds/model/prop/ServiceConfiguration.java index 186cc219..f15d7019 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/ServiceConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/ServiceConfiguration.java @@ -84,15 +84,15 @@ public class ServiceConfiguration { * @param node */ public ServiceConfiguration(JsonNode node) { - aaiMatchingFields = ModelElement.getValuesByName(node, "aaiMatchingFields"); - aaiSendFields = ModelElement.getValuesByName(node, "aaiSendFields"); + aaiMatchingFields = AbstractModelElement.getValuesByName(node, "aaiMatchingFields"); + aaiSendFields = AbstractModelElement.getValuesByName(node, "aaiSendFields"); // groupNumber = ModelElement.getValueByName(node, "groupNumber"); - resourceVf = ModelElement.getValuesByName(node, "vf"); - resourceVfc = ModelElement.getValuesByName(node, "vfc"); - timeWindow = ModelElement.getValueByName(node, "timeWindow"); - ageLimit = ModelElement.getValueByName(node, "ageLimit"); - createClosedLoopEventId = ModelElement.getValueByName(node, "createClosedLoopEventId"); - outputEventName = ModelElement.getValueByName(node, "outputEventName"); + resourceVf = AbstractModelElement.getValuesByName(node, "vf"); + resourceVfc = AbstractModelElement.getValuesByName(node, "vfc"); + timeWindow = AbstractModelElement.getValueByName(node, "timeWindow"); + ageLimit = AbstractModelElement.getValueByName(node, "ageLimit"); + createClosedLoopEventId = AbstractModelElement.getValueByName(node, "createClosedLoopEventId"); + outputEventName = AbstractModelElement.getValueByName(node, "outputEventName"); // process the stringSet fields JsonNode ssNodes = node.findPath("stringSet"); diff --git a/src/main/java/org/onap/clamp/clds/model/prop/StringMatch.java b/src/main/java/org/onap/clamp/clds/model/prop/StringMatch.java index 7fcc1b1b..b74e7d13 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/StringMatch.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/StringMatch.java @@ -59,7 +59,7 @@ import java.util.List; * "outputEventName","value":["ABATED"]}]]}]}} * */ -public class StringMatch extends ModelElement { +public class StringMatch extends AbstractModelElement { private List resourceGroups; diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java index 6bc68e23..f7bbac0d 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java @@ -48,7 +48,7 @@ import java.util.List; * * */ -public class Tca extends ModelElement { +public class Tca extends AbstractModelElement { protected static final EELFLogger logger = EELFManager.getInstance().getLogger(Tca.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java index aa1abde1..f104b091 100644 --- a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java +++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java @@ -70,17 +70,17 @@ public class TcaItem { */ public TcaItem(JsonNode node) { - tcaName = ModelElement.getValueByName(node, "tname"); - tcaUuId = ModelElement.getValueByName(node, "tuuid"); - nfNamingCode = ModelElement.getValueByName(node, "tnfc"); - tcaEnable = ModelElement.getValueByName(node, "tcaEnab"); - policyId = ModelElement.getValueByName(node, "tcaPolId"); - if (ModelElement.getValueByName(node, "tcaInt") != null) { - interval = Integer.valueOf(ModelElement.getValueByName(node, "tcaInt")); + tcaName = AbstractModelElement.getValueByName(node, "tname"); + tcaUuId = AbstractModelElement.getValueByName(node, "tuuid"); + nfNamingCode = AbstractModelElement.getValueByName(node, "tnfc"); + tcaEnable = AbstractModelElement.getValueByName(node, "tcaEnab"); + policyId = AbstractModelElement.getValueByName(node, "tcaPolId"); + if (AbstractModelElement.getValueByName(node, "tcaInt") != null) { + interval = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaInt")); } - severity = ModelElement.getValueByName(node, "tcaSev"); - if (ModelElement.getValueByName(node, "tcaVio") != null) { - violations = Integer.valueOf(ModelElement.getValueByName(node, "tcaVio")); + severity = AbstractModelElement.getValueByName(node, "tcaSev"); + if (AbstractModelElement.getValueByName(node, "tcaVio") != null) { + violations = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaVio")); } // process service Configurations diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java index ff4cfda1..920bce18 100644 --- a/src/main/java/org/onap/clamp/clds/service/CldsService.java +++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java @@ -500,9 +500,6 @@ public class CldsService extends SecureServiceBase { if (test != null && test.equalsIgnoreCase("true")) { isTest = true; } else { - // if action.test.override is true, then any action will be marked - // as test=true (even if incoming action request had test=false); - // otherwise, test flag will be unchanged on the action request String actionTestOverride = refProp.getStringValue("action.test.override"); if (actionTestOverride != null && actionTestOverride.equalsIgnoreCase("true")) { logger.info("PUT actionTestOverride={}", actionTestOverride); @@ -666,8 +663,7 @@ public class CldsService extends SecureServiceBase { /** * REST service that retrieves total properties by using invariantUUID based * on refresh and non refresh - * - * @throws Exception + * */ @ApiOperation(value = "Retrieves total properties by using invariantUUID based on refresh and non refresh", notes = "", response = String.class) @GET @@ -675,7 +671,7 @@ public class CldsService extends SecureServiceBase { @Produces(MediaType.APPLICATION_JSON) public String getSdcPropertiesByServiceUUIDForRefresh( @PathParam("serviceInvariantUUID") String serviceInvariantUUID, - @DefaultValue("false") @QueryParam("refresh") String refresh) throws Exception { + @DefaultValue("false") @QueryParam("refresh") String refresh) { Date startTime = new Date(); LoggingUtils.setRequestContext("CldsService: GET sdc properties by uuid", getPrincipalName()); CldsServiceData cldsServiceData = new CldsServiceData(); @@ -901,7 +897,7 @@ public class CldsService extends SecureServiceBase { @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public CldsModel deployModel(@PathParam("action") String action, @PathParam("modelName") String modelName, - @QueryParam("test") String test, CldsModel model) throws Exception { + @QueryParam("test") String test, CldsModel model) throws IOException { Date startTime = new Date(); LoggingUtils.setRequestContext("CldsService: Deploy model", getPrincipalName()); String deploymentId = "closedLoop_" + UUID.randomUUID() + "_deploymentId"; diff --git a/src/main/java/org/onap/clamp/clds/service/CldsUser.java b/src/main/java/org/onap/clamp/clds/service/CldsUser.java index 9db1e607..34a3f8ea 100644 --- a/src/main/java/org/onap/clamp/clds/service/CldsUser.java +++ b/src/main/java/org/onap/clamp/clds/service/CldsUser.java @@ -71,7 +71,7 @@ public class CldsUser { } public String[] getPermissionsString() { - return Arrays.stream(getPermissions()).map(perm -> perm.getKey()).toArray(String[]::new); + return Arrays.stream(getPermissions()).map(SecureServicePermission::getKey).toArray(String[]::new); } /** diff --git a/src/test/java/org/onap/clamp/clds/client/req/SdcReqTest.java b/src/test/java/org/onap/clamp/clds/client/req/SdcReqTest.java index 20b85d6f..a283f43d 100644 --- a/src/test/java/org/onap/clamp/clds/client/req/SdcReqTest.java +++ b/src/test/java/org/onap/clamp/clds/client/req/SdcReqTest.java @@ -40,11 +40,11 @@ import org.onap.clamp.clds.model.prop.ModelProperties; public class SdcReqTest { - String baseUrl = "AYBABTU"; + String baseUrl = "AYBABTU"; String serviceInvariantUUID = "serviceInvariantUUID"; @Test - public void getSdcReqUrlsListNoGlobalPropTest() throws Exception { + public void getSdcReqUrlsListNoGlobalPropTest() { ModelProperties prop = mock(ModelProperties.class); SdcCatalogServices sdcCatalogServices = mock(SdcCatalogServices.class); DelegateExecution delegateExecution = mock(DelegateExecution.class); diff --git a/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java b/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java index 19fad480..69df9721 100644 --- a/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java +++ b/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java @@ -119,7 +119,7 @@ public class PolicyClientIT extends AbstractIT { try { responseMessage = policyClient.sendMicroServiceInJson(policyJson, prop, tcaPolicyRequestUuid); } catch (Exception e) { - assertTrue(e.getMessage().contains("Policy send failed: PE500 ")); + assertTrue(e.getMessage().contains("Exception while communicating with Policy")); } System.out.println(responseMessage); } diff --git a/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java b/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java index 5d08e5ec..a12d6b7d 100644 --- a/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java +++ b/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java @@ -202,9 +202,10 @@ public class SdcCatalogServicesIT extends AbstractIT { @Test public void getServiceUuidFromServiceInvariantIdTest() throws Exception { SdcCatalogServices spy = Mockito.spy(sdcCatalogWired); - Mockito.when(spy.getSdcServicesInformation(null)).thenReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcServicesListExample.json"), "UTF-8")); + Mockito.doReturn(IOUtils.toString( + SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcServicesListExample.json"), "UTF-8")) + .when(spy).getSdcServicesInformation(null); // Try the vcts4 version 1.0, this one should be replaced by 1.1 so it // should not exist, returning empty string String resUuidVcts4Null = spy.getServiceUuidFromServiceInvariantId("a33ed748-3477-4434-b3f3-b5560f5e7d9b"); @@ -228,8 +229,10 @@ public class SdcCatalogServicesIT extends AbstractIT { @Test public void getCldsServiceDataWithAlarmConditionsTest() throws Exception { SdcCatalogServices spy = Mockito.spy(sdcCatalogWired); - Mockito.when(spy.getSdcServicesInformation(null)).thenReturn(IOUtils.toString( - SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcServicesListExample.json"), "UTF-8")); + + Mockito.doReturn(IOUtils.toString( + SdcCatalogServicesIT.class.getResourceAsStream("/example/sdc/sdcServicesListExample.json"), "UTF-8")) + .when(spy).getSdcServicesInformation(null); // This invariant uuid is the one from vcts4 v1.1 String serviceResourceDetailUrl = refProp.getStringValue("sdc.serviceUrl") @@ -286,7 +289,8 @@ public class SdcCatalogServicesIT extends AbstractIT { assertTrue("29018914-966c-442d-9d08-251b9dc45b8f".equals(cldsServiceData.getServiceUUID())); assertTrue(cldsServiceData.getCldsVfs().size() == 1); - List alarmsList = spy.getAllAlarmConditionsFromCldsServiceData(cldsServiceData, "alarmCondition"); + List alarmsList = spy.getAllAlarmConditionsFromCldsServiceData(cldsServiceData, + "alarmCondition"); assertTrue(alarmsList.size() == 6); } diff --git a/src/test/java/org/onap/clamp/clds/model/prop/CustomModelElement.java b/src/test/java/org/onap/clamp/clds/model/prop/CustomModelElement.java index c6b19d0f..03d7d65d 100644 --- a/src/test/java/org/onap/clamp/clds/model/prop/CustomModelElement.java +++ b/src/test/java/org/onap/clamp/clds/model/prop/CustomModelElement.java @@ -28,7 +28,7 @@ import com.fasterxml.jackson.databind.JsonNode; /** * A CustomModelElement to test the capability to add new elements on the fly. */ -public class CustomModelElement extends ModelElement { +public class CustomModelElement extends AbstractModelElement { private static final String CUSTOM_TYPE = "customType"; -- 2.16.6