SoapHelper.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. "use strict";
  2. /**
  3. * Licensed Materials - Property of IBM
  4. * IBM Cognos Products: Cognos Analytics
  5. * Copyright IBM Corp. 2015, 2019
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. define(['underscore'], function (_) {
  9. var xmlKnownEntities = '<!ENTITY nbsp "&#160;">\r\n' + '<!ENTITY iexcl "&#161;">\r\n' + '<!ENTITY cent "&#162;">\r\n' + '<!ENTITY pound "&#163;">\r\n' + '<!ENTITY curren "&#164;">\r\n' + '<!ENTITY yen "&#165;">\r\n' + '<!ENTITY brvbar "&#166;">\r\n' + '<!ENTITY sect "&#167;">\r\n' + '<!ENTITY uml "&#168;">\r\n' + '<!ENTITY copy "&#169;">\r\n' + '<!ENTITY ordf "&#170;">\r\n' + '<!ENTITY laquo "&#171;">\r\n' + '<!ENTITY not "&#172;">\r\n' + '<!ENTITY shy "&#173;">\r\n' + '<!ENTITY reg "&#174;">\r\n' + '<!ENTITY macr "&#175;">\r\n' + '<!ENTITY deg "&#176;">\r\n' + '<!ENTITY plusmn "&#177;">\r\n' + '<!ENTITY sup2 "&#178;">\r\n' + '<!ENTITY sup3 "&#179;">\r\n' + '<!ENTITY acute "&#180;">\r\n' + '<!ENTITY micro "&#181;">\r\n' + '<!ENTITY para "&#182;">\r\n' + '<!ENTITY middot "&#183;">\r\n' + '<!ENTITY cedil "&#184;">\r\n' + '<!ENTITY sup1 "&#185;">\r\n' + '<!ENTITY ordm "&#186;">\r\n' + '<!ENTITY raquo "&#187;">\r\n' + '<!ENTITY frac14 "&#188;">\r\n' + '<!ENTITY frac12 "&#189;">\r\n' + '<!ENTITY frac34 "&#190;">\r\n' + '<!ENTITY iquest "&#191;">\r\n' + '<!ENTITY Agrave "&#192;">\r\n' + '<!ENTITY Aacute "&#193;">\r\n' + '<!ENTITY Acirc "&#194;">\r\n' + '<!ENTITY Atilde "&#195;">\r\n' + '<!ENTITY Auml "&#196;">\r\n' + '<!ENTITY Aring "&#197;">\r\n' + '<!ENTITY AElig "&#198;">\r\n' + '<!ENTITY Ccedil "&#199;">\r\n' + '<!ENTITY Egrave "&#200;">\r\n' + '<!ENTITY Eacute "&#201;">\r\n' + '<!ENTITY Ecirc "&#202;">\r\n' + '<!ENTITY Euml "&#203;">\r\n' + '<!ENTITY Igrave "&#204;">\r\n' + '<!ENTITY Iacute "&#205;">\r\n' + '<!ENTITY Icirc "&#206;">\r\n' + '<!ENTITY Iuml "&#207;">\r\n' + '<!ENTITY ETH "&#208;">\r\n' + '<!ENTITY Ntilde "&#209;">\r\n' + '<!ENTITY Ograve "&#210;">\r\n' + '<!ENTITY Oacute "&#211;">\r\n' + '<!ENTITY Ocirc "&#212;">\r\n' + '<!ENTITY Otilde "&#213;">\r\n' + '<!ENTITY Ouml "&#214;">\r\n' + '<!ENTITY times "&#215;">\r\n' + '<!ENTITY Oslash "&#216;">\r\n' + '<!ENTITY Ugrave "&#217;">\r\n' + '<!ENTITY Uacute "&#218;">\r\n' + '<!ENTITY Ucirc "&#219;">\r\n' + '<!ENTITY Uuml "&#220;">\r\n' + '<!ENTITY Yacute "&#221;">\r\n' + '<!ENTITY THORN "&#222;">\r\n' + '<!ENTITY szlig "&#223;">\r\n' + '<!ENTITY agrave "&#224;">\r\n' + '<!ENTITY aacute "&#225;">\r\n' + '<!ENTITY acirc "&#226;">\r\n' + '<!ENTITY atilde "&#227;">\r\n' + '<!ENTITY auml "&#228;">\r\n' + '<!ENTITY aring "&#229;">\r\n' + '<!ENTITY aelig "&#230;">\r\n' + '<!ENTITY ccedil "&#231;">\r\n' + '<!ENTITY egrave "&#232;">\r\n' + '<!ENTITY eacute "&#233;">\r\n' + '<!ENTITY ecirc "&#234;">\r\n' + '<!ENTITY euml "&#235;">\r\n' + '<!ENTITY igrave "&#236;">\r\n' + '<!ENTITY iacute "&#237;">\r\n' + '<!ENTITY icirc "&#238;">\r\n' + '<!ENTITY iuml "&#239;">\r\n' + '<!ENTITY eth "&#240;">\r\n' + '<!ENTITY ntilde "&#241;">\r\n' + '<!ENTITY ograve "&#242;">\r\n' + '<!ENTITY oacute "&#243;">\r\n' + '<!ENTITY ocirc "&#244;">\r\n' + '<!ENTITY otilde "&#245;">\r\n' + '<!ENTITY ouml "&#246;">\r\n' + '<!ENTITY divide "&#247;">\r\n' + '<!ENTITY oslash "&#248;">\r\n' + '<!ENTITY ugrave "&#249;">\r\n' + '<!ENTITY uacute "&#250;">\r\n' + '<!ENTITY ucirc "&#251;">\r\n' + '<!ENTITY uuml "&#252;">\r\n' + '<!ENTITY yacute "&#253;">\r\n' + '<!ENTITY thorn "&#254;">\r\n' + '<!ENTITY yuml "&#255;">\r\n' + // HTMLsymbol.ent
  10. '<!ENTITY fnof "&#402;">\r\n' + '<!ENTITY Alpha "&#913;">\r\n' + '<!ENTITY Beta "&#914;">\r\n' + '<!ENTITY Gamma "&#915;">\r\n' + '<!ENTITY Delta "&#916;">\r\n' + '<!ENTITY Epsilon "&#917;">\r\n' + '<!ENTITY Zeta "&#918;">\r\n' + '<!ENTITY Eta "&#919;">\r\n' + '<!ENTITY Theta "&#920;">\r\n' + '<!ENTITY Iota "&#921;">\r\n' + '<!ENTITY Kappa "&#922;">\r\n' + '<!ENTITY Lambda "&#923;">\r\n' + '<!ENTITY Mu "&#924;">\r\n' + '<!ENTITY Nu "&#925;">\r\n' + '<!ENTITY Xi "&#926;">\r\n' + '<!ENTITY Omicron "&#927;">\r\n' + '<!ENTITY Pi "&#928;">\r\n' + '<!ENTITY Rho "&#929;">\r\n' + '<!ENTITY Sigma "&#931;">\r\n' + '<!ENTITY Tau "&#932;">\r\n' + '<!ENTITY Upsilon "&#933;">\r\n' + '<!ENTITY Phi "&#934;">\r\n' + '<!ENTITY Chi "&#935;">\r\n' + '<!ENTITY Psi "&#936;">\r\n' + '<!ENTITY Omega "&#937;">\r\n' + '<!ENTITY alpha "&#945;">\r\n' + '<!ENTITY beta "&#946;">\r\n' + '<!ENTITY gamma "&#947;">\r\n' + '<!ENTITY delta "&#948;">\r\n' + '<!ENTITY epsilon "&#949;">\r\n' + '<!ENTITY zeta "&#950;">\r\n' + '<!ENTITY eta "&#951;">\r\n' + '<!ENTITY theta "&#952;">\r\n' + '<!ENTITY iota "&#953;">\r\n' + '<!ENTITY kappa "&#954;">\r\n' + '<!ENTITY lambda "&#955;">\r\n' + '<!ENTITY mu "&#956;">\r\n' + '<!ENTITY nu "&#957;">\r\n' + '<!ENTITY xi "&#958;">\r\n' + '<!ENTITY omicron "&#959;">\r\n' + '<!ENTITY pi "&#960;">\r\n' + '<!ENTITY rho "&#961;">\r\n' + '<!ENTITY sigmaf "&#962;">\r\n' + '<!ENTITY sigma "&#963;">\r\n' + '<!ENTITY tau "&#964;">\r\n' + '<!ENTITY upsilon "&#965;">\r\n' + '<!ENTITY phi "&#966;">\r\n' + '<!ENTITY chi "&#967;">\r\n' + '<!ENTITY psi "&#968;">\r\n' + '<!ENTITY omega "&#969;">\r\n' + '<!ENTITY thetasym "&#977;">\r\n' + '<!ENTITY upsih "&#978;">\r\n' + '<!ENTITY piv "&#982;">\r\n' + '<!ENTITY bull "&#8226;">\r\n' + '<!ENTITY hellip "&#8230;">\r\n' + '<!ENTITY prime "&#8242;">\r\n' + '<!ENTITY Prime "&#8243;">\r\n' + '<!ENTITY oline "&#8254;">\r\n' + '<!ENTITY frasl "&#8260;">\r\n' + '<!ENTITY weierp "&#8472;">\r\n' + '<!ENTITY image "&#8465;">\r\n' + '<!ENTITY real "&#8476;">\r\n' + '<!ENTITY trade "&#8482;">\r\n' + '<!ENTITY alefsym "&#8501;">\r\n' + '<!ENTITY larr "&#8592;">\r\n' + '<!ENTITY uarr "&#8593;">\r\n' + '<!ENTITY rarr "&#8594;">\r\n' + '<!ENTITY darr "&#8595;">\r\n' + '<!ENTITY harr "&#8596;">\r\n' + '<!ENTITY crarr "&#8629;">\r\n' + '<!ENTITY lArr "&#8656;">\r\n' + '<!ENTITY uArr "&#8657;">\r\n' + '<!ENTITY rArr "&#8658;">\r\n' + '<!ENTITY dArr "&#8659;">\r\n' + '<!ENTITY hArr "&#8660;">\r\n' + '<!ENTITY forall "&#8704;">\r\n' + '<!ENTITY part "&#8706;">\r\n' + '<!ENTITY exist "&#8707;">\r\n' + '<!ENTITY empty "&#8709;">\r\n' + '<!ENTITY nabla "&#8711;">\r\n' + '<!ENTITY isin "&#8712;">\r\n' + '<!ENTITY notin "&#8713;">\r\n' + '<!ENTITY ni "&#8715;">\r\n' + '<!ENTITY prod "&#8719;">\r\n' + '<!ENTITY sum "&#8721;">\r\n' + '<!ENTITY minus "&#8722;">\r\n' + '<!ENTITY lowast "&#8727;">\r\n' + '<!ENTITY radic "&#8730;">\r\n' + '<!ENTITY prop "&#8733;">\r\n' + '<!ENTITY infin "&#8734;">\r\n' + '<!ENTITY ang "&#8736;">\r\n' + '<!ENTITY and "&#8743;">\r\n' + '<!ENTITY or "&#8744;">\r\n' + '<!ENTITY cap "&#8745;">\r\n' + '<!ENTITY cup "&#8746;">\r\n' + '<!ENTITY int "&#8747;">\r\n' + '<!ENTITY there4 "&#8756;">\r\n' + '<!ENTITY sim "&#8764;">\r\n' + '<!ENTITY cong "&#8773;">\r\n' + '<!ENTITY asymp "&#8776;">\r\n' + '<!ENTITY ne "&#8800;">\r\n' + '<!ENTITY equiv "&#8801;">\r\n' + '<!ENTITY le "&#8804;">\r\n' + '<!ENTITY ge "&#8805;">\r\n' + '<!ENTITY sub "&#8834;">\r\n' + '<!ENTITY sup "&#8835;">\r\n' + '<!ENTITY nsub "&#8836;">\r\n' + '<!ENTITY sube "&#8838;">\r\n' + '<!ENTITY supe "&#8839;">\r\n' + '<!ENTITY oplus "&#8853;">\r\n' + '<!ENTITY otimes "&#8855;">\r\n' + '<!ENTITY perp "&#8869;">\r\n' + '<!ENTITY sdot "&#8901;">\r\n' + '<!ENTITY lceil "&#8968;">\r\n' + '<!ENTITY rceil "&#8969;">\r\n' + '<!ENTITY lfloor "&#8970;">\r\n' + '<!ENTITY rfloor "&#8971;">\r\n' + '<!ENTITY lang "&#9001;">\r\n' + '<!ENTITY rang "&#9002;">\r\n' + '<!ENTITY loz "&#9674;">\r\n' + '<!ENTITY spades "&#9824;">\r\n' + '<!ENTITY clubs "&#9827;">\r\n' + '<!ENTITY hearts "&#9829;">\r\n' + '<!ENTITY diams "&#9830;">\r\n' + // HTMLspecial.ent
  11. '<!ENTITY OElig "&#338;">\r\n' + '<!ENTITY oelig "&#339;">\r\n' + '<!ENTITY Scaron "&#352;">\r\n' + '<!ENTITY scaron "&#353;">\r\n' + '<!ENTITY Yuml "&#376;">\r\n' + '<!ENTITY circ "&#710;">\r\n' + '<!ENTITY tilde "&#732;">\r\n' + '<!ENTITY ensp "&#8194;">\r\n' + '<!ENTITY emsp "&#8195;">\r\n' + '<!ENTITY thinsp "&#8201;">\r\n' + '<!ENTITY zwnj "&#8204;">\r\n' + '<!ENTITY zwj "&#8205;">\r\n' + '<!ENTITY lrm "&#8206;">\r\n' + '<!ENTITY rlm "&#8207;">\r\n' + '<!ENTITY ndash "&#8211;">\r\n' + '<!ENTITY mdash "&#8212;">\r\n' + '<!ENTITY lsquo "&#8216;">\r\n' + '<!ENTITY rsquo "&#8217;">\r\n' + '<!ENTITY sbquo "&#8218;">\r\n' + '<!ENTITY ldquo "&#8220;">\r\n' + '<!ENTITY rdquo "&#8221;">\r\n' + '<!ENTITY bdquo "&#8222;">\r\n' + '<!ENTITY dagger "&#8224;">\r\n' + '<!ENTITY Dagger "&#8225;">\r\n' + '<!ENTITY permil "&#8240;">\r\n' + '<!ENTITY lsaquo "&#8249;">\r\n' + '<!ENTITY rsaquo "&#8250;">\r\n' + '<!ENTITY euro "&#8364;">\r\n';
  12. return {
  13. _createDTD: function _createDTD() {
  14. return "<!DOCTYPE " + 'Document' + " [\r\n" + xmlKnownEntities + "\r\n]>\r\n";
  15. },
  16. processResponse: function processResponse(report, response) {
  17. var parameters = [];
  18. var $status = $(response).selectNode('Envelope').selectNode('Body').find('> *').selectNode('result').selectNode('details').selectNode('item').byAttributeValue('xsi:type', 'bus:asynchDetailReportStatus').selectNode('status');
  19. if ($status.text() === '') {
  20. $status = $(response).selectNode('Envelope').selectNode('Body').find('> *').selectNode('result').selectNode('status');
  21. }
  22. if ($status.text() !== 'prompting') {
  23. var $responseNode = $(response).selectNode('Envelope').selectNode('Body').find('> *');
  24. parameters = this._extractParametersFromResponse(report, $responseNode);
  25. } else {
  26. parameters.push({
  27. name: 'credential:',
  28. 'report_id': report.id,
  29. 'type': 'credential'
  30. });
  31. }
  32. var $outputPage = $(response).selectNode('Envelope').selectNode('Body').find('> *').find('> *').selectNode('details').selectNode('item').byAttributeValue('xsi:type', 'bus:asynchDetailReportOutput').selectNode('outputPages').selectNode('item');
  33. var promptControlOutput;
  34. var promptControls = [];
  35. var xmlText = $outputPage.text();
  36. if (xmlText !== '') {
  37. xmlText = this._createDTD() + xmlText;
  38. promptControlOutput = $.parseXML(xmlText);
  39. var promptControlNodes = $(promptControlOutput).find('*[parameter]');
  40. _.each(promptControlNodes, function (promptControlNode) {
  41. promptControls.push($(promptControlNode).attr('parameter'));
  42. });
  43. } else {
  44. promptControlOutput = null;
  45. }
  46. return {
  47. parameters: parameters,
  48. promptControls: promptControls,
  49. status: $status.text(),
  50. type: 'xml',
  51. report: report.defaultName,
  52. report_id: report.id,
  53. $conversation: $(response).selectNode('Envelope').selectNode('Body').find('> *').selectNode('result').selectNode('primaryRequest'),
  54. $tracking: $(response).selectNode('Envelope').selectNode('Header').selectNode('biBusHeader').selectNode('tracking').selectNode('conversationContext'),
  55. xml: promptControlOutput
  56. };
  57. },
  58. _extractParametersFromResponse: function _extractParametersFromResponse(report, $responseNode) {
  59. var parameters = [];
  60. var $parameterNodes = $responseNode.selectNode('result').selectNode('details').selectNode('item').byAttributeValue('xsi:type', 'bus:asynchDetailParameters').selectNode('parameters').selectNode('item').byAttributeValue('xsi:type', 'bus:parameter');
  61. for (var i = 0; i < $parameterNodes.length; ++i) {
  62. var parameter = $parameterNodes[i];
  63. var $parameterType = $(parameter).selectNode('type'); //interval prompts not currently supported
  64. if ($parameterType.text() === 'xsdDuration') {
  65. continue;
  66. }
  67. var multiSelect = false;
  68. var type = 'simpleParmValue';
  69. var capabilities = $(parameter).selectNode('capabilities');
  70. var items = $(capabilities).selectNode('item');
  71. _.each(items, function (item) {
  72. //NOSONAR
  73. var capability = $(item).text();
  74. switch (capability) {
  75. case 'multivalued':
  76. {
  77. multiSelect = true;
  78. break;
  79. }
  80. case 'boundRange':
  81. {
  82. type = 'boundRange';
  83. break;
  84. }
  85. default:
  86. {
  87. break;
  88. }
  89. }
  90. });
  91. var name = $(parameter).selectNode('name').text();
  92. var newParameter = {
  93. 'name': name,
  94. 'description': '',
  95. 'multilingualDisplay': {},
  96. 'source': 'report',
  97. 'report': report.defaultName,
  98. 'report_id': report.id,
  99. 'report_path': report.searchPath,
  100. 'type': type,
  101. 'multiSelect': multiSelect,
  102. 'disabled': false,
  103. 'accessibleAtSystemOrTenantLevel': false
  104. };
  105. var existingParameter = _.find(parameters, function (paramNameValue) {
  106. return paramNameValue.name === newParameter.name;
  107. }); //NOSONAR
  108. if (!existingParameter) {
  109. parameters.push(newParameter);
  110. }
  111. }
  112. return parameters;
  113. },
  114. xml_encode: function xml_encode(input) {
  115. var output = "" + input;
  116. if (output === '0' || input !== null && input !== false) {
  117. //&amp;
  118. output = output.replace(/&/g, "&amp;"); //&lt;
  119. output = output.replace(/</g, "&lt;"); //&gt;
  120. output = output.replace(/>/g, "&gt;"); //&quot;
  121. output = output.replace(/"/g, "&quot;"); //&apos;
  122. output = output.replace(/'/g, "&apos;");
  123. }
  124. return output;
  125. }
  126. };
  127. });