/**************************************************************************************************************************** Licensed Materials - Property of IBM BI and PM: QFW © Copyright IBM Corp. 2005, 2010 US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. *****************************************************************************************************************************/ var fso = null; function getFileSystemObject() { try { if( fso == null ) fso = new ActiveXObject("Scripting.FileSystemObject"); return fso; } catch (e) { return null; } } function executeXML( text, binFolder, fileName ) { text = text.replace( /<[^> \/]+:/g, "<" ); text = text.replace( /<\/[^> ]+:/g, "/g, "" ); var fso = new ActiveXObject("Scripting.FileSystemObject"); var s = fso.CreateTextFile( fileName + ".xml", true); s.WriteLine(text); s.Close(); var myshell = new ActiveXObject( "WScript.shell" ); myshell.CurrentDirectory = binFolder; myshell.run( "\"" + binFolder + "\\QFWTest.exe\" -rsxsl 2 -pagesize -1 -d \"" + binFolder + "\\..\\logs\\qfw\" \"" + fileName + ".xml\"" , 1, true ); if( fso.FileExists(fileName + ".out") ) { textFile = fso.OpenTextFile(fileName + ".out",1); var fileContents = textFile.ReadAll(); textFile.Close(); return fileContents; } } var xslObject = null; function getOutputFormattingXsl() { if( xslObject != null ) return xslObject; var fileSystem = getFileSystemObject(); xslFile = fileSystem.OpenTextFile( binFolder.innerText + "\\..\\templates\\qfw\\QFResultSetFormatting.xsl" ,1 ); var xslFileContents = xslFile.ReadAll(); xslFile.Close(); xslObject = new ActiveXObject("Microsoft.XMLDOM"); xslObject.async = false; xslObject.loadXML( xslFileContents ); return xslObject; } function executeOnClick() { var fullXML = event.srcElement.parentElement; var xmlroot = null; var resultroot = null; var child = fullXML.firstChild; for( ; child != null; child = child.nextSibling ) if( child.tagName == "DIV" ) { if( xmlroot == null && child.className == 'e') xmlroot = child; if( child.className == "result" ) resultroot = child; else child.style.display = "none"; } if( resultroot != null ) { resultroot.style.display = "block"; return; } if( xmlroot == null ) return; if( document.body.client != "CRN" ) executeWithQFWTest( xmlroot, fullXML ); else executeWithCRN( xmlroot, fullXML ); } var v_sFrameId_Counter = 1; function executeWithCRN( xmlroot, fullXML ) { var v_oFrame; var v_sFrameId; for( var i = 0; i < fullXML.childNodes.length; ++i ) if( fullXML.childNodes[i].tagName == "IFRAME" ) v_oFrame = fullXML.childNodes[i]; if( !v_oFrame ) { var v_sFrameId = "idResultView" + (v_sFrameId_Counter++); v_oFrame = document.createElement( "IFRAME" ); fullXML.appendChild( v_oFrame ); v_oFrame.outerHTML = ''; var v_sQueryText = extractV5CommandText( xmlroot, fullXML ); var v_sReportSpec = window.parent.G_QanReportGenerator.F_convertQueryToReportSpec( v_sQueryText ); window.parent.G_QanQueryExecution.F_submitReportViewRequest( v_sFrameId, document, v_sReportSpec ); } else { v_oFrame.style.display = "block"; } } window.adjustResultViewer = function(viewerWindow) { // alert( 'h='+ viewerWindow.document.getElementById( 'CVReportRS' ).offsetHeight + ';w=' + viewerWindow.document.body.scrollWidth ); //debugger; var v_nViewerIframe = document.getElementById(viewerWindow.name); var v_nViewerElement = viewerWindow.document.getElementById( 'CVReportRS' ); var v_viewerHeight = v_nViewerElement.offsetHeight; var v_nViewerToolbarElement = viewerWindow.document.getElementById( 'CVToolbarRS' ); if( v_nViewerToolbarElement ) v_viewerHeight += v_nViewerToolbarElement.offsetHeight; var v_nViewerNavElement = viewerWindow.document.getElementById( 'CVNavLinksRS' ); if( v_nViewerNavElement ) v_viewerHeight += v_nViewerNavElement.offsetHeight; v_nViewerIframe.style.height = v_viewerHeight + 5 + 'px'; v_nViewerIframe.style.width = viewerWindow.document.body.scrollWidth + 5 + 'px'; } function extractV5CommandText( xmlroot, fullXML ) { var queryText = ""; var rootElemName = xmlNodeName( xmlroot ); if( rootElemName == 'command' || rootElemName == 'qs:command' ) queryText = xmlroot.innerText; else { var connectElem; var queryElem = document.getElementById( fullXML.parentNode.objId ); if( queryElem ) connectElem = document.getElementById( queryElem.connectId + "_connect" ); if( connectElem && connectElem.children.length >= 2 ) { var connectionSpecElem = connectElem.firstChild; for( ; connectionSpecElem && connectionSpecElem.className != "e"; connectionSpecElem = connectionSpecElem.nextSibling ); if( !connectionSpecElem ) formatXMLFromString( connectElem ); for( connectionSpecElem = connectElem.firstChild; connectionSpecElem && connectionSpecElem.className != "e"; connectionSpecElem = connectionSpecElem.nextSibling ); queryText = "" + ((connectionSpecElem)?connectionSpecElem.innerText:"") + xmlroot.innerText + ""; } else queryText = "" + xmlroot.innerText + ""; } queryText = queryText.replace( /\<[^\> ]*:?parameters.*\>/, "" ); queryText = queryText.replace( /\<\/[^\> ]*:?parameters/, "\/]*/)[0]; } function xmlNodeAttribute( xmlNode, attributeName ) { var i = 0; for( ; i < xmlNode.childNodes.length; ++i ) { if( xmlNode.childNodes[i].className == "c" ) { xmlNode = xmlNode.childNodes[i]; break; } } elemContent = xmlNode.innerText; var v_reAttrExpr = new RegExp( ' ' + attributeName + '\=\"([^\"]*)\"' ); var v_aAttrExprRes = elemContent.match( v_reAttrExpr ); if( !v_aAttrExprRes ) return ""; return (v_aAttrExprRes[1])? v_aAttrExprRes[1]: ""; } function isQSAPICommandType( elemName ) { return ( elemName == "execute" || elemName == "getParameters" || elemName == "validate" ) ; } function getV5QuerySet( xmlNode ) { var elemName = xmlNodeName( xmlNode ); if( elemName == "querySet" ) return xmlNode; if( isQSAPICommandType( elemName ) || elemName == "source" || elemName == "response" ) { return xmlFirstChild( xmlNode, "querySet" ); } if( elemName == "command" || elemName == "qs:command" ) { var childNode = xmlFirstChild( xmlNode ); for( ; childNode != null; childNode = xmlNextSibling( childNode ) ) { elemName = xmlNodeName( childNode ); if( isQSAPICommandType( elemName ) ) { return xmlFirstChild( childNode, "querySet" ); } } } } function unwindQuerySet( xmlNode, tree, parentIndex ) { var xmlQuerySet = getV5QuerySet( xmlNode ); if( xmlQuerySet == null ) return false; var queryArray = new Array(); var xmlQueries = xmlFirstChild( xmlQuerySet, "queries" ); if( xmlQueries != null ) { var xmlQuery = xmlFirstChild( xmlQueries, "query" ); for( ; xmlQuery != null; xmlQuery = xmlNextSibling( xmlQuery, "query" ) ) { queryArray[ xmlNodeAttribute( xmlQuery, "name" ) ] = xmlQuery; } xmlQuery = xmlFirstChild( xmlQueries, "providerQuery" ); for( ; xmlQuery != null; xmlQuery = xmlNextSibling( xmlQuery, "providerQuery" ) ) { unwindProviderQuery( xmlQuery, tree, parentIndex, queryArray ); } } var xmlQRDs = xmlFirstChild( xmlQuerySet, "queryResultDefinitions" ); if( xmlQRDs != null ) { var xmlQRD = xmlFirstChild( xmlQRDs, "queryResultDefinition" ); for( ; xmlQRD != null; xmlQRD = xmlNextSibling( xmlQRD, "queryResultDefinition" ) ) { unwindQRD( xmlQRD, tree, parentIndex, queryArray ); } } return true; } var treeLeafIdGen = 0; function unwindQRD( xmlQRD, tree, parentIndex, queryArray ) { thisLeafId = treeLeafIdGen++; tree.add( thisLeafId, parentIndex, xmlNodeAttribute( xmlQRD, "name" ), null, null, "#FCFFD3", "QRD" ); preserveId2XMLNodeMapping( thisLeafId, xmlQRD ); unwindQueryRef( xmlQRD, tree, thisLeafId, queryArray ); } function unwindQueryRef( xmlRef, tree, parentIndex, queryArray ) { queryName = xmlNodeAttribute( xmlRef, "refQuery" ); xmlQuery = queryArray[queryName]; if( xmlQuery == null ) return; unwindQuery( xmlQuery, tree, parentIndex, queryArray ); } function unwindQuery( xmlQuery, tree, parentIndex, queryArray ) { thisLeafId = treeLeafIdGen++; tree.add( thisLeafId, parentIndex, xmlNodeAttribute( xmlQuery, "name" ), null, null, "#E3E3D3", "Query" ); xmlSource = xmlFirstChild( xmlQuery, "source" ); if( xmlSource == null ) return; preserveId2XMLNodeMapping( thisLeafId, xmlQuery ); unwindSource( xmlSource, tree, thisLeafId, queryArray ); } function unwindSource( xmlSource, tree, parentIndex, queryArray ) { if( unwindQuerySet( xmlSource, tree, parentIndex ) ) return; var childNode = xmlFirstChild( xmlSource ); for( ; childNode != null; childNode = xmlNextSibling( childNode ) ) { if( xmlNodeName( childNode ) == "queryRef" ) unwindQueryRef( childNode, tree, parentIndex, queryArray ); else if( xmlNodeName( childNode ) == "providerQuery" ) unwindProviderQuery( childNode, tree, parentIndex, queryArray ); else if( xmlNodeName( childNode ) == "queryOperation" || xmlNodeName( childNode ) == "joinOperation" ) unwindOperation( childNode, tree, parentIndex, queryArray ); else if( xmlNodeName( childNode ) == "sqlQuery" || xmlNodeName( childNode ) == "mdxQuery" ) unwindNativeQuery( childNode, tree, parentIndex, queryArray ); } } function providerQuery_GetPlanDetails( xmlPQuery ) { var xmlPlans = xmlFirstChild( xmlPQuery, "plans" ); if( !xmlPlans) return; var xmlPlan = xmlFirstChild( xmlPlans, "plan" ); if( !xmlPlan ) return; return xmlFirstChild( xmlPlan, "planDetails" ); } function preserveId2XMLNodeMapping( thisLeafId, xmlPQuery ) { if( !document.nodeId2XMLNode ) document.nodeId2XMLNode = []; document.nodeId2XMLNode[ thisLeafId ] = xmlPQuery; } function createQueryPlanNode( xmlPQuery, tree, parentIndex ) { var providerStr = xmlNodeAttribute( xmlPQuery, "provider" ); var nodeText; if( providerStr == "CubeBuildProvider" ) nodeText = "CUBE"; else if( providerStr == "OlapQueryProvider" ) nodeText = "MDX"; else if( providerStr == "RelationalQueryProvider" ) nodeText = "SQL"; else { var xmlPlanDetails = providerQuery_GetPlanDetails( xmlPQuery ); if( !xmlPlanDetails ) return parentIndex; if( xmlFirstChild( xmlPlanDetails, "wrappedQuery" ) ) nodeText = "MDX"; else return parentIndex; } var thisLeafId = treeLeafIdGen++; tree.add( thisLeafId, parentIndex, xmlNodeAttribute( xmlPQuery, "name" ), null, null, "#A3E3E3", nodeText ); preserveId2XMLNodeMapping( thisLeafId, xmlPQuery ); return thisLeafId; } function unwindProviderQuery( xmlPQuery, tree, parentIndex, queryArray ) { var thisLeafId; if( !tree.m_bQueryPlan ) { thisLeafId = treeLeafIdGen++; tree.add( thisLeafId, parentIndex, xmlNodeAttribute( xmlPQuery, "name" ), null, null, "#A3E3E3", "providerQuery
[" + xmlNodeAttribute( xmlPQuery, "provider" ) + "]
" ); } else { thisLeafId = createQueryPlanNode( xmlPQuery, tree, parentIndex ); } preserveId2XMLNodeMapping( thisLeafId, xmlPQuery ); xmlSource = xmlFirstChild( xmlPQuery, "source" ); if( xmlSource == null ) return; unwindSource( xmlSource, tree, thisLeafId, queryArray ); } function unwindOperation( xmlOperation, tree, parentIndex, queryArray ) { thisLeafId = treeLeafIdGen++; tree.add( thisLeafId, parentIndex, xmlNodeAttribute(xmlOperation, 'setOperation'), null, null, null, xmlNodeName(xmlOperation) ); preserveId2XMLNodeMapping( thisLeafId, xmlOperation ); xmlQueryRefs = xmlFirstChild( xmlOperation, "queryRefs" ); if( xmlQueryRefs == null ) return; unwindSource( xmlQueryRefs, tree, thisLeafId, queryArray ); } function unwindJoin( xmlJoin, tree, parentIndex, queryArray ) { thisLeafId = treeLeafIdGen++; tree.add( thisLeafId, parentIndex, xmlNodeName(xmlOperation) ); xmlJoinOperands = xmlFirstChild( xmlJoin, "joinOperands" ); if( xmlJoinOperands == null ) return; preserveId2XMLNodeMapping( thisLeafId, xmlJoin ); var xmlJoinOperand = xmlFirstChild( xmlJoinOperands ); for( ; xmlJoinOperand != null; xmlJoinOperand = xmlNextSibling( xmlJoinOperand ) ) unwindSource( xmlJoin, tree, thisLeafId, queryArray ); } function unwindNativeQuery( xmlNativeQuery, tree, parentIndex, queryArray ) { thisLeafId = treeLeafIdGen++; tree.add( thisLeafId, parentIndex, xmlNodeName(xmlNativeQuery) ); preserveId2XMLNodeMapping( thisLeafId, xmlNativeQuery ); } function buildQueryTree( fullXML, nodeInitializationFunc ) { var treeNode = document.createElement( "div" ); fullXML.insertBefore( treeNode, (fullXML.lastChild.className == "nodeDetails")? fullXML.lastChild: null ); treeNode.className = "tree"; treeNode.id = "tree_" + treeID; treeID++; var t = new LogTree( treeNode.id +'.t',treeNode); treeNode.t = t; t.config.nodeWidth = 60; t.config.nodeHeight = 40; t.config.levelMargin = 20; t.config.siblingMargin = 10; t.config.tempTreeContainer = tempTreeContainer; tempTreeContainer.parentElement.className = "tree"; xmlRoot = xmlFirstChild( fullXML ); nodeInitializationFunc( xmlRoot, t, -1 ); t.container.onclick = queryPlan_onClick; t.container.onblur = queryPlan_onBlur; t.UpdateTree(); var rootGroup = treeNode.childNodes[0]; treeNode.style.height = rootGroup.style.posHeight + 3; treeNode.style.width = "100%"; } var G_QueryPlan_activeNode; function queryPlan_getNodeContainer( planNode ) { for( ; planNode && planNode.tagName != "roundrect"; planNode = planNode.parentElement ); return planNode; } function queryPlan_treeContainer( planNode ) { for( ; planNode && planNode.className != "fullXML"; planNode = planNode.parentElement ); return planNode; } function queryPlan_getNodeDetailsArea( fullXML ) { if( !fullXML.nodeDetailsArea ) { var nodeDetailsArea = document.createElement( "DIV" ); nodeDetailsArea.className = "nodeDetails"; fullXML.appendChild( nodeDetailsArea ); fullXML.nodeDetailsArea = nodeDetailsArea; } return fullXML.nodeDetailsArea; } function queryPlan_populateNodeDetailsTitle( nodeDetailsArea, planNode ) { if( !nodeDetailsArea.titleDiv ) { nodeDetailsArea.titleDiv = document.createElement( "DIV" ); nodeDetailsArea.appendChild( nodeDetailsArea.titleDiv ); nodeDetailsArea.titleDiv.className = "detailsTitle"; } nodeDetailsArea.titleDiv.innerHTML = ""; nodeDetailsArea.nodeNameB = document.createElement( "B" ); nodeDetailsArea.titleDiv.appendChild( nodeDetailsArea.nodeNameB ); nodeDetailsArea.nodeNameB.className = "detailsName"; nodeDetailsArea.nodeNameB.innerText = planNode.firstChild.childNodes[0].innerText; } function queryPlan_getDetailsContentDiv( nodeDetailsArea ) { if( !nodeDetailsArea.detailContextDiv ) { nodeDetailsArea.detailContextDiv = document.createElement( "DIV" ); nodeDetailsArea.appendChild( nodeDetailsArea.detailContextDiv ); } return nodeDetailsArea.detailContextDiv; } function queryPlan_propertyOnClick() { var propertyNameU = event.srcElement; var nodeDetailsArea = propertyNameU.parentElement.parentElement; var contentDiv = queryPlan_getDetailsContentDiv( nodeDetailsArea ); var propertyName = propertyNameU.innerText; for( var i = 0; i < contentDiv.childNodes.length; ++i ) contentDiv.childNodes[i].style.display = "none"; contentDiv.property2RenderedValue[propertyName].style.display = "block"; } function queryPlan_populateNodeDetails_title( nodeDetailsArea, contentDiv, propertyName, renderedProperty ) { renderedProperty.style.display = "none"; contentDiv.appendChild( renderedProperty ); if( !contentDiv.property2RenderedValue ) contentDiv.property2RenderedValue = []; contentDiv.property2RenderedValue[propertyName] = renderedProperty; var propertyNameU = document.createElement( "U" ); nodeDetailsArea.titleDiv.appendChild( propertyNameU ); propertyNameU.innerText = propertyName; propertyNameU.onclick = queryPlan_propertyOnClick; } function queryPlan_populateNodeDetails_fromInfo( nodeDetailsArea, planNode, xmlPlanNode ) { var initPropertyContent; var contentDiv = queryPlan_getDetailsContentDiv( nodeDetailsArea ); var xmlInfoNode = xmlFirstChild( xmlPlanNode, "info" ); if( xmlInfoNode ) { var xmlInfoItemNode = xmlFirstChild( xmlInfoNode, "property" ); for( ; xmlInfoItemNode != null; xmlInfoItemNode = xmlNextSibling( xmlInfoItemNode, "property" ) ) { var propertyText = xmlGetText( xmlInfoItemNode ); var propertyName = xmlNodeAttribute( xmlInfoItemNode, "name" ); var renderedProperty = document.createElement( "DIV" ); renderedProperty.innerText = propertyText; queryPlan_populateNodeDetails_title( nodeDetailsArea, contentDiv, propertyName, renderedProperty ); if( !initPropertyContent ) initPropertyContent = renderedProperty; } } return initPropertyContent; } function queryPlan_populateNodeDetails_xmlQuery( nodeDetailsArea, planNode, xmlQuery ) { var nodeDiv = document.createElement( "DIV" ); parentPlanDiv.appendChild( nodeDiv ); nodeDiv.className = "items"; nodeDiv.innerText = nodeName + ' "' + xmlNodeAttribute( xmlPlanNode, "Name" ) + '"'; parentPlanDiv = nodeDiv; } function queryPlan_populateNodeDetails_fromXmlQueryNode( nodeDetailsArea, xmlQueryNode, parentQueryDiv ) { var nodeName = xmlNodeName( xmlQueryNode ); if( nodeName == "expression" || nodeName == "filterExpression" ) { var nodeDiv = document.createElement( "DIV" ); parentQueryDiv.appendChild( nodeDiv ); nodeDiv.className = "queryExpr"; nodeDiv.innerText = xmlGetText( xmlQueryNode ); return; } if( nodeName == "edge" || nodeName == "valueSet" || nodeName == "groupHeader" || nodeName == "groupFooter" || nodeName == "groupDetails" || nodeName == "dataItemRef" || nodeName == "dataItem" || nodeName == "detailFilter" || nodeName == "slicer" || nodeName == "summaryFilter" ) { var nodeDiv = document.createElement( "DIV" ); parentQueryDiv.appendChild( nodeDiv ); nodeDiv.className = "queryItem"; nodeDiv.innerText = nodeName; var nameAttrValue; if( nodeName == "valueSet" || nodeName == "dataItemRef" ) nameAttrValue = xmlNodeAttribute( xmlQueryNode, "refDataItem" ) ; else nameAttrValue = xmlNodeAttribute( xmlQueryNode, "name" ) ; if( nameAttrValue ) nodeDiv.innerText += ' "' + nameAttrValue + '"'; parentQueryDiv = nodeDiv; } if( nodeName == "source" ) { return; } var xmlChild = xmlFirstChild( xmlQueryNode ); for( ; xmlChild; xmlChild = xmlNextSibling( xmlChild ) ) { queryPlan_populateNodeDetails_fromXmlQueryNode( nodeDetailsArea, xmlChild, parentQueryDiv ); } } function queryPlan_populateNodeDetails_fromOriginal( nodeDetailsArea, planNode, xmlPlanNode ) { var xmlOriginal = xmlFirstChild( xmlPlanNode, "original" ); if( !xmlOriginal ) { var xmlPlanDetails = providerQuery_GetPlanDetails( xmlPlanNode ); xmlOriginal = xmlFirstChild( xmlPlanDetails, "wrappedQuery" ); if( !xmlOriginal ) return null; } var contentDiv = queryPlan_getDetailsContentDiv( nodeDetailsArea ); var queryDetailsDiv = document.createElement( "DIV" ); contentDiv.appendChild( queryDetailsDiv ); queryPlan_populateNodeDetails_fromXmlQueryNode( nodeDetailsArea, xmlOriginal, queryDetailsDiv ); queryPlan_populateNodeDetails_title( nodeDetailsArea, contentDiv, "query", queryDetailsDiv ); return queryDetailsDiv; } function queryPlan_populateNodeDetails_fromCubeNode( nodeDetailsArea, xmlPlanNode, parentPlanDiv ) { var nodeName = xmlNodeName( xmlPlanNode ); if( nodeName == "Dimension" || nodeName == "Hierarchy" || nodeName == "LevelRef" || nodeName == "Level" || nodeName == "Measure" ) { var nodeDiv = document.createElement( "DIV" ); parentPlanDiv.appendChild( nodeDiv ); nodeDiv.className = "cube"; nodeDiv.innerText = nodeName + ' "' + xmlNodeAttribute( xmlPlanNode, "Name" ) + '"'; parentPlanDiv = nodeDiv; } if( nodeName != "planDetails" && nodeName != "Model" && nodeName != "DimensionCollection" && nodeName != "Dimension" && nodeName != "HierarchyCollection" && nodeName != "Hierarchy" && nodeName != "HierarchyLevels" && nodeName != "LevelCollection" && nodeName != "MeasureCollection" ) { return; } var xmlChild = xmlFirstChild( xmlPlanNode ); for( ; xmlChild; xmlChild = xmlNextSibling( xmlChild ) ) { queryPlan_populateNodeDetails_fromCubeNode( nodeDetailsArea, xmlChild, parentPlanDiv ); } } function queryPlan_populateNodeDetails_fromCube( nodeDetailsArea, planNode, xmlPlanNode ) { var xmlPlanDetails = providerQuery_GetPlanDetails( xmlPlanNode ); var contentDiv = queryPlan_getDetailsContentDiv( nodeDetailsArea ); var cubePlanDetailsDiv = document.createElement( "DIV" ); contentDiv.appendChild( cubePlanDetailsDiv ); queryPlan_populateNodeDetails_fromCubeNode( nodeDetailsArea, xmlPlanDetails, cubePlanDetailsDiv ); return cubePlanDetailsDiv; } function queryPlan_populateNodeDetails( nodeDetailsArea, planNode ) { queryPlan_populateNodeDetailsTitle( nodeDetailsArea, planNode ); var contentDiv = queryPlan_getDetailsContentDiv( nodeDetailsArea ); contentDiv.innerHTML = ""; if( !document.nodeId2XMLNode ) return; var xmlPlanNode = document.nodeId2XMLNode[ planNode.id ]; if( !xmlPlanNode ) return; var nodeName = xmlNodeName( xmlPlanNode ); if( nodeName == "query" || nodeName == "queryResultDefinition" || nodeName == "queryOperation" ) queryPlan_populateNodeDetails_v5Blocks( nodeDetailsArea, planNode, xmlPlanNode, nodeName ); else queryPlan_populateNodeDetails_providerQueryBlocks( nodeDetailsArea, planNode, xmlPlanNode ); } function queryPlan_populateNodeDetails_v5Blocks( nodeDetailsArea, planNode, xmlPlanNode, nodeName ) { var contentDiv = queryPlan_getDetailsContentDiv( nodeDetailsArea ); var queryDetailsDiv = document.createElement( "DIV" ); contentDiv.appendChild( queryDetailsDiv ); queryPlan_populateNodeDetails_fromXmlQueryNode( nodeDetailsArea, xmlPlanNode, queryDetailsDiv, nodeName ); queryPlan_populateNodeDetails_title( nodeDetailsArea, contentDiv, nodeName, queryDetailsDiv ); queryDetailsDiv.style.display = "block"; return queryDetailsDiv; } function queryPlan_populateNodeDetails_providerQueryBlocks( nodeDetailsArea, planNode, xmlPlanNode ) { var initPropertyContent = queryPlan_populateNodeDetails_fromInfo( nodeDetailsArea, planNode, xmlPlanNode ); if( xmlNodeAttribute( xmlPlanNode, "provider" ) == "CubeBuildProvider" ) initPropertyContent = queryPlan_populateNodeDetails_fromCube( nodeDetailsArea, planNode, xmlPlanNode ); else { var propertyContent = queryPlan_populateNodeDetails_fromOriginal( nodeDetailsArea, planNode, xmlPlanNode ); if( !initPropertyContent ) initPropertyContent = propertyContent; } if( initPropertyContent ) initPropertyContent.style.display = "block"; } function queryPlan_onClick() { var planNode = queryPlan_getNodeContainer( event.srcElement ); var fullXML = queryPlan_treeContainer( planNode ); if( !fullXML ) return; planNode.prevFillColorValue = planNode.fillColor.value; planNode.fillColor = "white"; var nodeDetailsArea = queryPlan_getNodeDetailsArea( fullXML ); queryPlan_populateNodeDetails( nodeDetailsArea, planNode ); nodeDetailsArea.style.display = "block"; if( G_QueryPlan_activeNode ) queryPlan_onBlur(); G_QueryPlan_activeNode = planNode; } function queryPlan_onBlur() { var planNode = G_QueryPlan_activeNode; planNode.fillColor = planNode.prevFillColorValue; } function unwindPlanQuerySet( xmlNode, tree, parentIndex ) { tree.container.parentElement.className = "plan"; tree.m_bQueryPlan = true; unwindQuerySet( xmlNode, tree, parentIndex ); } function shortParameterOnClick() { } function adjustParameterHeaderState( fullXML, open ) { //determine which parameter type it is var paramElem = fullXML.firstChild; for( ; paramElem != null; paramElem = paremElem.nextSibling ) if( paramElem.className == "paramType" ) break; if( paramElem == null ) return; var paramType = paramElem.innerText.replace(/:\s*/, "" ); //finds the methodHeader var headerElem = fullXML.parentElement.firstChild; for( ; headerElem != null; headerElem = headerElem .nextSibling ) if( headerElem.className == "methodHeader" ) break; if( headerElem == null ) return; //finds the parameter in the methodHeader var paramToggleElem = headerElem.firstChild; for( ; paramToggleElem != null; paramToggleElem = paramToggleElem.nextSibling ) if( paramToggleElem.tagName == "U" && paramToggleElem.innerText.indexOf( paramType ) == 0 ) break; if( paramToggleElem == null ) return; //changes the +/- paramToggleElem.previousSibling.innerText = (open)? "-": "+"; } function adjustErrorHeaderState( fullXML, open ) { var paramElem = fullXML.firstChild; for( ; paramElem != null; paramElem = paremElem.nextSibling ) if( paramElem.className == "err") break; if( paramElem == null ) return; var headerElem = fullXML.parentElement.firstChild; for( ; headerElem != null; headerElem = headerElem .nextSibling ) if( headerElem.className == "methodHeader" ) break; if( headerElem == null ) return; var paramToggleElem = headerElem.firstChild; for( ; paramToggleElem != null; paramToggleElem = paramToggleElem.nextSibling ) { if( paramToggleElem.tagName == "U" && paramToggleElem.innerText.indexOf( "error" ) == 0 ) break; } if( paramToggleElem == null ) return; paramToggleElem.previousSibling.innerText = (open)? "-": "+"; } function openExecutionPlan( parent ) { if( parent.tagName == "DIV" && parent.className == "fullXML" ) { if( parent.childNodes.length >= 4 && parent.childNodes[3].tagName == "U" ) { var fullXML = parent; fullXML.style.display = 'block'; setParameterPresentation( "Plan", fullXML ); } return; } var childNode = parent.firstChild; for( ; childNode != null; childNode = childNode.nextSibling ) { openExecutionPlan( childNode, open ); } } function allParametersFoldingCall(parent) { if( event.srcElement.innerText.indexOf( "Hide" ) == 0) { allParametersFolding( parent, false ) event.srcElement.innerText = "Show query trees"; } else { allParametersFolding( parent, true ) event.srcElement.innerText = "Hide query trees"; } } function showExecutionTree( parent ) { window.parent.G_QanApp.F_CreateExecutionTrees(); window.parent.G_QanApp.F_ShowExecutionTrees(); } function allParametersFolding( parent, open ) { if( parent.tagName == "DIV" && parent.className == "fullXML" ) { if( parent.childNodes.length >= 3 && parent.childNodes[2].tagName == "U" ) { if( open ) { parent.style.display = 'block'; setParameterPresentation( "Tree", parent ); } else { parent.style.display = 'none'; } adjustParameterHeaderState( parent, open ); updateMethodInfoClass( parent.parentElement ); } return; } var childNode = parent.firstChild; for( ; childNode != null; childNode = childNode.nextSibling ) { allParametersFolding( childNode, open ); if(childNode.nextSibling == null) break; } } function allErrorsFoldingCall(parent) { var numError = 0; if( event.srcElement.innerText.indexOf( "Hide" ) == 0) { numError = allErrorsFolding( parent, false, numError ) event.srcElement.innerText = "Show all errors"; } else { numError = allErrorsFolding( parent, true, numError ) if(!numError) { alert("There are no errors to show in this log"); event.srcElement.onclick = "" event.srcElement.style.color = "gray"; return; } event.srcElement.innerText = "Hide all errors"; } } function allErrorsFolding( parent, open, numError ) { if( parent.tagName == "DIV" && parent.className == "fullXML" && parent.innerText.indexOf( "error" ) == 0) { if( parent.childNodes.length == 2 && parent.childNodes[1].tagName == "DIV" ) { var fullXML = parent; if( open ) { fullXML.style.display = 'block'; setParameterPresentation( "XML", fullXML ); } else fullXML.style.display = 'none'; adjustErrorHeaderState( fullXML, open ); updateMethodInfoClass( fullXML.parentElement ); } numError++; return numError; } var childNode = parent.firstChild; for( ; childNode != null; childNode = childNode.nextSibling ) { numError = allErrorsFolding( childNode, open, numError ); } return numError; } function globalEventHandler() { if( event.srcElement == null ) return; var parentElement = event.srcElement.parentElement; if( event.srcElement.tagName == "U" && parentElement != null ) { if( parentElement.className == "fullXML" ) { return changeParameterPresentation(); } else if( parentElement.className == "logItemMenu" ) { return changeLogItemPresentation(); } } if( event.srcElement.tagName == "B" && event.srcElement.className == "paramType" && parentElement != null && parentElement.className == "fullXML" ) { return setSelectionOnXML( parentElement ); } if( event.srcElement.className == "logItemHeader" || parentElement != null && parentElement.className == "logItemHeader" ) { return foldingLogItem(); } } function foldingLogItem() { var v_spanLogItem = event.srcElement; if( v_spanLogItem.className != "logItemHeader" ) v_spanLogItem = v_spanLogItem.parentElement; if( !v_spanLogItem ) return; var v_divLogContainer = v_spanLogItem.parentElement; if( !v_divLogContainer ) return; var v_img = v_spanLogItem.firstChild; if( !v_img ) return; var v_bIsOpened = ( v_img.src.search(/show_area.gif$/) >= 0 ); if( v_bIsOpened ) v_img.src = v_img.src.replace( /show_area.gif$/, "hide_area.gif" ); else v_img.src = v_img.src.replace( /hide_area.gif$/, "show_area.gif" ); var v_divSibling = v_spanLogItem.nextSibling; for( ; v_divSibling; v_divSibling = v_divSibling.nextSibling ) { v_divSibling.style.display = ( v_bIsOpened )? 'none': "block"; } if( !v_bIsOpened ) setLogItemPresentation( v_divLogContainer.presentation, v_divLogContainer ); } function changeLogItemPresentation() { if( event.srcElement != null && event.srcElement.tagName != "U" ) return; var v_sPresentationType = event.srcElement.innerText; var v_divLogItemMenu = event.srcElement.parentElement; var v_divLogItemContainer = v_divLogItemMenu.parentElement; setLogItemPresentation( v_sPresentationType, v_divLogItemContainer ); } function setLogItemPresentation( v_sPresentationType, v_divLogItemContainer ) { v_divLogItemContainer.presentation = v_sPresentationType; var v_bFoundPresentation = false; var v_divLogItemPresentation = v_divLogItemContainer.firstChild; for( ; v_divLogItemPresentation; v_divLogItemPresentation = v_divLogItemPresentation.nextSibling ) { if( !v_divLogItemPresentation.presentation ) continue; var v_bMatches = (v_divLogItemPresentation.presentation.indexOf(v_sPresentationType) >= 0 ); v_divLogItemPresentation.style.display = ( v_bMatches )? "block": "none"; v_bFoundPresentation |= ( v_divLogItemPresentation.presentation == v_sPresentationType ); } if( !v_bFoundPresentation ) window.parent.G_QanApp.F_ShowPresentation( v_sPresentationType, v_divLogItemContainer ); } function changeParameterPresentation() { if( event.srcElement != null && event.srcElement.tagName != "U" ) return; var presentationType = event.srcElement.innerText; var parent = event.srcElement.parentElement.parentElement; var fullXML = event.srcElement.parentElement; setParameterPresentation( presentationType, fullXML ); } function setParameterPresentation( presentationType, fullXML ) { var treeNode, xmlNode, planNode, resultNode; var parent = fullXML.parentElement; for( var i = 0; i < fullXML.childNodes.length; ++i ) if( fullXML.childNodes[i].className == "e" ) xmlNode = fullXML.childNodes[i]; else if( fullXML.childNodes[i].className == "tree" ) treeNode = fullXML.childNodes[i]; else if( fullXML.childNodes[i].className == "plan" ) planNode = fullXML.childNodes[i]; else if( fullXML.childNodes[i].tagName == "DIV" || fullXML.childNodes[i].tagName == "IFRAME" ) { fullXML.childNodes[i].style.display = "none"; } if( xmlNode == null ) { formatXMLFromString( fullXML ); for( var i = 0; i < fullXML.childNodes.length; ++i ) if( fullXML.childNodes[i].className == "e" ) xmlNode = fullXML.childNodes[i]; } if( presentationType == "Tree" ) { fullXML.presentation = "queryTree"; if( treeNode ) treeNode.style.display = "block"; else buildQueryTree( fullXML, unwindQuerySet ); if( xmlNode ) xmlNode.style.display = "none"; if( planNode ) planNode.style.display = "none"; if( resultNode ) resultNode.style.display = "none"; } else if( presentationType == "Plan" ) { fullXML.presentation = "queryPlan"; if( planNode ) planNode.style.display = "block"; else buildQueryTree( fullXML, unwindPlanQuerySet ); if( xmlNode ) xmlNode.style.display = "none"; if( treeNode ) treeNode.style.display = "none"; } else { fullXML.presentation = "XML"; if( treeNode ) treeNode.style.display = "none"; if( planNode ) planNode.style.display = "none"; if( xmlNode ) { xmlNode.style.display = "block"; } } } function longParameterFolding() { var paramType = event.srcElement.parentElement.innerText.split(" ")[0]; var parent = event.srcElement.parentElement.parentElement.parentElement; var children = parent.childNodes; } function updateMethodInfoClass( methodInfo ) { var open = false; var children = methodInfo.childNodes; for( i = 0; i < children.length; ++i ) { if( children[i].className != "fullXML" ) continue; if( children[i].style.display == "block" ) { open = true; break; } } if( open && methodInfo.className == "methodInfo" ) methodInfo.className = "methodInfoOpen"; if( !open && methodInfo.className == "methodInfoOpen" ) methodInfo.className = "methodInfo"; } function parameterFolding() { var paramType = event.srcElement.innerText.split(" ")[0]; var parent = event.srcElement.parentElement.parentElement; var plus = event.srcElement.previousSibling; var children = parent.childNodes; for( i = 0; i < children.length; ++i ) { if( children[i].className != "fullXML" ) continue; var fullXML = children[i]; var firstTimeOpened = (children[i].style.display == ''); var switchedToTreeView = false; if( fullXML.innerText.indexOf( paramType ) == 0) { if( fullXML.style.display == '' || fullXML.style.display == 'none' ) { fullXML.style.display = 'block'; plus.innerHTML = '-'; if( firstTimeOpened ) { var childNode = fullXML.firstChild; for( ; childNode != null; childNode = childNode.nextSibling ) if( childNode.tagName == "U" ) break; setParameterPresentation( (childNode)? "Tree": "XML", fullXML); switchedToTreeView = true; } } else { children[i].style.display = 'none'; plus.innerHTML = '+'; break; } break; } } updateMethodInfoClass( parent ); event.cancelBubble = true; } function setSelectionOnXML( fullXML ) { var range = document.selection.createRange(); var xmlChildren = fullXML.children; for( j = 0; j < xmlChildren.length; ++j ) { if( xmlChildren[j].tagName != 'DIV' ) continue; range.moveToElementText( xmlChildren[j] ); try{ range.select(); } catch (error) {}; } } function toggleXmlContent() { var xmlLineTag; var xmlElemTag = event.srcElement; for( ; xmlElemTag; xmlElemTag = xmlElemTag.parentElement ) { if( xmlElemTag.tagName == 'DIV' && xmlElemTag.className == 'c' ) xmlLineTag = xmlElemTag; if( xmlElemTag.tagName == 'DIV' && xmlElemTag.className == 'e' ) break; } if( !xmlElemTag ) return; var xmlElemToHide; if( xmlLineTag ) { var children = xmlElemTag.childNodes; for( i = 0; i < children.length; ++i ) { if( children[i].tagName != 'DIV' || children[i].className != '' ) continue; xmlElemToHide = children[i]; if( xmlElemToHide.style.display == 'none' ) { xmlElemToHide.style.display = 'block'; xmlLineTag.innerHTML = xmlLineTag.innerHTML.replace( /