DmBasic Method Server Data Provider

ComTrade.EMC.Documentum.PA.Xml.MethodServer.Provider (ProbeActionModuleType)

Gets data from XML file which are related to method server node as property bag.

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityPublic
RunAsDefault
InputTypeSystem.BaseData
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
getData ProbeAction Microsoft.Windows.ScriptPropertyBagProbe Default

Source Code:

<ProbeActionModuleType ID="ComTrade.EMC.Documentum.PA.Xml.MethodServer.Provider" Accessibility="Public" Batching="false" PassThrough="false">
<Configuration>
<xsd:element minOccurs="0" name="RegPath" type="xsd:string"/>
<xsd:element minOccurs="0" name="RegKey" type="xsd:string"/>
<xsd:element minOccurs="0" name="XmlFilename" type="xsd:string"/>
<xsd:element minOccurs="0" name="ContentServerName" type="xsd:string"/>
<xsd:element minOccurs="1" name="TargetComputer" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="getData" TypeID="Windows!Microsoft.Windows.ScriptPropertyBagProbe">
<ScriptName>CTDmMPhealthMethodServerPerfProv.js</ScriptName>
<Arguments>"$Config/RegPath$" "$Config/RegKey$" "$Config/XmlFilename$" "$Config/TargetComputer$"</Arguments>
<ScriptBody><Script>
var xslMapperText = '&lt;?xml version="1.0" encoding="UTF-8"?&gt;\n' +
'&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;\n' +
' &lt;xsl:output method="xml" indent="yes" encoding="UTF-8"/&gt;\n' +
' &lt;xsl:strip-space elements="*"/&gt;\n' +
' &lt;xsl:template name="matchProcesses"&gt;\n' +
' &lt;xsl:param name="cNode" /&gt;\n' +
' &lt;xsl:param name="cname" /&gt;\n' +
' &lt;xsl:param name="csname" /&gt;\n' +
' &lt;xsl:param name="rpname" /&gt;\n' +
' &lt;xsl:param name="rpid" /&gt;\n' +
' &lt;xsl:param name="totalcpu" /&gt;\n' +
' &lt;xsl:param name="totalmemsz" /&gt;\n' +
' &lt;xsl:param name="totalvmsz" /&gt;\n' +
' &lt;xsl:param name="threadscount" /&gt;\n' +
' &lt;xsl:param name="htime" /&gt;\n' +
' &lt;xsl:variable name="mainprocess"&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$totalcpu=&amp;quot;-1&amp;quot;"&gt;\n' +
' &lt;xsl:value-of select="1"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="0"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="tcpu"&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$totalcpu=&amp;quot;-1&amp;quot;"&gt;\n' +
' &lt;xsl:value-of select="sum(descendant-or-self::*/@cpu)"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="$totalcpu"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="tmemsz"&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$totalmemsz=&amp;quot;-1&amp;quot;"&gt;\n' +
' &lt;xsl:value-of select="sum(descendant-or-self::*/@memsz)"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="$totalmemsz"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="tvmsz"&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$totalvmsz=&amp;quot;-1&amp;quot;"&gt;\n' +
' &lt;xsl:value-of select="sum(descendant-or-self::*/@vmsz)"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="$totalvmsz"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:for-each select="$cNode/process"&gt;\n' +
' &lt;xsl:sort select="@cpu"/&gt;\n' +
' &lt;DataItem&gt;\n' +
' &lt;Property Name="RepositoryName"&gt;&lt;xsl:value-of select="$rpname"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="RepositoryId"&gt;&lt;xsl:value-of select="$rpid"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ContentServerName"&gt;&lt;xsl:value-of select="$csname"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="Name"&gt;&lt;xsl:value-of select="$cname"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ProcessName"&gt;&lt;xsl:value-of select="@name"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ProcessId"&gt;&lt;xsl:value-of select="@pid"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ParentProcessId"&gt;&lt;xsl:value-of select="@ppid"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="MainProcess"&gt;&lt;xsl:value-of select="$mainprocess"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ThreadsCount"&gt;&lt;xsl:value-of select="$threadscount"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ChildCount"&gt;&lt;xsl:value-of select="count(descendant::*)"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ProcessCPU"&gt;&lt;xsl:value-of select="@cpu"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ProcessMemoryWorkingSet"&gt;&lt;xsl:value-of select="@memsz"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ProcessMemoryPrivateBytes"&gt;&lt;xsl:value-of select="@vmsz"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="OverallChildsCPU"&gt;&lt;xsl:value-of select="sum(descendant::*/@cpu)"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="OverallChildsMemoryWorkingSet"&gt;&lt;xsl:value-of select="sum(descendant::*/@memsz)"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="OverallChildsMemoryPrivateBytes"&gt;&lt;xsl:value-of select="sum(descendant::*/@vmsz)"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="OverallCPU"&gt;&lt;xsl:value-of select="$tcpu"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="OverallMemoryWorkingSet"&gt;&lt;xsl:value-of select="$tmemsz"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="OverallMemoryPrivateBytes"&gt;&lt;xsl:value-of select="$tvmsz"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="ProcessCheckTime"&gt;&lt;xsl:value-of select="$htime"/&gt;&lt;/Property&gt;\n' +
' &lt;Property Name="CommandLine"&gt;&lt;xsl:value-of select="@params"/&gt;&lt;/Property&gt;\n' +
' &lt;/DataItem&gt;\n' +
' &lt;xsl:call-template name="matchProcesses"&gt;\n' +
' &lt;xsl:with-param name="cNode" select="." /&gt;\n' +
' &lt;xsl:with-param name="cname" select="$cname" /&gt;\n' +
' &lt;xsl:with-param name="csname" select="$csname" /&gt;\n' +
' &lt;xsl:with-param name="rpname" select="$rpname" /&gt;\n' +
' &lt;xsl:with-param name="rpid" select="$rpid" /&gt;\n' +
' &lt;xsl:with-param name="totalcpu" select="$tcpu" /&gt;\n' +
' &lt;xsl:with-param name="totalmemsz" select="$tmemsz" /&gt;\n' +
' &lt;xsl:with-param name="totalvmsz" select="$tvmsz" /&gt;\n' +
' &lt;xsl:with-param name="threadscount" select="$threadscount" /&gt;\n' +
' &lt;xsl:with-param name="htime" select="$htime" /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="matchMthdsvrs"&gt;\n' +
' &lt;xsl:for-each select="repositories/repository/contentservers/contentserver/mthdsvr"&gt;\n' +
' &lt;xsl:if test="health and health/@valid=' + "'true'" + '"&gt;\n' +
' &lt;xsl:call-template name="matchProcesses"&gt;\n' +
' &lt;xsl:with-param name="cNode" select="health" /&gt;\n' +
' &lt;xsl:with-param name="cname" select="@name" /&gt;\n' +
' &lt;xsl:with-param name="csname" select="../@name" /&gt;\n' +
' &lt;xsl:with-param name="rpname" select="../../../@name" /&gt;\n' +
' &lt;xsl:with-param name="rpid" select="../../../@id" /&gt;\n' +
' &lt;xsl:with-param name="totalcpu" select="-1" /&gt;\n' +
' &lt;xsl:with-param name="totalmemsz" select="-1" /&gt;\n' +
' &lt;xsl:with-param name="totalvmsz" select="-1" /&gt;\n' +
' &lt;xsl:with-param name="threadscount" select="@method_server_threads" /&gt;\n' +
' &lt;xsl:with-param name="htime" select="health/@time" /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template match="*"&gt;\n' +
' &lt;Collection&gt;\n' +
' &lt;xsl:call-template name="matchMthdsvrs"/&gt;\n' +
' &lt;/Collection&gt;\n' +
' &lt;/xsl:template&gt;\n' +
'&lt;/xsl:stylesheet&gt;\n';
// common
var oAPI = new ActiveXObject("MOM.ScriptAPI");
var errNo = 0;
var errDesc = 0;
CTRegistry = function(sHostname) {
var m_ErrorCode = 0;
var m_ErrorDescription = "";
var M_HKEY_CLASSES_ROOT = 0x80000000;
var M_HKEY_CURRENT_USER = 0x80000001;
var M_HKEY_LOCAL_MACHINE = 0x80000002;
var M_HKEY_USERS = 0x80000003;
var M_HKEY_CURRENT_CONFIG = 0x80000005;
var M_HKEY_DYN_DATA = 0x80000006; // Windows 95 / 98 only;
var M_REG_SZ = 1;
var M_REG_EXPAND_SZ = 2;
var M_REG_BINARY = 3;
var M_REG_DWORD = 4;
var M_REG_DWORD_BIG_ENDIAN = 5;
var M_REG_LINK = 6;
var M_REG_MULTI_SZ = 7;
var M_REG_RESOURCE_LIST = 8;
var M_REG_FULL_RESOURCE_DESCRIPTOR = 9;
var M_REG_RESOURCE_REQUIREMENTS_LIST = 10;
var M_REG_QWORD = 11;
var M_REG_KEY_QUERY_VALUE = 0x0001;
var M_REG_KEY_SET_VALUE = 0x0002;
var M_REG_KEY_CREATE_SUB_KEY = 0x0004;
var M_REG_KEY_DELETE = 0x00010000;
var m_RegProviderName ='StdRegProv';
var m_ObjWmiService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + sHostname + "\\root\\default");
var m_ObjRegistry = m_ObjWmiService.Get(m_RegProviderName);
var ResetErrors = function() {
m_ErrorCode = 0;
m_ErrorDescription = "";
};
this.HKEY_CLASSES_ROOT = function() {
return M_HKEY_CLASSES_ROOT;
};
this.HKEY_CURRENT_USER = function() {
return M_HKEY_CURRENT_USER;
};
this.HKEY_LOCAL_MACHINE = function() {
return M_HKEY_LOCAL_MACHINE;
};
this.HKEY_USERS = function() {
return M_HKEY_USERS;
};
this.HKEY_CURRENT_CONFIG = function() {
return M_HKEY_CURRENT_CONFIG;
};
this.HKEY_DYN_DATA = function() {
return M_HKEY_DYN_DATA;
};
this.REG_SZ = function() {
return M_REG_SZ;
};
this.REG_EXPAND_SZ = function() {
return M_REG_EXPAND_SZ;
};
this.REG_BINARY = function() {
return M_REG_BINARY;
};
this.REG_DWORD = function() {
return M_REG_DWORD;
};
this.REG_DWORD_BIG_ENDIAN = function() {
return M_REG_DWORD_BIG_ENDIAN;
};
this.REG_LINK = function() {
return M_REG_LINK;
};
this.REG_MULTI_SZ = function() {
return M_REG_MULTI_SZ;
};
this.REG_RESOURCE_LIST = function() {
return M_REG_RESOURCE_LIST;
};
this.REG_FULL_RESOURCE_DESCRIPTOR = function() {
return M_REG_FULL_RESOURCE_DESCRIPTOR;
};
this.REG_RESOURCE_REQUIREMENTS_LIST = function() {
return M_REG_RESOURCE_REQUIREMENTS_LIST;
};
this.REG_QWORD = function() {
return M_REG_QWORD;
};
this.REG_KEY_QUERY_VALUE = function() {
return M_REG_KEY_QUERY_VALUE;
};
this.REG_KEY_SET_VALUE = function() {
return M_REG_KEY_SET_VALUE;
};
this.REG_KEY_CREATE_SUB_KEY = function() {
return M_REG_KEY_CREATE_SUB_KEY;
};
this.REG_KEY_DELETE = function() {
return M_REG_KEY_DELETE;
};
this.GetStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.sValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.GetExpandedStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetExpandedStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.sValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
var trim = function (str) {
return str.replace(/^\s+|\s+$/g,"");
};
this.GetBinaryValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetBinaryValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = "";
for (var k = 0; k &lt; out_params.uValue.toArray().length; ++k) {
var tVal = out_params.uValue(k).toString(16);
if (tVal.length == 1) {
tVal = "0" + tVal;
}
oValue[0] += tVal + " ";
}
oValue[0] = trim(oValue[0]);
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.GetDwordValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetDWORDValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.uValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.GetQwordValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetQWORDValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.uValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.GetMultiStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetMultiStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sValue.toArray().length; ++k) {
oValue[k] = out_params.sValue(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.CheckPermission = function ( sHive, sRegKey, oPermission, oGranted) {
try {
ResetErrors();
oGranted.length = 0;
var func_name = 'CheckAccess';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.uRequired = oPermission;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oGranted[0] = out_params.bGranted;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.EnumerateValues = function ( sHive, sRegKey, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
oValue[k] = out_params.sNames(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.EnumerateSubKeys = function ( sHive, sRegKey, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'EnumKey';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
oValue[k] = out_params.sNames(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.RegKeyExists = function ( sHive, sRegKey) {
try {
ResetErrors();
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.RegValueExists = function ( sHive, sRegKey, sRegValue) {
try {
ResetErrors();
var tmpA = sRegValue.toLowerCase();
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
if (out_params.sNames(k).toLowerCase() == tmpA) {
return true;
}
}
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
return false;
};
this.ErrorCode = function() {
return m_ErrorCode;
};
this.ErrorDescription = function() {
return m_ErrorDescription;
};
this.destroy = function() {
m_ObjRegistry = null;
m_ObjWmiService = null;
};
};
CTXml = function() {
var mRetryCount = 100;
var mXmlFile = "";
var mLock = "";
var mErrorCode = 0;
var mErrorDescription = "";
var mPropertyBagXml = "";
var mFullPropertBagXmlText = "";
var mAutoCreatePropertyBag = false;
var mXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
mXmlDoc.setProperty("SelectionLanguage", "XPath");
var mFileSystemObject = new ActiveXObject("Scripting.FileSystemObject");
this.setAutoCreatePropertyBag = function (pValue) {
mAutoCreatePropertyBag = pValue;
};
this.load = function(sXmlFile) {
mLock = sXmlFile + ".lck";
try {
if (!mFileSystemObject.FileExists(sXmlFile))
{
throw new Error(4, "File '"+ sXmlFile + "' not found.");
}
mXmlFile = sXmlFile;
mXmlDoc.async = false;
var repeatCount = mRetryCount;
var fileLock = null;
do {
try
{
fileLock = mFileSystemObject.OpenTextFile(mLock, 8, true);
break;
} catch(e)
{
repeatCount--;
WScript.Sleep(100);
}
} while (repeatCount &gt; 0);
if (repeatCount &lt; 1)
{
throw new Error(5, "Could not acquire lock for reading file '" + mLock + "'.");
}
var flc = "&lt;xmlfile /&gt;";
var fl = mFileSystemObject.OpenTextFile(sXmlFile, 1);
if (fl) {
if (!fl.AtEndOfStream) {
flc = fl.ReadAll();
}
fl.Close();
} else {
throw new Error(5, "Error loading data file '"+ sXmlFile + "'. ");
}
if (fileLock) {
WScript.Sleep(300);
fileLock.Close();
}
if (!mXmlDoc.loadXML(flc))
{
throw new Error(6, "Error reading data from file '"+ sXmlFile + "'. Error code: " + mXmlDoc.parseError.reason);
}
mPropertyBagXml = "";
mFullPropertBagXmlText = "";
if (this.createXmlNodePropertyBagContent()) {
mFullPropertBagXmlText = mPropertyBagXml;
} else {
mPropertyBagXml = "";
mFullPropertBagXmlText = "";
}
return true;
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
mPropertyBagXml = "";
mFullPropertBagXmlText = "";
}
return false;
};
this.loadXml = function(sXmlContent) {
try {
mLock = "";
mPropertyBagXml = "";
mFullPropertBagXmlText = "";
if (mXmlDoc.loadXML(sXmlContent)) {
if (this.createXmlNodePropertyBagContent()) {
mFullPropertBagXmlText = mPropertyBagXml;
} else {
mPropertyBagXml = "";
mFullPropertBagXmlText = "";
}
return true;
} else {
throw new Error(6, "Error loading XML content Error code: " + xmlDoc.parseError.reason);
}
} catch (e) {
mPropertyBagXml = "";
mFullPropertBagXmlText = "";
mErrorCode = e.number;
mErrorDescription = e.description;
return false;
}
};
this.destroy = function() {
mXmlDoc = null;
mFileSystemObject = null;
};
this.setRetryCount = function(nCount) {
try {
if (isNumeric(nCount)) {
mRetryCount = nCount;
}
else {
throw new Error(7,"Invalid parameter 'retry count'.");
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
};
this.setLockFilename = function(sLock) {
mLock = sLock;
};
var isNumeric = function (nArg) {
try {
var re = /^-{0,1}\d*\.{0,1}\d+$/;
return (re.test(nArg));
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
return false;
}
};
var isSame = function(sArg1, sArg2) {
try {
var re = new RegExp("^"+sArg2+"$", "img");
return (re.test(sArg1));
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
return false;
}
};
var isArray = function(oObj) {
try {
return (oObj.length != undefined);
} catch (e) {
return false;
}
};
var resetErrors = function () {
mErrorCode = 0;
mErrorDescription = "";
};
this.xslTransformation = function(xslText) {
try {
resetErrors();
var oXsl = new ActiveXObject("Microsoft.XMLDOM");
oXsl.setProperty("SelectionLanguage", "XPath");
oXsl.async = false;
if (oXsl.loadXML(xslText)) {
var rtVal = mXmlDoc.transformNode(oXsl);
oXsl = null;
return rtVal;
} else {
throw new Error(1, oXsl.parseError.reason);
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.applyPropertyBagXslThenCreatePropertyBag = function(xslText, oApi) {
try {
resetErrors();
var oXsl = new ActiveXObject("Microsoft.XMLDOM");
oXsl.setProperty("SelectionLanguage", "XPath");
oXsl.async = false;
if (oXsl.loadXML(xslText)) {
var transXml = mXmlDoc.transformNode(oXsl);
if (transXml) {
var oXml = new ActiveXObject("Microsoft.XMLDOM");
oXml.setProperty("SelectionLanguage", "XPath");
oXml.async = false;
if (oXml.loadXML(transXml)) {
var nds = oXml.selectNodes("//DataItem");
if (nds &amp;&amp; (nds.length &gt; 0)) {
for (var k=0; k &lt; nds.length; k++) {
var oBag = oApi.CreatePropertyBag();
if (nds[k] &amp;&amp; nds[k].hasChildNodes()) {
for (var n=0; n &lt; nds[k].childNodes.length; n++) {
oBag.AddValue(nds[k].childNodes[n].attributes[0].value, nds[k].childNodes[n].text);
}
}
oApi.AddItem(oBag);
oBag = null;
}
} else {
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
} else {
throw new Error(2, oXml.parseError.reason);
}
oXml = null;
}
oXsl = null;
return true;
} else {
throw new Error(1, oXsl.parseError.reason);
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return false;
};
this.getXmlContent = function() {
try {
resetErrors();
return mXmlDoc.xml;
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getXmlDoc = function() {
return mXmlDoc;
};
var getParentCount = function (nd) {
var i = 0;
var u = nd;
while (u &amp;&amp; u.parentNode &amp;&amp; u.parentNode.nodeType == 1)
{
i++;
u = u.parentNode;
}
return i;
};
var createXmlTree = function (nd, properties, oBag, nLevel, nCallNumber, pBagFlag) {
var rtVal = false;
var indx = properties.length;
if (nd &amp;&amp; ((nd.nodeType == 1) || (nd.nodeType == 3))) {
if (nd.nodeType == 1) {
properties[indx] = new Array();
} else {
indx--;
}
if ((nd.nodeType == 1) &amp;&amp; (undefined != nd.tagName)) {
properties[indx].nodeName = nd.tagName;
properties[indx].nLevel = nLevel;
properties[indx].parentCount = getParentCount(nd);
}
}
if (nd.attributes &amp;&amp; nd.attributes.length) {
for (var k = 0; k &lt; nd.attributes.length; k++) {
properties[indx][k] = new Object();
properties[indx][k].name = nd.attributes(k).name;
properties[indx][k].value = nd.attributes(k).value;
}
}
if (nd.nodeValue) {
var inx = properties[indx].length;
properties[indx][inx] = new Object();
if (nd.nodeType == 1) {
properties[indx][inx].name = nd.nodeName;
} else {
properties[indx][inx].name = null;
}
properties[indx][inx].value = nd.nodeValue;
}
if (nd.hasChildNodes()) {
for (var j=0; j &lt; nd.childNodes.length; j++) {
var rtVal1 = createXmlTree(nd.childNodes(j), properties, oBag, j + nLevel, ++nCallNumber, pBagFlag);
rtVal = rtVal || rtVal1;
--nCallNumber;
}
}
if (nCallNumber == 0) {
var ky = null;
var mAdded = false;
for (var i = 0; i &lt; properties.length; i++) {
if (i &gt; 0) {
if (properties[i].parentCount &lt; properties[i-1].parentCount) {
while (properties[i].parentCount &lt;= properties[i-1].parentCount) {
properties.splice(i-1, 1);
i--;
if (ky) {
ky = ky.replace(/(.*)\/.+/i, "\$1");
}
}
} else {
if (properties[i].nLevel != properties[i-1].nLevel) {
properties.splice(i-1, 1);
i--;
if (ky) {
ky = ky.replace(/(.*)\/.+/i, "\$1");
}
}
}
}
if (properties[i].nodeName != undefined)
{
if (ky) {
ky += "/" + properties[i].nodeName;
} else {
ky = properties[i].nodeName;
}
} else {
ky = null;
}
for (var n = 0; n &lt; properties[i].length; n++) {
if (properties[i][n] &amp;&amp; properties[i][n].name &amp;&amp; (properties[i][n].name != undefined)) {
mAdded = true;
if (ky) {
if (pBagFlag) {
oBag.AddValue(properties[i].nLevel + "/" + ky+ "/" + properties[i][n].name, properties[i][n].value);
}
mPropertyBagXml += ' &lt;Property Name="' +properties[i].nLevel + "/" + ky+ "/" + properties[i][n].name + '"&gt;'+properties[i][n].value+'&lt;/Property&gt;\r\n';
} else {
if (pBagFlag) {
oBag.AddValue(properties[i].nLevel + "/" + properties[i][n].name, properties[i][n].value);
}
mPropertyBagXml += ' &lt;Property Name="' +properties[i].nLevel + "/" + properties[i][n].name + '"&gt;'+properties[i][n].value+'&lt;/Property&gt;\r\n';
}
} else {
if (ky) {
mAdded = true;
if (pBagFlag) {
oBag.AddValue(properties[i].nLevel + "/" + ky, properties[i][n].value);
}
mPropertyBagXml += ' &lt;Property Name="' +properties[i].nLevel + "/" + ky + '"&gt;'+properties[i][n].value+'&lt;/Property&gt;\r\n';
}
}
}
}
if (mAdded) {
rtVal = true;
}
while (properties.length)
{
var pp = properties.pop();
pp = null;
}
}
return rtVal;
};
this.createPropertyBagFromXmlTree = function() {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
var rtVal = false;
try {
var rN = null;
if (arguments.length == 2) {
rN = arguments[1];
} else {
rN = mXmlDoc.documentElement;
}
if (rN) {
if (isArray(rN)) {
if (rN.length &gt; 0) {
for (var z = 0; z &lt; rN.length; z++) {
var properties = new Array();
var rtVal1 = createXmlTree(rN[z], properties, oBag, z, 0, true);
rtVal = rtVal || rtVal1;
properties = null;
}
}
} else {
var properties = new Array();
rtVal = createXmlTree(rN, properties, oBag, 0, 0, true);
properties = null;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
rtVal = false;
}
if (rtVal) {
oApi.AddItem(oBag);
}
oBag = null;
return rtVal;
};

this.getXmlNodePropertyBagContent = function() {
return mPropertyBagXml;
};

this.getXmlContentAsPropertyBag = function() {
return mFullPropertBagXmlText;
};

this.createXmlNodePropertyBagContent = function() {
var rtVal = false;
if (mAutoCreatePropertyBag) {
var hdr = "&lt;Collection&gt;\n\r &lt;DataItem&gt;\n\r";
var ftr = " &lt;/DataItem&gt;\n\r&lt;/Collection&gt;";
mPropertyBagXml = "&lt;Collection&gt;\n\r &lt;DataItem&gt;\n\r";
try {
var rN = null;
if (arguments.length == 1) {
rN = arguments[0];
} else {
rN = mXmlDoc.documentElement;
}
if (rN) {
if (isArray(rN)) {
if (rN.length &gt; 0) {
for (var z = 0; z &lt; rN.length; z++) {
var properties = new Array();
var rtVal1 = createXmlTree(rN[z], properties, null, z, 0, false);
rtVal = rtVal || rtVal1;
properties = null;
}
}
} else {
var properties = new Array();
rtVal = createXmlTree(rN, properties, null, 0, 0, false);
properties = null;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
rtVal = false;
}
if (rtVal) {
mPropertyBagXml += ftr;
} else {
mPropertyBagXml = hdr + ftr;
}
}
return rtVal;
};

var makeTree = function (nd, properties, oApi) {
var indx = properties.length;
if (nd &amp;&amp; ((nd.nodeType == 1) || (nd.nodeType == 3))) {
if (nd.nodeType == 1) {
properties[indx] = new Array();
} else {
indx--;
}
if ((nd.nodeType == 1) &amp;&amp; (undefined != nd.tagName)) {
properties[indx].nodeName = nd.tagName;
}
}
if (nd.attributes &amp;&amp; nd.attributes.length) {
for (var k = 0; k &lt; nd.attributes.length; k++) {
properties[indx][k] = new Object();
properties[indx][k].name = nd.attributes(k).name;
properties[indx][k].value = nd.attributes(k).value;
}
}
if (nd.nodeValue) {
var inx = properties[indx].length;
properties[indx][inx] = new Object();
if (nd.nodeType == 1) {
properties[indx][inx].name = nd.nodeName;
} else {
properties[indx][inx].name = null;
}
properties[indx][inx].value = nd.nodeValue;
}
if (nd.hasChildNodes()) {
for (var j=0; j &lt; nd.childNodes.length; j++) {
makeTree(nd.childNodes(j), properties, oApi);
}
} else {
var oBag = oApi.CreatePropertyBag();
var ky = null;
var mAdded = false;
for (var i = 0; i &lt; properties.length; i++) {
if (properties[i].nodeName != undefined)
{
if (ky) {
ky += "/" + properties[i].nodeName;
} else {
ky = properties[i].nodeName;
}
} else {
ky = null;
}
for (var n = 0; n &lt; properties[i].length; n++) {
if (properties[i][n] &amp;&amp; properties[i][n].name &amp;&amp; (properties[i][n].name != undefined)) {
mAdded = true;
if (ky) {
oBag.AddValue(ky+ "/" + properties[i][n].name, properties[i][n].value);
} else {
oBag.AddValue(properties[i][n].name, properties[i][n].value);
}
} else {
if (ky) {
mAdded = true;
oBag.AddValue(ky, properties[i][n].value);
}
}
}
}
if (mAdded) {
oApi.AddItem(oBag);
}
oBag = null;
if (properties.length) {
var pp = properties.pop();
pp = null;
}
}
var pnds = getParentCount(nd);
while (pnds &lt; properties.length)
{
var pp = properties.pop();
pp = null;
}
};
this.makePropertyBagTree = function() {
var oApi = null;
var apiCreated = false;
try {
if (arguments.length &gt; 0) {
oApi = arguments[0];
} else {
oApi = new ActiveXObject("MOM.ScriptAPI");
apiCreated = true;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
return;
}
try {
var rN = null;
if (arguments.length == 2) {
rN = arguments[1];
} else {
rN = mXmlDoc.documentElement;
}
if (isArray(rN)) {
if (rN.length &gt; 0) {
for (var z = 0; z &lt; rN.length; z++) {
var properties = new Array();
makeTree(rN[z], properties, oApi);
properties = null;
}
oApi.ReturnItems();
} else {
var aBag = oApi.CreatePropertyBag();
oApi.Return(aBag);
aBag = null;
}
} else {
var properties = new Array();
makeTree(rN, properties, oApi);
properties = null;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
var aBag = oApi.CreatePropertyBag();
oApi.Return(aBag);
aBag = null;
}
if (apiCreated) {
oApi = null;
}
};
this.getNodes = function () {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
if (mXmlDoc.documentElement) {
if (sNodeName &amp;&amp; (sNodeName.length &gt; 0)) {
var rootNode = mXmlDoc.documentElement;
var rtn = new Array();
if (isSame(rootNode.nodeName, sNodeName)) {
rtn[0] = rootNode;
return rtn;
} else {
var nd = rootNode.getElementsByTagName(sNodeName);
if (!nd) {
return null;
}
if (sAttributeName) {
if (isArray(nd)) {
var n = 0;
for (var k=0; k &lt; nd.length; ++k) {
var nd1 = nd[k].getAttributeNode(sAttributeName);
if (nd1) {
if (isSame(nd1.value, sAttributeValue)) {
rtn[n] = nd[k];
n++;
}
}
}
if (n == 0) {
return null;
} else {
return rtn;
}
} else {
var nd1 = nd.getAttributeNode(sAttributeName);
if (isSame(nd1.value, sAttributeValue)) {
rtn[0] = nd;
return rtn;
} else {
return null;
}
}
} else {
if (isArray(nd)) {
return nd;
} else {
rtn[0] = nd;
return rtn;
}
}
}
}
else {
return mXmlDoc.documentElement;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNode = function () {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
if (mXmlDoc.documentElement) {
if (sNodeName &amp;&amp; (sNodeName.length &gt; 0)) {
var rootNode = mXmlDoc.documentElement;
if (isSame(rootNode.nodeName, sNodeName)) {
return rootNode;
} else {
var nd = rootNode.getElementsByTagName(sNodeName);
if (!nd) {
return null;
}
if (sAttributeName) {
if (isArray(nd)) {
for (var k=0; k &lt; nd.length; ++k) {
var nd1 = nd[k].getAttributeNode(sAttributeName);
if (nd1) {
if (isSame(nd1.value, sAttributeValue)) {
return nd[k];
}
}
}
return null;
} else {
var nd1 = nd.getAttributeNode(sAttributeName);
if (isSame(nd1.value, sAttributeValue)) {
return nd;
} else {
return null;
}
}
} else {
if (isArray(nd)) {
return nd[0];
} else {
return nd;
}
}
}
}
else {
return mXmlDoc.documentElement;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodeContent = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var node = this.getNode(sNodeName, sAttributeName, sAttributeValue);
if (node) {
return node.xml;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodesContent = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var nodes = this.getNodes(sNodeName, sAttributeName, sAttributeValue);
if (nodes) {
var rtv = "";
for (var k = 0; k &lt; nodes.length; ++k) {
rtv += nodes[k].xml + "\r\n";
}
return rtv;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodeValue = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var node = this.getNode(sNodeName, sAttributeName, sAttributeValue);
if (node) {
if (node.hasChildNodes) {
return node.firstChild.nodeTypedValue;
} else {
return node.nodeTypedValue;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodesValue = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var nodes = this.getNodes(sNodeName, sAttributeName, sAttributeValue);
if (nodes) {
var rtarr = new Array();
for (var k = 0; k &lt; nodes.length; ++k) {
if (nodes[k].hasChildNodes) {
rtarr[k] = nodes[k].firstChild.nodeTypedValue;
} else {
rtarr[k] = nodes[k].nodeTypedValue;
}
}
return rtarr;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getChildNode = function() {
try {
resetErrors();
var sChildName = null;
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
break;
sChildName = arguments[0];
case 2:
sChildName = arguments[0];
sNodeName = arguments[1];
break;
case 4:
sChildName = arguments[0];
sNodeName = arguments[1];
sAttributeName = arguments[2];
sAttributeValue = arguments[3];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are childnode, nodeName and optionally attributeName with attributeValue");
}
var node = this.getNode(sNodeName, sAttributeName, sAttributeValue);
if (node) {
if (node.hasChildNodes) {
for (var k =0; k &lt; node.childNodes.length; ++k) {
if (isSame(node.childNodes[k].nodeName, sChildName)) {
return node.childNodes[k];
}
}
return null;
} else {
return null;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getChildNodeValue = function() {
try {
resetErrors();
var sChildName = null;
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sChildName = arguments[0];
break;
case 2:
sChildName = arguments[0];
sNodeName = arguments[1];
break;
case 4:
sChildName = arguments[0];
sNodeName = arguments[1];
sAttributeName = arguments[2];
sAttributeValue = arguments[3];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are childnode, nodeName and optionally attributeName with attributeValue");
}
var node = this.getChildNode(sChildName, sNodeName, sAttributeName, sAttributeValue);
if (node) {
return node.nodeTypedValue;
} else {
return null;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getChildNodeContent = function() {
try {
resetErrors();
var sChildName = null;
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sChildName = arguments[0];
break;
case 2:
sChildName = arguments[0];
sNodeName = arguments[1];
break;
case 4:
sChildName = arguments[0];
sNodeName = arguments[1];
sAttributeName = arguments[2];
sAttributeValue = arguments[3];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are childnode, nodeName and optionally attributeName with attributeValue");
}
var node = this.getChildNode(sChildName, sNodeName, sAttributeName, sAttributeValue);
if (node) {
return node.xml;
} else {
return null;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodeAttributeNode = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var ssAttributeName = null;
var ssAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sAttributeName = arguments[0];
break;
case 2:
sAttributeName = arguments[0];
sNodeName = arguments[1];
break;
case 4:
sAttributeName = arguments[0];
sNodeName = arguments[1];
ssAttributeName = arguments[2];
ssAttributeValue = arguments[3];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName, attributeName and optionally match attributeName with attributeValue");
}
var nodes = this.getNode(sNodeName, ssAttributeName, ssAttributeValue);
if (nodes) {
if (isArray(nodes)) {
for (var k = 0; k &lt; nodes.length; ++k) {
var atn = nodes[k].getAttributeNode(sAttributeName);
if (atn) {
return atn;
}
}
return null;
} else {
return nodes.getAttributeNode(sAttributeName);
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodesAttributeNode = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var ssAttributeName = null;
var ssAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sAttributeName = arguments[0];
break;
case 2:
sAttributeName = arguments[0];
sNodeName = arguments[1];
break;
case 4:
sAttributeName = arguments[0];
sNodeName = arguments[1];
ssAttributeName = arguments[2];
ssAttributeValue = arguments[3];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName, attributeName and optionally match attributeName with attributeValue");
}
var nodes = this.getNodes(sNodeName, ssAttributeName, ssAttributeValue);
if (nodes) {
var rtn = new Array();
if (isArray(nodes)) {
var n = 0;
for (var k = 0; k &lt; nodes.length; ++k) {
var atn = nodes[k].getAttributeNode(sAttributeName);
if (atn) {
rtn[n] = atn;
n++;
}
}
if (n == 0) {
return null;
} else {
return rtn;
}
} else {
rtn[0] = nodes.getAttributeNode(sAttributeName);
return rtn;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodeAttributeNodeValue = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var ssAttributeName = null;
var ssAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sAttributeName = arguments[0];
break;
case 2:
sAttributeName = arguments[0];
sNodeName = arguments[1];
break;
case 4:
sAttributeName = arguments[0];
sNodeName = arguments[1];
ssAttributeName = arguments[2];
ssAttributeValue = arguments[3];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName, attributeName and optionally match attributeName with attributeValue");
}
var node = this.getNodeAttributeNode(sAttributeName, sNodeName, ssAttributeName, ssAttributeValue);
if (node) {
return node.value;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodesAttributeNodeValue = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var ssAttributeName = null;
var ssAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sAttributeName = arguments[0];
break;
case 2:
sAttributeName = arguments[0];
sNodeName = arguments[1];
break;
case 4:
sAttributeName = arguments[0];
sNodeName = arguments[1];
ssAttributeName = arguments[2];
ssAttributeValue = arguments[3];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName, attributeName and optionally match attributeName with attributeValue");
}
var nodes = this.getNodesAttributeNode(sAttributeName, sNodeName, ssAttributeName, ssAttributeValue);
if (nodes) {
var rtn = new Array();
var n = 0;
for (var k = 0; k &lt; nodes.length; ++k) {
var atn = nodes[k].getAttributeNode(sAttributeName);
if (atn) {
rtn[k] = atn.value;
n++;
}
}
if (n == 0) {
return null;
} else {
return rtn;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getChilds = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var nodes = this.getNodes(sNodeName, sAttributeName, sAttributeValue);
if (nodes) {
var rtarr = new Array();
var j = 0;
for (var k = 0; k &lt; nodes.length; ++k) {
if (nodes[k].hasChildNodes) {
for (var n = 0; n &lt; nodes[k].childNodes.length; ++n) {
rtarr[j] = nodes[k].childNodes[n];
j++;
}
}
}
if (rtarr.length &gt; 0) {
return rtarr;
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getNodeChilds = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var node = this.getNodes(sNodeName, sAttributeName, sAttributeValue);
if (node) {
return node.childNodes;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.getChildList = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var nodes = this.getChilds(sNodeName, sAttributeName, sAttributeValue);
if (nodes) {
var cList = new Array();
for (var n=0; n &lt; nodes.length; ++n) {
cList[n] = nodes[n].nodeName;
}
return cList;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.nodeExists = function() {
try {
resetErrors();
var sNodeName = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodeName = arguments[0];
break;
case 3:
sNodeName = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
return (this.getNode(sNodeName, sAttributeName, sAttributeValue) != null);
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return false;
};
this.selectNodes = function () {
try {
resetErrors();
var sNodePath = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodePath = arguments[0];
break;
case 3:
sNodePath = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var rootNode = mXmlDoc.documentElement;
if (sNodePath) {
var nds = rootNode.selectNodes(sNodePath);
var rtn = new Array();
if (sAttributeName) {
if (nds) {
if (isArray(nds)) {
var n = 0;
for (var k = 0; k &lt; nds.length; ++k) {
if (isSame(nds[k].value, sAttributeValue)) {
rtn[n] = nds[k];
n++;
}
}
if (n==0) {
return null;
} else {
return rtn;
}
} else {
var nd = nds.getAttributeNode(sAttributeName);
if (isSame(nd.value, sAttributeValue)) {
return nd;
}
return null;
}
}
}
return nds;
} else {
return rootNode;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.selectSingleNode = function() {
try {
resetErrors();
var sNodePath = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodePath = arguments[0];
break;
case 3:
sNodePath = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var rootNode = mXmlDoc.documentElement;
if (sNodePath) {
var nds = rootNode.selectNodes(sNodePath);
if (nds) {
if (isArray(nds)) {
if (sAttributeName) {
for (var k = 0; k &lt; nds.length; ++k) {
var nda = nds[k].getAttributeNode(sAttributeName);
if (nda) {
if (isSame(nda.value, sAttributeValue)) {
return nds[k];
}
}
}
} else {
return nds[0];
}
} else {
if (sAttributeName) {
var nda = nsd.getAttributeNode(sAttributeName);
if (nda) {
if (isSame(nda.value, sAttributeValue)) {
return nds;
}
}
} else {
return nds;
}
}
}
return null;
} else {
return rootNode;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.selectSingleNodeValue = function () {
try {
resetErrors();
var sNodePath = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodePath = arguments[0];
break;
case 3:
sNodePath = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var node = this.selectSingleNode(sNodePath, sAttributeName, sAttributeValue);
if (node) {
return node.nodeTypedValue;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.selectSingleNodeContent = function () {
try {
resetErrors();
var sNodePath = null;
var sAttributeName = null;
var sAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sNodePath = arguments[0];
break;
case 3:
sNodePath = arguments[0];
sAttributeName = arguments[1];
sAttributeValue = arguments[2];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
var node = this.selectSingleNode(sNodePath, sAttributeName, sAttributeValue);
if (node) {
return node.xml;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return null;
};
this.nodeAttributeExists = function() {
try {
resetErrors();
var sAttributeName = null;
var sNodeName = null;
var ssAttributeName = null;
var ssAttributeValue = null;
switch (arguments.length) {
case 0:
break;
case 1:
sAttributeName = arguments[0];
break;
case 2:
sAttributeName = arguments[0];
sNodeName = arguments[1];
break;
case 4:
sAttributeName = arguments[0];
sNodeName = arguments[1];
ssAttributeName = arguments[2];
ssAttributeValue = arguments[3];
break;
default :
new Error(8,"Wrong number of arguments. Possible arguments are nodeName and optionally attributeName with attributeValue");
}
return (this.getNodeAttributeNode(sAttributeName, sNodeName, ssAttributeName, ssAttributeValue) != null);
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return false;
};
this.errorCode = function() {
return mErrorCode;
};
this.errorDescription = function() {
return mErrorDescription;
};

this.makeTextTable = function (sValueProperty, sPropertyValue) {
var xstText = '&lt;xsl:stylesheet version="1.0"\n' +
' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;\n' +
' &lt;xsl:output method="text"/&gt;\n' +
' &lt;xsl:strip-space elements="*"/&gt;\n' +
' &lt;xsl:variable name="newline" select="' + "'&amp;#10;'" + '"/&gt;\n' +
' &lt;xsl:template match="DataItem[1]"&gt;\n' +
' &lt;xsl:for-each select="Property"&gt;\n' +
' &lt;xsl:variable name="maxWidthA"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="paddingA"&gt;\n' +
' &lt;xsl:value-of select="$maxWidthA - string-length(@Name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="@Name"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$paddingA"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;xsl:call-template name="matchDataItems"&gt;\n' +
' &lt;xsl:with-param name="pnode" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template match="DataItem"&gt;\n' +
' &lt;xsl:call-template name="matchDataItems"&gt;\n' +
' &lt;xsl:with-param name="pnode" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="matchDataItems"&gt;\n' +
' &lt;xsl:param name="pnode"/&gt;\n' +
' &lt;xsl:for-each select="$pnode/Property[@Name=' + "'" + sValueProperty + "'" + ']"&gt;\n' +
' &lt;xsl:if test="child::node() = '+ "'"+ sPropertyValue +"'" + '"&gt;\n' +
' &lt;xsl:call-template name="getData"&gt;\n' +
' &lt;xsl:with-param name="cnode" select=".." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="getData"&gt;\n' +
' &lt;xsl:param name="cnode"/&gt;\n' +
' &lt;xsl:for-each select="$cnode/Property"&gt;\n' +
' &lt;xsl:variable name="maxWidth"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="string"&gt;\n' +
' &lt;xsl:for-each select="child::node()"&gt;\n' +
' &lt;xsl:value-of select="translate(., '+ "'&amp;#x20;&amp;#x9;&amp;#xD;&amp;#xA;', ' '" + ')"/&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="padding"&gt;\n' +
' &lt;xsl:value-of select="$maxWidth - string-length($string)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="$string"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$padding"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="calcWidth"&gt;\n' +
' &lt;xsl:param name="name" /&gt;\n' +
' &lt;xsl:for-each select="//Property[@Name = $name]"&gt;\n' +
' &lt;xsl:sort select="string-length(child::node())" order="descending" data-type="number"/&gt;\n' +
' &lt;xsl:if test="position() = 1"&gt;\n' +
' &lt;xsl:variable name="var1"&gt;\n' +
' &lt;xsl:value-of select="string-length(child::node())"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="var2"&gt;\n' +
' &lt;xsl:value-of select="string-length($name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$var1 &amp;gt; $var2"&gt;\n' +
' &lt;xsl:value-of select="$var1"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="$var2"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="append-pad"&gt;\n' +
' &lt;xsl:param name="length" select="0"/&gt;\n' +
' &lt;xsl:if test="$length != 0"&gt;\n' +
' &lt;xsl:value-of select="' + "'&amp;#32;'" + '"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$length - 1"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:template&gt;\n' +
'&lt;/xsl:stylesheet&gt;\n';
return this.xslTransformation(xstText);
};

this.makeTextTablePropertyBag = function (oApi, sValueProperty, sPropertyValue) {
var trTextTable = this.makeTextTable(sValueProperty, sPropertyValue);
var oBag = oApi.CreatePropertyBag();
oBag.AddValue(sValueProperty, sPropertyValue);
if (trTextTable) {
oBag.AddValue("Result", "\n\r" + trTextTable);
} else {
oBag.AddValue("Result", " ");
}
oApi.AddItem(oBag);
oBag = null;
};
this.makeTextTableEx = function (sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
var xstText = '&lt;xsl:stylesheet version="1.0"\n' +
' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;\n' +
' &lt;xsl:output method="text"/&gt;\n' +
' &lt;xsl:strip-space elements="*"/&gt;\n' +
' &lt;xsl:variable name="newline" select="' + "'&amp;#10;'" + '"/&gt;\n' +
' &lt;xsl:template match="DataItem[1]"&gt;\n' +
' &lt;xsl:for-each select="Property"&gt;\n' +
' &lt;xsl:variable name="maxWidthA"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="paddingA"&gt;\n' +
' &lt;xsl:value-of select="$maxWidthA - string-length(@Name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="@Name"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$paddingA"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;xsl:call-template name="matchDataItems"&gt;\n' +
' &lt;xsl:with-param name="pnode" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template match="DataItem"&gt;\n' +
' &lt;xsl:call-template name="matchDataItems"&gt;\n' +
' &lt;xsl:with-param name="pnode" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="matchDataItems"&gt;\n' +
' &lt;xsl:param name="pnode"/&gt;\n' +
' &lt;xsl:for-each select="$pnode/Property[@Name=' + "'" + sValueProperty1 + "'" + ']"&gt;\n' +
' &lt;xsl:if test="child::node() = '+ "'"+ sPropertyValue1 +"'" + '"&gt;\n' +
' &lt;xsl:call-template name="matchNextDataItems"&gt;\n' +
' &lt;xsl:with-param name="npnode" select=".." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="matchNextDataItems"&gt;\n' +
' &lt;xsl:param name="npnode"/&gt;\n' +
' &lt;xsl:for-each select="$npnode/Property[@Name=' + "'" + sValueProperty2 + "'" + ']"&gt;\n' +
' &lt;xsl:if test="child::node() = '+ "'"+ sPropertyValue2 +"'" + '"&gt;\n' +
' &lt;xsl:call-template name="getData"&gt;\n' +
' &lt;xsl:with-param name="cnode" select=".." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="getData"&gt;\n' +
' &lt;xsl:param name="cnode"/&gt;\n' +
' &lt;xsl:for-each select="$cnode/Property"&gt;\n' +
' &lt;xsl:variable name="maxWidth"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="string"&gt;\n' +
' &lt;xsl:for-each select="child::node()"&gt;\n' +
' &lt;xsl:value-of select="translate(., '+ "'&amp;#x20;&amp;#x9;&amp;#xD;&amp;#xA;', ' '" + ')"/&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="padding"&gt;\n' +
' &lt;xsl:value-of select="$maxWidth - string-length($string)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="$string"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$padding"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="calcWidth"&gt;\n' +
' &lt;xsl:param name="name" /&gt;\n' +
' &lt;xsl:for-each select="//Property[@Name = $name]"&gt;\n' +
' &lt;xsl:sort select="string-length(child::node())" order="descending" data-type="number"/&gt;\n' +
' &lt;xsl:if test="position() = 1"&gt;\n' +
' &lt;xsl:variable name="var1"&gt;\n' +
' &lt;xsl:value-of select="string-length(child::node())"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="var2"&gt;\n' +
' &lt;xsl:value-of select="string-length($name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$var1 &amp;gt; $var2"&gt;\n' +
' &lt;xsl:value-of select="$var1"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="$var2"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="append-pad"&gt;\n' +
' &lt;xsl:param name="length" select="0"/&gt;\n' +
' &lt;xsl:if test="$length != 0"&gt;\n' +
' &lt;xsl:value-of select="' + "'&amp;#32;'" + '"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$length - 1"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:template&gt;\n' +
'&lt;/xsl:stylesheet&gt;\n';
return this.xslTransformation(xstText);
};

this.makeTextTablePropertyBagEx = function (oApi, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
var trTextTable = this.makeTextTableEx(sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
var oBag = oApi.CreatePropertyBag();
oBag.AddValue(sValueProperty1, sPropertyValue1);
oBag.AddValue(sValueProperty2, sPropertyValue2);
if (trTextTable) {
oBag.AddValue("Result", "\n\r" + trTextTable);
} else {
oBag.AddValue("Result", " ");
}
oApi.AddItem(oBag);
oBag = null;
};
this.applyXslTransformation = function (sXslText) {
var rtVal = this.xslTransformation(sXslText);
if (rtVal) {
return this.loadXml(rtVal);
}
return false;
};

this.prepareTransformAndCreateTextTablePropertyBag = function (sXslText, oApi, sValueProperty, sPropertyValue) {
try {
resetErrors();
if (this.applyXslTransformation(sXslText)) {
this.makeTextTablePropertyBag(oApi, sValueProperty, sPropertyValue);
return true;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return false;
};
this.prepareTransformAndCreateTextTablePropertyBagEx = function (sXslText, oApi, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
try {
resetErrors();
if (this.applyXslTransformation(sXslText)) {
this.makeTextTablePropertyBagEx(oApi, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
return true;
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
}
return false;
};
this.prepareTransformAndCreateTextTable = function (sXslText, sValueProperty, sPropertyValue) {
try {
resetErrors();
if (this.applyXslTransformation(sXslText)) {
var rtVal = this.makeTextTable(sValueProperty, sPropertyValue);
if (rtVal) {
WScript.Echo(rtVal);
} else {
if (mErrorCode != 0) {
WScript.Echo("Error: " + mErrorCode + " - " + mErrorDescription);
} else {
WScript.Echo(" ");
}
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
WScript.Echo("Error: " + mErrorCode + " - " + mErrorDescription);
}
};
this.prepareTransformAndCreateTextTableEx = function (sXslText, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
try {
resetErrors();
if (this.applyXslTransformation(sXslText)) {
var rtVal = this.makeTextTableEx(sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
if (rtVal) {
WScript.Echo(rtVal);
} else {
if (mErrorCode != 0) {
WScript.Echo("Error: " + mErrorCode + " - " + mErrorDescription);
} else {
WScript.Echo(" ");
}
}
}
} catch (e) {
mErrorCode = e.number;
mErrorDescription = e.description;
WScript.Echo("Error: " + mErrorCode + " - " + mErrorDescription);
}
};

};
CTLogger = function (oApi) {
var M_LOGLEVELINFO = 0;
var M_LOGLEVELWARNING = 2;
var M_LOGLEVELERROR = 1;
var m_oMomApi = oApi;
var m_nLogLevel = M_LOGLEVELERROR;
this.LoggingLevel = function(lValue) {
m_nLogLevel = lValue;
};
this.MomAPI = function(lValue) {
m_oMomApi = lValue;
};
this.LOGLEVELINFO = function() {
return M_LOGLEVELINFO;
};
this.LOGLEVELWARNING = function(){
return M_LOGLEVELWARNING;
};
this.LOGLEVELERROR = function() {
return M_LOGLEVELERROR;
};
var WriteStdErr = function (sMessage, nEventId, nSeverity) {
try {
var sMsg = "";
switch (nSeverity)
{
case 0 :
sMsg = "[" + WScript.ScriptName + " - Info]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 1 :
sMsg = "[" + WScript.ScriptName + " - Error]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 2 :
sMsg = "[" + WScript.ScriptName + " - Warning]: EventId: " + nEventId + " Message: " + sMessage;
break;
}
WScript.StdErr.WriteLine(sMsg);
}
catch (e){
}
};
var WriteStdOut = function (sMessage, nEventId, nSeverity) {
try {
var sMsg = "";
switch (nSeverity) {
case 0 :
sMsg = "[" + WScript.ScriptName + " - Info]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 1 :
sMsg = "[" + WScript.ScriptName + " - Error]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 2 :
sMsg = "[" + WScript.ScriptName + " - Warning]: EventId: " + nEventId + " Message: " + sMessage;
break;
}
WScript.StdOut.WriteLine(sMsg);
}
catch (e) {
}
};
var WriteEventLog = function (sMessage, nEventId, nSeverity) {
m_oMomApi.LogScriptEvent(WScript.ScriptName, nEventId, nSeverity, sMessage);
};
var IsNumeric = function (dt) {
var RE = /^-{0,1}\d*\.{0,1}\d+$/;
return (RE.test(dt));
};
var WriteLog = function (sMessage, nEventId, nSeverity) {
try {
if (IsNumeric(nSeverity) &amp;&amp; IsNumeric(nEventId)) {
if ( ! m_oMomApi) {
switch (m_nLogLevel) {
case 0 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
else {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
case 1 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
case 2 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
else if ( nSeverity == 2) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
}
}
else {
switch (m_nLogLevel) {
case 0 :
WriteEventLog(sMessage, nEventId, nSeverity);
break;
case 1 :
if (nSeverity == 1) {
WriteEventLog(sMessage, nEventId, nSeverity);
}
break;
case 2 :
if (nSeverity &gt; 0) {
WriteEventLog(sMessage, nEventId, nSeverity);
}
break;
}
}
}
}
catch (e) {
}
};
this.WriteError = function (sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELERROR);
};
this.WriteWarning = function (sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELWARNING);
};
this.WriteInfo = function(sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELINFO);
};
};
var trim = function (str) {
return str.replace(/^\s+|\s+$/g,"");
};
var oLog = new CTLogger(oAPI);
var cEventNo = 16201;
var aRegPath = "SOFTWARE\\ComTrade\\MP for EMC Documentum";
var aRegKey = "InstallDir";
var aFileName = "dmmon-data-new.xml";
var targetComputer = ".";
var tvar = trim(WScript.Arguments(0));
if (tvar.length &gt; 0) {
aRegPath = tvar;
}
tvar = trim(WScript.Arguments(1));
if (tvar.length &gt; 0) {
aRegKey = tvar;
}
tvar = trim(WScript.Arguments(2));
if (tvar.length &gt; 0) {
aFileName = tvar;
}
tvar = trim(WScript.Arguments(3));
if (tvar.length &gt; 0) {
targetComputer = tvar;
}
function getAgentStatus(sHostname, sAgentSvc, sFile, sRegpath, sRegkey, bDiscovery) {
var iPid = 0;
var bFileExists = false;
var bRegistryFound = false;
var bAgentFound = false;
var sError = "";
var iError = 0;
var sFilename = sFile;
var sPath = "";
var sFullPath = sFile;
try {
var oReg = new CTRegistry(sHostname);
var mValue = new Array();
if ((oReg.GetStringValue(oReg.HKEY_LOCAL_MACHINE(), sRegpath, sRegkey, mValue))) {
bRegistryFound = true;
sPath = mValue[0];
sFullPath = sPath + "\\" + sFile;
} else {
sRegpath = sRegpath.replace(/software\\/i, "software\\Wow6432Node\\");
if (oReg.GetStringValue(oReg.HKEY_LOCAL_MACHINE(), sRegpath, sRegkey, mValue)) {
bRegistryFound = true;
sPath = mValue[0];
sFullPath = sPath + "\\" + sFile;
}
}
oReg.destroy();
oReg = null;
mValue = null;
if (bRegistryFound == true) {
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + sHostname + "\\root\\CIMV2");
var colItems = objWMIService.ExecQuery('SELECT ProcessId FROM Win32_Service Where Name="' + sAgentSvc + '"');
var enumItems = new Enumerator(colItems);
if (enumItems.atEnd() == false) {
if (enumItems.item() != null) {
iPid = enumItems.item().ProcessId;
bAgentFound = true;
}
}
enumItems = null;
colItems = null;
colItems = objWMIService.ExecQuery('Select Name From CIM_DataFile where Name="' + sFullPath.replace(/\//g,"\\").replace(/\\\\/g,"\\").replace(/\\/g, "\\\\") + '"');
enumItems = new Enumerator(colItems);
bFileExists = (enumItems.atEnd() == false) &amp;&amp; (enumItems.item() != null);
enumItems = null;
colItems = null;
objWMIService = null;
}
} catch (er) {
sError = er.description;
iError = er.number;
}
var bContinue = bAgentFound &amp;&amp; bFileExists &amp;&amp; (bDiscovery || (iPid &gt; 0));

return {
'Continue' : bContinue,
'PID' : iPid,
'AgentExists' : bAgentFound,
'FileExists' : bFileExists,
'RegistryExists' : bRegistryFound,
'File' : sFilename,
'FullPath' : sFullPath,
'Path' : sPath,
'ErrorDescription' : sError,
'ErrorNumber' : iError
};
};
var svc_name="dmmp_svc";
var agentStatus = getAgentStatus(targetComputer, svc_name, aFileName, aRegPath, aRegKey, false);
if (agentStatus.Continue == false) {
agentStatus = null;
var oBagObj = oAPI.CreatePropertyBag();
oAPI.Return(oBagObj);
oBagObj = null;
oAPI = null;
WScript.Quit(0);
}

var oXml = new CTXml();
if (oXml.load(agentStatus.FullPath)) {
if (oXml.applyPropertyBagXslThenCreatePropertyBag(xslMapperText, oAPI)) {
oAPI.ReturnItems();
} else {
if (oXml.errorCode() != 0) {
oLog.WriteError("Error: "+ oXml.errorCode() + " - " + oXml.errorDescription(), cEventNo);
}
var oBag = oAPI.CreatePropertyBag();
oAPI.Return(oBag);
}
oXml.destroy();
oXml = null;
oLog = null;
oAPI = null;
} else {
oLog.WriteError("Error: "+ oXml.errorCode() + " - " + oXml.errorDescription(), cEventNo);
oXml.destroy();
oXml = null;
oLog = null;
var oBag = oAPI.CreatePropertyBag();
oAPI.Return(oBag);
oAPI = null;
WScript.Quit(2);
}
agentStatus = null;
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="getData"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<InputType>System!System.BaseData</InputType>
</ProbeActionModuleType>