Fix sonar issues in UniversalVesAdapter
[dcaegen2/services/mapper.git] / UniversalVesAdapter / src / main / java / org / onap / universalvesadapter / utils / FetchDynamicConfig.java
index 9493fc6..0c6155c 100644 (file)
-/*-\r
- * ============LICENSE_START=======================================================\r
- * ONAP : DCAE\r
- * ================================================================================\r
- * Copyright 2019 TechMahindra\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
-\r
-package org.onap.universalvesadapter.utils;\r
-\r
-import java.io.BufferedReader;\r
-import java.io.File;\r
-import java.io.FileNotFoundException;\r
-import java.io.FileWriter;\r
-import java.io.IOException;\r
-import java.io.InputStreamReader;\r
-import java.io.PrintWriter;\r
-import java.nio.file.Files;\r
-\r
-import org.apache.http.HttpResponse;\r
-import org.apache.http.client.ClientProtocolException;\r
-import org.apache.http.client.HttpClient;\r
-import org.apache.http.client.methods.HttpGet;\r
-import org.apache.http.impl.client.HttpClientBuilder;\r
-import org.json.JSONArray;\r
-import org.json.JSONObject;\r
-import org.json.JSONTokener;\r
-import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsRequests;\r
-import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.CbsRequest;\r
-import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties;\r
-import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.springframework.stereotype.Component;\r
-import org.springframework.util.ResourceUtils;\r
-\r
-import com.fasterxml.jackson.databind.JsonNode;\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-\r
-@Component\r
-public class FetchDynamicConfig {\r
-\r
-       // @Value("${defaultProtocol}")\r
-       static String defaultProtocol = "http";\r
-\r
-       private static final Logger debugLogger = LoggerFactory.getLogger("debugLogger");\r
-       private static final Logger errorLogger = LoggerFactory.getLogger("errorLogger");\r
-\r
-       private static String url;\r
-       public static String retString;\r
-       public static String retCBSString;\r
-\r
-       // Generate RequestID and InvocationID which will be used when logging and in\r
-       // HTTP requests\r
-       final RequestDiagnosticContext diagnosticContext = RequestDiagnosticContext.create();\r
-       final CbsRequest request = CbsRequests.getConfiguration(diagnosticContext);\r
-\r
-       // Read necessary properties from the environment\r
-       static final EnvProperties env = EnvProperties.fromEnvironment();\r
-\r
-       public FetchDynamicConfig() {\r
-\r
-       }\r
-\r
-       public static void cbsCall(String configFile) {\r
-\r
-               Boolean areEqual;\r
-               // Call consul api and identify the CBS Service address and port\r
-               getconsul();\r
-               // Construct and invoke CBS API to get application Configuration\r
-               getCBS();\r
-               // Verify if data has changed\r
-               areEqual = verifyConfigChange(configFile);\r
-\r
-               if (!areEqual) {\r
-                       FetchDynamicConfig fc = new FetchDynamicConfig();\r
-                       if (retCBSString!=null) {\r
-                               fc.writefile(retCBSString, configFile);\r
-                       } else {\r
-                               debugLogger.debug("No content recieved from server");\r
-                       }\r
-                       \r
-               } else {\r
-                       debugLogger.info("New config pull results identical -  " + configFile + " NOT refreshed");\r
-               }\r
-       }\r
-\r
-       private static void getconsul() {\r
-               url = defaultProtocol + "://" + env.consulHost() + ":" + env.consulPort() + "/v1/catalog/service/"\r
-                               + env.cbsName();\r
-               retString = fetchResultFromDestination(url);\r
-               debugLogger.info("CBS details fetched from Consul");\r
-       }\r
-\r
-       public static boolean verifyConfigChange(String configFile) {\r
-\r
-               boolean areEqual = false;\r
-               // Read current data\r
-               try {\r
-\r
-                       File f = new File(ClassLoader.getSystemResource(configFile.trim()).getFile());\r
-\r
-                       if (f.exists() && !f.isDirectory()) {\r
-                               debugLogger.info("Comparing local configuration with the configuration fethed from CBS ");\r
-\r
-                               String jsonData = readFile(configFile);\r
-                               JSONObject jsonObject = new JSONObject(jsonData);\r
-\r
-                               ObjectMapper mapper = new ObjectMapper();\r
-\r
-                               JsonNode tree1 = mapper.readTree(jsonObject.toString());\r
-                               JsonNode tree2 = mapper.readTree(retCBSString);\r
-                               areEqual = tree1.equals(tree2);\r
-                               debugLogger.info("Comparison value:" + areEqual);\r
-                       } else {\r
-                               debugLogger.info("First time config file read: " + configFile);\r
-                       }\r
-\r
-               } catch (IOException e) {\r
-                       errorLogger.error("Comparison with new fetched data failed" + e.getMessage());\r
-\r
-               }\r
-\r
-               return areEqual;\r
-\r
-       }\r
-\r
-       public static void getCBS() {\r
-\r
-               // consul return as array\r
-               JSONTokener temp = new JSONTokener(retString);\r
-               JSONObject cbsjobj = (JSONObject) new JSONArray(temp).get(0);\r
-\r
-               String urlPart1 = null;\r
-               if (cbsjobj.has("ServiceAddress") && cbsjobj.has("ServicePort")) {\r
-\r
-                       urlPart1 = cbsjobj.getString("ServiceAddress") + ":" + cbsjobj.getInt("ServicePort");\r
-\r
-               }\r
-               debugLogger.info("CONFIG_BINDING_SERVICE HOST:PORT is " + urlPart1);\r
-\r
-               if (env.appName() != null) {\r
-                       url = defaultProtocol + "://" + urlPart1 + "/service_component/" + env.appName();\r
-                       retCBSString = fetchResultFromDestination(url);\r
-                       debugLogger.info("Configuration fetched from CBS successfully..");\r
-               } else {\r
-                       errorLogger.error("Service name environment variable - APP_NAME/SERVICE_NAME not found within container ");\r
-               }\r
-\r
-       }\r
-\r
-       public void writefile(String retCBSString, String configFile) {\r
-\r
-               String indentedretstring = (new JSONObject(retCBSString)).toString(4);\r
-               try {\r
-                       debugLogger.info(\r
-                                       "Overwriting local configuration file " + configFile + " with configuartions received from CBS");\r
-\r
-                       File file2 = ResourceUtils.getFile("classpath:" + configFile);\r
-                       FileWriter fstream = new FileWriter(file2, false);\r
-                       PrintWriter printWriter = new PrintWriter(fstream);\r
-                       printWriter.print(indentedretstring);\r
-                       printWriter.close();\r
-                       fstream.close();\r
-\r
-                       debugLogger.info("New Config successfully written to local file to " + configFile);\r
-               } catch (IOException e) {\r
-                       errorLogger.error(\r
-                                       "Error in writing configuration into local KV file " + configFile + retString + e.getMessage());\r
-                       e.printStackTrace();\r
-               }\r
-\r
-       }\r
-\r
-       public static String readFile(String configFileName) {\r
-               String content = null;\r
-               File file = null;\r
-\r
-               try {\r
-                       file = ResourceUtils.getFile("classpath:" + configFileName);\r
-                       content = new String(Files.readAllBytes(file.toPath()));\r
-               } catch (FileNotFoundException e) {\r
-                       errorLogger.error("colud not find file :", configFileName);\r
-\r
-               } catch (IOException e) {\r
-                       errorLogger.error("unable to read the file , reason:", e.getCause());\r
-               } catch (Exception e) {\r
-                       errorLogger.error("Exception occured , reason:", e.getMessage());\r
-               }\r
-\r
-               return content;\r
-       }\r
-\r
-       private static String fetchResultFromDestination(String url) {\r
-               debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : START");\r
-\r
-               StringBuffer sb = new StringBuffer();\r
-               try {\r
-                       HttpClient client = HttpClientBuilder.create().build();\r
-                       HttpGet request = new HttpGet(url);\r
-                       HttpResponse response = client.execute(request);\r
-                       BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));\r
-                       String line = "";\r
-                       while ((line = rd.readLine()) != null) {\r
-                               sb.append(line);\r
-                               sb.append('\n');\r
-                       }\r
-               } catch (ClientProtocolException e) {\r
-                       debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : ClientProtocolException thrown."+e.getMessage());\r
-               } catch (UnsupportedOperationException e) {\r
-                       debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : UnsupportedOperationException thrown."+e.getMessage());\r
-               } catch (IOException e) {\r
-                       debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : IOException thrown."+e.getMessage());\r
-               }\r
-\r
-               debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : END");\r
-               return sb.toString();\r
-       }\r
-\r
-}\r
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : DCAE
+ * ================================================================================
+ * Copyright 2019 TechMahindra
+ * ================================================================================
+ * 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=========================================================
+ */
+
+package org.onap.universalvesadapter.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.nio.file.Files;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.json.JSONTokener;
+import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.CbsRequests;
+import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.CbsRequest;
+import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties;
+import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ResourceUtils;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Component
+public class FetchDynamicConfig {
+
+    // @Value("${defaultProtocol}")
+    static String defaultProtocol = "http";
+
+    private static final Logger debugLogger = LoggerFactory.getLogger("debugLogger");
+    private static final Logger errorLogger = LoggerFactory.getLogger("errorLogger");
+
+    private static String url;
+    public static String retString;
+    public static String retCBSString;
+
+    // Generate RequestID and InvocationID which will be used when logging and in
+    // HTTP requests
+    final RequestDiagnosticContext diagnosticContext = RequestDiagnosticContext.create();
+    final CbsRequest request = CbsRequests.getConfiguration(diagnosticContext);
+
+    // Read necessary properties from the environment
+    static final EnvProperties env = EnvProperties.fromEnvironment();
+
+    public FetchDynamicConfig() {
+
+    }
+
+    public static void cbsCall(String configFile) {
+
+        Boolean areEqual;
+        // Call consul api and identify the CBS Service address and port
+        getconsul();
+        // Construct and invoke CBS API to get application Configuration
+        getCBS();
+        // Verify if data has changed
+        areEqual = verifyConfigChange(configFile);
+
+        if (!areEqual) {
+            FetchDynamicConfig fc = new FetchDynamicConfig();
+            if (retCBSString != null) {
+                fc.writefile(retCBSString, configFile);
+            } else {
+                debugLogger.debug("No content recieved from server");
+            }
+        } else {
+            debugLogger.info("New config pull results identical -  {} NOT refreshed", configFile);
+        }
+    }
+
+    private static void getconsul() {
+        url = defaultProtocol + "://" + env.consulHost() + ":" + env.consulPort() + "/v1/catalog/service/"
+                + env.cbsName();
+        retString = fetchResultFromDestination(url);
+        debugLogger.info("CBS details fetched from Consul");
+    }
+
+    public static boolean verifyConfigChange(String configFile) {
+
+        boolean areEqual = false;
+        // Read current data
+        try {
+
+            File f = new File(ClassLoader.getSystemResource(configFile.trim()).getFile());
+
+            if (f.exists() && !f.isDirectory()) {
+                debugLogger.info("Comparing local configuration with the configuration fethed from CBS ");
+
+                String jsonData = readFile(configFile);
+                JSONObject jsonObject = new JSONObject(jsonData);
+
+                ObjectMapper mapper = new ObjectMapper();
+
+                JsonNode tree1 = mapper.readTree(jsonObject.toString());
+                JsonNode tree2 = mapper.readTree(retCBSString);
+                areEqual = tree1.equals(tree2);
+                debugLogger.info("Comparison value:{}", areEqual);
+            } else {
+                debugLogger.info("First time config file read: {}",configFile);
+            }
+
+        } catch (IOException e) {
+            errorLogger.error("Comparison with new fetched data failed", e);
+
+        }
+
+        return areEqual;
+
+    }
+
+    public static void getCBS() {
+
+        // consul return as array
+        JSONTokener temp = new JSONTokener(retString);
+        JSONObject cbsjobj = (JSONObject) new JSONArray(temp).get(0);
+
+        String urlPart1 = null;
+        if (cbsjobj.has("ServiceAddress") && cbsjobj.has("ServicePort")) {
+
+            urlPart1 = cbsjobj.getString("ServiceAddress") + ":" + cbsjobj.getInt("ServicePort");
+
+        }
+        debugLogger.info("CONFIG_BINDING_SERVICE HOST:PORT is {}", urlPart1);
+
+        if (env.appName() != null) {
+            url = defaultProtocol + "://" + urlPart1 + "/service_component/" + env.appName();
+            retCBSString = fetchResultFromDestination(url);
+            debugLogger.info("Configuration fetched from CBS successfully..");
+        } else {
+            errorLogger.error("Service name environment variable - APP_NAME/SERVICE_NAME not found within container ");
+        }
+    }
+
+    public void writefile(String retCBSString, String configFile) {
+
+        String indentedretstring = (new JSONObject(retCBSString)).toString(4);
+        try {
+            debugLogger.info("Overwriting local configuration file {} with configuartions received from CBS",
+                    configFile);
+
+            File file2 = ResourceUtils.getFile("classpath:" + configFile);
+            try (FileWriter fstream = new FileWriter(file2, false);
+                    PrintWriter printWriter = new PrintWriter(fstream)) {
+                printWriter.print(indentedretstring);
+            }
+
+            debugLogger.info("New Config successfully written to local file to {}", configFile);
+        } catch (IOException e) {
+            errorLogger.error(
+                    "Error in writing configuration into local KV file " + configFile + retString, e);
+        }
+    }
+
+    public static String readFile(String configFileName) {
+        String content = null;
+        File file = null;
+
+        try {
+            file = ResourceUtils.getFile("classpath:" + configFileName);
+            content = new String(Files.readAllBytes(file.toPath()));
+        } catch (FileNotFoundException e) {
+            errorLogger.error("colud not find file :{}", configFileName);
+        } catch (IOException e) {
+            errorLogger.error("unable to read the file , reason:", e);
+        } catch (Exception e) {
+            errorLogger.error("Exception occured , reason:", e);
+        }
+
+        return content;
+    }
+
+    private static String fetchResultFromDestination(String url) {
+        debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : START");
+
+        StringBuffer sb = new StringBuffer();
+        try {
+            HttpClient client = HttpClientBuilder.create().build();
+            HttpGet request = new HttpGet(url);
+            HttpResponse response = client.execute(request);
+            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+            String line = "";
+            while ((line = rd.readLine()) != null) {
+                sb.append(line);
+                sb.append('\n');
+            }
+        } catch (ClientProtocolException e) {
+            debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : ClientProtocolException thrown.", e);
+        } catch (UnsupportedOperationException e) {
+            debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : UnsupportedOperationException thrown.",
+                    e);
+        } catch (IOException e) {
+            debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : IOException thrown.", e);
+        }
+
+        debugLogger.debug("FetchDynamicConfig : fetchResultFromDestination : END");
+        return sb.toString();
+    }
+
+}