123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- function CFilterConverter(oFilterNode)
- {
- this.m_oFilterNode = oFilterNode;
-
-
-
-
- this.m_bIsModelFilter = isModelFilter(oFilterNode.getAttribute('id'));
-
-
-
- this.m_bIncludeMissingValues = false;
-
- this.m_sFilterExpression = this.cleanupFilterExpression( XMLHelper_GetText( this.m_oFilterNode, true ) );
-
-
-
- this.m_sFilterType = this.getFilterType();
-
-
- this.m_oCachedConvertedFilterNode = null;
-
- this.m_bNeedsConversion = null;
- };
- CFilterConverter.prototype.convert = function ()
- {
-
-
- if (this.m_oCachedConvertedFilterNode === null && this.needsConversion())
- {
-
- this.m_oFilterNode.removeChild(this.m_oFilterNode.firstChild);
- switch (this.getFilterType())
- {
- case "picklist":
- this.m_oCachedConvertedFilterNode = this.convertPicklist();
- break;
- case "range":
- this.m_oCachedConvertedFilterNode = this.convertRange();
- break;
- }
-
- if (this.m_bIncludeMissingValues)
- {
- var oFEElement = XMLHelper_FindChildByTagName(this.m_oCachedConvertedFilterNode, "FE", true);
- if (oFEElement)
- {
- oFEElement.setAttribute("nullOption", "include");
- }
- }
- }
- return this.m_oCachedConvertedFilterNode;
- };
- CFilterConverter.prototype.convertPicklist = function()
- {
- var str = this.m_sFilterExpression;
- var filterNode = this.m_oFilterNode;
- var aValues = this.getPicklistValues();
-
-
-
-
-
-
-
-
-
-
-
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- var oFEElement = XMLBuilderCreateElementNS("", "FE", oMQMgr.getDoc());
- this.m_oFilterNode.appendChild(oFEElement);
- oFEElement.setAttribute("filterType", "enum");
- oFEElement.setAttribute("dataType", "string");
- var sColumnId = this.m_oFilterNode.getAttribute("columnId");
- if (sColumnId && sColumnId.length)
- {
- oFEElement.setAttribute("dataItemName", sColumnId);
- }
-
- for (var i = 0; i < aValues.length; i++)
- {
- var sValue = aValues[i];
-
- var sPrompt = this.getPrompt(sValue);
- if (sPrompt.length)
- {
- oFEElement.setAttribute("prompt", sPrompt);
- }
- else
- {
- var oValueElement = XMLBuilderCreateElementNS("", "Value", oMQMgr.getDoc());
- oFEElement.appendChild(oValueElement);
- oValueElement.setAttribute("use", sValue);
- oValueElement.setAttribute("display", sValue);
- }
- }
- return this.m_oFilterNode;
- };
- CFilterConverter.prototype.getPicklistValues = function()
- {
- var str = this.m_sFilterExpression;
-
-
- str = str.replace(/^.+in\s\(/,"");
- str = str.replace(/\s*\)\s*$/,"");
- var sSeparator = ",";
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- if (oMQMgr)
- {
- sSeparator = oMQMgr.getListSeparator();
- }
-
- if (str.search(/^\s*'.*'\s*$/) != -1)
- {
- var reSeparatorWithApos = new RegExp("'\\s*" + sSeparator + "\\s*'", "g");
- str = str.replace(reSeparatorWithApos, "\t\n");
- str = str.replace(/^\s*'/, "");
- str = str.replace(/\s*'$/, "");
- }
- else
- {
- var reSeparator = new RegExp("\\s*" + sSeparator + "\\s*", "g");
- str = str.replace(reSeparator, "\t\n");
- }
- if ( str.length < 1 )
- {
- return null;
- }
- values = str.split("\t\n");
- for (var i= 0; i < values.length; i++)
- {
- values[i] = values[i].replace(/''/g, "'");
-
- }
- return values;
- };
- CFilterConverter.prototype.convertRange = function()
- {
-
- var str = this.m_sFilterExpression;
- str = str.replace(/^.+>=/g,">=");
- str = str.replace(/^.+<=/g,"<=");
- str = str.replace(/^[^><]+=/g,"=");
-
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- var oFEElement = XMLBuilderCreateElementNS("", "FE", oMQMgr.getDoc());
- this.m_oFilterNode.appendChild(oFEElement);
- oFEElement.setAttribute("filterType", "range");
-
- var sFromValue = this.getFromValue();
- var sToValue = this.getToValue();
-
- var sPrompt = this.getPrompt(sFromValue);
- if (sPrompt.length && sFromValue === sToValue)
- {
-
- oFEElement.setAttribute("prompt", sPrompt);
- }
- else
- {
-
- if (sFromValue !== "")
- {
- var oFromElement = XMLBuilderCreateElementNS("", "From", oMQMgr.getDoc());
- oFEElement.appendChild(oFromElement);
- oFromElement.setAttribute("use", sFromValue);
- oFromElement.setAttribute("display", sFromValue);
- }
- if (sToValue !== "")
- {
- var oToElement = XMLBuilderCreateElementNS("", "To", oMQMgr.getDoc());
- oFEElement.appendChild(oToElement);
- oToElement.setAttribute("use", sToValue);
- oToElement.setAttribute("display", sToValue);
- }
- }
- return this.m_oFilterNode;
- };
- CFilterConverter.prototype.getFromValue = function() { return this.getFromOrToValue("from"); }
- CFilterConverter.prototype.getToValue = function() { return this.getFromOrToValue("to"); }
- CFilterConverter.prototype.getFromOrToValue = function(to_from)
- {
- var str = this.m_sFilterExpression;
- var filterNode = this.m_oFilterNode;
- var aValues = str.split("in_range");
- if (aValues.length == 2)
- {
- aValues[1] = aValues[1].replace(/^\s*/g,"").replace(/.*\{/g, "").replace(/\}.*/g, "");
- var rangeStr = aValues[1];
- var colonIdx = rangeStr.indexOf(':');
- if (colonIdx == -1)
- {
- return rangeStr;
- }
- if (colonIdx == 0)
- {
- if (to_from == "to")
- {
- return rangeStr.substring(1);
- }
- }
- else if (rangeStr.charAt(rangeStr.length -1) == ':')
- {
- if (to_from == "from")
- {
- return rangeStr.substr(0, rangeStr.length -1);
- }
- }
- else
- {
- var a = rangeStr.split(":");
- if (a)
- {
- if (a.length == 2)
- {
- if (a[0] && to_from == "from")
- {
- return a[0];
- }
- if (a[1] && to_from == "to")
- {
- return a[1];
- }
- }
- else if (a.length == 3)
- {
- return rangeStr;
- }
- else
- {
- if (to_from == "from")
- {
- return rangeStr.substr(0, (rangeStr.length - 1) / 2);
- }
- else if (to_from == "to")
- {
- return rangeStr.substring(((rangeStr.length - 1) / 2) + 1);
- }
- }
- }
- }
- }
- return "";
- };
- CFilterConverter.prototype.getBasedOn = function()
- {
-
-
- var str = this.m_sFilterExpression.match(/<filter[^<>]*>/gi);
- if (str != null && str[0] != null)
- {
- str = str[0];
- str = str.replace(/\s*use\s*="optional"\s*/g, "");
-
- if (str == "")
- {
- return "raw";
- }
- if (str.search(/summary\s*=\s*"/gi) > -1)
- {
-
- str = str.replace(/(.*summary\s*=\s*")|("\W*)/gi, "");
-
-
- if (str == "true")
- {
- return "details";
- }
- else if (str == "none")
- {
- return "raw";
- }
- else
- {
- return str;
- }
- }
- }
- return null;
- };
- CFilterConverter.prototype.getFilterType = function()
- {
- if (! this.m_sFilterType || ! this.m_sFilterType.length)
- {
- var sFilterType = "picklist";
-
-
- var sRangeExpression = this.m_sFilterExpression;
- if (sRangeExpression.search(/in_range/gi) > -1)
- {
- sFilterType = "range";
- }
- this.m_sFilterType = sFilterType;
- }
- return this.m_sFilterType;
- };
- CFilterConverter.prototype.cleanupFilterExpression = function(sFilterExpression)
- {
-
-
- sFilterExpression = sFilterExpression.replace(/<\/?filter\s*[\[\]\.="\w]*>/ig, "");
-
-
-
- if (! this.m_bIsModelFilter)
- {
- sFilterExpression = sFilterExpression.replace(/(\[[\w\s\.]+\]\.?)+/g, "");
-
- var sIncludeMissing = sFilterExpression.replace(/\s+or\s+.*\s+is missing/g, "");
- if (sIncludeMissing !== sFilterExpression)
- {
- this.m_bIncludeMissingValues = true;
- sFilterExpression = sIncludeMissing;
- }
- }
- return sFilterExpression;
- };
- CFilterConverter.prototype.getPrompt = function(sValue)
- {
- var sReturn = "";
- var sPrompt = sValue.replace(/^\?(.*)\?$/, "$1");
- if (sPrompt !== sValue)
- {
- sReturn = sPrompt;
- }
- return sReturn;
- };
- CFilterConverter.prototype.needsConversion = function()
- {
-
- if (this.m_bNeedsConversion === null && ! this.m_bIsModelFilter)
- {
- var bNeedsConversion = true;
-
- if (this.m_oCachedConvertedFilterNode === null)
- {
-
- if (! this.m_sFilterExpression || this.m_sFilterExpression.length === 0)
- {
- bNeedsConversion = false;
- }
- else
- {
-
- var oFEElement = XMLHelper_FindChildByTagName(this.m_oFilterNode, "FE", true);
- if (oFEElement !== null)
- {
- bNeedsConversion = false;
- }
- }
- }
- this.m_bNeedsConversion = bNeedsConversion;
- }
- return this.m_bNeedsConversion;
- };
|