diff options
Diffstat (limited to 'bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/MsoUtils.groovy')
-rw-r--r-- | bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/MsoUtils.groovy | 1895 |
1 files changed, 951 insertions, 944 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/MsoUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/MsoUtils.groovy index 6796fb1..a0256d3 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/MsoUtils.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/MsoUtils.groovy @@ -1,944 +1,951 @@ -/*- - * ============LICENSE_START======================================================= - * OPENECOMP - MSO - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.mso.bpmn.common.scripts - -import groovy.xml.XmlUtil - -import java.text.SimpleDateFormat - -import org.apache.commons.codec.binary.Base64 -import org.openecomp.mso.bpmn.core.BPMNLogger -import org.openecomp.mso.bpmn.core.xml.XmlTool -import org.openecomp.mso.logger.MessageEnum -import org.openecomp.mso.logger.MsoLogger -import org.openecomp.mso.utils.CryptoUtils -import org.w3c.dom.Element - -class MsoUtils { - def initializeEndPoints(execution){ - // use this placeholder to initialize end points, if called independently, this need to be set - execution.setVariable("AAIEndPoint","http://localhost:28080/SoapUIMocks") - } - def getNodeText(xmlInput,element){ - def rtn=null - if(xmlInput!=null){ - def xml= new XmlSlurper().parseText(xmlInput) - rtn= xml.'**'.find{node->node.name()==element}.text() - } - return rtn - } - def getMultNodes(xmlInput, element){ - def nodes=null - if(xmlInput!=null){ - def xml= new XmlSlurper().parseText(xmlInput) - nodes = xml.'**'.findAll{ node-> node.name() == element }*.text() - } - return nodes - } - def getNodeText1(xmlInput,element){ - def rtn=null - if(xmlInput!=null){ - def xml= new XmlSlurper().parseText(xmlInput) - rtn= xml.'**'.find{node->node.name()==element} - if (rtn != null){ - rtn=rtn.text() - } - } - return rtn - } - def getNodeXml(xmlInput,element){ - return getNodeXml(xmlInput, element, true) - } - def getNodeXml(xmlInput,element,incPreamble){ - def fxml= new XmlSlurper().parseText(xmlInput) - def nodeToSerialize = fxml.'**'.find {it.name() == element} - if(nodeToSerialize==null){ - return "" - } - def nodeAsText = XmlUtil.serialize(nodeToSerialize) - if (!incPreamble) { - nodeAsText = removeXmlPreamble(nodeAsText) - } - return nodeAsText - } - def nodeExists(xmlInput,element){ - try { - def fxml= new XmlSlurper().parseText(xmlInput) - def nodeToSerialize = fxml.'**'.find {it.name() == element} - return nodeToSerialize!=null - } catch(Exception e) { - return false - } - } - - - /***** Utilities when using XmlParser *****/ - - /** - * Convert a Node into a String by deserializing it and formatting it. - * - * @param node Node to be converted. - * @return the Node as a String. - */ - def String nodeToString(Node node) { - def String nodeAsString = groovy.xml.XmlUtil.serialize(node) - nodeAsString = removeXmlPreamble(nodeAsString) - return formatXml(nodeAsString) - } - - /** - * Get the specified child Node of the specified parent. If there are - * multiple children of the same name, only the first one is returned. - * If there are no children with the specified name, 'null' is returned. - * - * @param parent Parent Node in which to find a child. - * @param childNodeName Name of the child Node to get. - * @return the (first) child Node with the specified name or 'null' - * if a child Node with the specified name does not exist. - */ - def Node getChildNode(Node parent, String childNodeName) { - def NodeList nodeList = getIdenticalChildren(parent, childNodeName) - if (nodeList.size() == 0) { - return null - } else { - return nodeList.get(0) - } - } - - /** - * Get the textual value of the specified child Node of the specified parent. - * If there are no children with the specified name, 'null' is returned. - * - * @param parent Parent Node in which to find a child. - * @param childNodeName Name of the child Node whose value to get. - * @return the textual value of child Node with the specified name or 'null' - * if a child Node with the specified name does not exist. - */ - def String getChildNodeText(Node parent, String childNodeName) { - def Node childNode = getChildNode(parent, childNodeName) - if (childNode == null) { - return null - } else { - return childNode.text() - } - } - - /** - * Get all of the child nodes from the specified parent that have the - * specified name. The returned NodeList could be empty. - * - * @param parent Parent Node in which to find children. - * @param childNodeName Name of the children to get. - * @return a NodeList of all the children from the parent with the specified - * name. The list could be empty. - */ - def NodeList getIdenticalChildren(Node parent, String childNodeName) { - return (NodeList) parent.get(childNodeName) - } - - /***** End of Utilities when using XmlParser *****/ - - - /** these are covered under the common function above**/ - def getSubscriberName(xmlInput,element){ - def rtn=null - if(xmlInput!=null){ - def xml= new XmlSlurper().parseText(xmlInput) - rtn= xml.'**'.find{node->node.name()==element}.text() - } - return rtn - } - def getTenantInformation(xmlInput,element){ - def xml= new XmlSlurper().parseText(xmlInput) - def nodeToSerialize = xml.'**'.find {it.name() == 'service-information'} - def nodeAsText = XmlUtil.serialize(nodeToSerialize) - return nodeAsText - } - def getServiceInstanceId(xmlInput,element){ - def xml= new XmlSlurper().parseText(xmlInput) - return ( xml.'**'.find{node->node.name()==element}.text() ) - } - //for aai tenant url - def searchResourceLink(xmlInput, resourceType){ - def fxml= new XmlSlurper().parseText(xmlInput) - def element = fxml.'**'.find {it.'resource-type' == resourceType} - return (element == null) ? null : element.'resource-link'.text() - } - - def searchMetaData(xmlInput, searchName, searchValue){ - def fxml= new XmlSlurper().parseText(xmlInput) - def ret = fxml.'**'.find {it.metaname.text() == searchName && it.metaval.text() == searchValue} - if(ret != null){ - return ret.parent().parent() - } - return ret - } - - def searchMetaDataNode(fxml, searchName, searchValue){ - def ret = fxml.'**'.find {it.metaname.text() == searchName && it.metaval.text() == searchValue} - if(ret != null){ - return ret.parent().parent() - } - return ret - } - - // for Trinity L3 add/delete bonding - def getPBGFList(isDebugLogEnabled, xmlInput){ - xmlInput = xmlInput.replaceAll("&", "&") - xmlInput = xmlInput.replaceAll("<", "<") - xmlInput = xmlInput.replaceAll(">", ">") - log("DEBUG", "getPBGFList: xmlInput " + xmlInput,isDebugLogEnabled) - ArrayList myNodes = new ArrayList() - if(nodeExists(xmlInput,"nbnc-response-information")){ - def respInfo=getNodeXml(xmlInput,"nbnc-response-information", false) - if(respInfo!=null){ - def fxml= new XmlSlurper().parseText(respInfo) - fxml.'virtual-datacenter-list'.each { vdc -> - //we only want to add two BGF per VDC, BGF1 and BGF2 - def routerList = vdc.'router-list'.first() - routerList.each{ myList -> - def physNodes = myList.'**'.findAll {it.'border-element-tangibility'.text() =~ /PHYSICAL/} - def nodeToAdd - physNodes.each{ - if(nodeToAdd==null){ - nodeToAdd = it - }else{ - def beid = nodeToAdd.'border-element-id'.text() + - " " + nodeToAdd.'border-element-type'.text() + - " and " + - it.'border-element-id'.text() + - " " + it.'border-element-type'.text() - def mytag = nodeToAdd.'border-element-id' - mytag[0].replaceBody(beid) - } - } - def mytag = nodeToAdd.'vlan-id' - def ind = mytag.text().indexOf('.') - if(ind >= 0){ - def vlan = mytag.text().substring(0,ind) - mytag[0].replaceBody(vlan) - } - myNodes.add(XmlUtil.serialize(nodeToAdd)) - } - - } - } - - return myNodes - }else{ - return null - } - } - - def getPBGFList(xmlInput){ - getPBGFList("false", xmlInput) - } - - def String decodeXML(xml) { - def String decodedXml = xml.replaceAll("&", "&") - decodedXml = decodedXml.replaceAll("<", "<") - decodedXml = decodedXml.replaceAll(">", ">") - } - - def getMetaVal(node, name){ - try{ - return node.'**'.find {it.metaname.text() == name}.metaval.text() - }catch(Exception e){ - return null - } - } - def getRelationshipVal(node, name){ - try{ - return node.'**'.find {it.'relationship-key'.text() == name}.'relationship-value'.text() - }catch(Exception e){ - return null - } - } - - - def log(logmode,logtxt,isDebugLogEnabled="false"){ - MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); - if ("INFO"==logmode) { - msoLogger.info(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, logtxt); - } else if ("WARN"==logmode) { - msoLogger.warn (MessageEnum.BPMN_GENERAL_WARNING, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, logtxt); - } else if ("ERROR"==logmode) { - msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, logtxt); - - } else { - BPMNLogger.debug(isDebugLogEnabled, logtxt); - } - } - - def logContext(requestId, serviceInstanceId){ - MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); - msoLogger.setLogContext(requestId, serviceInstanceId); - } - - def logMetrics(elapsedTime, logtxt){ - MsoLogger metricsLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); - - metricsLogger.recordMetricEvent (elapsedTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, - logtxt, "BPMN", MsoLogger.getServiceName(), null); - } - - def logAudit(logtxt){ - MsoLogger auditLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); - long startTime = System.currentTimeMillis(); - - auditLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, logtxt); - } - - // headers: header - name-value - def getHeaderNameValue(xmlInput, nameAttribute){ - def rtn=null - if(xmlInput!=null){ - def xml= new XmlSlurper().parseText(xmlInput) - rtn= xml.'**'.find {header->header.'@name'.text() == nameAttribute}.'@value' - } - return rtn - } - - /** - * Gets the children of the specified element. - */ - public String getChildNodes(xmlInput, element) { - def xml= new XmlSlurper().parseText(xmlInput) - def thisElement = xml.'**'.find {it.name() == element} - StringBuilder out = new StringBuilder() - if (thisElement != null) { - thisElement.children().each() { - String nodeAsText = removeXmlPreamble(XmlUtil.serialize(it)) - if (out.length() > 0) { - out.append(System.lineSeparator()) - } - out.append(nodeAsText) - } - } - return out.toString(); - } - - /** - * Encodes a value so it can be used inside an XML text element. - * @param s the string to encode - * @return the encoded string - */ - public String xmlEncode(Object value) { - return XmlTool.encode(value) - } - - /** - * Encodes a value so it can be used inside an XML attribute. - * @param s the string to encode - * @return the encoded string - */ - public String xmlEncodeAttr(Object value) { - return XmlTool.encodeAttr(value) - } - - /** - * Decodes XML entities in a string value - * @param value a value with embedded XML entities - * @return the decoded string - */ - public String xmlDecode(Object value) { - return XmlTool.decode(value) - } - - /** - * Removes the preamble, if present, from an XML document. - * Also, for historical reasons, this also trims leading and trailing - * whitespace from the resulting document. TODO: remove the trimming - * and fix unit tests that depend on EXACT xml format. - * @param xml the XML document - * @return a possibly modified document - */ - public String removeXmlPreamble(def xml) { - if (xml == null) { - return null - } - - return XmlTool.removePreamble(xml).trim() - } - - /** - * Removes namespaces and namespace declarations from an XML document. - * @param xml the XML document - * @return a possibly modified document - */ - public String removeXmlNamespaces(def xml) { - return XmlTool.removeNamespaces(xml); - } - - /** - * Use formatXml instead. Note: this method inserts an XML preamble. - */ - @Deprecated - def formatXML(xmlInput) { - def parseXml = null - def formatXml = null - if (xmlInput !=null) { - parseXml = new XmlParser().parseText(xmlInput) - formatXml = XmlUtil.serialize(parseXml) - } - } - - /** - * Reformats an XML document. The result will not contain an XML preamble - * or a trailing newline. - * @param xml the XML document - * @return a reformatted document - */ - public String formatXml(def xml) { - return XmlTool.normalize(xml); - } - - // build single elements - def buildElements(xmlInput, elementList, parentName) { - String var = "" - def xmlBuild = "" - if (parentName != "") { - xmlBuild += "<tns2:"+parentName+">" - } - if (xmlInput != null) { - for (element in elementList) { - def xml= new XmlSlurper().parseText(xmlInput) - var = xml.'**'.find {it.name() == element} - if (var != null) { - xmlBuild += "<tns2:"+element+">"+var.toString()+"</tns2:"+element+">" - } - } - } - if (parentName != "") { - xmlBuild += "</tns2:"+parentName+">" - } - return xmlBuild - } - - // build the Unbounded elements - def buildElementsUnbounded(xmlInput, elementList, parentName) { - def varParents = "" - def var = "" - def xmlBuildUnbounded = "" - if (xmlInput != null) { - def xml= new XmlSlurper().parseText(xmlInput) - varParents = xml.'**'.findAll {it.name() == parentName} - //println " Unbounded ${parentName} - varParent.Size() - " + varParents.size() - for (i in 0..varParents.size()-1) { - if (parentName != "") { - xmlBuildUnbounded += "<tns2:"+parentName+">" - } - for (element in elementList) { - var = varParents[i].'*'.find {it.name() == element} - if (var != null) { - xmlBuildUnbounded += "<tns2:"+element+">"+var.toString()+"</tns2:"+element+">" - //println " i = " + i + ", element: " + element + " = " + var.toString() - } - } - if (parentName != "") { - xmlBuildUnbounded += "</tns2:"+parentName+">" - } - } - } - return xmlBuildUnbounded - } - - // Build l2-homing-information - def buildL2HomingInformation(xmlInput) { - def elementsL2HomingList = ["evc-name", "topology", "preferred-aic-clli"] - def rebuildL2Home = '' - if (xmlInput != null) { - rebuildL2Home = buildElements(xmlInput, elementsL2HomingList, "l2-homing-information") - } - return rebuildL2Home - } - - // Build internet-evc-access-information - def buildInternetEvcAccessInformation(xmlInput) { - def elementsInternetEvcAccessInformationList = ["internet-evc-speed-value", "internet-evc-speed-units", "ip-version"] - def rebuildInternetEvcAccess = '' - if (xmlInput != null) { - rebuildInternetEvcAccess = buildElements(xmlInput, elementsInternetEvcAccessInformationList, "internet-evc-access-information") - } - return rebuildInternetEvcAccess - } - - // Build ucpe-vms-service-information - def buildUcpeVmsServiceInformation(xmlInput) { - def rebuildUcpeVmsServiceInformation = '' - if (xmlInput != null) { - def ucpeVmsServiceInformation = getNodeXml(xmlInput, "ucpe-vms-service-information").drop(38).trim() - rebuildUcpeVmsServiceInformation = "<tns2:ucpe-vms-service-information>" - // transport-service-information - rebuildUcpeVmsServiceInformation += "<tns2:transport-service-information>" - def transportServiceInformation = getNodeXml(ucpeVmsServiceInformation, "transport-service-information").drop(38).trim() - def elementsTransportServiceInformationList = ["transport-service-type"] - rebuildUcpeVmsServiceInformation += buildElements(transportServiceInformation, elementsTransportServiceInformationList, "") - try { // optional - def accessCircuitInfoList = ["access-circuit-id", "dual-mode"] - rebuildUcpeVmsServiceInformation += buildElementsUnbounded(transportServiceInformation, accessCircuitInfoList, "access-circuit-info") - } catch (Exception e) { - log("ERROR", " Optional - Exception ACCESS-CIRCUIT-INFO - 'access-circuit-info' ") - } - rebuildUcpeVmsServiceInformation += "</tns2:transport-service-information>" - // ucpe-information - def elementsUcpeInformationList = ["ucpe-host-name", "ucpe-activation-code", "out-of-band-management-modem" ] - rebuildUcpeVmsServiceInformation += buildElements(ucpeVmsServiceInformation, elementsUcpeInformationList, "ucpe-information") - // vnf-list - rebuildUcpeVmsServiceInformation += "<tns2:vnf-list>" - def vnfListList = ["vnf-instance-id", "vnf-sequence-number", "vnf-type", "vnf-vendor", "vnf-model", "vnf-id", "prov-status", "operational-state", "orchestration-status", "equipment-role" ] - rebuildUcpeVmsServiceInformation += buildElementsUnbounded(ucpeVmsServiceInformation, vnfListList, "vnf-information") - rebuildUcpeVmsServiceInformation += "</tns2:vnf-list>" - rebuildUcpeVmsServiceInformation += "</tns2:ucpe-vms-service-information>" - } - log("DEBUG", " rebuildUcpeVmsServiceInformation - " + rebuildUcpeVmsServiceInformation) - return rebuildUcpeVmsServiceInformation - } - - // Build internet-service-change-details - def buildInternetServiceChangeDetails(xmlInput) { - def rebuildInternetServiceChangeDetails = "" - if (xmlInput != null) { - try { // optional - def internetServiceChangeDetails = getNodeXml(xmlInput, "internet-service-change-details").drop(38).trim() - rebuildInternetServiceChangeDetails = "<tns:internet-service-change-details>" - rebuildInternetServiceChangeDetails += buildElements(internetServiceChangeDetails, ["internet-evc-speed-value"], "") - rebuildInternetServiceChangeDetails += buildElements(internetServiceChangeDetails, ["internet-evc-speed-units"], "") - try { // optional - def tProvidedV4LanPublicPrefixesChangesList = ["request-index", "v4-next-hop-address", "v4-lan-public-prefix", "v4-lan-public-prefix-length"] - rebuildInternetServiceChangeDetails += buildElementsUnbounded(internetServiceChangeDetails, tProvidedV4LanPublicPrefixesChangesList, "t-provided-v4-lan-public-prefixes") - } catch (Exception e) { - log("ERROR"," Optional - Exception in INTERNET-SERVICE-CHANGE-DETAILS 't-provided-v4-lan-public-prefixes ") - } - try { // optional - def tProvidedV6LanPublicPrefixesChangesList = ["request-index", "v6-next-hop-address", "v6-lan-public-prefix", "v6-lan-public-prefix-length"] - rebuildInternetServiceChangeDetails += buildElementsUnbounded(internetServiceChangeDetails, tProvidedV6LanPublicPrefixesChangesList, "t-provided-v6-lan-public-prefixes") - } catch (Exception e) { - log("ERROR"," Optional - Exception INTERNET-SERVICE-CHANGE-DETAILS 't-provided-v6-lan-public-prefixes ") - } - rebuildInternetServiceChangeDetails += "</tns:internet-service-change-details>" - } catch (Exception e) { - log("ERROR", " Optional - Exception INTERNET-SERVICE-CHANGE-DETAILS 'internet-service-change-details' ") - } - } - return rebuildInternetServiceChangeDetails - } - - // Build vr-lan - def buildVrLan(xmlInput) { - - def rebuildVrLan = '' - if (xmlInput != null) { - - rebuildVrLan = "<tns2:vr-lan>" - def vrLan = getNodeXml(xmlInput, "vr-lan").drop(38).trim() - rebuildVrLan += buildElements(vrLan, ["routing-protocol"], "") - - // vr-lan-interface - def rebuildVrLanInterface = "<tns2:vr-lan-interface>" - def vrLanInterface = getNodeXml(vrLan, "vr-lan-interface").drop(38).trim() - rebuildVrLanInterface += buildVrLanInterfacePartial(vrLanInterface) - - // dhcp - def dhcp = getNodeXml(vrLan, "dhcp").drop(38).trim() - def rebuildDhcp = buildDhcp(dhcp) - rebuildVrLanInterface += rebuildDhcp - - // pat - def pat = getNodeXml(vrLan, "pat").drop(38).trim() - def rebuildPat = buildPat(pat) - rebuildVrLanInterface += rebuildPat - - // nat - def rebuildNat = "" - try { // optional - def nat = getNodeXml(vrLan, "nat").drop(38).trim() - rebuildNat = buildNat(nat) - } catch (Exception e) { - log("ERROR", " Optional - Exception 'nat' ") - } - rebuildVrLanInterface += rebuildNat - - // firewall-lite - def firewallLite = getNodeXml(vrLan, "firewall-lite").drop(38).trim() - def rebuildFirewallLite = buildFirewallLite(firewallLite) - rebuildVrLanInterface += rebuildFirewallLite - - // static-routes - def rebuildStaticRoutes = "" - try { // optional - def staticRoutes = getNodeXml(vrLan, "static-routes").drop(38).trim() - rebuildStaticRoutes = buildStaticRoutes(staticRoutes) - } catch (Exception e) { - log("ERROR", " Optional - Exception 'static-routes' ") - } - rebuildVrLanInterface += rebuildStaticRoutes - - rebuildVrLan += rebuildVrLanInterface - rebuildVrLan += "</tns2:vr-lan-interface>" - rebuildVrLan += "</tns2:vr-lan>" - - } - log("DEBUG", " rebuildVrLan - " + rebuildVrLan) - return rebuildVrLan - } - - // Build vr-lan-interface - def buildVrLanInterfacePartial(xmlInput) { - def rebuildingVrLanInterface = '' - if (xmlInput != null) { - def vrLanInterfaceList = ["vr-designation", "v4-vr-lan-prefix", "v4-vr-lan-address", "v4-vr-lan-prefix-length", "v6-vr-lan-prefix", "v6-vr-lan-address", "v6-vr-lan-prefix-length", "v4-vce-loopback-address", "v6-vce-wan-address"] - rebuildingVrLanInterface += buildElements(xmlInput, vrLanInterfaceList, "") - rebuildingVrLanInterface += "<tns2:v4-public-lan-prefixes>" - try { // optional - def tProvidedV4LanPublicPrefixes = getNodeXml(xmlInput, "v4-public-lan-prefixes").drop(38).trim() - def tProvidedV4LanPublicPrefixesList = ["request-index", "v4-next-hop-address", "v4-lan-public-prefix", "v4-lan-public-prefix-length" ] - rebuildingVrLanInterface += buildElementsUnbounded(xmlInput, tProvidedV4LanPublicPrefixesList, "t-provided-v4-lan-public-prefixes") - } catch (Exception ex) { - log("ERROR", " Optional - Exception VR-LAN INTERFACE 'v4-public-lan-prefixes' ") - } - rebuildingVrLanInterface += "</tns2:v4-public-lan-prefixes>" - rebuildingVrLanInterface += "<tns2:v6-public-lan-prefixes>" - try { // optional - def tProvidedV6LanPublicPrefixes = getNodeXml(xmlInput, "v6-public-lan-prefixes").drop(38).trim() - def tProvidedV6LanPublicPrefixesList = ["request-index", "v6-next-hop-address", "v6-lan-public-prefix", "v6-lan-public-prefix-length" ] - rebuildingVrLanInterface += buildElementsUnbounded(xmlInput, tProvidedV6LanPublicPrefixesList, "t-provided-v6-lan-public-prefixes") - } catch (Exception e) { - log("ERROR", " Optional - Exception VR-LAN INTERFACE 'v6-public-lan-prefixes' ") - } - rebuildingVrLanInterface += "</tns2:v6-public-lan-prefixes>" - } - log("DEBUG", " rebuildingVrLanInterface - " + rebuildingVrLanInterface) - return rebuildingVrLanInterface - } - - // Build dhcp - def buildDhcp(xmlInput) { - def rebuildingDhcp = '' - if (xmlInput != null) { - def dhcpData = new XmlSlurper().parseText(xmlInput) - rebuildingDhcp = "<tns2:dhcp>" - def dhcpList1 = ["v4-dhcp-server-enabled", "v6-dhcp-server-enabled", "use-v4-default-pool", "v4-dhcp-default-pool-prefix", "v4-dhcp-default-pool-prefix-length"] - rebuildingDhcp += buildElements(xmlInput, dhcpList1, "") - try { // optional - def excludedV4DhcpAddressesFromDefaultPoolList = ["excluded-v4-address"] - rebuildingDhcp += buildElementsUnbounded(xmlInput, excludedV4DhcpAddressesFromDefaultPoolList, "excluded-v4-dhcp-addresses-from-default-pool") - } catch (Exception e) { - log("ERROR", " Optional - Exception DHCP 'excluded-v4-dhcp-addresses-from-default-pool' ") - } - try { // optional - def v4DhcpPools = dhcpData.'**'.findAll {it.name() == "v4-dhcp-pools"} - def v4DhcpPoolsSize = v4DhcpPools.size() - // println " v4DhcpPoolsSize = " + v4DhcpPools.size() - for (i in 0..v4DhcpPoolsSize-1) { - def v4DhcpPool = v4DhcpPools[i] - def v4DhcpPoolXml = XmlUtil.serialize(v4DhcpPool) - rebuildingDhcp += "<tns2:v4-dhcp-pools>" - def v4DhcpPoolsList1 = ["v4-dhcp-pool-prefix", "v4-dhcp-pool-prefix-length" ] - rebuildingDhcp += buildElements(v4DhcpPoolXml, v4DhcpPoolsList1, "") - try { // optional - def excludedV4AddressesList = ["excluded-v4-address"] - rebuildingDhcp += buildElementsUnbounded(v4DhcpPoolXml, excludedV4AddressesList, "excluded-v4-addresses") - } catch (Exception e) { - log("ERROR", " Optional - Exception DHCP 'excluded-v4-addresses' ") - } - def v4DhcpPoolsList2 = ["v4-dhcp-relay-gateway-address", "v4-dhcp-relay-next-hop-address"] - rebuildingDhcp += buildElements(v4DhcpPoolXml, v4DhcpPoolsList2, "") - rebuildingDhcp += "</tns2:v4-dhcp-pools>" - } - } catch (Exception e) { - log("ERROR"," Optional - Exception DHCP 'v4-dhcp-pools' ") - } - def dhcpList2 = ["use-v6-default-pool", "v6-dhcp-default-pool-prefix", "v6-dhcp-default-pool-prefix-length"] - rebuildingDhcp += buildElements(xmlInput, dhcpList2, "") - try { // optional - def excludedV6DhcpAddressesFromDdefaultPoolList = ["excluded-v6-address"] - rebuildingDhcp += buildElementsUnbounded(xmlInput, excludedV6DhcpAddressesFromDdefaultPoolList, "excluded-v6-dhcp-addresses-from-default-pool") - } catch (Exception e) { - log("ERROR", " Optional - Exception DHCP 'excluded-v6-dhcp-addresses-from-default-pool' ") - } - try { // optional - def v6DhcpPools = dhcpData.'**'.findAll {it.name() == "v6-dhcp-pools"} - def v6DhcpPoolsSize = v6DhcpPools.size() - //println " v6DhcpPoolsSize = " + v6DhcpPools.size() - for (i in 0..v6DhcpPoolsSize-1) { - def v6DhcpPool = v6DhcpPools[i] - def v6DhcpPoolXml = XmlUtil.serialize(v6DhcpPool) - rebuildingDhcp += "<tns2:v6-dhcp-pools>" - def v6DhcpPoolsList1 = ["v6-dhcp-pool-prefix", "v6-dhcp-pool-prefix-length"] - rebuildingDhcp += buildElements(v6DhcpPoolXml, v6DhcpPoolsList1, "") - try { // optional - def excludedV6AddressesList = ["excluded-v6-address"] - rebuildingDhcp += buildElementsUnbounded(v6DhcpPoolXml, excludedV6AddressesList, "excluded-v6-addresses") - } catch (Exception e) { - log("ERROR", " Optional - Exception DHCP 'excluded-v6-addresses' ") - } - def v6DhcpPoolsList2 = ["v6-dhcp-relay-gateway-address", "v6-dhcp-relay-next-hop-address"] - rebuildingDhcp += buildElements(v6DhcpPoolXml, v6DhcpPoolsList2, "") - rebuildingDhcp += "</tns2:v6-dhcp-pools>" - } - } catch (Exception e) { - log("ERROR", " Optional - Exception DHCP 'v6-dhcp-pools' ") - } - rebuildingDhcp += "</tns2:dhcp>" - } - log("DEBUG", " rebuildingDhcp - " + rebuildingDhcp) - return rebuildingDhcp - } - - // Build pat - def buildPat(xmlInput) { - def rebuildingPat = '' - if (xmlInput != null) { - rebuildingPat = "<tns2:pat>" - def patList = ["v4-pat-enabled", "use-v4-default-pool", "v4-pat-default-pool-prefix", "v4-pat-default-pool-prefix-length"] - rebuildingPat += buildElements(xmlInput, patList, "") - try { // optional - def v4PatPools = getNodeXml(xmlInput, "v4-pat-pools").drop(38).trim() - def v4PatPoolsList = ["v4-pat-pool-prefix", "v4-pat-pool-prefix-length", "v4-pat-pool-next-hop-address"] - rebuildingPat += buildElementsUnbounded(xmlInput, v4PatPoolsList, "v4-pat-pools") - } catch (Exception e) { - log("ERROR", " Optional - Exception 'v4-pat-pool-next-hop-address' ") - } - rebuildingPat += "</tns2:pat>" - } - log("DEBUG", " rebuildingPat - " + rebuildingPat) - return rebuildingPat - } - - // Build nat - def buildNat(xmlInput) { - def rebuildingNat = '' - if (xmlInput != null) { - rebuildingNat = "<tns2:nat>" - rebuildingNat += buildElements(xmlInput, ["v4-nat-enabled"], "") - try { // optional - def v4NatMappingEntries = getNodeXml(xmlInput, "v4-nat-mapping-entries").drop(38).trim() - def v4NatMappingEntriesList = ["v4-nat-internal", "v4-nat-next-hop-address", "v4-nat-external"] - rebuildingNat += buildElementsUnbounded(xmlInput, v4NatMappingEntriesList, "v4-nat-mapping-entries") - } catch (Exception e) { - log("ERROR", " Optional - Exception 'v4-nat-external' ") - } - rebuildingNat += "</tns2:nat>" - } - log("DEBUG", " rebuildingNat - " + rebuildingNat) - return rebuildingNat - } - - // Build firewall-lite - def buildFirewallLite(xmlInput) { - def rebuildingFirewallLite = '' - - if (xmlInput != null) { - - def firewallLiteData = new XmlSlurper().parseText(xmlInput) - rebuildingFirewallLite = "<tns2:firewall-lite>" - def firewallLiteList = ["stateful-firewall-lite-v4-enabled", "stateful-firewall-lite-v6-enabled"] - rebuildingFirewallLite += buildElements(xmlInput, firewallLiteList, "") - - try { // optional - def v4FirewallPacketFilters = firewallLiteData.'**'.findAll {it.name() == "v4-firewall-packet-filters"} - def v4FirewallPacketFiltersSize = v4FirewallPacketFilters.size() - //println " v4FirewallPacketFiltersSize = " + v4FirewallPacketFilters.size() - for (i in 0..v4FirewallPacketFiltersSize-1) { - def v4FirewallPacketFilter = v4FirewallPacketFilters[i] - def v4FirewallPacketFilterXml = XmlUtil.serialize(v4FirewallPacketFilter) - rebuildingFirewallLite += "<tns2:v4-firewall-packet-filters>" - def v4FirewallPacketFiltersList = ["v4-firewall-prefix", "v4-firewall-prefix-length", "allow-icmp-ping"] - rebuildingFirewallLite += buildElements(v4FirewallPacketFilterXml, v4FirewallPacketFiltersList, "") - try { // optional - def udpPortsList = ["port-number"] - rebuildingFirewallLite += buildElementsUnbounded(v4FirewallPacketFilterXml, udpPortsList, "udp-ports") - } catch (Exception e) { - log("ERROR", " Optional - Exception FIREWALL-LITE v4 'udp-ports' ") - } - try { // optional - def tcpPortsList = ["port-number"] - rebuildingFirewallLite += buildElementsUnbounded(v4FirewallPacketFilterXml, tcpPortsList, "tcp-ports") - } catch (Exception e) { - log("ERROR", " Optional - Exception FIREWALL-LITE v4 'tcp-ports' ") - } - rebuildingFirewallLite += "</tns2:v4-firewall-packet-filters>" - } - } catch (Exception e) { - log("ERROR", " Optional - Exception FIREWALL-LITE 'v4-firewall-packet-filters' ") - } - - try { // optional - def v6FirewallPacketFilters = firewallLiteData.'**'.findAll {it.name() == "v6-firewall-packet-filters"} - def v6FirewallPacketFiltersSize = v6FirewallPacketFilters.size() - //println " v6FirewallPacketFiltersSize = " + v6FirewallPacketFilters.size() - for (i in 0..v6FirewallPacketFiltersSize-1) { - def v6FirewallPacketFilter = v6FirewallPacketFilters[i] - def v6FirewallPacketFilterXml = XmlUtil.serialize(v6FirewallPacketFilter) - rebuildingFirewallLite += "<tns2:v6-firewall-packet-filters>" - def v6FirewallPacketFiltersList = ["v6-firewall-prefix", "v6-firewall-prefix-length", "allow-icmp-ping"] - rebuildingFirewallLite += buildElements(v6FirewallPacketFilterXml, v6FirewallPacketFiltersList, "") - try { // optional - def udpPortsList = ["port-number"] - rebuildingFirewallLite += buildElementsUnbounded(v6FirewallPacketFilterXml, udpPortsList, "udp-ports") - } catch (Exception e) { - log("ERROR", " Optional - Exception FIREWALL-LITE v6 'udp-ports' ") - } - try { // optional - def tcpPortsList = ["port-number"] - rebuildingFirewallLite += buildElementsUnbounded(v6FirewallPacketFilterXml, tcpPortsList, "tcp-ports") - } catch (Exception e) { - log("ERROR", " Optional - Exception FIREWALL-LITE v6 'tcp-ports' ") - } - rebuildingFirewallLite += "</tns2:v6-firewall-packet-filters>" - } - } catch (Exception e) { - log("ERROR", " Optional - Exception FIREWALL-LITE 'v6-firewall-packet-filters' ") - } - rebuildingFirewallLite+= "</tns2:firewall-lite>" - } - log("DEBUG", " rebuildingFirewallLite - " + rebuildingFirewallLite) - return rebuildingFirewallLite - } - - def buildStaticRoutes(xmlInput) { - def rebuildingStaticRoutes = '' - if (xmlInput != null) { - rebuildingStaticRoutes = "<tns2:static-routes>" - def v4StaticRouteslist = ["v4-static-route-prefix","v4-static-route-prefix-length", "v4-next-hop-address"] - rebuildingStaticRoutes += buildElementsUnbounded(xmlInput, v4StaticRouteslist, "v4-static-routes") - def v6StaticRouteslist = ["v6-static-route-prefix","v6-static-route-prefix-length", "v6-next-hop-address"] - rebuildingStaticRoutes += buildElementsUnbounded(xmlInput, v6StaticRouteslist, "v6-static-routes") - rebuildingStaticRoutes += "</tns2:static-routes>" - } - log("DEBUG", " rebuildingStaticRoutes - " + rebuildingStaticRoutes) - return rebuildingStaticRoutes - } - - public String generateCurrentTimeInUtc(){ - final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - sdf.setTimeZone(TimeZone.getTimeZone("UTC")); - final String utcTime = sdf.format(new Date()); - return utcTime; - } - - public String generateCurrentTimeInGMT(){ - final SimpleDateFormat sdf = new SimpleDateFormat("E, d MMM yyyy h:m:s z"); - sdf.setTimeZone(TimeZone.getTimeZone("GMT")); - final String utcTime = sdf.format(new Date()); - return utcTime; - } - - - /** - * @param encryptedAuth: encrypted credentials from urn properties - * @param msoKey: key to use to decrypt from urn properties - * @return base 64 encoded basic auth credentials - */ - def getBasicAuth(encryptedAuth, msoKey){ - try { - def auth = decrypt(encryptedAuth, msoKey) - byte[] encoded = Base64.encodeBase64(auth.getBytes()) - String encodedString = new String(encoded) - encodedString = "Basic " + encodedString - return encodedString - } catch (Exception ex) { - log("ERROR", "Unable to encode basic auth") - throw ex - } - } - - def encrypt(toEncrypt, msokey){ - try { - String result = CryptoUtils.encrypt(toEncrypt, msokey); - return result - } - catch (Exception e) { - log("ERROR", "Failed to encrypt credentials") - } - } - - def decrypt(toDecrypt, msokey){ - try { - String result = CryptoUtils.decrypt(toDecrypt, msokey); - return result - } - catch (Exception e) { - log("ERROR", "Failed to decrypt credentials") - throw e - } - } - - /** - * Return URL with qualified host name (if any) or urn mapping - * @param String url from urn mapping - * @return String url with qualified host name - */ - public String getQualifiedHostNameForCallback(String urnCallbackUrl) { - def callbackUrlToUse = urnCallbackUrl - try{ - //swap host name with qualified host name from the jboss properties - def qualifiedHostName = System.getProperty("jboss.qualified.host.name") - if(qualifiedHostName!=null){ - log("DEBUG", "qualifiedHostName:\n" + qualifiedHostName) - callbackUrlToUse = callbackUrlToUse.replaceAll("(http://)(.*)(:28080*)", {orig, first, torepl, last -> "${first}${qualifiedHostName}${last}"}) - } - }catch(Exception e){ - log("DEBUG", "unable to grab qualified host name, using what's in urn properties for callbackurl. Exception was: " + e.printStackTrace()) - } - return callbackUrlToUse - - } - - /** - * Retrieves text context of the element if the element exists, returns empty string otherwise - * @param com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl element to parse - * param String tagName tagName - * @return String text content of the element - */ - public String getElementText(Element element, String tagName) { - String text = "" - org.w3c.dom.NodeList nodeList = element.getElementsByTagNameNS("*", tagName) - if (nodeList != null && nodeList.length > 0) { - text = nodeList.item(0).getTextContent() - } - return text - } - - /** - * - * Find the lowest unused module-index value in a given xml - */ - public String getLowestUnusedIndex(String xml) { - if (xml == null || xml.isEmpty()) { - return "0" - } - def moduleIndexList = getMultNodes(xml, "module-index") - if (moduleIndexList == null || moduleIndexList.size() == 0) { - return "0" - } - def sortedModuleIndexList = moduleIndexList.sort { a, b -> a.compareTo b } - - for (i in 0..sortedModuleIndexList.size()-1) { - if (Integer.parseInt(sortedModuleIndexList[i]) != i) { - return i.toString() - } - } - return sortedModuleIndexList.size().toString() - } - -} +/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - MSO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.mso.bpmn.common.scripts
+
+import groovy.xml.XmlUtil
+
+import java.text.SimpleDateFormat
+
+import org.apache.commons.codec.binary.Base64
+import org.openecomp.mso.bpmn.core.BPMNLogger
+import org.openecomp.mso.bpmn.core.xml.XmlTool
+import org.openecomp.mso.logger.MessageEnum
+import org.openecomp.mso.logger.MsoLogger
+import org.openecomp.mso.utils.CryptoUtils
+import org.w3c.dom.Element
+
+class MsoUtils {
+ def initializeEndPoints(execution){
+ // use this placeholder to initialize end points, if called independently, this need to be set
+ execution.setVariable("AAIEndPoint","http://localhost:28080/SoapUIMocks")
+ }
+
+ /**
+ * Use getNodeText1 Instead!
+ */
+ @Deprecated
+ def getNodeText(xmlInput,element){
+ def rtn=null
+ if(xmlInput!=null){
+ def xml= new XmlSlurper().parseText(xmlInput)
+ rtn= xml.'**'.find{node->node.name()==element}.text()
+ }
+ return rtn
+ }
+ def getMultNodes(xmlInput, element){
+ def nodes=null
+ if(xmlInput!=null){
+ def xml= new XmlSlurper().parseText(xmlInput)
+ nodes = xml.'**'.findAll{ node-> node.name() == element }*.text()
+ }
+ return nodes
+ }
+ def getNodeText1(xmlInput,element){
+ def rtn=null
+ if(xmlInput!=null){
+ def xml= new XmlSlurper().parseText(xmlInput)
+ rtn= xml.'**'.find{node->node.name()==element}
+ if (rtn != null){
+ rtn=rtn.text()
+ }
+ }
+ return rtn
+ }
+ def getNodeXml(xmlInput,element){
+ return getNodeXml(xmlInput, element, true)
+ }
+ def getNodeXml(xmlInput,element,incPreamble){
+ def fxml= new XmlSlurper().parseText(xmlInput)
+ def nodeToSerialize = fxml.'**'.find {it.name() == element}
+ if(nodeToSerialize==null){
+ return ""
+ }
+ def nodeAsText = XmlUtil.serialize(nodeToSerialize)
+ if (!incPreamble) {
+ nodeAsText = removeXmlPreamble(nodeAsText)
+ }
+ return nodeAsText
+ }
+ def nodeExists(xmlInput,element){
+ try {
+ def fxml= new XmlSlurper().parseText(xmlInput)
+ def nodeToSerialize = fxml.'**'.find {it.name() == element}
+ return nodeToSerialize!=null
+ } catch(Exception e) {
+ return false
+ }
+ }
+
+
+ /***** Utilities when using XmlParser *****/
+
+ /**
+ * Convert a Node into a String by deserializing it and formatting it.
+ *
+ * @param node Node to be converted.
+ * @return the Node as a String.
+ */
+ def String nodeToString(Node node) {
+ def String nodeAsString = groovy.xml.XmlUtil.serialize(node)
+ nodeAsString = removeXmlPreamble(nodeAsString)
+ return formatXml(nodeAsString)
+ }
+
+ /**
+ * Get the specified child Node of the specified parent. If there are
+ * multiple children of the same name, only the first one is returned.
+ * If there are no children with the specified name, 'null' is returned.
+ *
+ * @param parent Parent Node in which to find a child.
+ * @param childNodeName Name of the child Node to get.
+ * @return the (first) child Node with the specified name or 'null'
+ * if a child Node with the specified name does not exist.
+ */
+ def Node getChildNode(Node parent, String childNodeName) {
+ def NodeList nodeList = getIdenticalChildren(parent, childNodeName)
+ if (nodeList.size() == 0) {
+ return null
+ } else {
+ return nodeList.get(0)
+ }
+ }
+
+ /**
+ * Get the textual value of the specified child Node of the specified parent.
+ * If there are no children with the specified name, 'null' is returned.
+ *
+ * @param parent Parent Node in which to find a child.
+ * @param childNodeName Name of the child Node whose value to get.
+ * @return the textual value of child Node with the specified name or 'null'
+ * if a child Node with the specified name does not exist.
+ */
+ def String getChildNodeText(Node parent, String childNodeName) {
+ def Node childNode = getChildNode(parent, childNodeName)
+ if (childNode == null) {
+ return null
+ } else {
+ return childNode.text()
+ }
+ }
+
+ /**
+ * Get all of the child nodes from the specified parent that have the
+ * specified name. The returned NodeList could be empty.
+ *
+ * @param parent Parent Node in which to find children.
+ * @param childNodeName Name of the children to get.
+ * @return a NodeList of all the children from the parent with the specified
+ * name. The list could be empty.
+ */
+ def NodeList getIdenticalChildren(Node parent, String childNodeName) {
+ return (NodeList) parent.get(childNodeName)
+ }
+
+ /***** End of Utilities when using XmlParser *****/
+
+
+ /** these are covered under the common function above**/
+ def getSubscriberName(xmlInput,element){
+ def rtn=null
+ if(xmlInput!=null){
+ def xml= new XmlSlurper().parseText(xmlInput)
+ rtn= xml.'**'.find{node->node.name()==element}.text()
+ }
+ return rtn
+ }
+ def getTenantInformation(xmlInput,element){
+ def xml= new XmlSlurper().parseText(xmlInput)
+ def nodeToSerialize = xml.'**'.find {it.name() == 'service-information'}
+ def nodeAsText = XmlUtil.serialize(nodeToSerialize)
+ return nodeAsText
+ }
+ def getServiceInstanceId(xmlInput,element){
+ def xml= new XmlSlurper().parseText(xmlInput)
+ return ( xml.'**'.find{node->node.name()==element}.text() )
+ }
+ //for aai tenant url
+ def searchResourceLink(xmlInput, resourceType){
+ def fxml= new XmlSlurper().parseText(xmlInput)
+ def element = fxml.'**'.find {it.'resource-type' == resourceType}
+ return (element == null) ? null : element.'resource-link'.text()
+ }
+
+ def searchMetaData(xmlInput, searchName, searchValue){
+ def fxml= new XmlSlurper().parseText(xmlInput)
+ def ret = fxml.'**'.find {it.metaname.text() == searchName && it.metaval.text() == searchValue}
+ if(ret != null){
+ return ret.parent().parent()
+ }
+ return ret
+ }
+
+ def searchMetaDataNode(fxml, searchName, searchValue){
+ def ret = fxml.'**'.find {it.metaname.text() == searchName && it.metaval.text() == searchValue}
+ if(ret != null){
+ return ret.parent().parent()
+ }
+ return ret
+ }
+
+ // for Trinity L3 add/delete bonding
+ def getPBGFList(isDebugLogEnabled, xmlInput){
+ xmlInput = xmlInput.replaceAll("&", "&")
+ xmlInput = xmlInput.replaceAll("<", "<")
+ xmlInput = xmlInput.replaceAll(">", ">")
+ log("DEBUG", "getPBGFList: xmlInput " + xmlInput,isDebugLogEnabled)
+ ArrayList myNodes = new ArrayList()
+ if(nodeExists(xmlInput,"nbnc-response-information")){
+ def respInfo=getNodeXml(xmlInput,"nbnc-response-information", false)
+ if(respInfo!=null){
+ def fxml= new XmlSlurper().parseText(respInfo)
+ fxml.'virtual-datacenter-list'.each { vdc ->
+ //we only want to add two BGF per VDC, BGF1 and BGF2
+ def routerList = vdc.'router-list'.first()
+ routerList.each{ myList ->
+ def physNodes = myList.'**'.findAll {it.'border-element-tangibility'.text() =~ /PHYSICAL/}
+ def nodeToAdd
+ physNodes.each{
+ if(nodeToAdd==null){
+ nodeToAdd = it
+ }else{
+ def beid = nodeToAdd.'border-element-id'.text() +
+ " " + nodeToAdd.'border-element-type'.text() +
+ " and " +
+ it.'border-element-id'.text() +
+ " " + it.'border-element-type'.text()
+ def mytag = nodeToAdd.'border-element-id'
+ mytag[0].replaceBody(beid)
+ }
+ }
+ def mytag = nodeToAdd.'vlan-id'
+ def ind = mytag.text().indexOf('.')
+ if(ind >= 0){
+ def vlan = mytag.text().substring(0,ind)
+ mytag[0].replaceBody(vlan)
+ }
+ myNodes.add(XmlUtil.serialize(nodeToAdd))
+ }
+
+ }
+ }
+
+ return myNodes
+ }else{
+ return null
+ }
+ }
+
+ def getPBGFList(xmlInput){
+ getPBGFList("false", xmlInput)
+ }
+
+ def String decodeXML(xml) {
+ def String decodedXml = xml.replaceAll("&", "&")
+ decodedXml = decodedXml.replaceAll("<", "<")
+ decodedXml = decodedXml.replaceAll(">", ">")
+ }
+
+ def getMetaVal(node, name){
+ try{
+ return node.'**'.find {it.metaname.text() == name}.metaval.text()
+ }catch(Exception e){
+ return null
+ }
+ }
+ def getRelationshipVal(node, name){
+ try{
+ return node.'**'.find {it.'relationship-key'.text() == name}.'relationship-value'.text()
+ }catch(Exception e){
+ return null
+ }
+ }
+
+
+ def log(logmode,logtxt,isDebugLogEnabled="false"){
+ MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+ if ("INFO"==logmode) {
+ msoLogger.info(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, logtxt);
+ } else if ("WARN"==logmode) {
+ // to see the warning text displayed in the log entry, the text must also be passed as arg0 (2nd argument) to invoke the correct MsoLogger warn() method
+ msoLogger.warn (MessageEnum.BPMN_GENERAL_WARNING, logtxt, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, logtxt);
+ } else if ("ERROR"==logmode) {
+ // to see the error text displayed in the log entry, the text must also be passed as arg0 (2nd argument) to invoke the correct MsoLogger error() method
+ msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, logtxt, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, logtxt);
+
+ } else {
+ BPMNLogger.debug(isDebugLogEnabled, logtxt);
+ }
+ }
+
+ def logContext(requestId, serviceInstanceId){
+ MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+ msoLogger.setLogContext(requestId, serviceInstanceId);
+ }
+
+ def logMetrics(elapsedTime, logtxt){
+ MsoLogger metricsLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+
+ metricsLogger.recordMetricEvent (elapsedTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
+ logtxt, "BPMN", MsoLogger.getServiceName(), null);
+ }
+
+ def logAudit(logtxt){
+ MsoLogger auditLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
+ long startTime = System.currentTimeMillis();
+
+ auditLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, logtxt);
+ }
+
+ // headers: header - name-value
+ def getHeaderNameValue(xmlInput, nameAttribute){
+ def rtn=null
+ if(xmlInput!=null){
+ def xml= new XmlSlurper().parseText(xmlInput)
+ rtn= xml.'**'.find {header->header.'@name'.text() == nameAttribute}.'@value'
+ }
+ return rtn
+ }
+
+ /**
+ * Gets the children of the specified element.
+ */
+ public String getChildNodes(xmlInput, element) {
+ def xml= new XmlSlurper().parseText(xmlInput)
+ def thisElement = xml.'**'.find {it.name() == element}
+ StringBuilder out = new StringBuilder()
+ if (thisElement != null) {
+ thisElement.children().each() {
+ String nodeAsText = removeXmlPreamble(XmlUtil.serialize(it))
+ if (out.length() > 0) {
+ out.append(System.lineSeparator())
+ }
+ out.append(nodeAsText)
+ }
+ }
+ return out.toString();
+ }
+
+ /**
+ * Encodes a value so it can be used inside an XML text element.
+ * @param s the string to encode
+ * @return the encoded string
+ */
+ public String xmlEncode(Object value) {
+ return XmlTool.encode(value)
+ }
+
+ /**
+ * Encodes a value so it can be used inside an XML attribute.
+ * @param s the string to encode
+ * @return the encoded string
+ */
+ public String xmlEncodeAttr(Object value) {
+ return XmlTool.encodeAttr(value)
+ }
+
+ /**
+ * Decodes XML entities in a string value
+ * @param value a value with embedded XML entities
+ * @return the decoded string
+ */
+ public String xmlDecode(Object value) {
+ return XmlTool.decode(value)
+ }
+
+ /**
+ * Removes the preamble, if present, from an XML document.
+ * Also, for historical reasons, this also trims leading and trailing
+ * whitespace from the resulting document. TODO: remove the trimming
+ * and fix unit tests that depend on EXACT xml format.
+ * @param xml the XML document
+ * @return a possibly modified document
+ */
+ public String removeXmlPreamble(def xml) {
+ if (xml == null) {
+ return null
+ }
+
+ return XmlTool.removePreamble(xml).trim()
+ }
+
+ /**
+ * Removes namespaces and namespace declarations from an XML document.
+ * @param xml the XML document
+ * @return a possibly modified document
+ */
+ public String removeXmlNamespaces(def xml) {
+ return XmlTool.removeNamespaces(xml);
+ }
+
+ /**
+ * Use formatXml instead. Note: this method inserts an XML preamble.
+ */
+ @Deprecated
+ def formatXML(xmlInput) {
+ def parseXml = null
+ def formatXml = null
+ if (xmlInput !=null) {
+ parseXml = new XmlParser().parseText(xmlInput)
+ formatXml = XmlUtil.serialize(parseXml)
+ }
+ }
+
+ /**
+ * Reformats an XML document. The result will not contain an XML preamble
+ * or a trailing newline.
+ * @param xml the XML document
+ * @return a reformatted document
+ */
+ public String formatXml(def xml) {
+ return XmlTool.normalize(xml);
+ }
+
+ // build single elements
+ def buildElements(xmlInput, elementList, parentName) {
+ String var = ""
+ def xmlBuild = ""
+ if (parentName != "") {
+ xmlBuild += "<tns2:"+parentName+">"
+ }
+ if (xmlInput != null) {
+ for (element in elementList) {
+ def xml= new XmlSlurper().parseText(xmlInput)
+ var = xml.'**'.find {it.name() == element}
+ if (var != null) {
+ xmlBuild += "<tns2:"+element+">"+var.toString()+"</tns2:"+element+">"
+ }
+ }
+ }
+ if (parentName != "") {
+ xmlBuild += "</tns2:"+parentName+">"
+ }
+ return xmlBuild
+ }
+
+ // build the Unbounded elements
+ def buildElementsUnbounded(xmlInput, elementList, parentName) {
+ def varParents = ""
+ def var = ""
+ def xmlBuildUnbounded = ""
+ if (xmlInput != null) {
+ def xml= new XmlSlurper().parseText(xmlInput)
+ varParents = xml.'**'.findAll {it.name() == parentName}
+ //println " Unbounded ${parentName} - varParent.Size() - " + varParents.size()
+ for (i in 0..varParents.size()-1) {
+ if (parentName != "") {
+ xmlBuildUnbounded += "<tns2:"+parentName+">"
+ }
+ for (element in elementList) {
+ var = varParents[i].'*'.find {it.name() == element}
+ if (var != null) {
+ xmlBuildUnbounded += "<tns2:"+element+">"+var.toString()+"</tns2:"+element+">"
+ //println " i = " + i + ", element: " + element + " = " + var.toString()
+ }
+ }
+ if (parentName != "") {
+ xmlBuildUnbounded += "</tns2:"+parentName+">"
+ }
+ }
+ }
+ return xmlBuildUnbounded
+ }
+
+ // Build l2-homing-information
+ def buildL2HomingInformation(xmlInput) {
+ def elementsL2HomingList = ["evc-name", "topology", "preferred-aic-clli"]
+ def rebuildL2Home = ''
+ if (xmlInput != null) {
+ rebuildL2Home = buildElements(xmlInput, elementsL2HomingList, "l2-homing-information")
+ }
+ return rebuildL2Home
+ }
+
+ // Build internet-evc-access-information
+ def buildInternetEvcAccessInformation(xmlInput) {
+ def elementsInternetEvcAccessInformationList = ["internet-evc-speed-value", "internet-evc-speed-units", "ip-version"]
+ def rebuildInternetEvcAccess = ''
+ if (xmlInput != null) {
+ rebuildInternetEvcAccess = buildElements(xmlInput, elementsInternetEvcAccessInformationList, "internet-evc-access-information")
+ }
+ return rebuildInternetEvcAccess
+ }
+
+ // Build ucpe-vms-service-information
+ def buildUcpeVmsServiceInformation(xmlInput) {
+ def rebuildUcpeVmsServiceInformation = ''
+ if (xmlInput != null) {
+ def ucpeVmsServiceInformation = getNodeXml(xmlInput, "ucpe-vms-service-information").drop(38).trim()
+ rebuildUcpeVmsServiceInformation = "<tns2:ucpe-vms-service-information>"
+ // transport-service-information
+ rebuildUcpeVmsServiceInformation += "<tns2:transport-service-information>"
+ def transportServiceInformation = getNodeXml(ucpeVmsServiceInformation, "transport-service-information").drop(38).trim()
+ def elementsTransportServiceInformationList = ["transport-service-type"]
+ rebuildUcpeVmsServiceInformation += buildElements(transportServiceInformation, elementsTransportServiceInformationList, "")
+ try { // optional
+ def accessCircuitInfoList = ["access-circuit-id", "dual-mode"]
+ rebuildUcpeVmsServiceInformation += buildElementsUnbounded(transportServiceInformation, accessCircuitInfoList, "access-circuit-info")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception ACCESS-CIRCUIT-INFO - 'access-circuit-info' ")
+ }
+ rebuildUcpeVmsServiceInformation += "</tns2:transport-service-information>"
+ // ucpe-information
+ def elementsUcpeInformationList = ["ucpe-host-name", "ucpe-activation-code", "out-of-band-management-modem" ]
+ rebuildUcpeVmsServiceInformation += buildElements(ucpeVmsServiceInformation, elementsUcpeInformationList, "ucpe-information")
+ // vnf-list
+ rebuildUcpeVmsServiceInformation += "<tns2:vnf-list>"
+ def vnfListList = ["vnf-instance-id", "vnf-sequence-number", "vnf-type", "vnf-vendor", "vnf-model", "vnf-id", "prov-status", "operational-state", "orchestration-status", "equipment-role" ]
+ rebuildUcpeVmsServiceInformation += buildElementsUnbounded(ucpeVmsServiceInformation, vnfListList, "vnf-information")
+ rebuildUcpeVmsServiceInformation += "</tns2:vnf-list>"
+ rebuildUcpeVmsServiceInformation += "</tns2:ucpe-vms-service-information>"
+ }
+ log("DEBUG", " rebuildUcpeVmsServiceInformation - " + rebuildUcpeVmsServiceInformation)
+ return rebuildUcpeVmsServiceInformation
+ }
+
+ // Build internet-service-change-details
+ def buildInternetServiceChangeDetails(xmlInput) {
+ def rebuildInternetServiceChangeDetails = ""
+ if (xmlInput != null) {
+ try { // optional
+ def internetServiceChangeDetails = getNodeXml(xmlInput, "internet-service-change-details").drop(38).trim()
+ rebuildInternetServiceChangeDetails = "<tns:internet-service-change-details>"
+ rebuildInternetServiceChangeDetails += buildElements(internetServiceChangeDetails, ["internet-evc-speed-value"], "")
+ rebuildInternetServiceChangeDetails += buildElements(internetServiceChangeDetails, ["internet-evc-speed-units"], "")
+ try { // optional
+ def tProvidedV4LanPublicPrefixesChangesList = ["request-index", "v4-next-hop-address", "v4-lan-public-prefix", "v4-lan-public-prefix-length"]
+ rebuildInternetServiceChangeDetails += buildElementsUnbounded(internetServiceChangeDetails, tProvidedV4LanPublicPrefixesChangesList, "t-provided-v4-lan-public-prefixes")
+ } catch (Exception e) {
+ log("ERROR"," Optional - Exception in INTERNET-SERVICE-CHANGE-DETAILS 't-provided-v4-lan-public-prefixes ")
+ }
+ try { // optional
+ def tProvidedV6LanPublicPrefixesChangesList = ["request-index", "v6-next-hop-address", "v6-lan-public-prefix", "v6-lan-public-prefix-length"]
+ rebuildInternetServiceChangeDetails += buildElementsUnbounded(internetServiceChangeDetails, tProvidedV6LanPublicPrefixesChangesList, "t-provided-v6-lan-public-prefixes")
+ } catch (Exception e) {
+ log("ERROR"," Optional - Exception INTERNET-SERVICE-CHANGE-DETAILS 't-provided-v6-lan-public-prefixes ")
+ }
+ rebuildInternetServiceChangeDetails += "</tns:internet-service-change-details>"
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception INTERNET-SERVICE-CHANGE-DETAILS 'internet-service-change-details' ")
+ }
+ }
+ return rebuildInternetServiceChangeDetails
+ }
+
+ // Build vr-lan
+ def buildVrLan(xmlInput) {
+
+ def rebuildVrLan = ''
+ if (xmlInput != null) {
+
+ rebuildVrLan = "<tns2:vr-lan>"
+ def vrLan = getNodeXml(xmlInput, "vr-lan").drop(38).trim()
+ rebuildVrLan += buildElements(vrLan, ["routing-protocol"], "")
+
+ // vr-lan-interface
+ def rebuildVrLanInterface = "<tns2:vr-lan-interface>"
+ def vrLanInterface = getNodeXml(vrLan, "vr-lan-interface").drop(38).trim()
+ rebuildVrLanInterface += buildVrLanInterfacePartial(vrLanInterface)
+
+ // dhcp
+ def dhcp = getNodeXml(vrLan, "dhcp").drop(38).trim()
+ def rebuildDhcp = buildDhcp(dhcp)
+ rebuildVrLanInterface += rebuildDhcp
+
+ // pat
+ def pat = getNodeXml(vrLan, "pat").drop(38).trim()
+ def rebuildPat = buildPat(pat)
+ rebuildVrLanInterface += rebuildPat
+
+ // nat
+ def rebuildNat = ""
+ try { // optional
+ def nat = getNodeXml(vrLan, "nat").drop(38).trim()
+ rebuildNat = buildNat(nat)
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception 'nat' ")
+ }
+ rebuildVrLanInterface += rebuildNat
+
+ // firewall-lite
+ def firewallLite = getNodeXml(vrLan, "firewall-lite").drop(38).trim()
+ def rebuildFirewallLite = buildFirewallLite(firewallLite)
+ rebuildVrLanInterface += rebuildFirewallLite
+
+ // static-routes
+ def rebuildStaticRoutes = ""
+ try { // optional
+ def staticRoutes = getNodeXml(vrLan, "static-routes").drop(38).trim()
+ rebuildStaticRoutes = buildStaticRoutes(staticRoutes)
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception 'static-routes' ")
+ }
+ rebuildVrLanInterface += rebuildStaticRoutes
+
+ rebuildVrLan += rebuildVrLanInterface
+ rebuildVrLan += "</tns2:vr-lan-interface>"
+ rebuildVrLan += "</tns2:vr-lan>"
+
+ }
+ log("DEBUG", " rebuildVrLan - " + rebuildVrLan)
+ return rebuildVrLan
+ }
+
+ // Build vr-lan-interface
+ def buildVrLanInterfacePartial(xmlInput) {
+ def rebuildingVrLanInterface = ''
+ if (xmlInput != null) {
+ def vrLanInterfaceList = ["vr-designation", "v4-vr-lan-prefix", "v4-vr-lan-address", "v4-vr-lan-prefix-length", "v6-vr-lan-prefix", "v6-vr-lan-address", "v6-vr-lan-prefix-length", "v4-vce-loopback-address", "v6-vce-wan-address"]
+ rebuildingVrLanInterface += buildElements(xmlInput, vrLanInterfaceList, "")
+ rebuildingVrLanInterface += "<tns2:v4-public-lan-prefixes>"
+ try { // optional
+ def tProvidedV4LanPublicPrefixes = getNodeXml(xmlInput, "v4-public-lan-prefixes").drop(38).trim()
+ def tProvidedV4LanPublicPrefixesList = ["request-index", "v4-next-hop-address", "v4-lan-public-prefix", "v4-lan-public-prefix-length" ]
+ rebuildingVrLanInterface += buildElementsUnbounded(xmlInput, tProvidedV4LanPublicPrefixesList, "t-provided-v4-lan-public-prefixes")
+ } catch (Exception ex) {
+ log("ERROR", " Optional - Exception VR-LAN INTERFACE 'v4-public-lan-prefixes' ")
+ }
+ rebuildingVrLanInterface += "</tns2:v4-public-lan-prefixes>"
+ rebuildingVrLanInterface += "<tns2:v6-public-lan-prefixes>"
+ try { // optional
+ def tProvidedV6LanPublicPrefixes = getNodeXml(xmlInput, "v6-public-lan-prefixes").drop(38).trim()
+ def tProvidedV6LanPublicPrefixesList = ["request-index", "v6-next-hop-address", "v6-lan-public-prefix", "v6-lan-public-prefix-length" ]
+ rebuildingVrLanInterface += buildElementsUnbounded(xmlInput, tProvidedV6LanPublicPrefixesList, "t-provided-v6-lan-public-prefixes")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception VR-LAN INTERFACE 'v6-public-lan-prefixes' ")
+ }
+ rebuildingVrLanInterface += "</tns2:v6-public-lan-prefixes>"
+ }
+ log("DEBUG", " rebuildingVrLanInterface - " + rebuildingVrLanInterface)
+ return rebuildingVrLanInterface
+ }
+
+ // Build dhcp
+ def buildDhcp(xmlInput) {
+ def rebuildingDhcp = ''
+ if (xmlInput != null) {
+ def dhcpData = new XmlSlurper().parseText(xmlInput)
+ rebuildingDhcp = "<tns2:dhcp>"
+ def dhcpList1 = ["v4-dhcp-server-enabled", "v6-dhcp-server-enabled", "use-v4-default-pool", "v4-dhcp-default-pool-prefix", "v4-dhcp-default-pool-prefix-length"]
+ rebuildingDhcp += buildElements(xmlInput, dhcpList1, "")
+ try { // optional
+ def excludedV4DhcpAddressesFromDefaultPoolList = ["excluded-v4-address"]
+ rebuildingDhcp += buildElementsUnbounded(xmlInput, excludedV4DhcpAddressesFromDefaultPoolList, "excluded-v4-dhcp-addresses-from-default-pool")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception DHCP 'excluded-v4-dhcp-addresses-from-default-pool' ")
+ }
+ try { // optional
+ def v4DhcpPools = dhcpData.'**'.findAll {it.name() == "v4-dhcp-pools"}
+ def v4DhcpPoolsSize = v4DhcpPools.size()
+ // println " v4DhcpPoolsSize = " + v4DhcpPools.size()
+ for (i in 0..v4DhcpPoolsSize-1) {
+ def v4DhcpPool = v4DhcpPools[i]
+ def v4DhcpPoolXml = XmlUtil.serialize(v4DhcpPool)
+ rebuildingDhcp += "<tns2:v4-dhcp-pools>"
+ def v4DhcpPoolsList1 = ["v4-dhcp-pool-prefix", "v4-dhcp-pool-prefix-length" ]
+ rebuildingDhcp += buildElements(v4DhcpPoolXml, v4DhcpPoolsList1, "")
+ try { // optional
+ def excludedV4AddressesList = ["excluded-v4-address"]
+ rebuildingDhcp += buildElementsUnbounded(v4DhcpPoolXml, excludedV4AddressesList, "excluded-v4-addresses")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception DHCP 'excluded-v4-addresses' ")
+ }
+ def v4DhcpPoolsList2 = ["v4-dhcp-relay-gateway-address", "v4-dhcp-relay-next-hop-address"]
+ rebuildingDhcp += buildElements(v4DhcpPoolXml, v4DhcpPoolsList2, "")
+ rebuildingDhcp += "</tns2:v4-dhcp-pools>"
+ }
+ } catch (Exception e) {
+ log("ERROR"," Optional - Exception DHCP 'v4-dhcp-pools' ")
+ }
+ def dhcpList2 = ["use-v6-default-pool", "v6-dhcp-default-pool-prefix", "v6-dhcp-default-pool-prefix-length"]
+ rebuildingDhcp += buildElements(xmlInput, dhcpList2, "")
+ try { // optional
+ def excludedV6DhcpAddressesFromDdefaultPoolList = ["excluded-v6-address"]
+ rebuildingDhcp += buildElementsUnbounded(xmlInput, excludedV6DhcpAddressesFromDdefaultPoolList, "excluded-v6-dhcp-addresses-from-default-pool")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception DHCP 'excluded-v6-dhcp-addresses-from-default-pool' ")
+ }
+ try { // optional
+ def v6DhcpPools = dhcpData.'**'.findAll {it.name() == "v6-dhcp-pools"}
+ def v6DhcpPoolsSize = v6DhcpPools.size()
+ //println " v6DhcpPoolsSize = " + v6DhcpPools.size()
+ for (i in 0..v6DhcpPoolsSize-1) {
+ def v6DhcpPool = v6DhcpPools[i]
+ def v6DhcpPoolXml = XmlUtil.serialize(v6DhcpPool)
+ rebuildingDhcp += "<tns2:v6-dhcp-pools>"
+ def v6DhcpPoolsList1 = ["v6-dhcp-pool-prefix", "v6-dhcp-pool-prefix-length"]
+ rebuildingDhcp += buildElements(v6DhcpPoolXml, v6DhcpPoolsList1, "")
+ try { // optional
+ def excludedV6AddressesList = ["excluded-v6-address"]
+ rebuildingDhcp += buildElementsUnbounded(v6DhcpPoolXml, excludedV6AddressesList, "excluded-v6-addresses")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception DHCP 'excluded-v6-addresses' ")
+ }
+ def v6DhcpPoolsList2 = ["v6-dhcp-relay-gateway-address", "v6-dhcp-relay-next-hop-address"]
+ rebuildingDhcp += buildElements(v6DhcpPoolXml, v6DhcpPoolsList2, "")
+ rebuildingDhcp += "</tns2:v6-dhcp-pools>"
+ }
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception DHCP 'v6-dhcp-pools' ")
+ }
+ rebuildingDhcp += "</tns2:dhcp>"
+ }
+ log("DEBUG", " rebuildingDhcp - " + rebuildingDhcp)
+ return rebuildingDhcp
+ }
+
+ // Build pat
+ def buildPat(xmlInput) {
+ def rebuildingPat = ''
+ if (xmlInput != null) {
+ rebuildingPat = "<tns2:pat>"
+ def patList = ["v4-pat-enabled", "use-v4-default-pool", "v4-pat-default-pool-prefix", "v4-pat-default-pool-prefix-length"]
+ rebuildingPat += buildElements(xmlInput, patList, "")
+ try { // optional
+ def v4PatPools = getNodeXml(xmlInput, "v4-pat-pools").drop(38).trim()
+ def v4PatPoolsList = ["v4-pat-pool-prefix", "v4-pat-pool-prefix-length", "v4-pat-pool-next-hop-address"]
+ rebuildingPat += buildElementsUnbounded(xmlInput, v4PatPoolsList, "v4-pat-pools")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception 'v4-pat-pool-next-hop-address' ")
+ }
+ rebuildingPat += "</tns2:pat>"
+ }
+ log("DEBUG", " rebuildingPat - " + rebuildingPat)
+ return rebuildingPat
+ }
+
+ // Build nat
+ def buildNat(xmlInput) {
+ def rebuildingNat = ''
+ if (xmlInput != null) {
+ rebuildingNat = "<tns2:nat>"
+ rebuildingNat += buildElements(xmlInput, ["v4-nat-enabled"], "")
+ try { // optional
+ def v4NatMappingEntries = getNodeXml(xmlInput, "v4-nat-mapping-entries").drop(38).trim()
+ def v4NatMappingEntriesList = ["v4-nat-internal", "v4-nat-next-hop-address", "v4-nat-external"]
+ rebuildingNat += buildElementsUnbounded(xmlInput, v4NatMappingEntriesList, "v4-nat-mapping-entries")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception 'v4-nat-external' ")
+ }
+ rebuildingNat += "</tns2:nat>"
+ }
+ log("DEBUG", " rebuildingNat - " + rebuildingNat)
+ return rebuildingNat
+ }
+
+ // Build firewall-lite
+ def buildFirewallLite(xmlInput) {
+ def rebuildingFirewallLite = ''
+
+ if (xmlInput != null) {
+
+ def firewallLiteData = new XmlSlurper().parseText(xmlInput)
+ rebuildingFirewallLite = "<tns2:firewall-lite>"
+ def firewallLiteList = ["stateful-firewall-lite-v4-enabled", "stateful-firewall-lite-v6-enabled"]
+ rebuildingFirewallLite += buildElements(xmlInput, firewallLiteList, "")
+
+ try { // optional
+ def v4FirewallPacketFilters = firewallLiteData.'**'.findAll {it.name() == "v4-firewall-packet-filters"}
+ def v4FirewallPacketFiltersSize = v4FirewallPacketFilters.size()
+ //println " v4FirewallPacketFiltersSize = " + v4FirewallPacketFilters.size()
+ for (i in 0..v4FirewallPacketFiltersSize-1) {
+ def v4FirewallPacketFilter = v4FirewallPacketFilters[i]
+ def v4FirewallPacketFilterXml = XmlUtil.serialize(v4FirewallPacketFilter)
+ rebuildingFirewallLite += "<tns2:v4-firewall-packet-filters>"
+ def v4FirewallPacketFiltersList = ["v4-firewall-prefix", "v4-firewall-prefix-length", "allow-icmp-ping"]
+ rebuildingFirewallLite += buildElements(v4FirewallPacketFilterXml, v4FirewallPacketFiltersList, "")
+ try { // optional
+ def udpPortsList = ["port-number"]
+ rebuildingFirewallLite += buildElementsUnbounded(v4FirewallPacketFilterXml, udpPortsList, "udp-ports")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception FIREWALL-LITE v4 'udp-ports' ")
+ }
+ try { // optional
+ def tcpPortsList = ["port-number"]
+ rebuildingFirewallLite += buildElementsUnbounded(v4FirewallPacketFilterXml, tcpPortsList, "tcp-ports")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception FIREWALL-LITE v4 'tcp-ports' ")
+ }
+ rebuildingFirewallLite += "</tns2:v4-firewall-packet-filters>"
+ }
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception FIREWALL-LITE 'v4-firewall-packet-filters' ")
+ }
+
+ try { // optional
+ def v6FirewallPacketFilters = firewallLiteData.'**'.findAll {it.name() == "v6-firewall-packet-filters"}
+ def v6FirewallPacketFiltersSize = v6FirewallPacketFilters.size()
+ //println " v6FirewallPacketFiltersSize = " + v6FirewallPacketFilters.size()
+ for (i in 0..v6FirewallPacketFiltersSize-1) {
+ def v6FirewallPacketFilter = v6FirewallPacketFilters[i]
+ def v6FirewallPacketFilterXml = XmlUtil.serialize(v6FirewallPacketFilter)
+ rebuildingFirewallLite += "<tns2:v6-firewall-packet-filters>"
+ def v6FirewallPacketFiltersList = ["v6-firewall-prefix", "v6-firewall-prefix-length", "allow-icmp-ping"]
+ rebuildingFirewallLite += buildElements(v6FirewallPacketFilterXml, v6FirewallPacketFiltersList, "")
+ try { // optional
+ def udpPortsList = ["port-number"]
+ rebuildingFirewallLite += buildElementsUnbounded(v6FirewallPacketFilterXml, udpPortsList, "udp-ports")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception FIREWALL-LITE v6 'udp-ports' ")
+ }
+ try { // optional
+ def tcpPortsList = ["port-number"]
+ rebuildingFirewallLite += buildElementsUnbounded(v6FirewallPacketFilterXml, tcpPortsList, "tcp-ports")
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception FIREWALL-LITE v6 'tcp-ports' ")
+ }
+ rebuildingFirewallLite += "</tns2:v6-firewall-packet-filters>"
+ }
+ } catch (Exception e) {
+ log("ERROR", " Optional - Exception FIREWALL-LITE 'v6-firewall-packet-filters' ")
+ }
+ rebuildingFirewallLite+= "</tns2:firewall-lite>"
+ }
+ log("DEBUG", " rebuildingFirewallLite - " + rebuildingFirewallLite)
+ return rebuildingFirewallLite
+ }
+
+ def buildStaticRoutes(xmlInput) {
+ def rebuildingStaticRoutes = ''
+ if (xmlInput != null) {
+ rebuildingStaticRoutes = "<tns2:static-routes>"
+ def v4StaticRouteslist = ["v4-static-route-prefix","v4-static-route-prefix-length", "v4-next-hop-address"]
+ rebuildingStaticRoutes += buildElementsUnbounded(xmlInput, v4StaticRouteslist, "v4-static-routes")
+ def v6StaticRouteslist = ["v6-static-route-prefix","v6-static-route-prefix-length", "v6-next-hop-address"]
+ rebuildingStaticRoutes += buildElementsUnbounded(xmlInput, v6StaticRouteslist, "v6-static-routes")
+ rebuildingStaticRoutes += "</tns2:static-routes>"
+ }
+ log("DEBUG", " rebuildingStaticRoutes - " + rebuildingStaticRoutes)
+ return rebuildingStaticRoutes
+ }
+
+ public String generateCurrentTimeInUtc(){
+ final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+ sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
+ final String utcTime = sdf.format(new Date());
+ return utcTime;
+ }
+
+ public String generateCurrentTimeInGMT(){
+ final SimpleDateFormat sdf = new SimpleDateFormat("E, d MMM yyyy h:m:s z");
+ sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
+ final String utcTime = sdf.format(new Date());
+ return utcTime;
+ }
+
+
+ /**
+ * @param encryptedAuth: encrypted credentials from urn properties
+ * @param msoKey: key to use to decrypt from urn properties
+ * @return base 64 encoded basic auth credentials
+ */
+ def getBasicAuth(encryptedAuth, msoKey){
+ try {
+ def auth = decrypt(encryptedAuth, msoKey)
+ byte[] encoded = Base64.encodeBase64(auth.getBytes())
+ String encodedString = new String(encoded)
+ encodedString = "Basic " + encodedString
+ return encodedString
+ } catch (Exception ex) {
+ log("ERROR", "Unable to encode basic auth")
+ throw ex
+ }
+ }
+
+ def encrypt(toEncrypt, msokey){
+ try {
+ String result = CryptoUtils.encrypt(toEncrypt, msokey);
+ return result
+ }
+ catch (Exception e) {
+ log("ERROR", "Failed to encrypt credentials")
+ }
+ }
+
+ def decrypt(toDecrypt, msokey){
+ try {
+ String result = CryptoUtils.decrypt(toDecrypt, msokey);
+ return result
+ }
+ catch (Exception e) {
+ log("ERROR", "Failed to decrypt credentials")
+ throw e
+ }
+ }
+
+ /**
+ * Return URL with qualified host name (if any) or urn mapping
+ * @param String url from urn mapping
+ * @return String url with qualified host name
+ */
+ public String getQualifiedHostNameForCallback(String urnCallbackUrl) {
+ def callbackUrlToUse = urnCallbackUrl
+ try{
+ //swap host name with qualified host name from the jboss properties
+ def qualifiedHostName = System.getProperty("jboss.qualified.host.name")
+ if(qualifiedHostName!=null){
+ log("DEBUG", "qualifiedHostName:\n" + qualifiedHostName)
+ callbackUrlToUse = callbackUrlToUse.replaceAll("(http://)(.*)(:28080*)", {orig, first, torepl, last -> "${first}${qualifiedHostName}${last}"})
+ }
+ }catch(Exception e){
+ log("DEBUG", "unable to grab qualified host name, using what's in urn properties for callbackurl. Exception was: " + e.printStackTrace())
+ }
+ return callbackUrlToUse
+
+ }
+
+ /**
+ * Retrieves text context of the element if the element exists, returns empty string otherwise
+ * @param com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl element to parse
+ * param String tagName tagName
+ * @return String text content of the element
+ */
+ public String getElementText(Element element, String tagName) {
+ String text = ""
+ org.w3c.dom.NodeList nodeList = element.getElementsByTagNameNS("*", tagName)
+ if (nodeList != null && nodeList.length > 0) {
+ text = nodeList.item(0).getTextContent()
+ }
+ return text
+ }
+
+ /**
+ *
+ * Find the lowest unused module-index value in a given xml
+ */
+ public String getLowestUnusedIndex(String xml) {
+ if (xml == null || xml.isEmpty()) {
+ return "0"
+ }
+ def moduleIndexList = getMultNodes(xml, "module-index")
+ if (moduleIndexList == null || moduleIndexList.size() == 0) {
+ return "0"
+ }
+ def sortedModuleIndexList = moduleIndexList.sort { a, b -> a.compareTo b }
+
+ for (i in 0..sortedModuleIndexList.size()-1) {
+ if (Integer.parseInt(sortedModuleIndexList[i]) != i) {
+ return i.toString()
+ }
+ }
+ return sortedModuleIndexList.size().toString()
+ }
+
+}
|