/* IBM Confidential OCO Source Materials IBM Cognos Products: rs (C) Copyright IBM Corp. 2017, 2020 The source code for this program is not published or otherwise divested of its trade secrets, irrespective of what has been deposited with the U.S. Copyright Office. */ define([], function(){ 'use strict'; //F_XMLEncode function xmlEncode(v_sString) { // < for < // > for > // & for & // ' for ' (required for attribute values delimited by the same character) // " for " (required for attribute values delimited by the same character) return v_sString.replace( /&/g, "&" ).replace( //g, ">" ).replace( /'/g, "'" ).replace( /"/g, """ ); } function addClassicViewerPrompts(v_elForm, v_aPromptParameters) { //Simple prompt values: p_Product = Bear+Edge for(var i=0; i< v_aPromptParameters.length; i++) { var v_oParameter = v_aPromptParameters[i]; if (Array.isArray(v_oParameter.value)) { for(var j=0; j"; } function buildBoundRangeXML(v_oValue) { return "" + "" + "" + ""; } function buildUnboundedEndRangeXML(v_oValue) { return "" + "" + ""; } function buildUnboundedStartRangeXML(v_oValue) { return "" + "" + ""; } function convertPromptValuesToXML(v_aValues) { var v_sXMLValues = ""; for(var i=0; i"; var v_elInput = v_elForm.appendChild( document.createElement("input") ); v_elInput.type = "hidden"; v_elInput.name = "p_" + v_sName; v_elInput.value = v_sXMLValues; } } } /** * Convert the value of a parameter into the simple JSON form. * @param v_oValue The value that is either in SOAP-JSON or simple-JSON form * @return The simple-JSON representation of v_oValue */ function valueToSimpleJson( v_oValue ) { // SOAP JSON has a type property switch (v_oValue.type) { case 'simpleParmValueItem': // soapJson and simpleJson are equivalent except the SOAP form has a few extra bits delete v_oValue.type; delete v_oValue.inclusive; break; case 'boundRangeParmValueItem': v_oValue = { boundRange : { start: v_oValue.start, end: v_oValue.end } }; break; case 'unboundedStartRangeParmValueItem': v_oValue = { unboundedStartRange : { end: v_oValue.end } }; break; case 'unboundedEndRangeParmValueItem': v_oValue = { unboundedEndRange : { start: v_oValue.start } }; break; default: // If no type then assume input is already simple JSON break; } return v_oValue; } function groupPromptParamters(v_oPromptParameters, v_oPromptParametersComplex) { //Merge m_aPromptParametersComplex into m_oPromptParameters // The format of v_oPromptParametersComplex can be just about anything: SOAP JSON, simple JSON, compound JSON. // compound JSON is an array representation (like SOAP JSON) but where the value uses the simple JSON representation. // This method must determine what it is and process accordingly. var v_aPromptParametersComplex; if (typeof v_oPromptParametersComplex == 'string') { try { v_oPromptParametersComplex = JSON.parse(v_oPromptParametersComplex); } catch(e) { console.log("rsPromptParameters.groupPromptParamters ... invalid promptParameters input : " + v_oPromptParametersComplex); return undefined; } } if (!v_oPromptParameters) { v_oPromptParameters = {}; } if (v_oPromptParametersComplex) { if (Array.isArray(v_oPromptParametersComplex)) { v_aPromptParametersComplex = v_oPromptParametersComplex; } else { // Check if we have simple JSON or a single compound JSON parameter // share URL format for some reason represents a single parameter as an object but multiple parameters as an array if (typeof v_oPromptParametersComplex.name == 'string') { // We have an object of the form { name: "text", ...} which is not the simple JSON form // turn it into an array for further processing v_aPromptParametersComplex = [v_oPromptParametersComplex]; } else { // We have simple JSON, merge it into v_oPromptParameters Object.keys(v_oPromptParametersComplex).forEach( function(key) { v_oPromptParameters[key] = v_oPromptParametersComplex[key]; } ); } } } for (var i = 0; v_aPromptParametersComplex && i < v_aPromptParametersComplex.length; ++i) { var v_aPromptParametersComplexObject; try { v_aPromptParametersComplexObject = typeof v_aPromptParametersComplex[i] == 'string' ? JSON.parse(v_aPromptParametersComplex[i]) : v_aPromptParametersComplex[i]; if (!Array.isArray(v_aPromptParametersComplexObject)) { v_aPromptParametersComplexObject = [v_aPromptParametersComplexObject]; } } catch(e) { console.log("rsPromptParameters.groupPromptParamters ... invalid promptParameters input : " + v_aPromptParametersComplex[i]); return undefined; } for(var j=0; j" ); } else { v_aValue.push( ">" ); v_aValue.push( xmlEncode(v_oValue.toString())); v_aValue.push( "" ); } } return v_aValue.join(""); } function emitUseDisplay( v_oValue ) { return emitValue( "use", v_oValue.use ) + emitValue( "display", v_oValue.display ); } function buildSimpleParmValue(v_oValue) { return "" + "true" + emitUseDisplay( v_oValue ) + ""; } function buildBoundRangeParmValue(v_oValue) { return "" + "true" + "" + "true" + emitUseDisplay( v_oValue.boundRange.start ) + "" + "" + "true" + emitUseDisplay( v_oValue.boundRange.end ) + "" + ""; } function buildUnboundedEndRangeParmValue(v_oValue) { return "" + "true" + "" + "true" + emitUseDisplay( v_oValue.unboundedEndRange.start ) + "" + ""; } function buildUnboundedStartRangeParmValue(v_oValue) { return "" + "true" + "" + "true" + emitUseDisplay( v_oValue.unboundedStartRange.end ) + "" + ""; } function buildBusParameterValues(v_oPromptParameters, v_oPromptParametersComplex, v_sParamsTagName) { var v_sParameterValues = ""; var v_oPromptParameters = groupPromptParamters(v_oPromptParameters, v_oPromptParametersComplex); for(var v_sName in v_oPromptParameters) { if (v_oPromptParameters.hasOwnProperty(v_sName)) { v_sParameterValues += ""; v_sParameterValues += "" + xmlEncode(v_sName) + ""; v_sParameterValues += ""; var v_aCurParams = v_oPromptParameters[v_sName]; var v_iCurParamsLen = v_aCurParams.length; for(var i = 0; i < v_iCurParamsLen; i++) { var v_oValue = v_aCurParams[i]; if (v_oValue.hasOwnProperty("use")) { v_sParameterValues += buildSimpleParmValue(v_oValue); } else if (v_oValue.hasOwnProperty("boundRange")) { v_sParameterValues += buildBoundRangeParmValue(v_oValue); } else if (v_oValue.hasOwnProperty("unboundedEndRange")) { v_sParameterValues += buildUnboundedEndRangeParmValue(v_oValue); } else if (v_oValue.hasOwnProperty("unboundedStartRange")) { v_sParameterValues += buildUnboundedStartRangeParmValue(v_oValue); } } v_sParameterValues += ""; v_sParameterValues += ""; } } v_sParameterValues += ""; return v_sParameterValues; } function convertValueToBoundedRangeFormat(v_oValue) { v_oValue.boundRange = {start: {use: v_oValue.start.use, display: v_oValue.start.display}, end: {use: v_oValue.end.use, display: v_oValue.end.display}}; delete v_oValue.start; delete v_oValue.end; } function convertValueToUnboundedStartRangeFormat(v_oValue) { v_oValue.unboundedStartRange = {end: {use: v_oValue.end.use, display: v_oValue.end.display}}; delete v_oValue.end; } function convertValueToUnboundedEndRangeFormat(v_oValue) { v_oValue.unboundedEndRange = {start: {use: v_oValue.start.use, display: v_oValue.start.display}}; delete v_oValue.start; } return { //classicviewer perspective prompt parameter builder cvAddPromptParameters : function(v_elForm, v_aPromptParameters, v_aPromptParametersComplex) { console.log("rsPromptParameters.cvAddPromptParameters ..."); addClassicViewerPrompts(v_elForm, v_aPromptParameters); addClassicViewerPromptsComplex(v_elForm, v_aPromptParametersComplex); }, //authoring perspective prompt parameter builder rsBuildPromptParameters : function(v_oPromptParameters, v_oPromptParametersComplex, v_sParamsTagName) { //console.log("rsPromptParameters.rsBuildPromptParameters ..."); if (v_oPromptParameters || v_oPromptParametersComplex) { return buildBusParameterValues(v_oPromptParameters, v_oPromptParametersComplex, v_sParamsTagName); } else { return ""; } }, //prompt parameters url builder //Expecting v_oPromptParameters input as object only rsBuildParameterUrl : function(v_oUrlMap, v_oPromptParameters) { var v_aPromptParameters = Array.isArray(v_oPromptParameters) ? v_oPromptParameters : [v_oPromptParameters]; v_aPromptParameters.forEach( function(v_oPara) { if (typeof v_oPara !== 'undefined') { var v_aValues = Array.isArray(v_oPara.value) ? v_oPara.value : [v_oPara.value]; v_aValues.forEach( function(v_oValue) { switch(v_oValue.type) { case "boundRangeParmValueItem": convertValueToBoundedRangeFormat(v_oValue); break; case "unboundedStartRangeParmValueItem": convertValueToUnboundedStartRangeFormat(v_oValue); break; case "unboundedEndRangeParmValueItem": convertValueToUnboundedEndRangeFormat(v_oValue); break; default: break; } delete v_oValue.type; delete v_oValue.inclusive; }); } }); v_oUrlMap.promptParameters = !!v_oPromptParameters ? JSON.stringify(v_aPromptParameters) : null; }, /** * Convert the array representation of parameter values into an object representation of parameter values. * @param v_aParameters * @returns An object with parameters as members or empty object if there are none */ convertParameterArrayToObject : function(v_aParameters) { var v_oParameters = {}; if (v_aParameters && v_aParameters.length > 0) { v_aParameters.forEach( function(v_oParameter) { if (v_oParameter && v_oParameter.name) { v_oParameters[v_oParameter.name] = v_oParameter.value; } }); } return v_oParameters; } }; });