import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
-import org.commscope.tr069adapter.mapper.ErrorCodeMetaData;\r
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
import org.slf4j.Logger;\r
\r
@Autowired\r
MOMetaDataUtil metaDataUtil;\r
+ \r
+ @Autowired\r
+ MapperConfigProperties config;\r
\r
private static final Logger logger = LoggerFactory.getLogger(NetconfToTr069MapperUtil.class);\r
private static final String INDEX_STR = "index";\r
return null;\r
}\r
\r
+ public static Map<String, String> extractRequestParamters(Document operationElement,\r
+ String netconfTag, String filterElement) {\r
+ Node requestDataNode = getParameterDataNode(operationElement, netconfTag, filterElement);\r
+ Map<String, String> map = getParameterMapForNode(requestDataNode, -1);\r
+ return map;\r
+ }\r
+\r
public static DeviceRPCRequest prepareTR069Request(String deviceId, Element operationElement,\r
String netconfTag, TR069OperationCode opCode) {\r
Node requestDataNode = getDeviceDataNode(operationElement, netconfTag);\r
\r
TR069OperationDetails opDetails = new TR069OperationDetails();\r
opDetails.setOpCode(opCode);\r
+ return handleParamsOperation(params, opDetails, deviceId);\r
+ }\r
+\r
+ public static DeviceRPCRequest handleParamsOperation(List<ParameterDTO> params,\r
+ TR069OperationDetails opDetails, String deviceId) {\r
opDetails.setParmeters(params);\r
\r
DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
return deviceRPCRequest;\r
}\r
\r
- public NetConfResponse getNetconfResponse(DeviceRPCResponse opResult) {\r
+ public NetConfResponse getNetconfResponse(DeviceRPCResponse opResult, boolean isCustomparameter) {\r
NetConfResponse netConfResponse = new NetConfResponse();\r
- ErrorCodeMetaData errorCodeMetaData =\r
- errorCodeUtil.getErrorCodeMetaData(opResult.getFaultKey());\r
+ ErrorCodeDetails errorCodeDetails = errorCodeUtil.getErrorCodeMetaData(opResult.getFaultKey());\r
ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
- if (errorCodeMetaData != null) {\r
+ if (errorCodeDetails != null) {\r
errorCode.setFaultCode(opResult.getFaultKey());\r
- errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
- errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
- errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
- errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
+ errorCode.setErrorMessage(errorCodeDetails.getErrorMessage());\r
+ errorCode.setErrorType(errorCodeDetails.getErrorType());\r
+ errorCode.setErrorTag(errorCodeDetails.getErrorTag());\r
+ errorCode.setErrorSeverity(errorCodeDetails.getErrorSeverity());\r
netConfResponse.setErrorCode(errorCode);\r
netConfResponse.setErrorMessage(opResult.getFaultString());\r
} else if (opResult.getFaultKey() != null && opResult.getFaultString() != null) {\r
netConfResponse.setErrorCode(errorCode);\r
netConfResponse.setErrorMessage(opResult.getFaultString());\r
}\r
- netConfResponse.setNetconfResponseXml(\r
- getNetconfResponseXML(opResult.getOperationResponse().getParameterDTOs()));\r
+ netConfResponse.setNetconfResponseXml(getNetconfResponseXML(\r
+ opResult.getOperationResponse().getParameterDTOs(), isCustomparameter));\r
return netConfResponse;\r
}\r
\r
- private String getNetconfResponseXML(List<ParameterDTO> parameters) {\r
+ public NetConfResponse getNetconfResponseForSoftwareInventory(DeviceRPCResponse opResult) {\r
+\r
+ NetConfResponse netConfResponse = new NetConfResponse();\r
+ ErrorCodeDetails errorCodeDetails = errorCodeUtil.getErrorCodeMetaData(opResult.getFaultKey());\r
+ ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
+ if (errorCodeDetails != null) {\r
+ errorCode.setFaultCode(opResult.getFaultKey());\r
+ errorCode.setErrorMessage(errorCodeDetails.getErrorMessage());\r
+ errorCode.setErrorType(errorCodeDetails.getErrorType());\r
+ errorCode.setErrorTag(errorCodeDetails.getErrorTag());\r
+ errorCode.setErrorSeverity(errorCodeDetails.getErrorSeverity());\r
+ netConfResponse.setErrorCode(errorCode);\r
+ netConfResponse.setErrorMessage(opResult.getFaultString());\r
+ return netConfResponse;\r
+ } else if (opResult.getFaultKey() != null && opResult.getFaultString() != null) {\r
+ errorCode.setFaultCode(opResult.getFaultKey());\r
+ errorCode.setErrorMessage(opResult.getFaultString());\r
+ errorCode.setErrorType("application");\r
+ errorCode.setErrorTag("operation-failed");\r
+ errorCode.setErrorSeverity("ERROR");\r
+ netConfResponse.setErrorCode(errorCode);\r
+ netConfResponse.setErrorMessage(opResult.getFaultString());\r
+ return netConfResponse;\r
+ }\r
+ List<ParameterDTO> paramDTOList = new ArrayList<>();\r
+\r
+ String build = null;\r
+ String productClass = null;\r
+ for (ParameterDTO paramDto : opResult.getOperationResponse().getParameterDTOs()) {\r
+ if (paramDto.getParamName().equals("Device.DeviceInfo.SoftwareVersion"))\r
+ build = paramDto.getParamValue();\r
+ else if (paramDto.getParamName().equals("Device.DeviceInfo.ProductClass"))\r
+ productClass = paramDto.getParamValue();\r
+ }\r
+\r
+ String[] arrOfBuild = build.split("\\.");\r
+ String buildId = arrOfBuild[arrOfBuild.length - 1];\r
+ StringBuilder buildVersion = new StringBuilder();\r
+ for (int i = 0; i < arrOfBuild.length - 1; i++) {\r
+ if (i == arrOfBuild.length - 2) {\r
+ buildVersion.append(arrOfBuild[i]);\r
+ } else {\r
+ buildVersion.append(arrOfBuild[i]);\r
+ buildVersion.append(".");\r
+ }\r
+ }\r
+\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.name", "Active Partition"));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.status", "VALID"));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.active", "true"));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.running", "true"));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.access", "READ_ONLY"));\r
+ paramDTOList\r
+ .add(new ParameterDTO("software-inventory.software-slot.product-code", productClass));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.vendor-code", config.getVendorName()));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.build-id", buildId));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.build-version",\r
+ buildVersion.toString()));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.files.name", "BC_ONE"));\r
+ paramDTOList.add(new ParameterDTO("software-inventory.software-slot.files.integrity", "OK"));\r
+\r
+ String XmlStr = getNetconfResponseXML(paramDTOList, true);\r
+\r
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
+ DocumentBuilder builder;\r
+ Document doc = null;\r
+ try {\r
+ builder = factory.newDocumentBuilder();\r
+ doc = builder.parse(new InputSource(new StringReader(XmlStr)));\r
+ } catch (Exception e) {\r
+ logger.error("Error while converting String to element" + e);\r
+ errorCode.setFaultCode("8002");\r
+ errorCode.setErrorMessage("Operation Aborted");\r
+ errorCode.setErrorType("application");\r
+ errorCode.setErrorTag("operation-failed");\r
+ errorCode.setErrorSeverity("ERROR");\r
+ netConfResponse.setErrorCode(errorCode);\r
+ netConfResponse.setErrorMessage("Operation Aborted");\r
+ return netConfResponse;\r
+ }\r
+\r
+ Element originalDocumentElement = doc.getDocumentElement();\r
+ Element newDocumentElement = doc.createElementNS("urn:o-ran:software-management:1.0",\r
+ originalDocumentElement.getNodeName());\r
+ NodeList list = originalDocumentElement.getChildNodes();\r
+ while (list.getLength() != 0) {\r
+ newDocumentElement.appendChild(list.item(0));\r
+ }\r
+ // Replace the original element\r
+ doc.replaceChild(newDocumentElement, originalDocumentElement);\r
+\r
+ String strxml = null;\r
+ try {\r
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();\r
+ Transformer transformer = transformerFactory.newTransformer();\r
+ DOMSource source = new DOMSource(doc);\r
+ StreamResult result = new StreamResult(new StringWriter());\r
+ transformer.transform(source, result);\r
+ strxml = result.getWriter().toString();\r
+ } catch (Exception e) {\r
+ logger.error("Error while converting Element to String" + e);\r
+ errorCode.setFaultCode("8002");\r
+ errorCode.setErrorMessage("Operation Aborted");\r
+ errorCode.setErrorType("application");\r
+ errorCode.setErrorTag("operation-failed");\r
+ errorCode.setErrorSeverity("ERROR");\r
+ netConfResponse.setErrorCode(errorCode);\r
+ netConfResponse.setErrorMessage("Operation Aborted");\r
+ return netConfResponse;\r
+ }\r
+\r
+ netConfResponse.setNetconfResponseXml(strxml);\r
+ logger.debug("NetConf Response XML String for software inventory: " + strxml);\r
+ return netConfResponse;\r
+ }\r
+\r
+ private String getNetconfResponseXML(List<ParameterDTO> parameters, boolean isCustomparameter) {\r
if (null == parameters || parameters.isEmpty()) {\r
\r
return null;\r
for (ParameterDTO paramDto : parameters) {\r
String paramName =\r
metaDataUtil.getNetconfNameByTR69NameWithIndexes(paramDto.getParamName());\r
+ if (paramName == null && isCustomparameter) {\r
+ paramName = paramDto.getParamName();\r
+ }\r
String paramValue = paramDto.getParamValue();\r
if (paramValue == null || paramValue.trim().isEmpty()) {\r
logger.debug("Values is empty so skipping this parameter.");\r
bld.append(".");\r
bld.append(nodeName);\r
parentNodeKey = bld.toString();\r
- Element node = parentNodeMap.get(parentNodeKey);\r
+ Element node = parentNodeMap.computeIfPresent(parentNodeKey, (k, v) -> v);\r
\r
// create a tabular parent node if doesn't exit in MAP\r
if (null == node) {\r
if (moRNode.getNodeType() == Node.ELEMENT_NODE) {\r
NodeList childs = moRNode.getChildNodes();\r
boolean hasChildElements = false;\r
- if (childs.getLength() > 0) {\r
- int counter = 0;\r
- for (int i = 0; i < childs.getLength(); i++) {\r
- Node cNode = childs.item(i);\r
- if (cNode != null && cNode.getNodeType() == Node.ELEMENT_NODE) {\r
- counter++;\r
- }\r
- }\r
-\r
- for (int i = 0; i < childs.getLength(); i++) {\r
- Node cNode = childs.item(i);\r
- if (cNode != null && cNode.getNodeType() == Node.ELEMENT_NODE) {\r
- hasChildElements = true;\r
- Map<String, String> subResult = getParameterMapForNode(cNode, counter);\r
- result.putAll(subResult);\r
- }\r
- }\r
- }\r
+ hasChildElements = checkMoreElements(result, childs, hasChildElements);\r
if (!hasChildElements) {\r
String moName = getMOName(moRNode);\r
- if ((null != moName && !moName.endsWith("." + INDEX_STR))\r
- || (null != moName && numberOfChilds == 1)) {\r
+ if (moName.equals("software-inventory")) {\r
+ result.put("device.device-info.software-version", moRNode.getTextContent());\r
+ result.put("device.device-info.product-class", moRNode.getTextContent());\r
+ } else if (!moName.endsWith("." + INDEX_STR)) {\r
+ result.put(moName, moRNode.getTextContent());\r
+ } else if (numberOfChilds == 1) {\r
result.put(moName, moRNode.getTextContent());\r
}\r
}\r
return result;\r
}\r
\r
+ private static boolean checkMoreElements(Map<String, String> result, NodeList childs,\r
+ boolean hasChildElements) {\r
+ if (childs.getLength() > 0) {\r
+ int counter = 0;\r
+ for (int i = 0; i < childs.getLength(); i++) {\r
+ Node cNode = childs.item(i);\r
+ if (cNode != null && cNode.getNodeType() == Node.ELEMENT_NODE) {\r
+ counter++;\r
+ }\r
+ }\r
+\r
+ for (int i = 0; i < childs.getLength(); i++) {\r
+ Node cNode = childs.item(i);\r
+ if (cNode != null && cNode.getNodeType() == Node.ELEMENT_NODE) {\r
+ hasChildElements = true;\r
+ Map<String, String> subResult = getParameterMapForNode(cNode, counter);\r
+ result.putAll(subResult);\r
+ }\r
+ }\r
+ }\r
+ return hasChildElements;\r
+ }\r
+\r
private static String getMOName(Node moRNode) {\r
String result = removeNS(moRNode.getNodeName());\r
Node pNode = moRNode;\r
}\r
}\r
\r
+ private static Node getParameterDataNode(Document el, String docStart, String filterElement) {\r
+ NodeList nodeList = el.getElementsByTagName(docStart);\r
+ if (nodeList.getLength() > 0) {\r
+ nodeList = nodeList.item(0).getChildNodes();\r
+ for (int i = 0; i < nodeList.getLength(); i++) {\r
+ Node node = nodeList.item(i);\r
+ String nodeName = removeNS(node.getNodeName());\r
+ if (nodeName.equals(filterElement)) {\r
+ return node;\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
private static Node getDeviceDataNode(Element el, String filter) {\r
try {\r
NodeList nodeList = el.getElementsByTagName(filter);\r