2 * ============LICENSE_START========================================================================
\r
3 * ONAP : tr-069-adapter
\r
4 * =================================================================================================
\r
5 * Copyright (C) 2020 CommScope Inc Intellectual Property.
\r
6 * =================================================================================================
\r
7 * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
\r
8 * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
\r
9 * may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
\r
14 * either express or implied. See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
16 * ===============LICENSE_END=======================================================================
\r
19 package org.commscope.tr069adapter.mapper.util;
\r
21 import java.io.Serializable;
\r
22 import java.io.StringReader;
\r
23 import java.io.StringWriter;
\r
24 import java.util.ArrayList;
\r
25 import java.util.Collections;
\r
26 import java.util.Comparator;
\r
27 import java.util.HashMap;
\r
28 import java.util.List;
\r
29 import java.util.Map;
\r
30 import java.util.StringTokenizer;
\r
31 import javax.xml.XMLConstants;
\r
32 import javax.xml.parsers.DocumentBuilder;
\r
33 import javax.xml.parsers.DocumentBuilderFactory;
\r
34 import javax.xml.parsers.ParserConfigurationException;
\r
35 import javax.xml.transform.Transformer;
\r
36 import javax.xml.transform.TransformerFactory;
\r
37 import javax.xml.transform.dom.DOMSource;
\r
38 import javax.xml.transform.stream.StreamResult;
\r
39 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
\r
40 import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;
\r
41 import org.commscope.tr069adapter.acs.common.OperationOptions;
\r
42 import org.commscope.tr069adapter.acs.common.ParameterDTO;
\r
43 import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;
\r
44 import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;
\r
45 import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;
\r
46 import org.commscope.tr069adapter.mapper.MapperConfigProperties;
\r
47 import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;
\r
48 import org.commscope.tr069adapter.mapper.model.NetConfResponse;
\r
49 import org.slf4j.Logger;
\r
50 import org.slf4j.LoggerFactory;
\r
51 import org.springframework.beans.factory.annotation.Autowired;
\r
52 import org.springframework.stereotype.Component;
\r
53 import org.w3c.dom.Document;
\r
54 import org.w3c.dom.Element;
\r
55 import org.w3c.dom.Node;
\r
56 import org.w3c.dom.NodeList;
\r
57 import org.xml.sax.InputSource;
\r
60 public class NetconfToTr069MapperUtil {
\r
63 MOMetaDataUtil metaDataUtil;
\r
66 MapperConfigProperties config;
\r
68 private static final Logger logger = LoggerFactory.getLogger(NetconfToTr069MapperUtil.class);
\r
69 private static final String INDEX_STR = "index";
\r
70 private static final String INDEX_REGEX = "[0-9]{1,}";
\r
73 private ErrorCodeUtil errorCodeUtil;
\r
75 public static Element convertStringToDocument(String xmlStr) {
\r
77 Document doc = convertStringToDocumentXml(xmlStr);
\r
79 return doc.getDocumentElement();
\r
80 } catch (Exception e) {
\r
81 logger.error("Error while converting String to element {}", e.getMessage());
\r
86 public static Document convertStringToDocumentXml(String xmlStr) {
\r
88 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
\r
89 factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
\r
90 factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
\r
91 DocumentBuilder builder;
\r
92 builder = factory.newDocumentBuilder();
\r
93 return builder.parse(new InputSource(new StringReader(xmlStr)));
\r
94 } catch (Exception e) {
\r
95 logger.error("Error while converting String to element {}", e.getMessage());
\r
100 public static Map<String, String> extractRequestParamters(Document operationElement,
\r
101 String netconfTag, String filterElement) {
\r
102 Node requestDataNode = getParameterDataNode(operationElement, netconfTag, filterElement);
\r
103 Map<String, String> map = getParameterMapForNode(requestDataNode, -1);
\r
107 public static DeviceRPCRequest prepareTR069Request(String deviceId, Element operationElement,
\r
108 String netconfTag, TR069OperationCode opCode) {
\r
109 Node requestDataNode = getDeviceDataNode(operationElement, netconfTag);
\r
110 if (requestDataNode == null) {
\r
111 logger.debug("No matching device parameters found in the netconf request XML.");
\r
114 Map<String, String> map = getParameterMapForNode(requestDataNode, -1);
\r
115 List<ParameterDTO> params = new ArrayList<>();
\r
117 for (java.util.Map.Entry<String, String> entry : map.entrySet()) {
\r
118 if (!entry.getKey().equalsIgnoreCase("filter")) {
\r
119 String moName = entry.getKey();
\r
120 String value = entry.getValue();
\r
121 if (moName.endsWith("." + INDEX_STR)
\r
122 && (TR069OperationCode.GET_PARAMETER_VALUES.equals(opCode)
\r
123 || TR069OperationCode.DELETE_OBJECT.equals(opCode))) {
\r
124 logger.debug("Index node found : {}", moName);
\r
125 moName = moName.replaceFirst("." + INDEX_STR, ".");
\r
130 ParameterDTO param = new ParameterDTO(moName, value);
\r
135 TR069OperationDetails opDetails = new TR069OperationDetails();
\r
136 opDetails.setOpCode(opCode);
\r
137 return handleParamsOperation(params, opDetails, deviceId);
\r
140 public static DeviceRPCRequest handleParamsOperation(List<ParameterDTO> params,
\r
141 TR069OperationDetails opDetails, String deviceId) {
\r
142 opDetails.setParmeters(params);
\r
144 DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
\r
145 TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
\r
146 tr069DeviceDetails.setDeviceId(deviceId);
\r
147 deviceRPCRequest.setOpDetails(opDetails);
\r
148 deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
\r
149 OperationOptions options = new OperationOptions();
\r
150 options.setExecutionTimeout(60l);
\r
151 deviceRPCRequest.setOptions(options);
\r
152 return deviceRPCRequest;
\r
155 public NetConfResponse getNetconfResponse(DeviceRPCResponse opResult, String swVersion,
\r
156 String hwVersion, boolean isCustomparameter) {
\r
157 NetConfResponse netConfResponse = new NetConfResponse();
\r
158 ErrorCodeDetails errorCodeDetails = errorCodeUtil.getErrorCodeMetaData(opResult.getFaultKey());
\r
159 ErrorCodeDetails errorCode = new ErrorCodeDetails();
\r
160 if (errorCodeDetails != null) {
\r
161 errorCode.setFaultCode(opResult.getFaultKey());
\r
162 errorCode.setErrorMessage(errorCodeDetails.getErrorMessage());
\r
163 errorCode.setErrorType(errorCodeDetails.getErrorType());
\r
164 errorCode.setErrorTag(errorCodeDetails.getErrorTag());
\r
165 errorCode.setErrorSeverity(errorCodeDetails.getErrorSeverity());
\r
166 netConfResponse.setErrorCode(errorCode);
\r
167 netConfResponse.setErrorMessage(opResult.getFaultString());
\r
168 } else if (opResult.getFaultKey() != null && opResult.getFaultString() != null) {
\r
169 errorCode.setFaultCode(opResult.getFaultKey());
\r
170 errorCode.setErrorMessage(opResult.getFaultString());
\r
171 errorCode.setErrorType("application");
\r
172 errorCode.setErrorTag("operation-failed");
\r
173 errorCode.setErrorSeverity("ERROR");
\r
174 netConfResponse.setErrorCode(errorCode);
\r
175 netConfResponse.setErrorMessage(opResult.getFaultString());
\r
177 netConfResponse.setNetconfResponseXml(
\r
178 getNetconfResponseXML(opResult.getOperationResponse().getParameterDTOs(), swVersion,
\r
179 hwVersion, isCustomparameter));
\r
180 return netConfResponse;
\r
183 public NetConfResponse getNetconfResponseForSoftwareInventory(DeviceRPCResponse opResult,
\r
184 String swVersion, String hwVersion) {
\r
186 NetConfResponse netConfResponse = new NetConfResponse();
\r
187 ErrorCodeDetails errorCodeDetails = errorCodeUtil.getErrorCodeMetaData(opResult.getFaultKey());
\r
188 ErrorCodeDetails errorCode = new ErrorCodeDetails();
\r
189 if (errorCodeDetails != null) {
\r
190 errorCode.setFaultCode(opResult.getFaultKey());
\r
191 errorCode.setErrorMessage(errorCodeDetails.getErrorMessage());
\r
192 errorCode.setErrorType(errorCodeDetails.getErrorType());
\r
193 errorCode.setErrorTag(errorCodeDetails.getErrorTag());
\r
194 errorCode.setErrorSeverity(errorCodeDetails.getErrorSeverity());
\r
195 netConfResponse.setErrorCode(errorCode);
\r
196 netConfResponse.setErrorMessage(opResult.getFaultString());
\r
197 return netConfResponse;
\r
198 } else if (opResult.getFaultKey() != null && opResult.getFaultString() != null) {
\r
199 errorCode.setFaultCode(opResult.getFaultKey());
\r
200 errorCode.setErrorMessage(opResult.getFaultString());
\r
201 errorCode.setErrorType("application");
\r
202 errorCode.setErrorTag("operation-failed");
\r
203 errorCode.setErrorSeverity("ERROR");
\r
204 netConfResponse.setErrorCode(errorCode);
\r
205 netConfResponse.setErrorMessage(opResult.getFaultString());
\r
206 return netConfResponse;
\r
208 List<ParameterDTO> paramDTOList = new ArrayList<>();
\r
210 String build = null;
\r
211 String productClass = null;
\r
212 for (ParameterDTO paramDto : opResult.getOperationResponse().getParameterDTOs()) {
\r
213 if (paramDto.getParamName().equals("Device.DeviceInfo.SoftwareVersion"))
\r
214 build = paramDto.getParamValue();
\r
215 else if (paramDto.getParamName().equals("Device.DeviceInfo.ProductClass"))
\r
216 productClass = paramDto.getParamValue();
\r
219 String[] arrOfBuild = build.split("\\.");
\r
220 String buildId = arrOfBuild[arrOfBuild.length - 1];
\r
221 StringBuilder buildVersion = new StringBuilder();
\r
222 for (int i = 0; i < arrOfBuild.length - 1; i++) {
\r
223 if (i == arrOfBuild.length - 2) {
\r
224 buildVersion.append(arrOfBuild[i]);
\r
226 buildVersion.append(arrOfBuild[i]);
\r
227 buildVersion.append(".");
\r
231 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.name", "Active Partition"));
\r
232 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.status", "VALID"));
\r
233 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.active", "true"));
\r
234 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.running", "true"));
\r
235 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.access", "READ_ONLY"));
\r
237 .add(new ParameterDTO("software-inventory.software-slot.product-code", productClass));
\r
239 new ParameterDTO("software-inventory.software-slot.vendor-code", config.getVendorName()));
\r
240 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.build-id", buildId));
\r
241 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.build-version",
\r
242 buildVersion.toString()));
\r
243 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.files.name", "BC_ONE"));
\r
244 paramDTOList.add(new ParameterDTO("software-inventory.software-slot.files.integrity", "OK"));
\r
246 String XmlStr = getNetconfResponseXML(paramDTOList, swVersion, hwVersion, true);
\r
248 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
\r
249 DocumentBuilder builder;
\r
250 Document doc = null;
\r
252 builder = factory.newDocumentBuilder();
\r
253 doc = builder.parse(new InputSource(new StringReader(XmlStr)));
\r
254 } catch (Exception e) {
\r
255 logger.error("Error while converting String to element" + e);
\r
256 errorCode.setFaultCode("8002");
\r
257 errorCode.setErrorMessage("Operation Aborted");
\r
258 errorCode.setErrorType("application");
\r
259 errorCode.setErrorTag("operation-failed");
\r
260 errorCode.setErrorSeverity("ERROR");
\r
261 netConfResponse.setErrorCode(errorCode);
\r
262 netConfResponse.setErrorMessage("Operation Aborted");
\r
263 return netConfResponse;
\r
266 Element originalDocumentElement = doc.getDocumentElement();
\r
267 Element newDocumentElement = doc.createElementNS("urn:o-ran:software-management:1.0",
\r
268 originalDocumentElement.getNodeName());
\r
269 NodeList list = originalDocumentElement.getChildNodes();
\r
270 while (list.getLength() != 0) {
\r
271 newDocumentElement.appendChild(list.item(0));
\r
273 // Replace the original element
\r
274 doc.replaceChild(newDocumentElement, originalDocumentElement);
\r
276 String strxml = null;
\r
278 TransformerFactory transformerFactory = TransformerFactory.newInstance();
\r
279 Transformer transformer = transformerFactory.newTransformer();
\r
280 DOMSource source = new DOMSource(doc);
\r
281 StreamResult result = new StreamResult(new StringWriter());
\r
282 transformer.transform(source, result);
\r
283 strxml = result.getWriter().toString();
\r
284 } catch (Exception e) {
\r
285 logger.error("Error while converting Element to String" + e);
\r
286 errorCode.setFaultCode("8002");
\r
287 errorCode.setErrorMessage("Operation Aborted");
\r
288 errorCode.setErrorType("application");
\r
289 errorCode.setErrorTag("operation-failed");
\r
290 errorCode.setErrorSeverity("ERROR");
\r
291 netConfResponse.setErrorCode(errorCode);
\r
292 netConfResponse.setErrorMessage("Operation Aborted");
\r
293 return netConfResponse;
\r
296 netConfResponse.setNetconfResponseXml(strxml);
\r
297 logger.debug("NetConf Response XML String for software inventory: " + strxml);
\r
298 return netConfResponse;
\r
301 private String getNetconfResponseXML(List<ParameterDTO> parameters, String swVersion,
\r
302 String hwVersion, boolean isCustomparameter) {
\r
303 if (null == parameters || parameters.isEmpty()) {
\r
307 Collections.sort(parameters, new SortByParamterName());
\r
309 String result = null;
\r
311 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
\r
312 docFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
\r
313 docFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
\r
314 DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
\r
315 Document doc = docBuilder.newDocument();
\r
317 Map<String, Element> parentNodeMap = new HashMap<>();
\r
318 Element dataNode = null; // root of all nodes
\r
320 for (ParameterDTO paramDto : parameters) {
\r
321 String paramName = metaDataUtil.getNetconfNameByTR69NameWithIndexes(paramDto.getParamName(),
\r
322 swVersion, hwVersion);
\r
323 if (paramName == null && isCustomparameter) {
\r
324 paramName = paramDto.getParamName();
\r
326 String paramValue = paramDto.getParamValue();
\r
327 if (paramValue == null || paramValue.trim().isEmpty()) {
\r
328 logger.debug("Values is empty so skipping this parameter.");
\r
331 StringTokenizer tokenizer = new StringTokenizer(paramName, ".");
\r
332 String parentNodeName = null;
\r
333 String parentNodeKey = null;
\r
334 Element parentNode = null;
\r
335 while (tokenizer.hasMoreElements()) {
\r
336 String nodeName = (String) tokenizer.nextElement();
\r
337 if (null == parentNodeName) { // construct first node or
\r
339 parentNodeName = nodeName;
\r
340 parentNodeKey = nodeName;
\r
341 // check if the node already exists in parentNodeMap
\r
342 parentNode = parentNodeMap.get(parentNodeKey);
\r
343 if (null == dataNode) {
\r
344 dataNode = parentNode;
\r
347 } else if (nodeName.matches(INDEX_REGEX)) { // construct
\r
351 // get parent tabular node from parent MAP
\r
352 StringBuilder bld = new StringBuilder(parentNodeKey);
\r
354 bld.append(nodeName);
\r
355 parentNodeKey = bld.toString();
\r
356 Element node = parentNodeMap.computeIfPresent(parentNodeKey, (k, v) -> v);
\r
358 // create a tabular parent node if doesn't exit in MAP
\r
359 if (null == node) {
\r
360 if (metaDataUtil.getMetaDataByNetConfName(parentNodeKey + ".", swVersion,
\r
363 .getMetaDataByNetConfName(parentNodeKey + ".", swVersion, hwVersion)
\r
364 .getURI() != null) {
\r
365 node = doc.createElementNS(metaDataUtil
\r
366 .getMetaDataByNetConfName(parentNodeKey + ".", swVersion, hwVersion).getURI(),
\r
369 node = doc.createElement(parentNodeName);
\r
371 parentNodeMap.put(parentNodeKey, node);
\r
373 // update current tabular parent node.
\r
374 if (null != parentNode)
\r
375 parentNode.appendChild(node);
\r
377 // prepare and add index node to tabular parent node
\r
378 Element indexNode = doc.createElement(INDEX_STR);
\r
379 indexNode.setTextContent(nodeName);
\r
380 node.appendChild(indexNode);
\r
382 parentNode = node; // move parent to child
\r
383 parentNodeName = nodeName;
\r
384 } else if (parentNodeName.matches(INDEX_REGEX)) { // move to
\r
392 StringBuilder bld = new StringBuilder(parentNodeName);
\r
394 bld.append(nodeName);
\r
395 parentNodeKey = bld.toString();
\r
396 parentNodeName = nodeName;
\r
398 // construct intermediate nodes
\r
399 Element node = parentNodeMap.get(parentNodeKey);
\r
400 if (null == node) {
\r
401 if (metaDataUtil.getMetaDataByNetConfName(parentNodeKey, swVersion, hwVersion) != null
\r
402 && metaDataUtil.getMetaDataByNetConfName(parentNodeKey, swVersion, hwVersion)
\r
403 .getURI() != null) {
\r
404 node = doc.createElementNS(metaDataUtil
\r
405 .getMetaDataByNetConfName(parentNodeKey, swVersion, hwVersion).getURI(),
\r
407 if (dataNode == null)
\r
410 node = doc.createElement(parentNodeName);
\r
412 parentNodeMap.put(parentNodeKey, node);
\r
413 if (null != parentNode)
\r
414 parentNode.appendChild(node);
\r
417 StringBuilder bld = new StringBuilder(parentNodeKey);
\r
419 bld.append(nodeName);
\r
420 parentNodeKey = bld.toString();
\r
421 parentNodeName = nodeName;
\r
425 // construct leaf node
\r
426 Element leafNode = doc.createElement(parentNodeName);
\r
427 leafNode.setTextContent(paramValue);
\r
428 if (null != parentNode)
\r
429 parentNode.appendChild(leafNode);
\r
432 if (null != dataNode) {
\r
433 result = NetconfToTr069MapperUtil.convertDocumentToString(dataNode);
\r
435 } catch (ParserConfigurationException pce) {
\r
436 logger.error("Exception : {}", pce.getMessage());
\r
442 public static String convertDocumentToString(Element element) {
\r
443 String strxml = null;
\r
445 TransformerFactory transformerFactory = TransformerFactory.newInstance();
\r
446 transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
\r
447 transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
\r
448 Transformer transformer = transformerFactory.newTransformer();
\r
449 DOMSource source = new DOMSource(element);
\r
450 StreamResult result = new StreamResult(new StringWriter());
\r
451 transformer.transform(source, result);
\r
452 strxml = result.getWriter().toString();
\r
453 } catch (Exception e) {
\r
454 logger.error("Error while converting Element to String {}", e.toString());
\r
456 logger.debug("Converted XML is : {} ", strxml);
\r
460 // TODO: Need to optimize the Node element logic for better performance
\r
461 private static Map<String, String> getParameterMapForNode(Node moRNode, int numberOfChilds) {
\r
462 Map<String, String> result = new HashMap<>();
\r
463 if (moRNode.getNodeType() == Node.ELEMENT_NODE) {
\r
464 NodeList childs = moRNode.getChildNodes();
\r
465 boolean hasChildElements = false;
\r
466 hasChildElements = checkMoreElements(result, childs, hasChildElements);
\r
467 if (!hasChildElements) {
\r
468 String moName = getMOName(moRNode);
\r
469 if (moName.equals("software-inventory")) {
\r
470 result.put("device.device-info.software-version", moRNode.getTextContent());
\r
471 result.put("device.device-info.product-class", moRNode.getTextContent());
\r
472 } else if (!moName.endsWith("." + INDEX_STR)) {
\r
473 result.put(moName, moRNode.getTextContent());
\r
474 } else if (numberOfChilds == 1) {
\r
475 result.put(moName, moRNode.getTextContent());
\r
483 private static boolean checkMoreElements(Map<String, String> result, NodeList childs,
\r
484 boolean hasChildElements) {
\r
485 if (childs.getLength() > 0) {
\r
487 for (int i = 0; i < childs.getLength(); i++) {
\r
488 Node cNode = childs.item(i);
\r
489 if (cNode != null && cNode.getNodeType() == Node.ELEMENT_NODE) {
\r
494 for (int i = 0; i < childs.getLength(); i++) {
\r
495 Node cNode = childs.item(i);
\r
496 if (cNode != null && cNode.getNodeType() == Node.ELEMENT_NODE) {
\r
497 hasChildElements = true;
\r
498 Map<String, String> subResult = getParameterMapForNode(cNode, counter);
\r
499 result.putAll(subResult);
\r
503 return hasChildElements;
\r
506 private static String getMOName(Node moRNode) {
\r
507 String result = removeNS(moRNode.getNodeName());
\r
508 Node pNode = moRNode;
\r
510 pNode = pNode.getParentNode();
\r
511 if (pNode == null || pNode.getNodeType() != Node.ELEMENT_NODE
\r
512 || pNode.getNodeName().equals("edit-config") || pNode.getNodeName().equals("config")
\r
513 || pNode.getNodeName().equals("get-config") || pNode.getNodeName().equals("filter")
\r
514 || pNode.getNodeName().equals("get")) {
\r
517 String indexStr = getMOIndex(pNode);
\r
518 StringBuilder bld = new StringBuilder(removeNS(pNode.getNodeName()));
\r
520 if (indexStr == null) {
\r
521 bld.append(result);
\r
522 result = bld.toString();
\r
524 bld.append(indexStr);
\r
526 bld.append(result);
\r
527 result = bld.toString();
\r
533 private static Node getParameterDataNode(Document el, String docStart, String filterElement) {
\r
534 NodeList nodeList = el.getElementsByTagName(docStart);
\r
535 if (nodeList.getLength() > 0) {
\r
536 nodeList = nodeList.item(0).getChildNodes();
\r
537 for (int i = 0; i < nodeList.getLength(); i++) {
\r
538 Node node = nodeList.item(i);
\r
539 String nodeName = removeNS(node.getNodeName());
\r
540 if (nodeName.equals(filterElement)) {
\r
548 private static Node getDeviceDataNode(Element el, String filter) {
\r
550 NodeList nodeList = el.getElementsByTagName(filter);
\r
551 if (nodeList.getLength() > 0) {
\r
552 nodeList = nodeList.item(0).getChildNodes();
\r
553 for (int i = 0; i < nodeList.getLength(); i++) {
\r
554 Node node = nodeList.item(i);
\r
555 if (node.getNodeType() == Node.ELEMENT_NODE) {
\r
560 } catch (Exception e) {
\r
561 logger.error("exception occured while parsing the request xml {}", e.getMessage());
\r
566 private static String removeNS(String nodeName) {
\r
567 // remove name space
\r
568 int li = nodeName.lastIndexOf(':');
\r
569 nodeName = nodeName.substring(li + 1);
\r
573 private static String getMOIndex(Node pNode) {
\r
574 if (null != pNode) {
\r
575 NodeList nodeList = pNode.getChildNodes();
\r
576 for (int i = 0; i < nodeList.getLength(); i++) {
\r
577 Node childNode = nodeList.item(i);
\r
578 String nodeName = removeNS(childNode.getNodeName());
\r
579 if (nodeName.equalsIgnoreCase(INDEX_STR)) {
\r
580 return childNode.getTextContent();
\r
590 class SortByParamterName implements Comparator<ParameterDTO>, Serializable {
\r
591 private static final long serialVersionUID = 3010693349267067945L;
\r
593 public int compare(ParameterDTO a, ParameterDTO b) {
\r
594 return a.getParamName().compareTo(b.getParamName());
\r