Removed redundant code 43/16243/2
authorshashikanth <shashikanth.vh@huawei.com>
Thu, 28 Sep 2017 06:41:21 +0000 (12:11 +0530)
committerShashikanth VH <shashikanth.vh@huawei.com>
Thu, 28 Sep 2017 07:09:36 +0000 (07:09 +0000)
Fix major sonar issues in clamp module
https://sonar.onap.org/component_issues?id=org.onap.clamp%3Aclds#resolved=false|severities=MAJOR|rules=squid%3AS1132%2Csquid%3AS1858

Move the "csv" string literal on the left side of this string comparison.

Issue-Id:CLAMP-54
Change-Id: If24d56fd5f539718e12241d4c1d4d83d8a079c0e
Signed-off-by: shashikanth.vh <shashikanth.vh@huawei.com>
src/main/java/org/onap/clamp/clds/client/SdcCatalogServices.java

index e3d10c7..365e3a6 100644 (file)
-/*-\r
- * ============LICENSE_START=======================================================\r
- * ONAP CLAMP\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property. All rights\r
- *                             reserved.\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END============================================\r
- * ===================================================================\r
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
- */\r
-\r
-package org.onap.clamp.clds.client;\r
-\r
-import com.att.eelf.configuration.EELFLogger;\r
-import com.att.eelf.configuration.EELFManager;\r
-import com.fasterxml.jackson.databind.JsonNode;\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-import com.fasterxml.jackson.databind.node.ArrayNode;\r
-import com.fasterxml.jackson.databind.node.ObjectNode;\r
-import com.fasterxml.jackson.databind.node.TextNode;\r
-\r
-import java.io.BufferedReader;\r
-import java.io.DataOutputStream;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.io.InputStreamReader;\r
-import java.io.Reader;\r
-import java.io.StringReader;\r
-import java.net.HttpURLConnection;\r
-import java.net.URL;\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.Date;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import javax.ws.rs.BadRequestException;\r
-\r
-import org.apache.commons.csv.CSVFormat;\r
-import org.apache.commons.csv.CSVRecord;\r
-import org.apache.commons.lang3.StringUtils;\r
-import org.onap.clamp.clds.client.req.SdcReq;\r
-import org.onap.clamp.clds.exception.SdcCommunicationException;\r
-import org.onap.clamp.clds.model.CldsAlarmCondition;\r
-import org.onap.clamp.clds.model.CldsDBServiceCache;\r
-import org.onap.clamp.clds.model.CldsSdcArtifact;\r
-import org.onap.clamp.clds.model.CldsSdcResource;\r
-import org.onap.clamp.clds.model.CldsSdcResourceBasicInfo;\r
-import org.onap.clamp.clds.model.CldsSdcServiceDetail;\r
-import org.onap.clamp.clds.model.CldsSdcServiceInfo;\r
-import org.onap.clamp.clds.model.CldsServiceData;\r
-import org.onap.clamp.clds.model.CldsVfData;\r
-import org.onap.clamp.clds.model.CldsVfKPIData;\r
-import org.onap.clamp.clds.model.CldsVfcData;\r
-import org.onap.clamp.clds.model.prop.Global;\r
-import org.onap.clamp.clds.model.prop.ModelProperties;\r
-import org.onap.clamp.clds.model.refprop.RefProp;\r
-import org.onap.clamp.clds.util.LoggingUtils;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-\r
-public class SdcCatalogServices {\r
-    protected static final EELFLogger logger            = EELFManager.getInstance().getLogger(SdcCatalogServices.class);\r
-    protected static final EELFLogger metricsLogger     = EELFManager.getInstance().getMetricsLogger();\r
-\r
-    private static final String       RESOURCE_VF_TYPE  = "VF";\r
-    private static final String       RESOURCE_VFC_TYPE = "VFC";\r
-\r
-    @Autowired\r
-    private RefProp                   refProp;\r
-\r
-    /**\r
-     * This method get the SDC services Information with the corresponding\r
-     * Service UUID.\r
-     * \r
-     * @param uuid\r
-     *            The service UUID\r
-     * @return A Json String with all the service list\r
-     */\r
-    public String getSdcServicesInformation(String uuid) {\r
-        Date startTime = new Date();\r
-        String baseUrl = refProp.getStringValue("sdc.serviceUrl");\r
-        String basicAuth = SdcReq.getSdcBasicAuth(refProp);\r
-        LoggingUtils.setTargetContext("SDC", "getSdcServicesInformation");\r
-\r
-        try {\r
-            String url = baseUrl;\r
-            if (uuid != null) {\r
-                url = baseUrl + "/" + uuid + "/metadata";\r
-            }\r
-            URL urlObj = new URL(url);\r
-\r
-            HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();\r
-\r
-            conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");\r
-            conn.setRequestProperty("Authorization", basicAuth);\r
-            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");\r
-            conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
-            conn.setRequestMethod("GET");\r
-\r
-            String resp = getResponse(conn);\r
-            if (resp != null) {\r
-                logger.info(resp.toString());\r
-                // metrics log\r
-                LoggingUtils.setResponseContext("0", "Get sdc services success", this.getClass().getName());\r
-                return resp;\r
-            }\r
-        } catch (IOException e) {\r
-            LoggingUtils.setResponseContext("900", "Get sdc services failed", this.getClass().getName());\r
-            LoggingUtils.setErrorContext("900", "Get sdc services error");\r
-            logger.error("not able to get any service information from sdc for uuid:" + uuid, e);\r
-        } finally {\r
-            LoggingUtils.setTimeContext(startTime, new Date());\r
-            metricsLogger.info("getSdcServicesInformation complete");\r
-        }\r
-\r
-        return "";\r
-    }\r
-\r
-    /**\r
-     * To remove duplicate serviceUUIDs from sdc services List.\r
-     *\r
-     * @param rawCldsSdcServiceList\r
-     *            A list of CldsSdcServiceInfo\r
-     * @return A list of CldsSdcServiceInfo without duplicate service UUID\r
-     */\r
-    public List<CldsSdcServiceInfo> removeDuplicateServices(List<CldsSdcServiceInfo> rawCldsSdcServiceList) {\r
-        List<CldsSdcServiceInfo> cldsSdcServiceInfoList = null;\r
-        if (rawCldsSdcServiceList != null && !rawCldsSdcServiceList.isEmpty()) {\r
-            // sort list\r
-            Collections.sort(rawCldsSdcServiceList);\r
-            // and then take only the services with the max version (last in the\r
-            // list with the same name)\r
-            cldsSdcServiceInfoList = new ArrayList<>();\r
-            for (int i = 1; i < rawCldsSdcServiceList.size(); i++) {\r
-                // compare name with previous - if not equal, then keep the\r
-                // previous (it's the last with that name)\r
-                CldsSdcServiceInfo prev = rawCldsSdcServiceList.get(i - 1);\r
-                if (!rawCldsSdcServiceList.get(i).getName().equals(prev.getName())) {\r
-                    cldsSdcServiceInfoList.add(prev);\r
-                }\r
-            }\r
-            // add the last in the list\r
-            cldsSdcServiceInfoList.add(rawCldsSdcServiceList.get(rawCldsSdcServiceList.size() - 1));\r
-        }\r
-        return cldsSdcServiceInfoList;\r
-    }\r
-\r
-    /**\r
-     * To remove duplicate serviceUUIDs from sdc resources List.\r
-     *\r
-     * @param rawCldsSdcResourceList\r
-     * @return\r
-     */\r
-    public List<CldsSdcResource> removeDuplicateSdcResourceInstances(List<CldsSdcResource> rawCldsSdcResourceList) {\r
-        List<CldsSdcResource> cldsSdcResourceList = null;\r
-        if (rawCldsSdcResourceList != null && !rawCldsSdcResourceList.isEmpty()) {\r
-            // sort list\r
-            Collections.sort(rawCldsSdcResourceList);\r
-            // and then take only the resources with the max version (last in\r
-            // the list with the same name)\r
-            cldsSdcResourceList = new ArrayList<>();\r
-            for (int i = 1; i < rawCldsSdcResourceList.size(); i++) {\r
-                // compare name with previous - if not equal, then keep the\r
-                // previous (it's the last with that name)\r
-                CldsSdcResource prev = rawCldsSdcResourceList.get(i - 1);\r
-                if (!rawCldsSdcResourceList.get(i).getResourceInstanceName().equals(prev.getResourceInstanceName())) {\r
-                    cldsSdcResourceList.add(prev);\r
-                }\r
-            }\r
-            // add the last in the list\r
-            cldsSdcResourceList.add(rawCldsSdcResourceList.get(rawCldsSdcResourceList.size() - 1));\r
-        }\r
-        return cldsSdcResourceList;\r
-    }\r
-\r
-    /**\r
-     * To remove duplicate basic resources with same resourceUUIDs.\r
-     *\r
-     * @param rawCldsSdcResourceListBasicList\r
-     * @return\r
-     */\r
-    public List<CldsSdcResourceBasicInfo> removeDuplicateSdcResourceBasicInfo(\r
-            List<CldsSdcResourceBasicInfo> rawCldsSdcResourceListBasicList) {\r
-        List<CldsSdcResourceBasicInfo> cldsSdcResourceBasicInfoList = null;\r
-        if (rawCldsSdcResourceListBasicList != null && !rawCldsSdcResourceListBasicList.isEmpty()) {\r
-            // sort list\r
-            Collections.sort(rawCldsSdcResourceListBasicList);\r
-            // and then take only the resources with the max version (last in\r
-            // the list with the same name)\r
-            cldsSdcResourceBasicInfoList = new ArrayList<>();\r
-            for (int i = 1; i < rawCldsSdcResourceListBasicList.size(); i++) {\r
-                // compare name with previous - if not equal, then keep the\r
-                // previous (it's the last with that name)\r
-                CldsSdcResourceBasicInfo prev = rawCldsSdcResourceListBasicList.get(i - 1);\r
-                if (!rawCldsSdcResourceListBasicList.get(i).getName().equals(prev.getName())) {\r
-                    cldsSdcResourceBasicInfoList.add(prev);\r
-                }\r
-            }\r
-            // add the last in the list\r
-            cldsSdcResourceBasicInfoList\r
-                    .add(rawCldsSdcResourceListBasicList.get(rawCldsSdcResourceListBasicList.size() - 1));\r
-        }\r
-        return cldsSdcResourceBasicInfoList;\r
-    }\r
-\r
-    /**\r
-     * To get ServiceUUID by using serviceInvariantUUID.\r
-     *\r
-     * @param invariantId\r
-     *            The invariant ID\r
-     * @return The service UUID\r
-     */\r
-    public String getServiceUuidFromServiceInvariantId(String invariantId) {\r
-        String serviceUuid = "";\r
-        String responseStr = getSdcServicesInformation(null);\r
-        List<CldsSdcServiceInfo> rawCldsSdcServicesList = getCldsSdcServicesListFromJson(responseStr);\r
-        List<CldsSdcServiceInfo> cldsSdcServicesList = removeDuplicateServices(rawCldsSdcServicesList);\r
-        if (cldsSdcServicesList != null && !cldsSdcServicesList.isEmpty()) {\r
-            for (CldsSdcServiceInfo currCldsSdcServiceInfo : cldsSdcServicesList) {\r
-                if (currCldsSdcServiceInfo != null && currCldsSdcServiceInfo.getInvariantUUID() != null\r
-                        && currCldsSdcServiceInfo.getInvariantUUID().equalsIgnoreCase(invariantId)) {\r
-                    serviceUuid = currCldsSdcServiceInfo.getUuid();\r
-                    break;\r
-                }\r
-            }\r
-        }\r
-        return serviceUuid;\r
-    }\r
-\r
-    /**\r
-     * To get CldsAsdsServiceInfo class by parsing json string.\r
-     *\r
-     * @param jsonStr\r
-     *            The Json string that must be decoded\r
-     * @return The list of CldsSdcServiceInfo, if there is a failure it return\r
-     *         an empty list\r
-     */\r
-    public List<CldsSdcServiceInfo> getCldsSdcServicesListFromJson(String jsonStr) {\r
-        ObjectMapper objectMapper = new ObjectMapper();\r
-        if (StringUtils.isBlank(jsonStr)) {\r
-            return new ArrayList<>();\r
-        }\r
-        try {\r
-            return objectMapper.readValue(jsonStr,\r
-                    objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcServiceInfo.class));\r
-        } catch (IOException e) {\r
-            logger.error("Error when attempting to decode the JSON containing CldsSdcServiceInfo", e);\r
-            return new ArrayList<>();\r
-        }\r
-    }\r
-\r
-    /**\r
-     * To get List of CldsSdcResourceBasicInfo class by parsing json string.\r
-     *\r
-     * @param jsonStr\r
-     *            The JSOn string that must be decoded\r
-     * @return The list of CldsSdcResourceBasicInfo, an empty list in case of\r
-     *         issues\r
-     */\r
-    public List<CldsSdcResourceBasicInfo> getAllSdcResourcesListFromJson(String jsonStr) {\r
-        ObjectMapper objectMapper = new ObjectMapper();\r
-        if (StringUtils.isBlank(jsonStr)) {\r
-            return new ArrayList<>();\r
-        }\r
-\r
-        try {\r
-            return objectMapper.readValue(jsonStr,\r
-                    objectMapper.getTypeFactory().constructCollectionType(List.class, CldsSdcResourceBasicInfo.class));\r
-        } catch (IOException e) {\r
-            logger.error("Exception occurred when attempting to decode the list of CldsSdcResourceBasicInfo JSON", e);\r
-            return new ArrayList<>();\r
-        }\r
-    }\r
-\r
-    /**\r
-     * To get CldsAsdsResource class by parsing json string.\r
-     *\r
-     * @param jsonStr\r
-     * @return\r
-     * @throws IOException\r
-     */\r
-    public CldsSdcResource getCldsSdcResourceFromJson(String jsonStr) throws IOException {\r
-        ObjectMapper objectMapper = new ObjectMapper();\r
-        return objectMapper.readValue(jsonStr, CldsSdcResource.class);\r
-    }\r
-\r
-    /**\r
-     * To get CldsSdcServiceDetail by parsing json string.\r
-     *\r
-     * @param jsonStr\r
-     * @return\r
-     */\r
-    public CldsSdcServiceDetail getCldsSdcServiceDetailFromJson(String jsonStr) {\r
-        ObjectMapper objectMapper = new ObjectMapper();\r
-        try {\r
-            return objectMapper.readValue(jsonStr, CldsSdcServiceDetail.class);\r
-        } catch (IOException e) {\r
-            logger.error("Exception when attempting to decode the CldsSdcServiceDetail JSON", e);\r
-            return null;\r
-        }\r
-    }\r
-\r
-    /**\r
-     * To upload artifact to sdc based on serviceUUID and resource name on url.\r
-     *\r
-     * @param prop\r
-     * @param userid\r
-     * @param url\r
-     * @param formattedSdcReq\r
-     * @return\r
-     */\r
-    public String uploadArtifactToSdc(ModelProperties prop, String userid, String url, String formatttedSdcReq) {\r
-        // Verify whether it is triggered by Validation Test button from UI\r
-        if (prop.isTest()) {\r
-            return "sdc artifact upload not executed for test action";\r
-        }\r
-        try {\r
-            logger.info("userid=" + userid);\r
-            String md5Text = SdcReq.calculateMD5ByString(formatttedSdcReq);\r
-            byte[] postData = SdcReq.stringToByteArray(formatttedSdcReq);\r
-            int postDataLength = postData.length;\r
-            HttpURLConnection conn = getSdcHttpUrlConnection(userid, postDataLength, url, md5Text);\r
-            try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {\r
-                wr.write(postData);\r
-            }\r
-            boolean requestFailed = true;\r
-            int responseCode = conn.getResponseCode();\r
-            logger.info("responseCode=" + responseCode);\r
-            if (responseCode == 200) {\r
-                requestFailed = false;\r
-            }\r
-\r
-            String responseStr = getResponse(conn);\r
-            if (responseStr != null && requestFailed) {\r
-                logger.error("requestFailed - responseStr=" + responseStr);\r
-                throw new BadRequestException(responseStr);\r
-            }\r
-            return responseStr;\r
-        } catch (IOException e) {\r
-            logger.error("Exception when attempting to communicate with SDC", e);\r
-            throw new SdcCommunicationException("Exception when attempting to communicate with SDC", e);\r
-        }\r
-\r
-    }\r
-\r
-    private HttpURLConnection getSdcHttpUrlConnection(String userid, int postDataLength, String url, String md5Text) {\r
-        try {\r
-            logger.info("userid=" + userid);\r
-            String basicAuth = SdcReq.getSdcBasicAuth(refProp);\r
-            String sdcXonapInstanceId = refProp.getStringValue("sdc.sdcX-InstanceID");\r
-            URL urlObj = new URL(url);\r
-            HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();\r
-            conn.setDoOutput(true);\r
-            conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), sdcXonapInstanceId);\r
-            conn.setRequestProperty("Authorization", basicAuth);\r
-            conn.setRequestProperty("Content-Type", "application/json");\r
-            conn.setRequestProperty("Content-MD5", md5Text);\r
-            conn.setRequestProperty("USER_ID", userid);\r
-            conn.setRequestMethod("POST");\r
-            conn.setRequestProperty("charset", "utf-8");\r
-            conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));\r
-            conn.setUseCaches(false);\r
-            conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
-            return conn;\r
-        } catch (IOException e) {\r
-            logger.error("Exception when attempting to open connection with SDC", e);\r
-            throw new SdcCommunicationException("Exception when attempting to open connection with SDC", e);\r
-        }\r
-    }\r
-\r
-    private String getResponse(HttpURLConnection conn) {\r
-        try (InputStream is = getInputStream(conn)) {\r
-            if (is != null) {\r
-                try (BufferedReader in = new BufferedReader(new InputStreamReader(is))) {\r
-                    StringBuilder response = new StringBuilder();\r
-                    String inputLine;\r
-                    while ((inputLine = in.readLine()) != null) {\r
-                        response.append(inputLine);\r
-                    }\r
-                    return response.toString();\r
-                }\r
-            } else {\r
-                return null;\r
-            }\r
-        } catch (IOException e) {\r
-            logger.error("Exception when attempting to open SDC response", e);\r
-            throw new SdcCommunicationException("Exception when attempting to open SDC response", e);\r
-        }\r
-    }\r
-\r
-    private InputStream getInputStream(HttpURLConnection conn) {\r
-        try {\r
-            InputStream inStream = conn.getErrorStream();\r
-            if (inStream == null) {\r
-                inStream = conn.getInputStream();\r
-            }\r
-            return inStream;\r
-        } catch (IOException e) {\r
-            logger.error("Exception when attempting to open SDC error stream", e);\r
-            throw new SdcCommunicationException("Exception when attempting to open SDC error stream", e);\r
-        }\r
-    }\r
-\r
-    public CldsDBServiceCache getCldsDbServiceCacheUsingCldsServiceData(CldsServiceData cldsServiceData) {\r
-        try {\r
-            CldsDBServiceCache cldsDbServiceCache = new CldsDBServiceCache();\r
-            cldsDbServiceCache.setCldsDataInstream(cldsServiceData);\r
-            cldsDbServiceCache.setInvariantId(cldsServiceData.getServiceInvariantUUID());\r
-            cldsDbServiceCache.setServiceId(cldsServiceData.getServiceUUID());\r
-            return cldsDbServiceCache;\r
-        } catch (IOException e) {\r
-            logger.error("Exception when getting service in cache", e);\r
-            throw new SdcCommunicationException("Exception when getting service in cache", e);\r
-        }\r
-    }\r
-\r
-    public boolean isCldsSdcCacheDataExpired(CldsServiceData cldsServiceData) {\r
-        boolean expired = false;\r
-        if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) {\r
-            String cachedServiceUuid = cldsServiceData.getServiceUUID();\r
-            String latestServiceUuid = getServiceUuidFromServiceInvariantId(cldsServiceData.getServiceInvariantUUID());\r
-            String defaultRecordAge = refProp.getStringValue("CLDS_SERVICE_CACHE_MAX_SECONDS");\r
-            if ((!cachedServiceUuid.equalsIgnoreCase(latestServiceUuid)) || (cldsServiceData.getAgeOfRecord() != null\r
-                    && cldsServiceData.getAgeOfRecord() > Long.parseLong(defaultRecordAge))) {\r
-                expired = true;\r
-            }\r
-        } else {\r
-            expired = true;\r
-        }\r
-        return expired;\r
-    }\r
-\r
-    public CldsServiceData getCldsServiceDataWithAlarmConditions(String invariantServiceUuid) {\r
-        String url = refProp.getStringValue("sdc.serviceUrl");\r
-        String catalogUrl = refProp.getStringValue("sdc.catalog.url");\r
-        String serviceUuid = getServiceUuidFromServiceInvariantId(invariantServiceUuid);\r
-        String serviceDetailUrl = url + "/" + serviceUuid + "/metadata";\r
-        String responseStr = getCldsServicesOrResourcesBasedOnURL(serviceDetailUrl, false);\r
-        ObjectMapper objectMapper = new ObjectMapper();\r
-        CldsServiceData cldsServiceData = new CldsServiceData();\r
-        if (responseStr != null) {\r
-            CldsSdcServiceDetail cldsSdcServiceDetail;\r
-            try {\r
-                cldsSdcServiceDetail = objectMapper.readValue(responseStr, CldsSdcServiceDetail.class);\r
-            } catch (IOException e) {\r
-                logger.error("Exception when decoding the CldsServiceData JSON from SDC", e);\r
-                throw new SdcCommunicationException("Exception when decoding the CldsServiceData JSON from SDC", e);\r
-            }\r
-            cldsServiceData.setServiceUUID(cldsSdcServiceDetail.getUuid());\r
-            cldsServiceData.setServiceInvariantUUID(cldsSdcServiceDetail.getInvariantUUID());\r
-\r
-            // To remove duplicate resources from serviceDetail and add valid\r
-            // vfs to service\r
-            if (cldsSdcServiceDetail != null && cldsSdcServiceDetail.getResources() != null) {\r
-                List<CldsSdcResource> cldsSdcResourceList = removeDuplicateSdcResourceInstances(\r
-                        cldsSdcServiceDetail.getResources());\r
-                if (cldsSdcResourceList != null && !cldsSdcResourceList.isEmpty()) {\r
-                    List<CldsVfData> cldsVfDataList = new ArrayList<>();\r
-                    for (CldsSdcResource currCldsSdcResource : cldsSdcResourceList) {\r
-                        if (currCldsSdcResource != null && currCldsSdcResource.getResoucreType() != null\r
-                                && "VF".equalsIgnoreCase(currCldsSdcResource.getResoucreType())) {\r
-                            CldsVfData currCldsVfData = new CldsVfData();\r
-                            currCldsVfData.setVfName(currCldsSdcResource.getResourceInstanceName());\r
-                            currCldsVfData.setVfInvariantResourceUUID(currCldsSdcResource.getResourceInvariantUUID());\r
-                            cldsVfDataList.add(currCldsVfData);\r
-                        }\r
-                    }\r
-                    cldsServiceData.setCldsVfs(cldsVfDataList);\r
-                    // For each vf in the list , add all vfc's\r
-                    getAllVfcForVfList(cldsVfDataList, catalogUrl);\r
-                    logger.info("value of cldsServiceData:" + cldsServiceData);\r
-                    logger.info("value of cldsServiceData:" + cldsServiceData.getServiceInvariantUUID());\r
-                }\r
-            }\r
-        }\r
-        return cldsServiceData;\r
-    }\r
-\r
-    private void getAllVfcForVfList(List<CldsVfData> cldsVfDataList, String catalogUrl) {\r
-        // todo : refact this..\r
-        if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) {\r
-            List<CldsSdcResourceBasicInfo> allVfResources = getAllSdcVForVfcResourcesBasedOnResourceType(\r
-                    RESOURCE_VF_TYPE);\r
-            List<CldsSdcResourceBasicInfo> allVfcResources = getAllSdcVForVfcResourcesBasedOnResourceType(\r
-                    RESOURCE_VFC_TYPE);\r
-            for (CldsVfData currCldsVfData : cldsVfDataList) {\r
-                if (currCldsVfData != null && currCldsVfData.getVfInvariantResourceUUID() != null) {\r
-                    String resourceUuid = getResourceUuidFromResourceInvariantUuid(\r
-                            currCldsVfData.getVfInvariantResourceUUID(), allVfResources);\r
-                    if (resourceUuid != null) {\r
-                        String vfResourceUuidUrl = catalogUrl + "resources" + "/" + resourceUuid + "/metadata";\r
-                        String vfResponse = getCldsServicesOrResourcesBasedOnURL(vfResourceUuidUrl, false);\r
-                        if (vfResponse != null) {\r
-                            // Below 2 line are to get the KPI(field path) data\r
-                            // associated with the VF's\r
-                            List<CldsVfKPIData> cldsVfKPIDataList = getFieldPathFromVF(vfResponse);\r
-                            currCldsVfData.setCldsKPIList(cldsVfKPIDataList);\r
-\r
-                            List<CldsVfcData> vfcDataListFromVfResponse = getVfcDataListFromVfResponse(vfResponse);\r
-                            if (vfcDataListFromVfResponse != null) {\r
-                                currCldsVfData.setCldsVfcs(vfcDataListFromVfResponse);\r
-                                if (!vfcDataListFromVfResponse.isEmpty()) {\r
-                                    // To get artifacts for every VFC and get\r
-                                    // alarm conditions from artifact\r
-                                    for (CldsVfcData currCldsVfcData : vfcDataListFromVfResponse) {\r
-                                        if (currCldsVfcData != null\r
-                                                && currCldsVfcData.getVfcInvariantResourceUUID() != null) {\r
-                                            String resourceVfcUuid = getResourceUuidFromResourceInvariantUuid(\r
-                                                    currCldsVfcData.getVfcInvariantResourceUUID(), allVfcResources);\r
-                                            if (resourceVfcUuid != null) {\r
-                                                String vfcResourceUuidUrl = catalogUrl + "resources" + "/"\r
-                                                        + resourceVfcUuid + "/metadata";\r
-                                                String vfcResponse = getCldsServicesOrResourcesBasedOnURL(\r
-                                                        vfcResourceUuidUrl, false);\r
-                                                if (vfcResponse != null) {\r
-                                                    List<CldsAlarmCondition> alarmCondtionsFromVfc = getAlarmCondtionsFromVfc(\r
-                                                            vfcResponse);\r
-                                                    currCldsVfcData.setCldsAlarmConditions(alarmCondtionsFromVfc);\r
-                                                }\r
-                                            } else {\r
-                                                logger.info("No resourceVFC UUID found for given invariantID:"\r
-                                                        + currCldsVfcData.getVfcInvariantResourceUUID());\r
-                                            }\r
-                                        }\r
-                                    }\r
-                                }\r
-                            }\r
-                        }\r
-                    } else {\r
-                        logger.info("No resourceUUID found for given invariantREsourceUUID:"\r
-                                + currCldsVfData.getVfInvariantResourceUUID());\r
-                    }\r
-                }\r
-            }\r
-        }\r
-    }\r
-\r
-    private List<CldsVfcData> getVfcDataListFromVfResponse(String vfResponse) {\r
-        ObjectMapper mapper = new ObjectMapper();\r
-        ObjectNode vfResponseNode;\r
-        try {\r
-            vfResponseNode = (ObjectNode) mapper.readTree(vfResponse);\r
-        } catch (IOException e) {\r
-            logger.error("Exception when decoding the JSON list of CldsVfcData", e);\r
-            return new ArrayList<>();\r
-        }\r
-        ArrayNode vfcArrayNode = (ArrayNode) vfResponseNode.get("resources");\r
-        List<CldsVfcData> cldsVfcDataList = new ArrayList<>();\r
-        if (vfcArrayNode != null) {\r
-            for (JsonNode vfcjsonNode : vfcArrayNode) {\r
-                CldsVfcData currCldsVfcData = new CldsVfcData();\r
-                ObjectNode currVfcNode = (ObjectNode) vfcjsonNode;\r
-                TextNode resourceTypeNode = (TextNode) currVfcNode.get("resoucreType");\r
-                if (resourceTypeNode != null && "VFC".equalsIgnoreCase(resourceTypeNode.textValue())) {\r
-                    TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName");\r
-                    TextNode vfcInvariantResourceUuid = (TextNode) currVfcNode.get("resourceInvariantUUID");\r
-                    currCldsVfcData.setVfcName(vfcResourceName.textValue());\r
-                    currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUuid.textValue());\r
-                    cldsVfcDataList.add(currCldsVfcData);\r
-                } else if (resourceTypeNode != null && "CVFC".equalsIgnoreCase(resourceTypeNode.textValue())) {\r
-                    cldsVfcDataList.addAll(getVFCfromCVFC(currVfcNode.get("resourceUUID").textValue()));\r
-                }\r
-            }\r
-        }\r
-        return cldsVfcDataList;\r
-    }\r
-\r
-    private List<CldsVfcData> getVFCfromCVFC(String resourceUUID) {\r
-        String catalogUrl = refProp.getStringValue("sdc.catalog.url");\r
-        List<CldsVfcData> cldsVfcDataList = new ArrayList<>();\r
-\r
-        if (resourceUUID != null) {\r
-            String vfcResourceUUIDUrl = catalogUrl + "resources" + "/" + resourceUUID + "/metadata";\r
-            try {\r
-                String vfcResponse = getCldsServicesOrResourcesBasedOnURL(vfcResourceUUIDUrl, false);\r
-                ObjectMapper mapper = new ObjectMapper();\r
-                ObjectNode vfResponseNode = (ObjectNode) mapper.readTree(vfcResponse);\r
-                ArrayNode vfcArrayNode = (ArrayNode) vfResponseNode.get("resources");\r
-\r
-                if (vfcArrayNode != null) {\r
-                    for (JsonNode vfcjsonNode : vfcArrayNode) {\r
-                        CldsVfcData currCldsVfcData = new CldsVfcData();\r
-                        ObjectNode currVfcNode = (ObjectNode) vfcjsonNode;\r
-                        TextNode resourceTypeNode = (TextNode) currVfcNode.get("resoucreType");\r
-                        if (resourceTypeNode != null && "VFC".equalsIgnoreCase(resourceTypeNode.textValue())) {\r
-                            TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName");\r
-                            TextNode vfcInvariantResourceUUID = (TextNode) currVfcNode.get("resourceInvariantUUID");\r
-                            currCldsVfcData.setVfcName(vfcResourceName.textValue());\r
-                            currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUUID.textValue());\r
-                            cldsVfcDataList.add(currCldsVfcData);\r
-                        }\r
-                    }\r
-                }\r
-            } catch (IOException e) {\r
-                logger.error("Exception during JSON analyzis", e);\r
-            }\r
-        }\r
-        return cldsVfcDataList;\r
-    }\r
-\r
-    private String removeUnwantedBracesFromString(String id) {\r
-        return (id != null) ? id.replaceAll("\"", "") : "";\r
-    }\r
-\r
-    private List<CldsAlarmCondition> getAlarmCondtionsFromVfc(String vfcResponse) {\r
-        List<CldsAlarmCondition> cldsAlarmConditionList = new ArrayList<>();\r
-        ObjectMapper mapper = new ObjectMapper();\r
-        ObjectNode vfcResponseNode;\r
-        try {\r
-            vfcResponseNode = (ObjectNode) mapper.readTree(vfcResponse);\r
-        } catch (IOException e) {\r
-            logger.error("Exception when decoding the JSON list of CldsAlarmCondition", e);\r
-            return cldsAlarmConditionList;\r
-        }\r
-        ArrayNode artifactsArrayNode = (ArrayNode) vfcResponseNode.get("artifacts");\r
-\r
-        if (artifactsArrayNode != null && artifactsArrayNode.size() > 0) {\r
-            for (int index = 0; index < artifactsArrayNode.size(); index++) {\r
-                ObjectNode currArtifactNode = (ObjectNode) artifactsArrayNode.get(index);\r
-                TextNode artifactUrlNode = (TextNode) currArtifactNode.get("artifactURL");\r
-                if (artifactUrlNode != null) {\r
-                    String responsesFromArtifactUrl = getResponsesFromArtifactUrl(artifactUrlNode.textValue());\r
-                    cldsAlarmConditionList.addAll(parseCsvToGetAlarmConditions(responsesFromArtifactUrl));\r
-                    logger.info(responsesFromArtifactUrl);\r
-                }\r
-            }\r
-        }\r
-        return cldsAlarmConditionList;\r
-    }\r
-\r
-    private List<CldsAlarmCondition> parseCsvToGetAlarmConditions(String allAlarmCondsValues) {\r
-        try {\r
-            List<CldsAlarmCondition> cldsAlarmConditionList = new ArrayList<>();\r
-            Reader alarmReader = new StringReader(allAlarmCondsValues);\r
-            Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(alarmReader);\r
-            if (records != null) {\r
-                Iterator<CSVRecord> it = records.iterator();\r
-                if (it.hasNext()) {\r
-                    it.next();\r
-                }\r
-                it.forEachRemaining(record -> processRecord(cldsAlarmConditionList, record));\r
-            }\r
-            return cldsAlarmConditionList;\r
-        } catch (IOException e) {\r
-            logger.error("Exception when attempting to parse the CSV containing the alarm", e);\r
-            return new ArrayList<>();\r
-        }\r
-    }\r
-\r
-    // Method to get the artifact for any particular VF\r
-    private List<CldsVfKPIData> getFieldPathFromVF(String vfResponse) {\r
-        List<CldsVfKPIData> cldsVfKPIDataList = new ArrayList<>();\r
-        ObjectMapper mapper = new ObjectMapper();\r
-        ObjectNode vfResponseNode;\r
-        try {\r
-            vfResponseNode = (ObjectNode) mapper.readTree(vfResponse);\r
-        } catch (IOException e) {\r
-            logger.error("Exception when decoding the JSON list of CldsVfKPIData", e);\r
-            return cldsVfKPIDataList;\r
-        }\r
-        ArrayNode artifactsArrayNode = (ArrayNode) vfResponseNode.get("artifacts");\r
-\r
-        if (artifactsArrayNode != null && artifactsArrayNode.size() > 0) {\r
-            for (int index = 0; index < artifactsArrayNode.size(); index++) {\r
-                ObjectNode currArtifactNode = (ObjectNode) artifactsArrayNode.get(index);\r
-                TextNode artifactUrlNode = (TextNode) currArtifactNode.get("artifactURL");\r
-                TextNode artifactNameNode = (TextNode) currArtifactNode.get("artifactName");\r
-                String artifactName = "";\r
-                if (artifactNameNode != null) {\r
-                    artifactName = artifactNameNode.textValue();\r
-                    artifactName = artifactName.substring(artifactName.lastIndexOf('.') + 1);\r
-                }\r
-                if (artifactUrlNode != null && artifactName != null && !artifactName.isEmpty()\r
-                        && artifactName.equalsIgnoreCase("csv")) {\r
-                    String responsesFromArtifactUrl = getResponsesFromArtifactUrl(artifactUrlNode.textValue());\r
-                    cldsVfKPIDataList.addAll(parseCsvToGetFieldPath(responsesFromArtifactUrl));\r
-                    logger.info(responsesFromArtifactUrl);\r
-                }\r
-            }\r
-        }\r
-        return cldsVfKPIDataList;\r
-    }\r
-\r
-    private CldsVfKPIData convertCsvRecordToKpiData(CSVRecord record) {\r
-        if (record.size() < 6) {\r
-            logger.debug("invalid csv field path Record,total columns less than 6: " + record);\r
-            return null;\r
-        }\r
-\r
-        if (StringUtils.isBlank(record.get(1)) || StringUtils.isBlank(record.get(3))\r
-                || StringUtils.isBlank(record.get(5))) {\r
-            logger.debug("Invalid csv field path Record,one of column is having blank value : " + record);\r
-            return null;\r
-        }\r
-\r
-        CldsVfKPIData cldsVfKPIData = new CldsVfKPIData();\r
-        cldsVfKPIData.setNfNamingCode(record.get(0).trim());\r
-        cldsVfKPIData.setNfNamingValue(record.get(1).trim());\r
-\r
-        cldsVfKPIData.setFieldPath(record.get(2).trim());\r
-        cldsVfKPIData.setFieldPathValue(record.get(3).trim());\r
-\r
-        cldsVfKPIData.setThresholdName(record.get(4).trim());\r
-        cldsVfKPIData.setThresholdValue(record.get(5).trim());\r
-        return cldsVfKPIData;\r
-\r
-    }\r
-\r
-    // Method to get the artifactURL Data and set the CldsVfKPIData node\r
-    private List<CldsVfKPIData> parseCsvToGetFieldPath(String allFieldPathValues) {\r
-        try {\r
-            List<CldsVfKPIData> cldsVfKPIDataList = new ArrayList<>();\r
-            Reader alarmReader = new StringReader(allFieldPathValues);\r
-            Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(alarmReader);\r
-            if (records != null) {\r
-                for (CSVRecord record : records) {\r
-                    CldsVfKPIData kpiData = this.convertCsvRecordToKpiData(record);\r
-                    if (kpiData != null) {\r
-                        cldsVfKPIDataList.add(kpiData);\r
-                    }\r
-                }\r
-            }\r
-            return cldsVfKPIDataList;\r
-        } catch (IOException e) {\r
-            logger.error("Exception when attempting to parse the CSV containing the alarm kpi data", e);\r
-            return new ArrayList<>();\r
-        }\r
-    }\r
-\r
-    private void processRecord(List<CldsAlarmCondition> cldsAlarmConditionList, CSVRecord record) {\r
-        if (record == null) {\r
-            return;\r
-        }\r
-        if (record.size() < 5) {\r
-            logger.debug("invalid csv alarm Record,total columns less than 5: " + record);\r
-            return;\r
-        }\r
-        if (StringUtils.isBlank(record.get(1)) || StringUtils.isBlank(record.get(3))\r
-                || StringUtils.isBlank(record.get(4))) {\r
-            logger.debug("invalid csv alarm Record,one of column is having blank value : " + record);\r
-            return;\r
-        }\r
-        CldsAlarmCondition cldsAlarmCondition = new CldsAlarmCondition();\r
-        cldsAlarmCondition.setEventSourceType(record.get(1));\r
-        cldsAlarmCondition.setEventName(record.get(2));\r
-        cldsAlarmCondition.setAlarmConditionKey(record.get(3));\r
-        cldsAlarmCondition.setSeverity(record.get(4));\r
-        cldsAlarmConditionList.add(cldsAlarmCondition);\r
-    }\r
-\r
-    public String getResponsesFromArtifactUrl(String artifactsUrl) {\r
-        String hostUrl = refProp.getStringValue("sdc.hostUrl");\r
-        String artifactsUrlReworked = artifactsUrl.replaceAll("\"", "");\r
-        String artifactUrl = hostUrl + artifactsUrlReworked;\r
-        logger.info("value of artifactURl:" + artifactUrl);\r
-        String currArtifactResponse = getCldsServicesOrResourcesBasedOnURL(artifactUrl, true);\r
-        logger.info("value of artifactResponse:" + currArtifactResponse);\r
-        return currArtifactResponse;\r
-    }\r
-\r
-    /**\r
-     * Service to services/resources/artifacts from sdc.Pass alarmConditions as\r
-     * true to get alarmconditons from artifact url and else it is false\r
-     *\r
-     * @param url\r
-     * @param alarmConditions\r
-     * @return\r
-     */\r
-    public String getCldsServicesOrResourcesBasedOnURL(String url, boolean alarmConditions) {\r
-        Date startTime = new Date();\r
-        try {\r
-            LoggingUtils.setTargetContext("SDC", "getCldsServicesOrResourcesBasedOnURL");\r
-            String urlReworked = removeUnwantedBracesFromString(url);\r
-            URL urlObj = new URL(urlReworked);\r
-\r
-            HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();\r
-            String basicAuth = SdcReq.getSdcBasicAuth(refProp);\r
-            conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");\r
-            conn.setRequestProperty("Authorization", basicAuth);\r
-            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");\r
-            conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
-            conn.setRequestMethod("GET");\r
-\r
-            int responseCode = conn.getResponseCode();\r
-            logger.info("Sdc resource url - " + urlReworked + " , responseCode=" + responseCode);\r
-            StringBuilder response;\r
-            try (BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {\r
-                response = new StringBuilder();\r
-                String inputLine;\r
-                while ((inputLine = in.readLine()) != null) {\r
-                    if (!inputLine.isEmpty()) {\r
-                        response.append(inputLine);\r
-                    }\r
-                    if (alarmConditions) {\r
-                        response.append("\n");\r
-                    }\r
-                }\r
-            }\r
-            LoggingUtils.setResponseContext("0", "Get sdc resources success", this.getClass().getName());\r
-            return response.toString();\r
-        } catch (IOException e) {\r
-            LoggingUtils.setResponseContext("900", "Get sdc resources failed", this.getClass().getName());\r
-            LoggingUtils.setErrorContext("900", "Get sdc resources error");\r
-            logger.error("Exception occurred during query to SDC", e);\r
-            return "";\r
-        } finally {\r
-            LoggingUtils.setTimeContext(startTime, new Date());\r
-            metricsLogger.info("getCldsServicesOrResourcesBasedOnURL completed");\r
-        }\r
-\r
-    }\r
-\r
-    /**\r
-     * To create properties object by using cldsServicedata.\r
-     *\r
-     * @param globalProps\r
-     * @param cldsServiceData\r
-     * @return\r
-     */\r
-    public String createPropertiesObjectByUUID(String globalProps, CldsServiceData cldsServiceData) {\r
-        String totalPropsStr;\r
-        ObjectMapper mapper = new ObjectMapper();\r
-        ObjectNode globalPropsJson;\r
-        if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) {\r
-\r
-            // Objectnode to save all byservice, byvf , byvfc and byalarm nodes\r
-            ObjectNode byIdObjectNode = mapper.createObjectNode();\r
-\r
-            // To create vf ResourceUUID node with serviceInvariantUUID\r
-            ObjectNode invariantUuidObjectNodeWithVf = createVfObjectNodeByServiceInvariantUuid(mapper,\r
-                    cldsServiceData);\r
-            byIdObjectNode.putPOJO("byService", invariantUuidObjectNodeWithVf);\r
-\r
-            // To create byVf and vfcResourceNode with vfResourceUUID\r
-            ObjectNode vfcObjectNodeByVfUuid = createVfcObjectNodeByVfUuid(mapper, cldsServiceData.getCldsVfs());\r
-            byIdObjectNode.putPOJO("byVf", vfcObjectNodeByVfUuid);\r
-\r
-            // To create byKpi\r
-            ObjectNode kpiObjectNode = mapper.createObjectNode();\r
-            if (cldsServiceData.getCldsVfs() != null && !cldsServiceData.getCldsVfs().isEmpty()) {\r
-                for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {\r
-                    if (currCldsVfData != null) {\r
-                        createKpiObjectNodeByVfUuid(mapper, kpiObjectNode, currCldsVfData.getCldsKPIList());\r
-                    }\r
-                }\r
-            }\r
-            byIdObjectNode.putPOJO("byKpi", kpiObjectNode);\r
-\r
-            // To create byVfc and alarmCondition with vfcResourceUUID\r
-            ObjectNode vfcResourceUuidObjectNode = mapper.createObjectNode();\r
-            if (cldsServiceData.getCldsVfs() != null && !cldsServiceData.getCldsVfs().isEmpty()) {\r
-                for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {\r
-                    if (currCldsVfData != null) {\r
-                        createAlarmCondObjectNodeByVfcUuid(mapper, vfcResourceUuidObjectNode,\r
-                                currCldsVfData.getCldsVfcs());\r
-                    }\r
-                }\r
-            }\r
-            byIdObjectNode.putPOJO("byVfc", vfcResourceUuidObjectNode);\r
-\r
-            // To create byAlarmCondition with alarmConditionKey\r
-            List<CldsAlarmCondition> allAlarmConditions = getAllAlarmConditionsFromCldsServiceData(cldsServiceData,\r
-                    "alarmCondition");\r
-            ObjectNode alarmCondObjectNodeByAlarmKey = createAlarmCondObjectNodeByAlarmKey(mapper, allAlarmConditions);\r
-\r
-            byIdObjectNode.putPOJO("byAlarmCondition", alarmCondObjectNodeByAlarmKey);\r
-\r
-            // To create byAlertDescription with AlertDescription\r
-            List<CldsAlarmCondition> allAlertDescriptions = getAllAlarmConditionsFromCldsServiceData(cldsServiceData,\r
-                    "alertDescription");\r
-            ObjectNode alertDescObjectNodeByAlert = createAlarmCondObjectNodeByAlarmKey(mapper, allAlertDescriptions);\r
-\r
-            byIdObjectNode.putPOJO("byAlertDescription", alertDescObjectNodeByAlert);\r
-\r
-            globalPropsJson = decodeGlobalProp(globalProps, mapper);\r
-\r
-            globalPropsJson.putPOJO("shared", byIdObjectNode);\r
-            logger.info("value of objNode:" + globalPropsJson);\r
-        } else {\r
-            /**\r
-             * to create json with total properties when no serviceUUID passed\r
-             */\r
-            globalPropsJson = decodeGlobalProp(globalProps, mapper);\r
-        }\r
-        totalPropsStr = globalPropsJson.toString();\r
-        return totalPropsStr;\r
-    }\r
-\r
-    private ObjectNode decodeGlobalProp(String globalProps, ObjectMapper mapper) {\r
-        try {\r
-            return (ObjectNode) mapper.readValue(globalProps, JsonNode.class);\r
-        } catch (IOException e) {\r
-            logger.error("Exception occurred during decoding of the global props, returning an empty objectNode", e);\r
-            return mapper.createObjectNode();\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Method to get alarm conditions/alert description from Service Data.\r
-     * \r
-     * @param cldsServiceData\r
-     *            CldsServiceData the Service Data to analyze\r
-     * @param eventName\r
-     *            The String event name that will be used to filter the alarm\r
-     *            list\r
-     * @return The list of CldsAlarmCondition for the event name specified\r
-     */\r
-    public List<CldsAlarmCondition> getAllAlarmConditionsFromCldsServiceData(CldsServiceData cldsServiceData,\r
-            String eventName) {\r
-        List<CldsAlarmCondition> alarmCondList = new ArrayList<>();\r
-        if (cldsServiceData != null && cldsServiceData.getCldsVfs() != null\r
-                && !cldsServiceData.getCldsVfs().isEmpty()) {\r
-            for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {\r
-                alarmCondList.addAll(getAllAlarmConditionsFromCldsVfData(currCldsVfData, eventName));\r
-            }\r
-        }\r
-        return alarmCondList;\r
-    }\r
-\r
-    /**\r
-     * Method to get alarm conditions/alert description from VF Data.\r
-     * \r
-     * @param currCldsVfData\r
-     *            The Vf Data to analyze\r
-     * @param eventName\r
-     *            The String event name that will be used to filter the alarm\r
-     *            list\r
-     * @return The list of CldsAlarmCondition for the event name specified\r
-     */\r
-    private List<CldsAlarmCondition> getAllAlarmConditionsFromCldsVfData(CldsVfData currCldsVfData, String eventName) {\r
-        List<CldsAlarmCondition> alarmCondList = new ArrayList<>();\r
-\r
-        if (currCldsVfData != null && currCldsVfData.getCldsVfcs() != null && !currCldsVfData.getCldsVfcs().isEmpty()) {\r
-            for (CldsVfcData currCldsVfcData : currCldsVfData.getCldsVfcs()) {\r
-                alarmCondList.addAll(getAllAlarmConditionsFromCldsVfcData(currCldsVfcData, eventName));\r
-            }\r
-        }\r
-        return alarmCondList;\r
-    }\r
-\r
-    /**\r
-     * Method to get alarm conditions/alert description from VFC Data.\r
-     * \r
-     * @param currCldsVfcData\r
-     *            The VfC Data to analyze\r
-     * @param eventName\r
-     *            The String event name that will be used to filter the alarm\r
-     *            list\r
-     * @return The list of CldsAlarmCondition for the event name specified\r
-     */\r
-    private List<CldsAlarmCondition> getAllAlarmConditionsFromCldsVfcData(CldsVfcData currCldsVfcData,\r
-            String eventName) {\r
-        List<CldsAlarmCondition> alarmCondList = new ArrayList<>();\r
-\r
-        if (currCldsVfcData != null && currCldsVfcData.getCldsAlarmConditions() != null\r
-                && !currCldsVfcData.getCldsAlarmConditions().isEmpty()) {\r
-            for (CldsAlarmCondition currCldsAlarmCondition : currCldsVfcData.getCldsAlarmConditions()) {\r
-                if (currCldsAlarmCondition != null\r
-                        && currCldsAlarmCondition.getEventName().equalsIgnoreCase(eventName)) {\r
-                    alarmCondList.add(currCldsAlarmCondition);\r
-                }\r
-            }\r
-        }\r
-        return alarmCondList;\r
-    }\r
-\r
-    private ObjectNode createAlarmCondObjectNodeByAlarmKey(ObjectMapper mapper,\r
-            List<CldsAlarmCondition> cldsAlarmCondList) {\r
-        ObjectNode alarmCondKeyNode = mapper.createObjectNode();\r
-\r
-        if (cldsAlarmCondList != null && !cldsAlarmCondList.isEmpty()) {\r
-            for (CldsAlarmCondition currCldsAlarmCondition : cldsAlarmCondList) {\r
-                if (currCldsAlarmCondition != null) {\r
-                    ObjectNode alarmCondNode = mapper.createObjectNode();\r
-                    alarmCondNode.put("eventSourceType", currCldsAlarmCondition.getEventSourceType());\r
-                    alarmCondNode.put("eventSeverity", currCldsAlarmCondition.getSeverity());\r
-                    alarmCondKeyNode.putPOJO(currCldsAlarmCondition.getAlarmConditionKey(), alarmCondNode);\r
-                }\r
-            }\r
-        } else {\r
-            ObjectNode alarmCondNode = mapper.createObjectNode();\r
-            alarmCondNode.put("eventSourceType", "");\r
-            alarmCondNode.put("eventSeverity", "");\r
-            alarmCondKeyNode.putPOJO("", alarmCondNode);\r
-        }\r
-        return alarmCondKeyNode;\r
-    }\r
-\r
-    private ObjectNode createVfObjectNodeByServiceInvariantUuid(ObjectMapper mapper, CldsServiceData cldsServiceData) {\r
-        ObjectNode invariantUuidObjectNode = mapper.createObjectNode();\r
-        ObjectNode vfObjectNode = mapper.createObjectNode();\r
-        ObjectNode vfUuidNode = mapper.createObjectNode();\r
-        List<CldsVfData> cldsVfsList = cldsServiceData.getCldsVfs();\r
-        if (cldsVfsList != null && !cldsVfsList.isEmpty()) {\r
-            for (CldsVfData currCldsVfData : cldsVfsList) {\r
-                if (currCldsVfData != null) {\r
-                    vfUuidNode.put(currCldsVfData.getVfInvariantResourceUUID(), currCldsVfData.getVfName());\r
-                }\r
-            }\r
-        } else {\r
-            vfUuidNode.put("", "");\r
-        }\r
-        vfObjectNode.putPOJO("vf", vfUuidNode);\r
-        invariantUuidObjectNode.putPOJO(cldsServiceData.getServiceInvariantUUID(), vfObjectNode);\r
-        return invariantUuidObjectNode;\r
-    }\r
-\r
-    private void createKpiObjectNodeByVfUuid(ObjectMapper mapper, ObjectNode vfResourceUuidObjectNode,\r
-            List<CldsVfKPIData> cldsVfKpiDataList) {\r
-        if (cldsVfKpiDataList != null && !cldsVfKpiDataList.isEmpty()) {\r
-            for (CldsVfKPIData currCldsVfKpiData : cldsVfKpiDataList) {\r
-                if (currCldsVfKpiData != null) {\r
-                    ObjectNode thresholdNameObjectNode = mapper.createObjectNode();\r
-\r
-                    ObjectNode fieldPathObjectNode = mapper.createObjectNode();\r
-                    ObjectNode nfNamingCodeNode = mapper.createObjectNode();\r
-\r
-                    fieldPathObjectNode.put(currCldsVfKpiData.getFieldPathValue(),\r
-                            currCldsVfKpiData.getFieldPathValue());\r
-                    nfNamingCodeNode.put(currCldsVfKpiData.getNfNamingValue(), currCldsVfKpiData.getNfNamingValue());\r
-\r
-                    thresholdNameObjectNode.putPOJO("fieldPath", fieldPathObjectNode);\r
-                    thresholdNameObjectNode.putPOJO("nfNamingCode", nfNamingCodeNode);\r
-\r
-                    vfResourceUuidObjectNode.putPOJO(currCldsVfKpiData.getThresholdValue(), thresholdNameObjectNode);\r
-                }\r
-            }\r
-        }\r
-    }\r
-\r
-    private void createAlarmCondObjectNodeByVfcUuid(ObjectMapper mapper, ObjectNode vfcResourceUuidObjectNode,\r
-            List<CldsVfcData> cldsVfcDataList) {\r
-        ObjectNode vfcObjectNode = mapper.createObjectNode();\r
-        ObjectNode alarmCondNode = mapper.createObjectNode();\r
-        ObjectNode alertDescNode = mapper.createObjectNode();\r
-        if (cldsVfcDataList != null && !cldsVfcDataList.isEmpty()) {\r
-            for (CldsVfcData currCldsVfcData : cldsVfcDataList) {\r
-                if (currCldsVfcData != null) {\r
-                    if (currCldsVfcData.getCldsAlarmConditions() != null\r
-                            && !currCldsVfcData.getCldsAlarmConditions().isEmpty()) {\r
-                        for (CldsAlarmCondition currCldsAlarmCondition : currCldsVfcData.getCldsAlarmConditions()) {\r
-                            alarmCondNode.put(currCldsAlarmCondition.getAlarmConditionKey(),\r
-                                    currCldsAlarmCondition.getAlarmConditionKey());\r
-                            if (currCldsAlarmCondition.getEventName().equalsIgnoreCase("alarmCondition")) {\r
-                                alarmCondNode.put(currCldsAlarmCondition.getAlarmConditionKey(),\r
-                                        currCldsAlarmCondition.getAlarmConditionKey());\r
-                            } else {\r
-                                alertDescNode.put(currCldsAlarmCondition.getAlarmConditionKey(),\r
-                                        currCldsAlarmCondition.getAlarmConditionKey());\r
-                            }\r
-                        }\r
-                    }\r
-\r
-                    vfcObjectNode.putPOJO("alarmCondition", alarmCondNode);\r
-                    vfcObjectNode.putPOJO("alertDescription", alertDescNode);\r
-                    vfcResourceUuidObjectNode.putPOJO(currCldsVfcData.getVfcInvariantResourceUUID(), vfcObjectNode);\r
-                }\r
-            }\r
-        } else {\r
-            alarmCondNode.put("", "");\r
-            vfcObjectNode.putPOJO("alarmCondition", alarmCondNode);\r
-            alertDescNode.put("", "");\r
-            vfcObjectNode.putPOJO("alertDescription", alarmCondNode);\r
-            vfcResourceUuidObjectNode.putPOJO("", vfcObjectNode);\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Method to create vfc and kpi nodes inside vf node\r
-     * \r
-     * @param mapper\r
-     * @param cldsVfDataList\r
-     * @return\r
-     */\r
-    private ObjectNode createVfcObjectNodeByVfUuid(ObjectMapper mapper, List<CldsVfData> cldsVfDataList) {\r
-        ObjectNode vfUuidObjectNode = mapper.createObjectNode();\r
-\r
-        if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) {\r
-            for (CldsVfData currCldsVfData : cldsVfDataList) {\r
-                if (currCldsVfData != null) {\r
-                    ObjectNode vfObjectNode = mapper.createObjectNode();\r
-                    ObjectNode vfcUuidNode = mapper.createObjectNode();\r
-                    ObjectNode kpiObjectNode = mapper.createObjectNode();\r
-                    if (currCldsVfData.getCldsVfcs() != null && !currCldsVfData.getCldsVfcs().isEmpty()) {\r
-                        for (CldsVfcData currCldsVfcData : currCldsVfData.getCldsVfcs()) {\r
-                            vfcUuidNode.put(currCldsVfcData.getVfcInvariantResourceUUID(),\r
-                                    currCldsVfcData.getVfcName());\r
-                        }\r
-                    } else {\r
-                        vfcUuidNode.put("", "");\r
-                    }\r
-                    if (currCldsVfData.getCldsKPIList() != null && !currCldsVfData.getCldsKPIList().isEmpty()) {\r
-                        for (CldsVfKPIData currCldsVfKPIData : currCldsVfData.getCldsKPIList()) {\r
-                            kpiObjectNode.put(currCldsVfKPIData.getThresholdValue(),\r
-                                    currCldsVfKPIData.getThresholdValue());\r
-                        }\r
-                    } else {\r
-                        kpiObjectNode.put("", "");\r
-                    }\r
-                    vfObjectNode.putPOJO("vfc", vfcUuidNode);\r
-                    vfObjectNode.putPOJO("kpi", kpiObjectNode);\r
-                    vfUuidObjectNode.putPOJO(currCldsVfData.getVfInvariantResourceUUID(), vfObjectNode);\r
-                }\r
-            }\r
-        } else {\r
-            ObjectNode vfcUuidNode = mapper.createObjectNode();\r
-            vfcUuidNode.put("", "");\r
-            ObjectNode vfcObjectNode = mapper.createObjectNode();\r
-            vfcObjectNode.putPOJO("vfc", vfcUuidNode);\r
-            vfUuidObjectNode.putPOJO("", vfcObjectNode);\r
-        }\r
-        return vfUuidObjectNode;\r
-    }\r
-\r
-    /**\r
-     * This method searches the equivalent artifact UUID for a specific\r
-     * artifactName in a SdcServiceDetail.\r
-     * \r
-     * @param cldsSdcServiceDetail\r
-     *            The SdcServiceDetail that will be analyzed\r
-     * @param artifactName\r
-     *            The artifact name that will be searched\r
-     * @return The artifact UUID found\r
-     */\r
-    public String getArtifactIdIfArtifactAlreadyExists(CldsSdcServiceDetail cldsSdcServiceDetail, String artifactName) {\r
-        String artifactUuid = null;\r
-        boolean artifactExists = false;\r
-        if (cldsSdcServiceDetail != null && cldsSdcServiceDetail.getResources() != null\r
-                && !cldsSdcServiceDetail.getResources().isEmpty()) {\r
-            for (CldsSdcResource currCldsSdcResource : cldsSdcServiceDetail.getResources()) {\r
-                if (artifactExists) {\r
-                    break;\r
-                }\r
-                if (currCldsSdcResource != null && currCldsSdcResource.getArtifacts() != null\r
-                        && !currCldsSdcResource.getArtifacts().isEmpty()) {\r
-                    for (CldsSdcArtifact currCldsSdcArtifact : currCldsSdcResource.getArtifacts()) {\r
-                        if (currCldsSdcArtifact != null && currCldsSdcArtifact.getArtifactName() != null\r
-                                && currCldsSdcArtifact.getArtifactName().equalsIgnoreCase(artifactName)) {\r
-                            artifactUuid = currCldsSdcArtifact.getArtifactUUID();\r
-                            artifactExists = true;\r
-                            break;\r
-                        }\r
-                    }\r
-                }\r
-            }\r
-        }\r
-        return artifactUuid;\r
-    }\r
-\r
-    public String updateControlLoopStatusToDcae(String dcaeUrl, String invariantResourceUuid,\r
-            String invariantServiceUuid, String artifactName) {\r
-        String baseUrl = refProp.getStringValue("sdc.serviceUrl");\r
-        String basicAuth = SdcReq.getSdcBasicAuth(refProp);\r
-        String postStatusData = "{ \n" + "\"event\" : \"" + "Created" + "\",\n" + "\"serviceUUID\" : \""\r
-                + invariantServiceUuid + "\",\n" + "\"resourceUUID\" :\"" + invariantResourceUuid + "\",\n"\r
-                + "\"artifactName\" : \"" + artifactName + "\",\n" + "} \n";\r
-        try {\r
-            String url = baseUrl;\r
-            if (invariantServiceUuid != null) {\r
-                url = dcaeUrl + "/closed-loops";\r
-            }\r
-            URL urlObj = new URL(url);\r
-\r
-            HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();\r
-            conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");\r
-            conn.setRequestProperty("Authorization", basicAuth);\r
-            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");\r
-            conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());\r
-            conn.setRequestMethod("POST");\r
-\r
-            byte[] postData = SdcReq.stringToByteArray(postStatusData);\r
-            try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {\r
-                wr.write(postData);\r
-            }\r
-\r
-            int responseCode = conn.getResponseCode();\r
-            logger.info("responseCode=" + responseCode);\r
-\r
-            String resp = getResponse(conn);\r
-            if (resp != null) {\r
-                return resp;\r
-            }\r
-        } catch (IOException e) {\r
-            logger.error("Not able to get any service information from sdc for uuid:" + invariantServiceUuid, e);\r
-        }\r
-        return "";\r
-    }\r
-\r
-    /**\r
-     * To get all sdc VF/VFC Resources basic info.\r
-     * \r
-     * @param resourceType\r
-     *            The resourceType\r
-     * @return The list of CldsSdcResourceBasicInfo\r
-     */\r
-    private List<CldsSdcResourceBasicInfo> getAllSdcVForVfcResourcesBasedOnResourceType(String resourceType) {\r
-        String catalogUrl = refProp.getStringValue("sdc.catalog.url");\r
-        String resourceUrl = catalogUrl + "resources?resourceType=" + resourceType;\r
-        String allSdcVfcResources = getCldsServicesOrResourcesBasedOnURL(resourceUrl, false);\r
-        return removeDuplicateSdcResourceBasicInfo(getAllSdcResourcesListFromJson(allSdcVfcResources));\r
-    }\r
-\r
-    private String getResourceUuidFromResourceInvariantUuid(String resourceInvariantUuid,\r
-            List<CldsSdcResourceBasicInfo> resourceInfoList) {\r
-        String resourceUuid = null;\r
-        if (resourceInfoList != null && !resourceInfoList.isEmpty()) {\r
-            for (CldsSdcResourceBasicInfo currResource : resourceInfoList) {\r
-                if (currResource != null && currResource.getInvariantUUID() != null && currResource.getUuid() != null\r
-                        && currResource.getInvariantUUID().equalsIgnoreCase(resourceInvariantUuid)) {\r
-                    resourceUuid = currResource.getUuid();\r
-                    break;\r
-                }\r
-            }\r
-        }\r
-        return resourceUuid;\r
-    }\r
-\r
-    /**\r
-     * Method to get service invariant uuid from model properties.\r
-     * \r
-     * @param props\r
-     *            The Clds model properties\r
-     * @return The Service Id\r
-     */\r
-    private String getServiceInvariantUuidFromProps(ModelProperties props) {\r
-        String invariantUuid = "";\r
-        Global globalProps = props.getGlobal();\r
-        if (globalProps != null && globalProps.getService() != null) {\r
-            invariantUuid = globalProps.getService();\r
-        }\r
-        return invariantUuid;\r
-    }\r
-\r
-    /**\r
-     * This method upload the BluePrint to SDC.\r
-     * \r
-     * @param prop\r
-     *            The Clds model Properties\r
-     * @param userid\r
-     *            The user id for SDC\r
-     * @param sdcReqUrlsList\r
-     *            The list of SDC URL to try\r
-     * @param formattedSdcReq\r
-     *            The blueprint to upload\r
-     * @param formattedSdcLocationReq\r
-     *            THe location Blueprint to upload\r
-     * @param artifactName\r
-     *            The artifact name from where we can get the Artifact UUID\r
-     * @param locationArtifactName\r
-     *            The location artifact name from where we can get the Artifact\r
-     *            UUID\r
-     * \r
-     */\r
-    public void uploadToSdc(ModelProperties prop, String userid, List<String> sdcReqUrlsList, String formattedSdcReq,\r
-            String formattedSdcLocationReq, String artifactName, String locationArtifactName) {\r
-        logger.info("userid=" + userid);\r
-        String serviceInvariantUuid = getServiceInvariantUuidFromProps(prop);\r
-        if (sdcReqUrlsList != null && !sdcReqUrlsList.isEmpty()) {\r
-            for (String url : sdcReqUrlsList) {\r
-                if (url != null) {\r
-                    String originalServiceUuid = getServiceUuidFromServiceInvariantId(serviceInvariantUuid);\r
-                    logger.info("ServiceUUID used before upload in url:" + originalServiceUuid);\r
-                    String sdcServicesInformation = getSdcServicesInformation(originalServiceUuid);\r
-                    CldsSdcServiceDetail cldsSdcServiceDetail = getCldsSdcServiceDetailFromJson(sdcServicesInformation);\r
-                    String uploadedArtifactUuid = getArtifactIdIfArtifactAlreadyExists(cldsSdcServiceDetail,\r
-                            artifactName);\r
-                    // Upload artifacts to sdc\r
-                    String updateUrl = uploadedArtifactUuid != null ? url + "/" + uploadedArtifactUuid : url;\r
-                    String responseStr = uploadArtifactToSdc(prop, userid, updateUrl, formattedSdcReq);\r
-                    logger.info("value of sdc Response of uploading to sdc :" + responseStr);\r
-                    String updatedServiceUuid = getServiceUuidFromServiceInvariantId(serviceInvariantUuid);\r
-                    if (!originalServiceUuid.equalsIgnoreCase(updatedServiceUuid)) {\r
-                        url = url.replace(originalServiceUuid, updatedServiceUuid);\r
-                    }\r
-                    logger.info("ServiceUUID used after upload in ulr:" + updatedServiceUuid);\r
-                    sdcServicesInformation = getSdcServicesInformation(updatedServiceUuid);\r
-                    cldsSdcServiceDetail = getCldsSdcServiceDetailFromJson(sdcServicesInformation);\r
-                    uploadedArtifactUuid = getArtifactIdIfArtifactAlreadyExists(cldsSdcServiceDetail,\r
-                            locationArtifactName);\r
-                    // To send location information also to sdc\r
-                    updateUrl = uploadedArtifactUuid != null ? url + "/" + uploadedArtifactUuid : url;\r
-                    responseStr = uploadArtifactToSdc(prop, userid, updateUrl, formattedSdcLocationReq);\r
-                    logger.info("value of sdc Response of uploading location to sdc :" + responseStr);\r
-                }\r
-            }\r
-        }\r
-    }\r
-}\r
+/*-
+ * ============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.client;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.node.TextNode;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.ws.rs.BadRequestException;
+
+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;
+import org.onap.clamp.clds.model.CldsSdcResource;
+import org.onap.clamp.clds.model.CldsSdcResourceBasicInfo;
+import org.onap.clamp.clds.model.CldsSdcServiceDetail;
+import org.onap.clamp.clds.model.CldsSdcServiceInfo;
+import org.onap.clamp.clds.model.CldsServiceData;
+import org.onap.clamp.clds.model.CldsVfData;
+import org.onap.clamp.clds.model.CldsVfKPIData;
+import org.onap.clamp.clds.model.CldsVfcData;
+import org.onap.clamp.clds.model.prop.Global;
+import org.onap.clamp.clds.model.prop.ModelProperties;
+import org.onap.clamp.clds.model.refprop.RefProp;
+import org.onap.clamp.clds.util.LoggingUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class SdcCatalogServices {
+    protected static final EELFLogger logger            = EELFManager.getInstance().getLogger(SdcCatalogServices.class);
+    protected static final EELFLogger metricsLogger     = EELFManager.getInstance().getMetricsLogger();
+
+    private static final String       RESOURCE_VF_TYPE  = "VF";
+    private static final String       RESOURCE_VFC_TYPE = "VFC";
+
+    @Autowired
+    private RefProp                   refProp;
+
+    /**
+     * This method get the SDC services Information with the corresponding
+     * Service UUID.
+     * 
+     * @param uuid
+     *            The service UUID
+     * @return A Json String with all the service list
+     */
+    public String getSdcServicesInformation(String uuid) {
+        Date startTime = new Date();
+        String baseUrl = refProp.getStringValue("sdc.serviceUrl");
+        String basicAuth = SdcReq.getSdcBasicAuth(refProp);
+        LoggingUtils.setTargetContext("SDC", "getSdcServicesInformation");
+
+        try {
+            String url = baseUrl;
+            if (uuid != null) {
+                url = baseUrl + "/" + uuid + "/metadata";
+            }
+            URL urlObj = new URL(url);
+
+            HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
+
+            conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");
+            conn.setRequestProperty("Authorization", basicAuth);
+            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+            conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());
+            conn.setRequestMethod("GET");
+
+            String resp = getResponse(conn);
+            if (resp != null) {
+                logger.info(resp);
+                // metrics log
+                LoggingUtils.setResponseContext("0", "Get sdc services success", this.getClass().getName());
+                return resp;
+            }
+        } catch (IOException e) {
+            LoggingUtils.setResponseContext("900", "Get sdc services failed", this.getClass().getName());
+            LoggingUtils.setErrorContext("900", "Get sdc services error");
+            logger.error("not able to get any service information from sdc for uuid:" + uuid, e);
+        } finally {
+            LoggingUtils.setTimeContext(startTime, new Date());
+            metricsLogger.info("getSdcServicesInformation complete");
+        }
+
+        return "";
+    }
+
+    /**
+     * To remove duplicate serviceUUIDs from sdc services List.
+     *
+     * @param rawCldsSdcServiceList
+     *            A list of CldsSdcServiceInfo
+     * @return A list of CldsSdcServiceInfo without duplicate service UUID
+     */
+    public List<CldsSdcServiceInfo> removeDuplicateServices(List<CldsSdcServiceInfo> rawCldsSdcServiceList) {
+        List<CldsSdcServiceInfo> cldsSdcServiceInfoList = null;
+        if (rawCldsSdcServiceList != null && !rawCldsSdcServiceList.isEmpty()) {
+            // sort list
+            Collections.sort(rawCldsSdcServiceList);
+            // and then take only the services with the max version (last in the
+            // list with the same name)
+            cldsSdcServiceInfoList = new ArrayList<>();
+            for (int i = 1; i < rawCldsSdcServiceList.size(); i++) {
+                // compare name with previous - if not equal, then keep the
+                // previous (it's the last with that name)
+                CldsSdcServiceInfo prev = rawCldsSdcServiceList.get(i - 1);
+                if (!rawCldsSdcServiceList.get(i).getName().equals(prev.getName())) {
+                    cldsSdcServiceInfoList.add(prev);
+                }
+            }
+            // add the last in the list
+            cldsSdcServiceInfoList.add(rawCldsSdcServiceList.get(rawCldsSdcServiceList.size() - 1));
+        }
+        return cldsSdcServiceInfoList;
+    }
+
+    /**
+     * To remove duplicate serviceUUIDs from sdc resources List.
+     *
+     * @param rawCldsSdcResourceList
+     * @return
+     */
+    public List<CldsSdcResource> removeDuplicateSdcResourceInstances(List<CldsSdcResource> rawCldsSdcResourceList) {
+        List<CldsSdcResource> cldsSdcResourceList = null;
+        if (rawCldsSdcResourceList != null && !rawCldsSdcResourceList.isEmpty()) {
+            // sort list
+            Collections.sort(rawCldsSdcResourceList);
+            // and then take only the resources with the max version (last in
+            // the list with the same name)
+            cldsSdcResourceList = new ArrayList<>();
+            for (int i = 1; i < rawCldsSdcResourceList.size(); i++) {
+                // compare name with previous - if not equal, then keep the
+                // previous (it's the last with that name)
+                CldsSdcResource prev = rawCldsSdcResourceList.get(i - 1);
+                if (!rawCldsSdcResourceList.get(i).getResourceInstanceName().equals(prev.getResourceInstanceName())) {
+                    cldsSdcResourceList.add(prev);
+                }
+            }
+            // add the last in the list
+            cldsSdcResourceList.add(rawCldsSdcResourceList.get(rawCldsSdcResourceList.size() - 1));
+        }
+        return cldsSdcResourceList;
+    }
+
+    /**
+     * To remove duplicate basic resources with same resourceUUIDs.
+     *
+     * @param rawCldsSdcResourceListBasicList
+     * @return
+     */
+    public List<CldsSdcResourceBasicInfo> removeDuplicateSdcResourceBasicInfo(
+            List<CldsSdcResourceBasicInfo> rawCldsSdcResourceListBasicList) {
+        List<CldsSdcResourceBasicInfo> cldsSdcResourceBasicInfoList = null;
+        if (rawCldsSdcResourceListBasicList != null && !rawCldsSdcResourceListBasicList.isEmpty()) {
+            // sort list
+            Collections.sort(rawCldsSdcResourceListBasicList);
+            // and then take only the resources with the max version (last in
+            // the list with the same name)
+            cldsSdcResourceBasicInfoList = new ArrayList<>();
+            for (int i = 1; i < rawCldsSdcResourceListBasicList.size(); i++) {
+                // compare name with previous - if not equal, then keep the
+                // previous (it's the last with that name)
+                CldsSdcResourceBasicInfo prev = rawCldsSdcResourceListBasicList.get(i - 1);
+                if (!rawCldsSdcResourceListBasicList.get(i).getName().equals(prev.getName())) {
+                    cldsSdcResourceBasicInfoList.add(prev);
+                }
+            }
+            // add the last in the list
+            cldsSdcResourceBasicInfoList
+                    .add(rawCldsSdcResourceListBasicList.get(rawCldsSdcResourceListBasicList.size() - 1));
+        }
+        return cldsSdcResourceBasicInfoList;
+    }
+
+    /**
+     * To get ServiceUUID by using serviceInvariantUUID.
+     *
+     * @param invariantId
+     *            The invariant ID
+     * @return The service UUID
+     */
+    public String getServiceUuidFromServiceInvariantId(String invariantId) {
+        String serviceUuid = "";
+        String responseStr = getSdcServicesInformation(null);
+        List<CldsSdcServiceInfo> rawCldsSdcServicesList = getCldsSdcServicesListFromJson(responseStr);
+        List<CldsSdcServiceInfo> cldsSdcServicesList = removeDuplicateServices(rawCldsSdcServicesList);
+        if (cldsSdcServicesList != null && !cldsSdcServicesList.isEmpty()) {
+            for (CldsSdcServiceInfo currCldsSdcServiceInfo : cldsSdcServicesList) {
+                if (currCldsSdcServiceInfo != null && currCldsSdcServiceInfo.getInvariantUUID() != null
+                        && currCldsSdcServiceInfo.getInvariantUUID().equalsIgnoreCase(invariantId)) {
+                    serviceUuid = currCldsSdcServiceInfo.getUuid();
+                    break;
+                }
+            }
+        }
+        return serviceUuid;
+    }
+
+    /**
+     * To get CldsAsdsServiceInfo class by parsing json string.
+     *
+     * @param jsonStr
+     *            The Json string that must be decoded
+     * @return The list of CldsSdcServiceInfo, if there is a failure it return
+     *         an empty list
+     */
+    public List<CldsSdcServiceInfo> getCldsSdcServicesListFromJson(String jsonStr) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        if (StringUtils.isBlank(jsonStr)) {
+            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<>();
+        }
+    }
+
+    /**
+     * To get List of CldsSdcResourceBasicInfo class by parsing json string.
+     *
+     * @param jsonStr
+     *            The JSOn string that must be decoded
+     * @return The list of CldsSdcResourceBasicInfo, an empty list in case of
+     *         issues
+     */
+    public List<CldsSdcResourceBasicInfo> getAllSdcResourcesListFromJson(String jsonStr) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        if (StringUtils.isBlank(jsonStr)) {
+            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<>();
+        }
+    }
+
+    /**
+     * To get CldsAsdsResource class by parsing json string.
+     *
+     * @param jsonStr
+     * @return
+     * @throws IOException
+     */
+    public CldsSdcResource getCldsSdcResourceFromJson(String jsonStr) throws IOException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        return objectMapper.readValue(jsonStr, CldsSdcResource.class);
+    }
+
+    /**
+     * To get CldsSdcServiceDetail by parsing json string.
+     *
+     * @param jsonStr
+     * @return
+     */
+    public CldsSdcServiceDetail getCldsSdcServiceDetailFromJson(String jsonStr) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        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 resource name on url.
+     *
+     * @param prop
+     * @param userid
+     * @param url
+     * @param formatedSdcReq
+     * @return
+     */
+    public String uploadArtifactToSdc(ModelProperties prop, String userid, String url, String formatedSdcReq) {
+        // Verify whether it is triggered by Validation Test button from UI
+        if (prop.isTest()) {
+            return "sdc artifact upload not executed for test action";
+        }
+        try {
+            logger.info("userid=" + userid);
+            String md5Text = SdcReq.calculateMD5ByString(formatedSdcReq);
+            byte[] postData = SdcReq.stringToByteArray(formatedSdcReq);
+            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 && 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);
+        }
+
+    }
+
+    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) {
+        try (InputStream is = getInputStream(conn)) {
+            if (is != null) {
+                try (BufferedReader in = new BufferedReader(new InputStreamReader(is))) {
+                    StringBuilder response = new StringBuilder();
+                    String inputLine;
+                    while ((inputLine = in.readLine()) != null) {
+                        response.append(inputLine);
+                    }
+                    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);
+        }
+    }
+
+    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);
+        }
+    }
+
+    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) {
+        boolean expired = false;
+        if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) {
+            String cachedServiceUuid = cldsServiceData.getServiceUUID();
+            String latestServiceUuid = getServiceUuidFromServiceInvariantId(cldsServiceData.getServiceInvariantUUID());
+            String defaultRecordAge = refProp.getStringValue("CLDS_SERVICE_CACHE_MAX_SECONDS");
+            if ((!cachedServiceUuid.equalsIgnoreCase(latestServiceUuid)) || (cldsServiceData.getAgeOfRecord() != null
+                    && cldsServiceData.getAgeOfRecord() > Long.parseLong(defaultRecordAge))) {
+                expired = true;
+            }
+        } else {
+            expired = true;
+        }
+        return expired;
+    }
+
+    public CldsServiceData getCldsServiceDataWithAlarmConditions(String invariantServiceUuid) {
+        String url = refProp.getStringValue("sdc.serviceUrl");
+        String catalogUrl = refProp.getStringValue("sdc.catalog.url");
+        String serviceUuid = getServiceUuidFromServiceInvariantId(invariantServiceUuid);
+        String serviceDetailUrl = url + "/" + serviceUuid + "/metadata";
+        String responseStr = getCldsServicesOrResourcesBasedOnURL(serviceDetailUrl, false);
+        ObjectMapper objectMapper = new ObjectMapper();
+        CldsServiceData cldsServiceData = new CldsServiceData();
+        if (responseStr != null) {
+            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());
+
+            // To remove duplicate resources from serviceDetail and add valid
+            // vfs to service
+            if (cldsSdcServiceDetail != null && cldsSdcServiceDetail.getResources() != null) {
+                List<CldsSdcResource> cldsSdcResourceList = removeDuplicateSdcResourceInstances(
+                        cldsSdcServiceDetail.getResources());
+                if (cldsSdcResourceList != null && !cldsSdcResourceList.isEmpty()) {
+                    List<CldsVfData> cldsVfDataList = new ArrayList<>();
+                    for (CldsSdcResource currCldsSdcResource : cldsSdcResourceList) {
+                        if (currCldsSdcResource != null && currCldsSdcResource.getResoucreType() != null
+                                && "VF".equalsIgnoreCase(currCldsSdcResource.getResoucreType())) {
+                            CldsVfData currCldsVfData = new CldsVfData();
+                            currCldsVfData.setVfName(currCldsSdcResource.getResourceInstanceName());
+                            currCldsVfData.setVfInvariantResourceUUID(currCldsSdcResource.getResourceInvariantUUID());
+                            cldsVfDataList.add(currCldsVfData);
+                        }
+                    }
+                    cldsServiceData.setCldsVfs(cldsVfDataList);
+                    // For each vf in the list , add all vfc's
+                    getAllVfcForVfList(cldsVfDataList, catalogUrl);
+                    logger.info("value of cldsServiceData:" + cldsServiceData);
+                    logger.info("value of cldsServiceData:" + cldsServiceData.getServiceInvariantUUID());
+                }
+            }
+        }
+        return cldsServiceData;
+    }
+
+    private void getAllVfcForVfList(List<CldsVfData> cldsVfDataList, String catalogUrl) {
+        // todo : refact this..
+        if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) {
+            List<CldsSdcResourceBasicInfo> allVfResources = getAllSdcVForVfcResourcesBasedOnResourceType(
+                    RESOURCE_VF_TYPE);
+            List<CldsSdcResourceBasicInfo> allVfcResources = getAllSdcVForVfcResourcesBasedOnResourceType(
+                    RESOURCE_VFC_TYPE);
+            for (CldsVfData currCldsVfData : cldsVfDataList) {
+                if (currCldsVfData != null && currCldsVfData.getVfInvariantResourceUUID() != null) {
+                    String resourceUuid = getResourceUuidFromResourceInvariantUuid(
+                            currCldsVfData.getVfInvariantResourceUUID(), allVfResources);
+                    if (resourceUuid != null) {
+                        String vfResourceUuidUrl = catalogUrl + "resources" + "/" + resourceUuid + "/metadata";
+                        String vfResponse = getCldsServicesOrResourcesBasedOnURL(vfResourceUuidUrl, false);
+                        if (vfResponse != null) {
+                            // Below 2 line are to get the KPI(field path) data
+                            // associated with the VF's
+                            List<CldsVfKPIData> cldsVfKPIDataList = getFieldPathFromVF(vfResponse);
+                            currCldsVfData.setCldsKPIList(cldsVfKPIDataList);
+
+                            List<CldsVfcData> vfcDataListFromVfResponse = getVfcDataListFromVfResponse(vfResponse);
+                            if (vfcDataListFromVfResponse != null) {
+                                currCldsVfData.setCldsVfcs(vfcDataListFromVfResponse);
+                                if (!vfcDataListFromVfResponse.isEmpty()) {
+                                    // To get artifacts for every VFC and get
+                                    // alarm conditions from artifact
+                                    for (CldsVfcData currCldsVfcData : vfcDataListFromVfResponse) {
+                                        if (currCldsVfcData != null
+                                                && currCldsVfcData.getVfcInvariantResourceUUID() != null) {
+                                            String resourceVfcUuid = getResourceUuidFromResourceInvariantUuid(
+                                                    currCldsVfcData.getVfcInvariantResourceUUID(), allVfcResources);
+                                            if (resourceVfcUuid != null) {
+                                                String vfcResourceUuidUrl = catalogUrl + "resources" + "/"
+                                                        + resourceVfcUuid + "/metadata";
+                                                String vfcResponse = getCldsServicesOrResourcesBasedOnURL(
+                                                        vfcResourceUuidUrl, false);
+                                                if (vfcResponse != null) {
+                                                    List<CldsAlarmCondition> alarmCondtionsFromVfc = getAlarmCondtionsFromVfc(
+                                                            vfcResponse);
+                                                    currCldsVfcData.setCldsAlarmConditions(alarmCondtionsFromVfc);
+                                                }
+                                            } else {
+                                                logger.info("No resourceVFC UUID found for given invariantID:"
+                                                        + currCldsVfcData.getVfcInvariantResourceUUID());
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    } else {
+                        logger.info("No resourceUUID found for given invariantREsourceUUID:"
+                                + currCldsVfData.getVfInvariantResourceUUID());
+                    }
+                }
+            }
+        }
+    }
+
+    private List<CldsVfcData> getVfcDataListFromVfResponse(String vfResponse) {
+        ObjectMapper mapper = new ObjectMapper();
+        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<CldsVfcData> cldsVfcDataList = new ArrayList<>();
+        if (vfcArrayNode != null) {
+            for (JsonNode vfcjsonNode : vfcArrayNode) {
+                CldsVfcData currCldsVfcData = new CldsVfcData();
+                ObjectNode currVfcNode = (ObjectNode) vfcjsonNode;
+                TextNode resourceTypeNode = (TextNode) currVfcNode.get("resoucreType");
+                if (resourceTypeNode != null && "VFC".equalsIgnoreCase(resourceTypeNode.textValue())) {
+                    TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName");
+                    TextNode vfcInvariantResourceUuid = (TextNode) currVfcNode.get("resourceInvariantUUID");
+                    currCldsVfcData.setVfcName(vfcResourceName.textValue());
+                    currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUuid.textValue());
+                    cldsVfcDataList.add(currCldsVfcData);
+                } else if (resourceTypeNode != null && "CVFC".equalsIgnoreCase(resourceTypeNode.textValue())) {
+                    cldsVfcDataList.addAll(getVFCfromCVFC(currVfcNode.get("resourceUUID").textValue()));
+                }
+            }
+        }
+        return cldsVfcDataList;
+    }
+
+    private List<CldsVfcData> getVFCfromCVFC(String resourceUUID) {
+        String catalogUrl = refProp.getStringValue("sdc.catalog.url");
+        List<CldsVfcData> cldsVfcDataList = new ArrayList<>();
+
+        if (resourceUUID != null) {
+            String vfcResourceUUIDUrl = catalogUrl + "resources" + "/" + resourceUUID + "/metadata";
+            try {
+                String vfcResponse = getCldsServicesOrResourcesBasedOnURL(vfcResourceUUIDUrl, false);
+                ObjectMapper mapper = new ObjectMapper();
+                ObjectNode vfResponseNode = (ObjectNode) mapper.readTree(vfcResponse);
+                ArrayNode vfcArrayNode = (ArrayNode) vfResponseNode.get("resources");
+
+                if (vfcArrayNode != null) {
+                    for (JsonNode vfcjsonNode : vfcArrayNode) {
+                        CldsVfcData currCldsVfcData = new CldsVfcData();
+                        ObjectNode currVfcNode = (ObjectNode) vfcjsonNode;
+                        TextNode resourceTypeNode = (TextNode) currVfcNode.get("resoucreType");
+                        if (resourceTypeNode != null && "VFC".equalsIgnoreCase(resourceTypeNode.textValue())) {
+                            TextNode vfcResourceName = (TextNode) currVfcNode.get("resourceInstanceName");
+                            TextNode vfcInvariantResourceUUID = (TextNode) currVfcNode.get("resourceInvariantUUID");
+                            currCldsVfcData.setVfcName(vfcResourceName.textValue());
+                            currCldsVfcData.setVfcInvariantResourceUUID(vfcInvariantResourceUUID.textValue());
+                            cldsVfcDataList.add(currCldsVfcData);
+                        }
+                    }
+                }
+            } catch (IOException e) {
+                logger.error("Exception during JSON analyzis", e);
+            }
+        }
+        return cldsVfcDataList;
+    }
+
+    private String removeUnwantedBracesFromString(String id) {
+        return (id != null) ? id.replaceAll("\"", "") : "";
+    }
+
+    private List<CldsAlarmCondition> getAlarmCondtionsFromVfc(String vfcResponse) {
+        List<CldsAlarmCondition> cldsAlarmConditionList = new ArrayList<>();
+        ObjectMapper mapper = new ObjectMapper();
+        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) {
+            for (int index = 0; index < artifactsArrayNode.size(); index++) {
+                ObjectNode currArtifactNode = (ObjectNode) artifactsArrayNode.get(index);
+                TextNode artifactUrlNode = (TextNode) currArtifactNode.get("artifactURL");
+                if (artifactUrlNode != null) {
+                    String responsesFromArtifactUrl = getResponsesFromArtifactUrl(artifactUrlNode.textValue());
+                    cldsAlarmConditionList.addAll(parseCsvToGetAlarmConditions(responsesFromArtifactUrl));
+                    logger.info(responsesFromArtifactUrl);
+                }
+            }
+        }
+        return cldsAlarmConditionList;
+    }
+
+    private List<CldsAlarmCondition> parseCsvToGetAlarmConditions(String allAlarmCondsValues) {
+        try {
+            List<CldsAlarmCondition> cldsAlarmConditionList = new ArrayList<>();
+            Reader alarmReader = new StringReader(allAlarmCondsValues);
+            Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(alarmReader);
+            if (records != null) {
+                Iterator<CSVRecord> it = records.iterator();
+                if (it.hasNext()) {
+                    it.next();
+                }
+                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<>();
+        }
+    }
+
+    // Method to get the artifact for any particular VF
+    private List<CldsVfKPIData> getFieldPathFromVF(String vfResponse) {
+        List<CldsVfKPIData> cldsVfKPIDataList = new ArrayList<>();
+        ObjectMapper mapper = new ObjectMapper();
+        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) {
+            for (int index = 0; index < artifactsArrayNode.size(); index++) {
+                ObjectNode currArtifactNode = (ObjectNode) artifactsArrayNode.get(index);
+                TextNode artifactUrlNode = (TextNode) currArtifactNode.get("artifactURL");
+                TextNode artifactNameNode = (TextNode) currArtifactNode.get("artifactName");
+                String artifactName = "";
+                if (artifactNameNode != null) {
+                    artifactName = artifactNameNode.textValue();
+                    artifactName = artifactName.substring(artifactName.lastIndexOf('.') + 1);
+                }
+                if (artifactUrlNode != null && "csv".equalsIgnoreCase(artifactName)) {
+                    String responsesFromArtifactUrl = getResponsesFromArtifactUrl(artifactUrlNode.textValue());
+                    cldsVfKPIDataList.addAll(parseCsvToGetFieldPath(responsesFromArtifactUrl));
+                    logger.info(responsesFromArtifactUrl);
+                }
+            }
+        }
+        return cldsVfKPIDataList;
+    }
+
+    private CldsVfKPIData convertCsvRecordToKpiData(CSVRecord record) {
+        if (record.size() < 6) {
+            logger.debug("invalid csv field path Record,total columns less than 6: " + record);
+            return null;
+        }
+
+        if (StringUtils.isBlank(record.get(1)) || StringUtils.isBlank(record.get(3))
+                || StringUtils.isBlank(record.get(5))) {
+            logger.debug("Invalid csv field path Record,one of column is having blank value : " + record);
+            return null;
+        }
+
+        CldsVfKPIData cldsVfKPIData = new CldsVfKPIData();
+        cldsVfKPIData.setNfNamingCode(record.get(0).trim());
+        cldsVfKPIData.setNfNamingValue(record.get(1).trim());
+
+        cldsVfKPIData.setFieldPath(record.get(2).trim());
+        cldsVfKPIData.setFieldPathValue(record.get(3).trim());
+
+        cldsVfKPIData.setThresholdName(record.get(4).trim());
+        cldsVfKPIData.setThresholdValue(record.get(5).trim());
+        return cldsVfKPIData;
+
+    }
+
+    // Method to get the artifactURL Data and set the CldsVfKPIData node
+    private List<CldsVfKPIData> parseCsvToGetFieldPath(String allFieldPathValues) {
+        try {
+            List<CldsVfKPIData> cldsVfKPIDataList = new ArrayList<>();
+            Reader alarmReader = new StringReader(allFieldPathValues);
+            Iterable<CSVRecord> 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<>();
+        }
+    }
+
+    private void processRecord(List<CldsAlarmCondition> cldsAlarmConditionList, CSVRecord record) {
+        if (record == null) {
+            return;
+        }
+        if (record.size() < 5) {
+            logger.debug("invalid csv alarm Record,total columns less than 5: " + record);
+            return;
+        }
+        if (StringUtils.isBlank(record.get(1)) || StringUtils.isBlank(record.get(3))
+                || StringUtils.isBlank(record.get(4))) {
+            logger.debug("invalid csv alarm Record,one of column is having blank value : " + record);
+            return;
+        }
+        CldsAlarmCondition cldsAlarmCondition = new CldsAlarmCondition();
+        cldsAlarmCondition.setEventSourceType(record.get(1));
+        cldsAlarmCondition.setEventName(record.get(2));
+        cldsAlarmCondition.setAlarmConditionKey(record.get(3));
+        cldsAlarmCondition.setSeverity(record.get(4));
+        cldsAlarmConditionList.add(cldsAlarmCondition);
+    }
+
+    public String getResponsesFromArtifactUrl(String artifactsUrl) {
+        String hostUrl = refProp.getStringValue("sdc.hostUrl");
+        String artifactsUrlReworked = artifactsUrl.replaceAll("\"", "");
+        String artifactUrl = hostUrl + artifactsUrlReworked;
+        logger.info("value of artifactURl:" + artifactUrl);
+        String currArtifactResponse = getCldsServicesOrResourcesBasedOnURL(artifactUrl, true);
+        logger.info("value of artifactResponse:" + currArtifactResponse);
+        return currArtifactResponse;
+    }
+
+    /**
+     * Service to services/resources/artifacts from sdc.Pass alarmConditions as
+     * true to get alarmconditons from artifact url and else it is false
+     *
+     * @param url
+     * @param alarmConditions
+     * @return
+     */
+    public String getCldsServicesOrResourcesBasedOnURL(String url, boolean alarmConditions) {
+        Date startTime = new Date();
+        try {
+            LoggingUtils.setTargetContext("SDC", "getCldsServicesOrResourcesBasedOnURL");
+            String urlReworked = removeUnwantedBracesFromString(url);
+            URL urlObj = new URL(urlReworked);
+
+            HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
+            String basicAuth = SdcReq.getSdcBasicAuth(refProp);
+            conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");
+            conn.setRequestProperty("Authorization", basicAuth);
+            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+            conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());
+            conn.setRequestMethod("GET");
+
+            int responseCode = conn.getResponseCode();
+            logger.info("Sdc resource url - " + urlReworked + " , responseCode=" + responseCode);
+            StringBuilder response;
+            try (BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
+                response = new StringBuilder();
+                String inputLine;
+                while ((inputLine = in.readLine()) != null) {
+                    if (!inputLine.isEmpty()) {
+                        response.append(inputLine);
+                    }
+                    if (alarmConditions) {
+                        response.append("\n");
+                    }
+                }
+            }
+            LoggingUtils.setResponseContext("0", "Get sdc resources success", this.getClass().getName());
+            return response.toString();
+        } catch (IOException e) {
+            LoggingUtils.setResponseContext("900", "Get sdc resources failed", this.getClass().getName());
+            LoggingUtils.setErrorContext("900", "Get sdc resources error");
+            logger.error("Exception occurred during query to SDC", e);
+            return "";
+        } finally {
+            LoggingUtils.setTimeContext(startTime, new Date());
+            metricsLogger.info("getCldsServicesOrResourcesBasedOnURL completed");
+        }
+
+    }
+
+    /**
+     * To create properties object by using cldsServicedata.
+     *
+     * @param globalProps
+     * @param cldsServiceData
+     * @return
+     */
+    public String createPropertiesObjectByUUID(String globalProps, CldsServiceData cldsServiceData) {
+        String totalPropsStr;
+        ObjectMapper mapper = new ObjectMapper();
+        ObjectNode globalPropsJson;
+        if (cldsServiceData != null && cldsServiceData.getServiceUUID() != null) {
+
+            // Objectnode to save all byservice, byvf , byvfc and byalarm nodes
+            ObjectNode byIdObjectNode = mapper.createObjectNode();
+
+            // To create vf ResourceUUID node with serviceInvariantUUID
+            ObjectNode invariantUuidObjectNodeWithVf = createVfObjectNodeByServiceInvariantUuid(mapper,
+                    cldsServiceData);
+            byIdObjectNode.putPOJO("byService", invariantUuidObjectNodeWithVf);
+
+            // To create byVf and vfcResourceNode with vfResourceUUID
+            ObjectNode vfcObjectNodeByVfUuid = createVfcObjectNodeByVfUuid(mapper, cldsServiceData.getCldsVfs());
+            byIdObjectNode.putPOJO("byVf", vfcObjectNodeByVfUuid);
+
+            // To create byKpi
+            ObjectNode kpiObjectNode = mapper.createObjectNode();
+            if (cldsServiceData.getCldsVfs() != null && !cldsServiceData.getCldsVfs().isEmpty()) {
+                for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {
+                    if (currCldsVfData != null) {
+                        createKpiObjectNodeByVfUuid(mapper, kpiObjectNode, currCldsVfData.getCldsKPIList());
+                    }
+                }
+            }
+            byIdObjectNode.putPOJO("byKpi", kpiObjectNode);
+
+            // To create byVfc and alarmCondition with vfcResourceUUID
+            ObjectNode vfcResourceUuidObjectNode = mapper.createObjectNode();
+            if (cldsServiceData.getCldsVfs() != null && !cldsServiceData.getCldsVfs().isEmpty()) {
+                for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {
+                    if (currCldsVfData != null) {
+                        createAlarmCondObjectNodeByVfcUuid(mapper, vfcResourceUuidObjectNode,
+                                currCldsVfData.getCldsVfcs());
+                    }
+                }
+            }
+            byIdObjectNode.putPOJO("byVfc", vfcResourceUuidObjectNode);
+
+            // To create byAlarmCondition with alarmConditionKey
+            List<CldsAlarmCondition> allAlarmConditions = getAllAlarmConditionsFromCldsServiceData(cldsServiceData,
+                    "alarmCondition");
+            ObjectNode alarmCondObjectNodeByAlarmKey = createAlarmCondObjectNodeByAlarmKey(mapper, allAlarmConditions);
+
+            byIdObjectNode.putPOJO("byAlarmCondition", alarmCondObjectNodeByAlarmKey);
+
+            // To create byAlertDescription with AlertDescription
+            List<CldsAlarmCondition> allAlertDescriptions = getAllAlarmConditionsFromCldsServiceData(cldsServiceData,
+                    "alertDescription");
+            ObjectNode alertDescObjectNodeByAlert = createAlarmCondObjectNodeByAlarmKey(mapper, allAlertDescriptions);
+
+            byIdObjectNode.putPOJO("byAlertDescription", alertDescObjectNodeByAlert);
+
+            globalPropsJson = decodeGlobalProp(globalProps, mapper);
+
+            globalPropsJson.putPOJO("shared", byIdObjectNode);
+            logger.info("value of objNode:" + globalPropsJson);
+        } else {
+            /**
+             * to create json with total properties when no serviceUUID passed
+             */
+            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.
+     * 
+     * @param cldsServiceData
+     *            CldsServiceData the Service Data to analyze
+     * @param eventName
+     *            The String event name that will be used to filter the alarm
+     *            list
+     * @return The list of CldsAlarmCondition for the event name specified
+     */
+    public List<CldsAlarmCondition> getAllAlarmConditionsFromCldsServiceData(CldsServiceData cldsServiceData,
+            String eventName) {
+        List<CldsAlarmCondition> alarmCondList = new ArrayList<>();
+        if (cldsServiceData != null && cldsServiceData.getCldsVfs() != null
+                && !cldsServiceData.getCldsVfs().isEmpty()) {
+            for (CldsVfData currCldsVfData : cldsServiceData.getCldsVfs()) {
+                alarmCondList.addAll(getAllAlarmConditionsFromCldsVfData(currCldsVfData, eventName));
+            }
+        }
+        return alarmCondList;
+    }
+
+    /**
+     * Method to get alarm conditions/alert description from VF Data.
+     * 
+     * @param currCldsVfData
+     *            The Vf Data to analyze
+     * @param eventName
+     *            The String event name that will be used to filter the alarm
+     *            list
+     * @return The list of CldsAlarmCondition for the event name specified
+     */
+    private List<CldsAlarmCondition> getAllAlarmConditionsFromCldsVfData(CldsVfData currCldsVfData, String eventName) {
+        List<CldsAlarmCondition> alarmCondList = new ArrayList<>();
+
+        if (currCldsVfData != null && currCldsVfData.getCldsVfcs() != null && !currCldsVfData.getCldsVfcs().isEmpty()) {
+            for (CldsVfcData currCldsVfcData : currCldsVfData.getCldsVfcs()) {
+                alarmCondList.addAll(getAllAlarmConditionsFromCldsVfcData(currCldsVfcData, eventName));
+            }
+        }
+        return alarmCondList;
+    }
+
+    /**
+     * Method to get alarm conditions/alert description from VFC Data.
+     * 
+     * @param currCldsVfcData
+     *            The VfC Data to analyze
+     * @param eventName
+     *            The String event name that will be used to filter the alarm
+     *            list
+     * @return The list of CldsAlarmCondition for the event name specified
+     */
+    private List<CldsAlarmCondition> getAllAlarmConditionsFromCldsVfcData(CldsVfcData currCldsVfcData,
+            String eventName) {
+        List<CldsAlarmCondition> alarmCondList = new ArrayList<>();
+
+        if (currCldsVfcData != null && currCldsVfcData.getCldsAlarmConditions() != null
+                && !currCldsVfcData.getCldsAlarmConditions().isEmpty()) {
+            for (CldsAlarmCondition currCldsAlarmCondition : currCldsVfcData.getCldsAlarmConditions()) {
+                if (currCldsAlarmCondition != null
+                        && currCldsAlarmCondition.getEventName().equalsIgnoreCase(eventName)) {
+                    alarmCondList.add(currCldsAlarmCondition);
+                }
+            }
+        }
+        return alarmCondList;
+    }
+
+    private ObjectNode createAlarmCondObjectNodeByAlarmKey(ObjectMapper mapper,
+            List<CldsAlarmCondition> cldsAlarmCondList) {
+        ObjectNode alarmCondKeyNode = mapper.createObjectNode();
+
+        if (cldsAlarmCondList != null && !cldsAlarmCondList.isEmpty()) {
+            for (CldsAlarmCondition currCldsAlarmCondition : cldsAlarmCondList) {
+                if (currCldsAlarmCondition != null) {
+                    ObjectNode alarmCondNode = mapper.createObjectNode();
+                    alarmCondNode.put("eventSourceType", currCldsAlarmCondition.getEventSourceType());
+                    alarmCondNode.put("eventSeverity", currCldsAlarmCondition.getSeverity());
+                    alarmCondKeyNode.putPOJO(currCldsAlarmCondition.getAlarmConditionKey(), alarmCondNode);
+                }
+            }
+        } else {
+            ObjectNode alarmCondNode = mapper.createObjectNode();
+            alarmCondNode.put("eventSourceType", "");
+            alarmCondNode.put("eventSeverity", "");
+            alarmCondKeyNode.putPOJO("", alarmCondNode);
+        }
+        return alarmCondKeyNode;
+    }
+
+    private ObjectNode createVfObjectNodeByServiceInvariantUuid(ObjectMapper mapper, CldsServiceData cldsServiceData) {
+        ObjectNode invariantUuidObjectNode = mapper.createObjectNode();
+        ObjectNode vfObjectNode = mapper.createObjectNode();
+        ObjectNode vfUuidNode = mapper.createObjectNode();
+        List<CldsVfData> cldsVfsList = cldsServiceData.getCldsVfs();
+        if (cldsVfsList != null && !cldsVfsList.isEmpty()) {
+            for (CldsVfData currCldsVfData : cldsVfsList) {
+                if (currCldsVfData != null) {
+                    vfUuidNode.put(currCldsVfData.getVfInvariantResourceUUID(), currCldsVfData.getVfName());
+                }
+            }
+        } else {
+            vfUuidNode.put("", "");
+        }
+        vfObjectNode.putPOJO("vf", vfUuidNode);
+        invariantUuidObjectNode.putPOJO(cldsServiceData.getServiceInvariantUUID(), vfObjectNode);
+        return invariantUuidObjectNode;
+    }
+
+    private void createKpiObjectNodeByVfUuid(ObjectMapper mapper, ObjectNode vfResourceUuidObjectNode,
+            List<CldsVfKPIData> cldsVfKpiDataList) {
+        if (cldsVfKpiDataList != null && !cldsVfKpiDataList.isEmpty()) {
+            for (CldsVfKPIData currCldsVfKpiData : cldsVfKpiDataList) {
+                if (currCldsVfKpiData != null) {
+                    ObjectNode thresholdNameObjectNode = mapper.createObjectNode();
+
+                    ObjectNode fieldPathObjectNode = mapper.createObjectNode();
+                    ObjectNode nfNamingCodeNode = mapper.createObjectNode();
+
+                    fieldPathObjectNode.put(currCldsVfKpiData.getFieldPathValue(),
+                            currCldsVfKpiData.getFieldPathValue());
+                    nfNamingCodeNode.put(currCldsVfKpiData.getNfNamingValue(), currCldsVfKpiData.getNfNamingValue());
+
+                    thresholdNameObjectNode.putPOJO("fieldPath", fieldPathObjectNode);
+                    thresholdNameObjectNode.putPOJO("nfNamingCode", nfNamingCodeNode);
+
+                    vfResourceUuidObjectNode.putPOJO(currCldsVfKpiData.getThresholdValue(), thresholdNameObjectNode);
+                }
+            }
+        }
+    }
+
+    private void createAlarmCondObjectNodeByVfcUuid(ObjectMapper mapper, ObjectNode vfcResourceUuidObjectNode,
+            List<CldsVfcData> cldsVfcDataList) {
+        ObjectNode vfcObjectNode = mapper.createObjectNode();
+        ObjectNode alarmCondNode = mapper.createObjectNode();
+        ObjectNode alertDescNode = mapper.createObjectNode();
+        if (cldsVfcDataList != null && !cldsVfcDataList.isEmpty()) {
+            for (CldsVfcData currCldsVfcData : cldsVfcDataList) {
+                if (currCldsVfcData != null) {
+                    if (currCldsVfcData.getCldsAlarmConditions() != null
+                            && !currCldsVfcData.getCldsAlarmConditions().isEmpty()) {
+                        for (CldsAlarmCondition currCldsAlarmCondition : currCldsVfcData.getCldsAlarmConditions()) {
+                            alarmCondNode.put(currCldsAlarmCondition.getAlarmConditionKey(),
+                                    currCldsAlarmCondition.getAlarmConditionKey());
+                            if ("alarmCondition".equalsIgnoreCase(currCldsAlarmCondition.getEventName())) {
+                                alarmCondNode.put(currCldsAlarmCondition.getAlarmConditionKey(),
+                                        currCldsAlarmCondition.getAlarmConditionKey());
+                            } else {
+                                alertDescNode.put(currCldsAlarmCondition.getAlarmConditionKey(),
+                                        currCldsAlarmCondition.getAlarmConditionKey());
+                            }
+                        }
+                    }
+
+                    vfcObjectNode.putPOJO("alarmCondition", alarmCondNode);
+                    vfcObjectNode.putPOJO("alertDescription", alertDescNode);
+                    vfcResourceUuidObjectNode.putPOJO(currCldsVfcData.getVfcInvariantResourceUUID(), vfcObjectNode);
+                }
+            }
+        } else {
+            alarmCondNode.put("", "");
+            vfcObjectNode.putPOJO("alarmCondition", alarmCondNode);
+            alertDescNode.put("", "");
+            vfcObjectNode.putPOJO("alertDescription", alarmCondNode);
+            vfcResourceUuidObjectNode.putPOJO("", vfcObjectNode);
+        }
+    }
+
+    /**
+     * Method to create vfc and kpi nodes inside vf node
+     * 
+     * @param mapper
+     * @param cldsVfDataList
+     * @return
+     */
+    private ObjectNode createVfcObjectNodeByVfUuid(ObjectMapper mapper, List<CldsVfData> cldsVfDataList) {
+        ObjectNode vfUuidObjectNode = mapper.createObjectNode();
+
+        if (cldsVfDataList != null && !cldsVfDataList.isEmpty()) {
+            for (CldsVfData currCldsVfData : cldsVfDataList) {
+                if (currCldsVfData != null) {
+                    ObjectNode vfObjectNode = mapper.createObjectNode();
+                    ObjectNode vfcUuidNode = mapper.createObjectNode();
+                    ObjectNode kpiObjectNode = mapper.createObjectNode();
+                    if (currCldsVfData.getCldsVfcs() != null && !currCldsVfData.getCldsVfcs().isEmpty()) {
+                        for (CldsVfcData currCldsVfcData : currCldsVfData.getCldsVfcs()) {
+                            vfcUuidNode.put(currCldsVfcData.getVfcInvariantResourceUUID(),
+                                    currCldsVfcData.getVfcName());
+                        }
+                    } else {
+                        vfcUuidNode.put("", "");
+                    }
+                    if (currCldsVfData.getCldsKPIList() != null && !currCldsVfData.getCldsKPIList().isEmpty()) {
+                        for (CldsVfKPIData currCldsVfKPIData : currCldsVfData.getCldsKPIList()) {
+                            kpiObjectNode.put(currCldsVfKPIData.getThresholdValue(),
+                                    currCldsVfKPIData.getThresholdValue());
+                        }
+                    } else {
+                        kpiObjectNode.put("", "");
+                    }
+                    vfObjectNode.putPOJO("vfc", vfcUuidNode);
+                    vfObjectNode.putPOJO("kpi", kpiObjectNode);
+                    vfUuidObjectNode.putPOJO(currCldsVfData.getVfInvariantResourceUUID(), vfObjectNode);
+                }
+            }
+        } else {
+            ObjectNode vfcUuidNode = mapper.createObjectNode();
+            vfcUuidNode.put("", "");
+            ObjectNode vfcObjectNode = mapper.createObjectNode();
+            vfcObjectNode.putPOJO("vfc", vfcUuidNode);
+            vfUuidObjectNode.putPOJO("", vfcObjectNode);
+        }
+        return vfUuidObjectNode;
+    }
+
+    /**
+     * This method searches the equivalent artifact UUID for a specific
+     * artifactName in a SdcServiceDetail.
+     * 
+     * @param cldsSdcServiceDetail
+     *            The SdcServiceDetail that will be analyzed
+     * @param artifactName
+     *            The artifact name that will be searched
+     * @return The artifact UUID found
+     */
+    public String getArtifactIdIfArtifactAlreadyExists(CldsSdcServiceDetail cldsSdcServiceDetail, String artifactName) {
+        String artifactUuid = null;
+        boolean artifactExists = false;
+        if (cldsSdcServiceDetail != null && cldsSdcServiceDetail.getResources() != null
+                && !cldsSdcServiceDetail.getResources().isEmpty()) {
+            for (CldsSdcResource currCldsSdcResource : cldsSdcServiceDetail.getResources()) {
+                if (artifactExists) {
+                    break;
+                }
+                if (currCldsSdcResource != null && currCldsSdcResource.getArtifacts() != null
+                        && !currCldsSdcResource.getArtifacts().isEmpty()) {
+                    for (CldsSdcArtifact currCldsSdcArtifact : currCldsSdcResource.getArtifacts()) {
+                        if (currCldsSdcArtifact != null && currCldsSdcArtifact.getArtifactName() != null
+                                && currCldsSdcArtifact.getArtifactName().equalsIgnoreCase(artifactName)) {
+                            artifactUuid = currCldsSdcArtifact.getArtifactUUID();
+                            artifactExists = true;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return artifactUuid;
+    }
+
+    public String updateControlLoopStatusToDcae(String dcaeUrl, String invariantResourceUuid,
+            String invariantServiceUuid, String artifactName) {
+        String baseUrl = refProp.getStringValue("sdc.serviceUrl");
+        String basicAuth = SdcReq.getSdcBasicAuth(refProp);
+        String postStatusData = "{ \n" + "\"event\" : \"" + "Created" + "\",\n" + "\"serviceUUID\" : \""
+                + invariantServiceUuid + "\",\n" + "\"resourceUUID\" :\"" + invariantResourceUuid + "\",\n"
+                + "\"artifactName\" : \"" + artifactName + "\",\n" + "} \n";
+        try {
+            String url = baseUrl;
+            if (invariantServiceUuid != null) {
+                url = dcaeUrl + "/closed-loops";
+            }
+            URL urlObj = new URL(url);
+
+            HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
+            conn.setRequestProperty(refProp.getStringValue("sdc.InstanceID"), "CLAMP-Tool");
+            conn.setRequestProperty("Authorization", basicAuth);
+            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+            conn.setRequestProperty("X-ECOMP-RequestID", LoggingUtils.getRequestId());
+            conn.setRequestMethod("POST");
+
+            byte[] postData = SdcReq.stringToByteArray(postStatusData);
+            try (DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
+                wr.write(postData);
+            }
+
+            int responseCode = conn.getResponseCode();
+            logger.info("responseCode=" + responseCode);
+
+            String resp = getResponse(conn);
+            if (resp != null) {
+                return resp;
+            }
+        } catch (IOException e) {
+            logger.error("Not able to get any service information from sdc for uuid:" + invariantServiceUuid, e);
+        }
+        return "";
+    }
+
+    /**
+     * To get all sdc VF/VFC Resources basic info.
+     * 
+     * @param resourceType
+     *            The resourceType
+     * @return The list of CldsSdcResourceBasicInfo
+     */
+    private List<CldsSdcResourceBasicInfo> getAllSdcVForVfcResourcesBasedOnResourceType(String resourceType) {
+        String catalogUrl = refProp.getStringValue("sdc.catalog.url");
+        String resourceUrl = catalogUrl + "resources?resourceType=" + resourceType;
+        String allSdcVfcResources = getCldsServicesOrResourcesBasedOnURL(resourceUrl, false);
+        return removeDuplicateSdcResourceBasicInfo(getAllSdcResourcesListFromJson(allSdcVfcResources));
+    }
+
+    private String getResourceUuidFromResourceInvariantUuid(String resourceInvariantUuid,
+            List<CldsSdcResourceBasicInfo> resourceInfoList) {
+        String resourceUuid = null;
+        if (resourceInfoList != null && !resourceInfoList.isEmpty()) {
+            for (CldsSdcResourceBasicInfo currResource : resourceInfoList) {
+                if (currResource != null && currResource.getInvariantUUID() != null && currResource.getUuid() != null
+                        && currResource.getInvariantUUID().equalsIgnoreCase(resourceInvariantUuid)) {
+                    resourceUuid = currResource.getUuid();
+                    break;
+                }
+            }
+        }
+        return resourceUuid;
+    }
+
+    /**
+     * Method to get service invariant uuid from model properties.
+     * 
+     * @param props
+     *            The Clds model properties
+     * @return The Service Id
+     */
+    private String getServiceInvariantUuidFromProps(ModelProperties props) {
+        String invariantUuid = "";
+        Global globalProps = props.getGlobal();
+        if (globalProps != null && globalProps.getService() != null) {
+            invariantUuid = globalProps.getService();
+        }
+        return invariantUuid;
+    }
+
+    /**
+     * This method upload the BluePrint to SDC.
+     * 
+     * @param prop
+     *            The Clds model Properties
+     * @param userid
+     *            The user id for SDC
+     * @param sdcReqUrlsList
+     *            The list of SDC URL to try
+     * @param formattedSdcReq
+     *            The blueprint to upload
+     * @param formattedSdcLocationReq
+     *            THe location Blueprint to upload
+     * @param artifactName
+     *            The artifact name from where we can get the Artifact UUID
+     * @param locationArtifactName
+     *            The location artifact name from where we can get the Artifact
+     *            UUID
+     * 
+     */
+    public void uploadToSdc(ModelProperties prop, String userid, List<String> sdcReqUrlsList, String formattedSdcReq,
+            String formattedSdcLocationReq, String artifactName, String locationArtifactName) {
+        logger.info("userid=" + userid);
+        String serviceInvariantUuid = getServiceInvariantUuidFromProps(prop);
+        if (sdcReqUrlsList != null && !sdcReqUrlsList.isEmpty()) {
+            for (String url : sdcReqUrlsList) {
+                if (url != null) {
+                    String originalServiceUuid = getServiceUuidFromServiceInvariantId(serviceInvariantUuid);
+                    logger.info("ServiceUUID used before upload in url:" + originalServiceUuid);
+                    String sdcServicesInformation = getSdcServicesInformation(originalServiceUuid);
+                    CldsSdcServiceDetail cldsSdcServiceDetail = getCldsSdcServiceDetailFromJson(sdcServicesInformation);
+                    String uploadedArtifactUuid = getArtifactIdIfArtifactAlreadyExists(cldsSdcServiceDetail,
+                            artifactName);
+                    // Upload artifacts to sdc
+                    String updateUrl = uploadedArtifactUuid != null ? url + "/" + uploadedArtifactUuid : url;
+                    String responseStr = uploadArtifactToSdc(prop, userid, updateUrl, formattedSdcReq);
+                    logger.info("value of sdc Response of uploading to sdc :" + responseStr);
+                    String updatedServiceUuid = getServiceUuidFromServiceInvariantId(serviceInvariantUuid);
+                    if (!originalServiceUuid.equalsIgnoreCase(updatedServiceUuid)) {
+                        url = url.replace(originalServiceUuid, updatedServiceUuid);
+                    }
+                    logger.info("ServiceUUID used after upload in ulr:" + updatedServiceUuid);
+                    sdcServicesInformation = getSdcServicesInformation(updatedServiceUuid);
+                    cldsSdcServiceDetail = getCldsSdcServiceDetailFromJson(sdcServicesInformation);
+                    uploadedArtifactUuid = getArtifactIdIfArtifactAlreadyExists(cldsSdcServiceDetail,
+                            locationArtifactName);
+                    // To send location information also to sdc
+                    updateUrl = uploadedArtifactUuid != null ? url + "/" + uploadedArtifactUuid : url;
+                    responseStr = uploadArtifactToSdc(prop, userid, updateUrl, formattedSdcLocationReq);
+                    logger.info("value of sdc Response of uploading location to sdc :" + responseStr);
+                }
+            }
+        }
+    }
+}