Change code in appc dispatcher for new LCMs in R6
[appc.git] / appc-dg / appc-dg-shared / appc-dg-netconf / src / main / java / org / onap / appc / dg / netconf / impl / NetconfClientPluginImpl.java
index 1684f1c..f31383b 100644 (file)
@@ -2,63 +2,74 @@
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
+ * ================================================================================
+ * Modifications (C) 2019 Ericsson
  * =============================================================================
  * 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.
- * 
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
 package org.onap.appc.dg.netconf.impl;
 
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.onap.appc.adapter.netconf.*;
+import org.onap.appc.adapter.netconf.NetconfClient;
+import org.onap.appc.adapter.netconf.NetconfClientFactory;
+import org.onap.appc.adapter.netconf.NetconfClientType;
+import org.onap.appc.adapter.netconf.NetconfConnectionDetails;
+import org.onap.appc.adapter.netconf.NetconfDataAccessService;
+import org.onap.appc.adapter.netconf.OperationalStateValidator;
+import org.onap.appc.adapter.netconf.OperationalStateValidatorFactory;
+import org.onap.appc.adapter.netconf.VnfType;
 import org.onap.appc.adapter.netconf.util.Constants;
 import org.onap.appc.dg.netconf.NetconfClientPlugin;
 import org.onap.appc.exceptions.APPCException;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.ServiceReference;
 
-import java.io.IOException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-
-
 
 public class NetconfClientPluginImpl implements NetconfClientPlugin {
 
-    private static final String NETCONF_CLIENT_FACTORY_NAME = "org.onap.appc.adapter.netconf.NetconfClientFactory";
-    private static ObjectMapper mapper = new ObjectMapper();
     private static EELFLogger logger = EELFManager.getInstance().getApplicationLogger();
+    private static ObjectMapper mapper = new ObjectMapper();
+    private static final String NETCONF_CLIENT_FACTORY_NAME = "org.onap.appc.adapter.netconf.NetconfClientFactory";
+    private static final String CONNECTION_DETAILS_PARAM = "connection-details";
+    private static final String ERROR_STR = "Error ";
+    private static final String GET_CONFIG_RESULT_PARAM = "getConfig_Result";
+    private static final String FAILURE_PARAM = "failure";
+    private static final String GET_RUNNING_CONFIG_RESULT_PARAM = "getRunningConfig_Result";
 
     private NetconfDataAccessService dao;
     private NetconfClientFactory clientFactory;
 
     public NetconfClientPluginImpl() {
         BundleContext bctx = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
-        ServiceReference srefNetconfClientFactory = bctx.getServiceReference(NetconfClientFactory.class);
-        clientFactory = (NetconfClientFactory) bctx.getService(srefNetconfClientFactory);
+        ServiceReference<NetconfClientFactory> srefNetconfClientFactory =
+                bctx.getServiceReference(NetconfClientFactory.class);
+        clientFactory = bctx.getService(srefNetconfClientFactory);
     }
 
     public void setDao(NetconfDataAccessService dao) {
@@ -67,34 +78,40 @@ public class NetconfClientPluginImpl implements NetconfClientPlugin {
     }
 
     public void configure(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
-
         try {
-            // by default, it uses the jsch Netconf Adapter implementation by calling getNetconfClient(NetconfClientType.SSH).
+            // by default, it uses the jsch Netconf Adapter implementation by calling
+            // getNetconfClient(NetconfClientType.SSH).
             NetconfClient client = clientFactory.getNetconfClient(NetconfClientType.SSH);
-            try {
-                NetconfConnectionDetails connectionDetails = mapper.readValue(params.get("connection-details"), NetconfConnectionDetails.class);
-                String netconfMessage = params.get("file-content");
-                client.connect(connectionDetails);
-                client.configure(netconfMessage);
-            } catch (IOException e) {
-                logger.error("Error " + e.getMessage());
-                throw new APPCException(e);
-            } finally {
-                client.disconnect();
-            }
+            connect(params, client);
         } catch (Exception e) {
             ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, e.getMessage());
-            logger.error("Error " + e.getMessage());
+            logger.error(ERROR_STR + e.getMessage());
             throw e;
         }
     }
 
+    private void connect(Map<String, String> params, NetconfClient client) throws APPCException {
+        try {
+            NetconfConnectionDetails connectionDetails =
+                    mapper.readValue(params.get(CONNECTION_DETAILS_PARAM), NetconfConnectionDetails.class);
+            String netconfMessage = params.get("file-content");
+            client.connect(connectionDetails);
+            client.configure(netconfMessage);
+        } catch (IOException e) {
+            logger.error(ERROR_STR + e.getMessage());
+            throw new APPCException(e);
+        } finally {
+            client.disconnect();
+        }
+    }
+
     @Override
     public void operationStateValidation(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
         if (logger.isTraceEnabled()) {
-            logger.trace("Entering to operationStateValidation with params = "+ ObjectUtils.toString(params)+", SvcLogicContext = "+ObjectUtils.toString(ctx));
+            logger.trace("Entering to operationStateValidation with params = " + ObjectUtils.toString(params)
+                    + ", SvcLogicContext = " + ObjectUtils.toString(ctx));
         }
-        try{
+        try {
             String paramName = Constants.VNF_TYPE_FIELD_NAME;
             String vfType = params.get(paramName);
             validateMandatoryParam(paramName, vfType);
@@ -106,23 +123,19 @@ public class NetconfClientPluginImpl implements NetconfClientPlugin {
 
             //get connectionDetails
             String connectionDetailsStr = params.get(Constants.CONNECTION_DETAILS_FIELD_NAME);
-            NetconfConnectionDetails connectionDetails = null;
-            if(StringUtils.isEmpty(connectionDetailsStr)){
-                connectionDetails = retrieveConnectionDetails(vnfType);
-                connectionDetails.setHost(vnfHostIpAddress);
-                ctx.setAttribute(Constants.CONNECTION_DETAILS_FIELD_NAME, mapper.writeValueAsString(connectionDetails));
-            }else{
-                connectionDetails = mapper.readValue(connectionDetailsStr, NetconfConnectionDetails.class);
-            }
-            if(connectionDetails == null){
-                throw new IllegalStateException("missing connectionDetails for VnfType:"+vnfType.name());
+            NetconfConnectionDetails connectionDetails =
+                    resolveConnectionDetails(ctx, vnfType, vnfHostIpAddress, connectionDetailsStr);
+
+            if (connectionDetails == null) {
+                throw new IllegalStateException("missing connectionDetails for VnfType:" + vnfType.name());
             }
 
             //get operationsStateNetconfMessage
-            OperationalStateValidator operationalStateValidator = OperationalStateValidatorFactory.getOperationalStateValidator(vnfType);
+            OperationalStateValidator operationalStateValidator =
+                    OperationalStateValidatorFactory.getOperationalStateValidator(vnfType);
             String configurationFileName = operationalStateValidator.getConfigurationFileName();
             String operationsStateNetconfMessage = null;
-            if(!StringUtils.isEmpty(configurationFileName)){
+            if (!StringUtils.isEmpty(configurationFileName)) {
                 operationsStateNetconfMessage = retrieveConfigurationFileContent(configurationFileName);
             }
 
@@ -131,7 +144,7 @@ public class NetconfClientPluginImpl implements NetconfClientPlugin {
             try {
                 client.connect(connectionDetails);
                 String response = null;
-                if(!StringUtils.isEmpty(operationsStateNetconfMessage)) {
+                if (!StringUtils.isEmpty(operationsStateNetconfMessage)) {
                     response = client.exchangeMessage(operationsStateNetconfMessage);
                 }
                 operationalStateValidator.validateResponse(response);
@@ -142,14 +155,26 @@ public class NetconfClientPluginImpl implements NetconfClientPlugin {
             logger.error(e.getMessage());
             ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, e.toString());
             throw e;
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             logger.error(e.toString());
             ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, e.toString());
             throw new APPCException(e);
         }
     }
 
+    private NetconfConnectionDetails resolveConnectionDetails(SvcLogicContext ctx, VnfType vnfType,
+            String vnfHostIpAddress, String connectionDetailsStr) throws APPCException, IOException {
+        NetconfConnectionDetails connectionDetails;
+        if (StringUtils.isEmpty(connectionDetailsStr)) {
+            connectionDetails = retrieveConnectionDetails(vnfType);
+            connectionDetails.setHost(vnfHostIpAddress);
+            ctx.setAttribute(Constants.CONNECTION_DETAILS_FIELD_NAME, mapper.writeValueAsString(connectionDetails));
+        } else {
+            connectionDetails = mapper.readValue(connectionDetailsStr, NetconfConnectionDetails.class);
+        }
+        return connectionDetails;
+    }
+
     @Override
     public void modifyConfiguration(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
         this.configure(params, ctx);
@@ -157,30 +182,28 @@ public class NetconfClientPluginImpl implements NetconfClientPlugin {
 
     @Override
     public void backupConfiguration(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
-
         NetconfClient client = null;
         try {
-            if (logger.isDebugEnabled()) {
-                logger.debug("Entered backup to DEVICE_INTERFACE_LOG");
-            }
+            logger.debug("Entered backup to DEVICE_INTERFACE_LOG");
 
             client = clientFactory.getNetconfClient(NetconfClientType.SSH);
             //get connection details
-            NetconfConnectionDetails connectionDetails = mapper.readValue(params.get("connection-details"), NetconfConnectionDetails.class);
+            NetconfConnectionDetails connectionDetails =
+                    mapper.readValue(params.get(CONNECTION_DETAILS_PARAM), NetconfConnectionDetails.class);
             //connect the client and get configuration
             client.connect(connectionDetails);
             String configuration = client.getConfiguration();
 
             //store configuration in database
-            dao.logDeviceInteraction(null,null,getCurrentDateTime(),configuration);
+            dao.logDeviceInteraction(null, null, getCurrentDateTime(), configuration);
 
         } catch (Exception e) {
-            logger.error("Error " + e.getMessage());
+            logger.error(ERROR_STR + e.getMessage());
             ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, e.getMessage());
             throw new APPCException(e);
         } finally {
             //disconnect the client
-            if(client != null) {
+            if (client != null) {
                 client.disconnect();
             }
         }
@@ -189,52 +212,54 @@ public class NetconfClientPluginImpl implements NetconfClientPlugin {
     @Override
     public void getConfig(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
         NetconfClient client = null;
-        String confId=params.get("conf-id");
-        if(confId.equalsIgnoreCase("current")){
+        String confId = params.get("conf-id");
+        if ("current".equalsIgnoreCase(confId)) {
             try {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("Entered getConfig to DEVICE_INTERFACE_LOG");
-                }
+                logger.debug("Entered getConfig to DEVICE_INTERFACE_LOG");
                 //get netconf client to get configuration
                 BundleContext bctx = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
                 ServiceReference sref = bctx.getServiceReference(NETCONF_CLIENT_FACTORY_NAME);
-                NetconfClientFactory clientFactory = (NetconfClientFactory) bctx.getService(sref);
-                client = clientFactory.getNetconfClient(NetconfClientType.SSH);
+                NetconfClientFactory clientFact = (NetconfClientFactory) bctx.getService(sref);
+                client = clientFact.getNetconfClient(NetconfClientType.SSH);
                 //get connection details
-                NetconfConnectionDetails connectionDetails = mapper.readValue(params.get("connection-details"), NetconfConnectionDetails.class);
+                NetconfConnectionDetails connectionDetails =
+                        mapper.readValue(params.get(CONNECTION_DETAILS_PARAM), NetconfConnectionDetails.class);
                 //connect the client and get configuration
                 client.connect(connectionDetails);
                 String configuration = client.getConfiguration();
-                if(configuration !=null){
+                if (configuration != null) {
                     String fullConfig = ctx.getAttribute("fullConfig");
-                    fullConfig = fullConfig==null?"":fullConfig;
-                    ctx.setAttribute("fullConfig",fullConfig + configuration);
-
-                    ctx.setAttribute("getConfig_Result","Success");
-                    String entityName=ctx.getAttribute("entity");//VM name
-                    if(entityName!=null){
-                        ctx.setAttribute(entityName+".Configuration",configuration);
-                    }
-                }else{
-                    ctx.setAttribute("getConfig_Result","failure");
+                    fullConfig = fullConfig == null ? "" : fullConfig;
+                    ctx.setAttribute("fullConfig", fullConfig + configuration);
+
+                    ctx.setAttribute(GET_CONFIG_RESULT_PARAM, "Success");
+                    String entityName = ctx.getAttribute("entity");//VM name
+                    trySetEntityConfiguration(ctx, configuration, entityName);
+                } else {
+                    ctx.setAttribute(GET_CONFIG_RESULT_PARAM, FAILURE_PARAM);
                 }
             } catch (Exception e) {
-                ctx.setAttribute("getConfig_Result","failure");
-                logger.error("Error " + e.getMessage());
+                ctx.setAttribute(GET_CONFIG_RESULT_PARAM, FAILURE_PARAM);
+                logger.error(ERROR_STR + e.getMessage());
                 ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, e.getMessage());
                 throw new APPCException(e);
             } finally {
                 //disconnect the client
-                if(client != null) {
+                if (client != null) {
                     client.disconnect();
                 }
             }
-        }else{
+        } else {
             logger.info("Current Conf id value is not supported");
         }
 
     }
 
+    private void trySetEntityConfiguration(SvcLogicContext ctx, String configuration, String entityName) {
+        if (entityName != null) {
+            ctx.setAttribute(entityName + ".Configuration", configuration);
+        }
+    }
 
     @Override
     public void getRunningConfig(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
@@ -244,71 +269,64 @@ public class NetconfClientPluginImpl implements NetconfClientPlugin {
             //get netconf client to get configuration
             BundleContext bctx = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
             ServiceReference sref = bctx.getServiceReference(NETCONF_CLIENT_FACTORY_NAME);
-            NetconfClientFactory clientFactory = (NetconfClientFactory) bctx.getService(sref);
-            client = clientFactory.getNetconfClient(NetconfClientType.SSH);
+            NetconfClientFactory clientFact = (NetconfClientFactory) bctx.getService(sref);
+            client = clientFact.getNetconfClient(NetconfClientType.SSH);
             //get connection details
             NetconfConnectionDetails connectionDetails = new NetconfConnectionDetails();
             connectionDetails.setHost(params.get("host-ip-address"));
             connectionDetails.setUsername(params.get("user-name"));
             connectionDetails.setPassword(params.get("password"));
-            connectionDetails.setPort(!("".equalsIgnoreCase(params.get("port-number")))?Integer.parseInt(params.get("port-number")):NetconfConnectionDetails.DEFAULT_PORT);
+            connectionDetails.setPort(
+                    !("".equalsIgnoreCase(params.get("port-number")))
+                        ? Integer.parseInt(params.get("port-number"))
+                        : NetconfConnectionDetails.DEFAULT_PORT);
             //connect the client and get configuration
             client.connect(connectionDetails);
             String configuration = client.getConfiguration();
-            if(configuration !=null){
-                //  logger.info("*************************************Configuration Output*************************************");
+            if (configuration != null) {
                 ctx.setAttribute("running-config", configuration);
 
-                ctx.setAttribute("getRunningConfig_Result","Success");
-            }else{
-                ctx.setAttribute("getRunningConfig_Result","failure");
+                ctx.setAttribute(GET_RUNNING_CONFIG_RESULT_PARAM, "Success");
+            } else {
+                ctx.setAttribute(GET_RUNNING_CONFIG_RESULT_PARAM, FAILURE_PARAM);
             }
         } catch (Exception e) {
-            ctx.setAttribute("getRunningConfig_Result","failure");
-            logger.error("Error " + e.getMessage());
+            ctx.setAttribute(GET_RUNNING_CONFIG_RESULT_PARAM, FAILURE_PARAM);
+            logger.error(ERROR_STR + e.getMessage());
             ctx.setAttribute(Constants.DG_OUTPUT_STATUS_MESSAGE, e.getMessage());
             throw new APPCException(e);
         } finally {
             //disconnect the client
-            if(client != null) {
+            if (client != null) {
                 client.disconnect();
             }
         }
     }
 
     private String getCurrentDateTime() {
-
         DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
         Date date = new Date();
         return dateFormat.format(date);
     }
 
-    private int getPort(String s) {
-        int port = 830;
-        if((s != null) && !s.isEmpty()) {
-            port = Integer.parseInt(s);
-        }
-        return port;
-    }
-
     void validateMandatoryParam(String paramName, String paramValue) {
-        if(StringUtils.isEmpty(paramValue)){
-            throw new IllegalArgumentException("input "+paramName+" param is empty");
+        if (StringUtils.isEmpty(paramValue)) {
+            throw new IllegalArgumentException("input " + paramName + " param is empty");
         }
     }
 
-    public NetconfConnectionDetails retrieveConnectionDetails( VnfType vnfType) throws APPCException{
+    public NetconfConnectionDetails retrieveConnectionDetails(VnfType vnfType) throws APPCException {
 
         NetconfConnectionDetails connectionDetails = new NetconfConnectionDetails();
         if (!dao.retrieveNetconfConnectionDetails(vnfType.getFamilyType().name(), connectionDetails)) {
             logger.error("Missing configuration for " + vnfType.getFamilyType().name());
-            throw new APPCException("Missing configuration for " + vnfType.getFamilyType().name() + " in " + Constants.DEVICE_AUTHENTICATION_TABLE_NAME);
+            throw new APPCException("Missing configuration for " + vnfType.getFamilyType().name() + " in "
+                    + Constants.DEVICE_AUTHENTICATION_TABLE_NAME);
         }
         return connectionDetails;
     }
 
-    public String retrieveConfigurationFileContent(String configFileName){
+    public String retrieveConfigurationFileContent(String configFileName) {
         return dao.retrieveConfigFileName(configFileName);
     }
-
 }