blob: d57ba0d72cc02bf4896b114335b3fad8c28051ec [file] [log] [blame]
function resetStatus(){
showMsg("","green");
}
function showMsg(msg,color){
$("#node-validate-result").html(msg);
$("#node-validate-result")
.css('color', '')
.css('color', color);
}
function getAttributeValue(xmlStr,attribute){
var attrVal=null;
try{
if(xmlStr != null){
var myRe = new RegExp(attribute + "[\s+]?=[\s+]?['\"]([^'\"]+)['\"]","m");
var myArray = myRe.exec(xmlStr);
if(myArray != null && myArray[1] != null){
attrVal=myArray[1];
}
}
}catch(err){
console.log(err);
}
return attrVal;
}
var resp = true;
var processedNode = "";
var errList=[];
var elementCount=0;
function processNode(xmlNode){
if(xmlNode == null) return;
if(xmlNode.nodeName != "parsererror" && xmlNode.nodeName != "#text"){
processedNode = xmlNode.nodeName;
}
//console.log("processedNode:" + processedNode);
switch(xmlNode.nodeType){
case 1:
elementCount++;
//ELEMENT_NODE
//console.log(xmlNode.nodeName);
//console.dir(xmlNode.nodeName);
if(xmlNode.nodeName == "parsererror"){
//var nearNode = xmlNode.previousSibling != null ?xmlNode.previousSibling.nodeName : xmlNode.parentNode.nodeName;
console.log("Error parsing xml after node " + processedNode);
var msg = "error parsing XML after element <" + processedNode + "> Element#" + elementCount;
errList.push(msg);
resp = false;
return;
}
processedNode = xmlNode.nodeName;
var attrs = xmlNode.attributes;
for(var i=0;i<attrs.length;i++){
//console.log("Attribute:" + attrs[i].nodeName);
//console.log("Value:" + attrs[i].value);
if(attrs[i].nodeName != "value" && attrs[i].value == ""){
var msg="";
/*
var prevSibling = xmlNode.previousSibling;
if(prevSibling != null && prevSibling != undefined){
msg = "element &lt;" + xmlNode.nodeName + "&gt; attribute '" + attrs[i].nodeName + "' is not set. Element#" + elementCount;
}else{
msg = "element &lt;" + xmlNode.nodeName + "&gt; attribute '" + attrs[i].nodeName + "' is not set. Element#" + elementCount;
}
*/
msg = "element &lt;" + xmlNode.nodeName + "&gt; attribute '" + attrs[i].nodeName + "' is not set. Element#" + elementCount;
errList.push(msg);
//console.log("element <" + xmlNode.nodeName + "> attribute '" + attrs[i].nodeName + "' is not set.Element#" + elementCount);
resp = false;
}
}
var childNodes = xmlNode.childNodes;
for(var k=0;k<childNodes.length;k++){
processNode(childNodes[k]);
}
break;
case 2:
//ATTRIBUTE_NODE
//console.log(xmlNode.nodeName);
break;
case 3:
//TEXT_NODE
//console.log(xmlNode.nodeValue);
break;
case 4:
//CDATA_SECTION_NODE
console.log("CDATA_SECTION_NODE");
break;
case 5:
//ENTITY_REFERENCE_NODE
console.log("ENTITY_REFERENCE_NODE");
break;
case 6:
//ENTITY_NODE
console.log("ENTITY_NODE");
break;
case 7:
//PROCESSING_INSTRUCTION_NODE
console.log("PROCESSING_INSTRUCTION_NODE");
break;
case 8:
//COMMENT_NODE
console.log("COMMENT_NODE");
break;
case 9:
//DOCUMENT_NODE
console.log("DOCUMENT_NODE");
break;
case 10:
//DOCUMENT_TYPE_NODE
console.log("DOCUMENT_TYPE_NODE");
break;
case 11:
//DOCUMENT_TYPE_NODE
console.log("DOCUMENT_FRAGMENT_NODE");
break;
case 12:
//NOTATION_NODE
console.log("DOCUMENT_FRAGMENT_NODE");
break;
}
}
function validateFinalXML(xmlStr){
//console.dir(RED);
processedNode="";
resp=true;
errList=[];
elementCount=0;
//console.log("In validateXML xmlStr:" + xmlStr);
if(xmlStr == null || xmlStr == "") return true;
xmlStr = xmlStr.trim();
try{
var xmlDoc;
if (window.DOMParser){
try{
var parser=new DOMParser();
xmlDoc=parser.parseFromString(xmlStr,'text/xml');
//console.log("Not IE");
var n = xmlDoc.documentElement.nodeName;
if(n == "html"){
resp=false;
console.log("Error parsing");
return resp;
}
}catch(e){
console.log("Error parsing" +e);
return false;
}
}else{
try{
//console.log("IE");
// code for IE
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXMLString(xmlStr);
}catch(e){
console.log("Error parsing" +e);
return false;
}
}
//console.dir(xmlDoc);
processNode(xmlDoc.documentElement);
if(resp){
console.log("Validation Successful");
RED.notify("<strong>XML validation</strong>: SUCCESS","success");
}else{
console.log("Errors found. ");
RED.notify("<strong>XML validation</strong>: FAILED","error");
}
}catch(e){
console.log("error:" +e);
RED.notify("<strong>XML validation</strong>: FAILED","error");
resp=false;
return resp;
}
return resp;
}
function validateXML(xmlStr){
//console.dir(RED);
processedNode="";
resp=true;
errList=[];
elementCount=0;
console.log("In validateXML xmlStr:" + xmlStr);
//var xmlStr = $("#node-input-xml-editor").text();
if(xmlStr == null || xmlStr == undefined){
xmlStr = $("#node-input-xml-editor").text();
}
if(xmlStr == undefined) return false;
//console.dir($("#node-input-xml-editor"));
//console.log("xmlStr:" + xmlStr);
xmlStr = xmlStr.trim();
var startTag ;
var endTag ;
try{
var re = /^[0-9]+/;
xmlStr = xmlStr.replace(re,'');
var regex = /(<)([\w-]+)(.*)?/;
var match = regex.exec(xmlStr);
if(match != null){
if(match[1] != undefined && match[2] != undefined){
startTag = match[2];
}
}else{
resp=false;
showMsg("startTag not found.","red");
return resp;
}
}catch(e){
console.log(e);
return false;
}
//console.log(xmlStr);
if(xmlStr == ""){
resp=false;
showMsg("XML not found","red");
return resp;
}
endTag = "</" + startTag + ">";
if(xmlStr.indexOf(endTag) != -1){
resp=false;
showMsg("Error: End tag &lt;/" + startTag + "&gt; must not be included.","red");
console.log("End tag " + endTag + " must not be included.");
return resp;
}
try{
//var xmlTopStr = "<?xml version='1.0' encoding='UTF-8'?>\n" ;
//xmlStr = xmlTopStr + xmlStr;
//xmlStr = xmlStr.replace(/'/g,"\"");
xmlStr+= "\n" + endTag;
xmlStr = xmlStr.trim();
//console.log("xmlStr:" + xmlStr);
var xmlDoc;
if (window.DOMParser){
try{
var parser=new DOMParser();
xmlDoc=parser.parseFromString(xmlStr,'text/xml');
//console.log("Not IE");
var n = xmlDoc.documentElement.nodeName;
if(n == "html"){
resp=false;
showMsg("Error parsing","red");
console.log("Error parsing");
return resp;
}
}catch(e){
console.log("Error parsing" +e);
return false;
}
}else{
try{
//console.log("IE");
// code for IE
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXMLString(xmlStr);
}catch(e){
console.log("Error parsing" +e);
return false;
}
}
//console.dir(xmlDoc);
processNode(xmlDoc.documentElement);
if(resp){
showMsg("Validation Successful","green");
}else{
showMsg("Errors found. <a onclick='javascript:showErrors()'>show errors</a>","red");
console.log("Errors found. ");
}
}catch(e){
console.log("error:" +e);
showMsg(e,"red");
resp=false;
return resp;
}
return resp;
}
function showErrors() {
//var sourceField = event != null ?event.srcElement:event.target;
//console.dir(sourceField);
//sourceField.style.backgroundColor="skyblue";
//var leftVal = event.target.offsetLeft ;
//alert(topVal + ":" + leftVal);
/*left:leftVal,*/
//var pos = event.target;
//var topVal = event.target.offsetTop + topPosition ;
//var topVal = event.target.offsetTop +75;
var htmlStr="<div id='error-list-div'><table id='errTable' border='1'><tr><th>Error List</th></tr>";
for(var i=0;errList != null && i<errList.length;i++){
var errSeq = i+1;
htmlStr += "<tr><td>" + errSeq + ")" + errList[i] + "</td></tr>";
}
htmlStr += "</table></div>";
//var prevHtml = $("#tab-info").html();
//htmlStr += "<input type='button' value='Hide Errors' onclick=\"closeShowErrors('" + prevHtml + "')\" >";
//$('#show-errors-div').html(htmlStr);
//$("#tab-info").html(prevHtml + htmlStr);
//$('<div></div>').dialog({
$('#show-errors-dialog').dialog({
modal: true,
title: "XML Error List ",
width: 500,
open: function () {
$(this).html(htmlStr);
},
buttons: {
Close: function () {
$(this).dialog("close");
}
}
}); // end dialog div
}
var dgParsedParameters ;
var dgProcessNode ;
var callNodes ;
function extractSliParameters(xmlNode){
if(xmlNode == null) return;
if(xmlNode.nodeName != "parsererror" && xmlNode.nodeName != "#text"){
dgProcessNode = xmlNode.nodeName;
}
//console.log("processedNode:" + processedNode);
switch(xmlNode.nodeType){
case 1:
elementCount++;
//ELEMENT_NODE
console.log(xmlNode.nodeName);
if(xmlNode.nodeName == "parsererror"){
return;
}
dgProcessNode = xmlNode.nodeName;
if(dgProcessNode == "call"){
var attrs1 = xmlNode.attributes;
var moduleName = "";
var rpcName = "";
for(var i=0;i<attrs1.length;i++){
if(attrs1[i].nodeName == "module"){
moduleName = attrs1[i].value;
}else if(attrs1[i].nodeName == "rpc"){
rpcName = attrs1[i].value;
}
}
console.log(moduleName + "_" + rpcName);
callNodes[moduleName + "_" + rpcName] = "";
}else if(dgProcessNode == "set"){
//console.log("found set node");
var childNodes = xmlNode.childNodes;
//console.dir(childNodes);
for(var k=0;k<childNodes.length;k++){
if(childNodes[k].nodeName == "parameter"){
var parameterName="";
var parameterValue="";
var attrs2 = childNodes[k].attributes;
for(var i=0;i<attrs2.length;i++){
if(attrs2[i].nodeName == "name"){
parameterName = attrs2[i].value;
}else if(attrs2[i].nodeName == "value"){
parameterValue = attrs2[i].value;
}
}
//console.log("PARAMETER:" + parameterName + ":" + parameterValue );
}
}
}else{
var attrs = xmlNode.attributes;
for(var i=0;i<attrs.length;i++){
//console.log("Attribute:" + attrs[i].nodeName);
//console.log("Value:" + attrs[i].value);
if(attrs[i].value != "" && attrs[i].value.indexOf("$")){
var attributeValue = attrs[i].value.trim().replace(/`/g, "");
var splitVariables = attributeValue.split(" ");
for(var k=0;k<splitVariables.length;k++){
var v = splitVariables[k].trim();
//check if
if(v.indexOf("$") == 0){
dgParsedParameters[v] = "";
}
}
}
}
var childNodes = xmlNode.childNodes;
for(var k=0;k<childNodes.length;k++){
extractSliParameters(childNodes[k]);
}
break;
}
case 2:
//ATTRIBUTE_NODE
//console.log(xmlNode.nodeName);
break;
case 3:
//TEXT_NODE
//console.log(xmlNode.nodeValue);
break;
case 4:
//CDATA_SECTION_NODE
console.log("CDATA_SECTION_NODE");
break;
case 5:
//ENTITY_REFERENCE_NODE
console.log("ENTITY_REFERENCE_NODE");
break;
case 6:
//ENTITY_NODE
console.log("ENTITY_NODE");
break;
case 7:
//PROCESSING_INSTRUCTION_NODE
console.log("PROCESSING_INSTRUCTION_NODE");
break;
case 8:
//COMMENT_NODE
console.log("COMMENT_NODE");
break;
case 9:
//DOCUMENT_NODE
console.log("DOCUMENT_NODE");
break;
case 10:
//DOCUMENT_TYPE_NODE
console.log("DOCUMENT_TYPE_NODE");
break;
case 11:
//DOCUMENT_TYPE_NODE
console.log("DOCUMENT_FRAGMENT_NODE");
break;
case 12:
//NOTATION_NODE
console.log("DOCUMENT_FRAGMENT_NODE");
break;
}
}
function getSliParametersFromDG(xmlStr){
dgProcessNode="";
dgParsedParameters = {};
callNodes ={} ;
//var exportableNodeSet = getCurrentFlowNodeSet();
if(xmlStr == undefined || xmlStr == ""){
xmlStr = getNodeToXml();
//console.log("xmlStr:" + xmlStr);
}
if(xmlStr == null || xmlStr == "") return true;
xmlStr = xmlStr.trim();
try{
var xmlDoc;
if (window.DOMParser){
try{
var parser=new DOMParser();
xmlDoc=parser.parseFromString(xmlStr,'text/xml');
//console.log("Not IE");
var n = xmlDoc.documentElement.nodeName;
if(n == "html"){
resp=false;
console.log("Error parsing");
return resp;
}
}catch(e){
console.log("Error parsing" +e);
return false;
}
}else{
try{
//console.log("IE");
// code for IE
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXMLString(xmlStr);
}catch(e){
console.log("Error parsing" +e);
return false;
}
}
//console.dir(xmlDoc);
extractSliParameters(xmlDoc.documentElement);
//console.dir(dgParsedParameters);
}catch(e){
console.log("error:" +e);
RED.notify("<strong>XML validation</strong>: FAILED","error");
return resp;
}
}