123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620 |
- /*
- *+------------------------------------------------------------------------+
- *| Licensed Materials - Property of IBM
- *| BI and PM: prmt
- *| (C) Copyright IBM Corp. 2002, 2014
- *|
- *| US Government Users Restricted Rights - Use, duplication or
- *| disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- *|
- *+------------------------------------------------------------------------+
- */
- /**
- @fileOverview Parameter Values (interface).
- */
- /**
- @name cognos.Value
- @class JSON structure to represent parameter values.
- <br/>Possible arributes for this object are <i>children</i>, <i>display</i>, <i>end</i>, <i>inclusive</i>, <i>start</i> and <i>use</i>.
- <br/><i>inclusive</i> is always optional, default is <tt>true</tt>.
- <br/>Examples:<ul>
- <li>For simple values: <tt>{ 'use': '[a].[b].[c]', 'display': 'Canada' }</tt></li>
- <li>For range values: <tt><br/>{
- <br/> 'start': {'use': '2007-01-01', 'display': 'January 1, 2007'}
- <br/> 'end': {'use': '2007-12-31', 'display': 'December 31, 2007'}
- <br/>}</tt></li>
- <li>For multiple values: <tt>
- <br/>[
- <br/> { 'use': '12', 'display': 'Canada' },
- <br/> { 'use': '41', 'display': 'Germany' },
- <br/> { 'use': '76', 'display': 'Japan' }
- <br/>]</tt></li></ul>
- */
- cognos.Value = function( v_oProps )
- {
- if (v_oProps instanceof cognos.Value)
- {
- return v_oProps;
- }
- if (typeof v_oProps == "string")
- {
- return v_oProps;
- }
- if (v_oProps && v_oProps.length)
- {
- var a = [];
- for (var i = 0; i < v_oProps.length; i++)
- {
- var v_oVal = new cognos.Value(v_oProps[i]);
- if ( v_oVal instanceof cognos.Value )
- {
- a.push( v_oVal );
- }
- }
- return a;
- }
- if ( v_oProps && v_oProps.n )
- {
- if ( v_oProps.n == "selectChoices" && v_oProps.c && v_oProps.c.length > 0 )
- {
- this.f_initWithSelectOptions( v_oProps.c[0] );
- }
- else
- {
- this.f_initWithSelectOptions( v_oProps );
- }
- }
- else
- {
- Object.f_extend( this, v_oProps );
- }
- };
- /**
- @static
- @private
- @return {boolean}
- */
- cognos.Value.equals = function(v1, v2)
- {
- var v_bRetval = false;
- var v_oVa1 = cognos.Value.getValue(v1);
- if (v_oVa1)
- {
- var v_oVa2 = cognos.Value.getValue(v2);
- if (v_oVa2)
- {
- v_bRetval = v_oVa1.f_equals(v_oVa2);
- }
- }
- return v_bRetval;
- }
- /**
- Cast a {use:'',display:''} object to a cognos.Value object.
- @private
- @param {cognos.Value} v_oObj object to cast.
- @return {cognos.Value}
- */
- cognos.Value.getValue = function( v_oObj )
- {
- var v_oVal = null;
- if (v_oObj)
- {
- if ( v_oObj instanceof cognos.Value || typeof v_oObj == "string")
- {
- v_oVal = v_oObj;
- }
- else if (v_oObj && v_oObj.length)
- {
- v_oVal = [];
- for (var i = 0; i < v_oObj.length; i++)
- {
- var v_oTemp = cognos.Value.getValue(v_oObj[i]);
- if (v_oTemp) {
- v_oVal.push( v_oTemp );
- }
- }
- if (v_oVal.length == 0) {
- v_oVal = null;
- }
- else if (v_oVal.length == 1) {
- v_oVal = v_oVal[0];
- }
- }
- else
- {
- v_oVal = new cognos.Value(v_oObj);
- }
- }
- return v_oVal;
- }
- /**
- @private
- @return {void}
- */
- cognos.Value.prototype.f_initWithSelectOptions = function( v_oNode )
- {
- switch( v_oNode.n )
- {
- case "selectBoundRange":
- case "selectUnboundedEndRange":
- case "selectUnboundedStartRange":
- if ( v_oNode.c && v_oNode.c.length > 0 )
- {
- var v_bSelected = ( v_oNode["@selected"] ? true : false );
- for ( var v_idxChild = 0; v_idxChild < v_oNode.c.length; v_idxChild++)
- {
- var v_oChildNode = v_oNode.c[ v_idxChild ];
- var v_oPV = cognos.Value.getValue( v_oChildNode );
- v_oPV["use"] = sDecodeU003( v_oChildNode["@useValue"] );
- v_oPV["display"] = sDecodeU003( v_oChildNode["@displayValue"] );
- this[ v_oChildNode.n ] = v_oPV;
- }
- }
- break;
- default:
- Object.f_extend( this, v_oNode );
- this["use"] = sDecodeU003( v_oNode["@useValue"] );
- this["display"] = sDecodeU003( v_oNode["@displayValue"] );
- break;
- }
- };
- /**
- @private
- @return {boolean}
- */
- cognos.Value.prototype.f_equals = function(v_o)
- {
- return ( v_o ? (this.f_getXML() == v_o.f_getXML()) : false );
- };
- /**
- Used by range control with multiple choices, to format the values selected as "Between x and y."
- @private
- @return {String}
- */
- cognos.Value.prototype.f_formatDisplay = function( v_sKey, v_sValue1, v_sValue2 )
- {
- var v_sRetVal = null;
- var v_sBidiMarker = null;
- if ( typeof v_sKey == K_PRMT_sSTRING )
- {
- if ( v_sKey == "between" && (v_sValue1 === null || typeof v_sValue1 == K_PRMT_sUNDEFINED || v_sValue2 === null || typeof v_sValue2 == K_PRMT_sUNDEFINED) )
- {
- v_sValue1 = v_sValue2 = null;
- }
- if ( v_sValue1 !== null && typeof v_sValue1 !== K_PRMT_sUNDEFINED )
- {
- var v_re1 = new RegExp( "\\^1", K_PRMT_sG);
- var v_sValKey = this.f_getString( v_sKey );
- if (this.contentTextDir)
- {
- v_sValue1 = PRMT_BidiUtils.enforceBidiDirection(v_sValue1, this.contentTextDir);
- v_sBidiMarker = (PRMT_BidiUtils.containsRTLChar(v_sValKey) ? PRMT_BidiUtils.BIDI_CHAR_RLM : PRMT_BidiUtils.BIDI_CHAR_LRM);
- v_sValue1 = v_sBidiMarker + v_sValue1;
- }
- v_sRetVal = v_sValKey.replace( v_re1, v_sValue1 );
- }
- if ( v_sValue2 !== null && typeof v_sValue2 !== K_PRMT_sUNDEFINED && typeof v_sRetVal == K_PRMT_sSTRING )
- {
- var v_re2 = new RegExp( "\\^2", K_PRMT_sG);
- if (this.contentTextDir)
- {
- v_sValue2 = PRMT_BidiUtils.enforceBidiDirection(v_sValue2, this.contentTextDir);
- v_sValue2 = v_sBidiMarker + v_sValue2;
- }
- v_sRetVal = v_sRetVal.replace( v_re2, v_sValue2 );
- }
- if ( v_sRetVal && v_sBidiMarker )
- {
- v_sRetVal = (v_sBidiMarker == PRMT_BidiUtils.BIDI_CHAR_LRM ? PRMT_BidiUtils.BIDI_CHAR_LRE : PRMT_BidiUtils.BIDI_CHAR_RLE) + v_sRetVal + PRMT_BidiUtils.BIDI_CHAR_PDF;
- }
- }
- return v_sRetVal;
- };
- /**
- @private
- @return {String}
- */
- cognos.Value.prototype.getDisplayValue = function() {
- return (this.f_getDisplay());
- };
- /**
- @private
- @return {String}
- */
- cognos.Value.prototype.f_getDisplay = function( v_bReturnNullForMissingDisplayValues )
- {
- var v_sDisplay = null;
- if ( this.display || this.display == K_PRMT_sEMPTY )
- {
- v_sDisplay = this.display;
- }
- else
- {
- var v_pvStart = this.f_getStart();
- var v_pvEnd = this.f_getEnd();
- var v_sKey = null;
- var v_sValue1 = null;
- var v_sValue2 = null;
- if ( v_pvStart )
- {
- v_sValue1 = v_pvStart.f_getDisplay( v_bReturnNullForMissingDisplayValues );
- if ( v_pvEnd )
- {
- v_sKey = ( v_pvStart.f_equals( v_pvEnd ) ? "eq" : "between" );
- v_sValue2 = v_pvEnd.f_getDisplay( v_bReturnNullForMissingDisplayValues );
- }
- else
- {
- v_sKey = "gt";
- }
- }
- else if ( v_pvEnd )
- {
- v_sKey = "lt";
- v_sValue1 = v_pvEnd.f_getDisplay( v_bReturnNullForMissingDisplayValues );
- }
- v_sDisplay = this.f_formatDisplay( v_sKey, v_sValue1, v_sValue2 );
- }
- if ( v_sDisplay === null && !v_bReturnNullForMissingDisplayValues )
- {
- v_sDisplay = this.f_getUse();
- }
- return v_sDisplay;
- };
- /**
- @private
- @return {String}
- */
- cognos.Value.prototype.f_getString = function( v_sKey )
- {
- var v_s = v_sKey;
- switch( v_sKey )
- {
- case 'eq':
- v_s = PMT_RNG_FILTER_EQUAL_STRING; break;
- break;
- case 'between':
- switch (this.promptType)
- {
- case "cognos.Prompt.Control.Date":
- case "cognos.Prompt.Control.SelectHTML5Date":
- v_s = PMT_RNG_FILTER_BETWEEN_DATE; break;
- case "cognos.Prompt.Control.DateTime":
- case "cognos.Prompt.Control.SelectHTML5DateTime":
- v_s = PMT_RNG_FILTER_BETWEEN_DATETIME; break;
- case "cognos.Prompt.Control.Time":
- case "cognos.Prompt.Control.SelectHTML5Time":
- v_s = PMT_RNG_FILTER_BETWEEN_TIME; break;
- case "cognos.Prompt.Control.Interval":
- v_s = PMT_RNG_FILTER_BETWEEN_INTERVAL; break;
- default:
- v_s = PMT_RNG_FILTER_BETWEEN_STRING; break;
- };
- break;
- case 'lt':
- switch (this.promptType)
- {
- case "cognos.Prompt.Control.Date":
- case "cognos.Prompt.Control.SelectHTML5Date":
- v_s = PMT_RNG_FILTER_LESS_THAN_EQUAL_TO_DATE; break;
- case "cognos.Prompt.Control.DateTime":
- case "cognos.Prompt.Control.SelectHTML5DateTime":
- v_s = PMT_RNG_FILTER_LESS_THAN_EQUAL_TO_DATETIME; break;
- case "cognos.Prompt.Control.Time":
- case "cognos.Prompt.Control.SelectHTML5Time":
- v_s = PMT_RNG_FILTER_LESS_THAN_EQUAL_TO_TIME; break;
- case "cognos.Prompt.Control.Interval":
- v_s = PMT_RNG_FILTER_LESS_THAN_EQUAL_TO_INTERVAL; break;
- default:
- v_s = PMT_RNG_FILTER_LESS_THAN_EQUAL_TO_STRING; break;
- };
- break;
- case 'gt':
- switch (this.promptType)
- {
- case "cognos.Prompt.Control.Date":
- case "cognos.Prompt.Control.SelectHTML5Date":
- v_s = PMT_RNG_FILTER_GREATER_THAN_EQUAL_TO_DATE; break;
- case "cognos.Prompt.Control.DateTime":
- case "cognos.Prompt.Control.SelectHTML5DateTime":
- v_s = PMT_RNG_FILTER_GREATER_THAN_EQUAL_TO_DATETIME; break;
- case "cognos.Prompt.Control.Time":
- case "cognos.Prompt.Control.SelectHTML5Time":
- v_s = PMT_RNG_FILTER_GREATER_THAN_EQUAL_TO_TIME; break;
- case "cognos.Prompt.Control.Interval":
- v_s = PMT_RNG_FILTER_GREATER_THAN_EQUAL_TO_INTERVAL; break;
- default:
- v_s = PMT_RNG_FILTER_GREATER_THAN_EQUAL_TO_STRING; break;
- };
- break;
- };
- return v_s;
- };
- /**
- @private
- @return {String}
- */
- cognos.Value.prototype.f_getXML = function()
- {
- var v_sXML = K_PRMT_sEMPTY;
- if ( this.f_isRange() )
- {
- var v_pvStart = this.f_getStart();
- var v_pvEnd = this.f_getEnd();
- if ( v_pvStart && v_pvEnd )
- {
- if ( v_pvStart.f_equals(v_pvEnd) )
- {
- v_sXML = this.f_getAsXMLElement("selectOption");
- }
- else
- {
- v_sXML = '<selectBoundRange selected="true">' +
- v_pvStart.f_getAsXMLElement( "start" ) +
- v_pvEnd.f_getAsXMLElement( "end" ) +
- '</selectBoundRange>';
- }
- }
- else if ( v_pvStart )
- {
- v_sXML= '<selectUnboundedEndRange selected="true">' +
- v_pvStart.f_getAsXMLElement( "start" ) +
- '</selectUnboundedEndRange>';
- }
- else if ( v_pvEnd )
- {
- v_sXML= '<selectUnboundedStartRange selected="true">' +
- v_pvEnd.f_getAsXMLElement( "end" ) +
- '</selectUnboundedStartRange>';
- }
- }
- else
- {
- v_sXML = this.f_getAsXMLElement("selectOption");
- }
- return v_sXML;
- };
- /**
- @private
- @return {void}
- */
- cognos.Value.prototype.f_getAsXMLElement = function( v_sTag )
- {
- var v_sXML = K_PRMT_sEMPTY;
- // create element only if use & display are NOT both empty
- var v_sUse = this.f_getUse();
- var v_sDisplay = this.f_getDisplay( true );
- if ( this.f_isNull() )
- {
- v_sXML = ' nullUse="1"';
- if ( this.display )
- {
- v_sXML += ' displayValue="' + v_sDisplay.f_xmlSafe() + '"';
- }
- else {
- v_sXML += ' nullDisplay="1"';
- }
- }
- else
- {
- //Set the use value if it is not undefined
- if ( (typeof v_sUse) !== K_PRMT_sUNDEFINED )
- {
- if( v_sUse || v_sUse == K_PRMT_sEMPTY ) {
- v_sXML += ' useValue="' + v_sUse.f_xmlSafe() + '"';
- }
- }
- //Set the display value if it exists, or set it equal to the use value if it doesn't
- if ( v_sDisplay || v_sDisplay == K_PRMT_sEMPTY )
- {
- v_sXML += ' displayValue="' + v_sDisplay.f_xmlSafe() + '"';
- }
- }
- if ( v_sXML !== K_PRMT_sEMPTY )
- {
- v_sXML = K_PRMT_sLT + v_sTag + v_sXML + K_PRMT_sSL + K_PRMT_sGT;
- }
- return v_sXML;
- };
- /**
- @private
- @return {String}
- */
- cognos.Value.prototype.getUseValue = function()
- {
- return (this.f_getUse());
- };
- /**
- @private
- @return {String}
- */
- cognos.Value.prototype.f_getUse = function() {
- var v_sUse = null;
- if ( this['use'] || this['use'] == K_PRMT_sEMPTY)
- {
- v_sUse = (K_PRMT_sEMPTY + this['use']);
- }
- else
- {
- var v_pvStart = this.f_getStart();
- var v_pvEnd = this.f_getEnd();
- if ( v_pvStart || v_pvEnd )
- {
- if ( v_pvStart )
- {
- v_sUse = v_pvStart.f_getUse();
- }
- if ( !v_pvStart || !v_pvStart.f_equals(v_pvEnd))
- {
- v_sUse += K_PRMT_sCOLON;
- if ( v_pvEnd )
- {
- v_sUse += v_pvEnd.f_getUse();
- }
- }
- }
- }
- if ( v_sUse !== K_PRMT_sEMPTY )
- {
- this['use'] = v_sUse;
- }
- return v_sUse;
- };
- /**
- @private
- @return {cognos.Value}
- */
- cognos.Value.prototype.f_getEnd = function()
- {
- return cognos.Value.getValue( this['end'] );
- };
- /**
- @private
- @return {cognos.Value}
- */
- cognos.Value.prototype.f_getStart = function()
- {
- return cognos.Value.getValue( this['start'] );
- };
- /**
- @private
- @return {boolean}
- */
- cognos.Value.prototype.f_isNull = function()
- {
- return ( this['nil'] === true );
- };
- /**
- @private
- @return {boolean}
- */
- cognos.Value.prototype.f_isRange = function()
- {
- return ( this['start'] || this['end'] ? true : false);
- };
- /**
- Transform an object to a JSON string. Used by C_Choices to keep the original value as a string in <option>'s attributes.
- @private
- @param {Object} obj Object to return as JSON string.
- @return {String}
- */
- cognos.Value.toJSON = function(obj)
- {
- var v_sRetVal = K_PRMT_sEMPTY;
- var v_aTemp = [];
- var v_idx = 0;
- if ( (typeof obj).match(/boolean|string|number/) )
- {
- if ((typeof obj).match(/string/)) {
- return K_PRMT_sQU + jsEncodeStr(obj) + K_PRMT_sQU;
- }
- return K_PRMT_sEMPTY + obj;
- }
- if (obj instanceof Array) {
- for (v_idx = 0; v_idx < obj.length; v_idx++) {
- v_aTemp.push( cognos.Value.toJSON(obj[v_idx]) );
- }
- return "[" + v_aTemp.join(", ") + "]";
- }
- var v_aKeys = [];
- var v_reKeywords = new RegExp("^(use|display|start|end|nil)$");
- for (v_idx in obj)
- {
- if ( (K_PRMT_sEMPTY + v_idx).match(v_reKeywords) ) {
- v_aKeys.push(v_idx);
- }
- }
- v_aKeys.sort();
- var v_sJSON = K_PRMT_sEMPTY;
- if (v_aKeys.length)
- {
- for (v_idx = 0; v_idx < v_aKeys.length; v_idx++)
- {
- v_sJSON = cognos.Value.toJSON(obj[v_aKeys[v_idx]]);
- if (v_sJSON) {
- v_aTemp.push(v_aKeys[v_idx] + ": " + v_sJSON);
- }
- }
- v_sRetVal = "{" + v_aTemp.join(", ") + "}";
- }
- return v_sRetVal;
- }
- /**
- Transform an object to a XML string. Used by C_Choices to keep the original value as a string in <option>'s attributes.
- @private
- @param {Object} v Object to return as XML string.
- @return {String}
- */
- cognos.Value.toXML = function(v)
- {
- var v_oVal = cognos.Value.getValue(v);
- var v_sXML = K_PRMT_sEMPTY;
- if ((typeof v_oVal) == "string")
- {
- // from pvXML in C_Choices' <option>
- v_sXML = v_oVal;
- }
- else if ( v_oVal.length )
- {
- var v_aXML = [];
- for (var v_idxPV = 0; v_idxPV < v_oVal.length; v_idxPV++)
- {
- var v_oTemp = v_oVal[ v_idxPV ];
- var v_sTempXML = cognos.Value.toXML( v_oTemp );
- v_aXML.push( v_sTempXML );
- }
- v_sXML = v_aXML.join(K_PRMT_sEMPTY);
- }
- else if (v_oVal.length !== 0)
- {
- v_sXML = v_oVal.f_getXML();
- }
- return v_sXML;
- }
- var C_ParameterValue = cognos.Value; // Keep old reference for backward compatibility with custom scripts.
|