import  netconf_constant
from netconfclient import NetconfClient
from java.lang import Exception
from abstract_blueprint_function import AbstractPythonComponentFunction
from org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor import NetconfRpcService



class DefaultGetNetConfig(AbstractPythonComponentFunction):
    def process(self, execution_request):
        try:
            log = globals()[netconf_constant.SERVICE_LOG]
            print(globals())
            #requestId = globals()[netconf_constant.PARAM_REQUEST_ID]
            requestId = '1234'

            bluePrintRuntimeService = globals()['bluePrintRuntimeService']

            capabilityProperty = bluePrintRuntimeService.resolveNodeTemplateCapabilityProperties("sample-netconf-device","netconf")

            log.info("capabilityProperty {}",capabilityProperty)
            netconfService = NetconfRpcService()
            nc = NetconfClient(log, netconfService)

            nc.connect(netconfService.getNetconfDeviceInfo(capabilityProperty))
            runningConfigTemplate = "runningconfig-template"

            runningConfigMessageId = "get-config-" + requestId

            deviceResponse = nc.getConfig(messageId=runningConfigMessageId,
                                          filter=runningConfigTemplate)

            log.info("Get Running Config Response {} ", deviceResponse.responseMessage)
            if(deviceResponse !='null') :
                status = deviceResponse.status
                responseData = "{}"
                if (deviceResponse.status != netconf_constant.STATUS_SUCCESS and deviceResponse.errorMessage != 'null'):
                    errorMessage = "Get Running Config Failure ::"+ deviceResponse.errorMessage

        except Exception, err:
            log.info("Exception in the script {}",err.getMessage())
            status = netconf_constant.STATUS_FAILURE
            errorMessage = "Get Running Config Failure ::"+err.getMessage()

    def  recover(self, runtime_exception, execution_request):
        print "Recovering calling.." + PROPERTY_BLUEPRINT_BASE_PATH
        return None

