Internal query handling completely rewritten.
[pazpar2-moved-to-github.git] / www / masterkey / js / pzQuery.js
1 /*
2 *********************************************************************************
3 ** QUERY CLASS ******************************************************************
4 *********************************************************************************
5 */
6 var pzQuery = function()
7 {
8     this.simpleQuery = '';
9     this.advTerms = new Array();
10     this.filterHash = new Array();
11     this.numTerms = 0;
12     this.filterNums = 0;
13 };
14 pzQuery.prototype = {
15     reset: function()
16     {
17         this.simpleQuery = '';
18         this.advTerms = new Array();
19         this.filterHash = new Array();
20         this.numTerms = 0;
21     },
22     addTerm: function(field, value)
23     {
24         var term = {"field": field, "value": value};
25         this.advTerms[this.numTerms] = term;
26         this.numTerms++;
27     },
28     getTermValueByIdx: function(index)
29     {
30         return this.advTerms[index].value;
31     },
32     getTermFieldByIdx: function(index)
33     {
34         return this.advTerms[index].field;
35     },
36     /* semicolon separated list of terms for given field*/
37     getTermsByField: function(field)
38     {
39         var terms = '';
40         for(var i = 0; i < this.advTerms.length; i++)
41         {
42             if( this.advTerms[i].field == field )
43                 terms = terms + this.queryHas[i].value + ';';
44         }
45         return terms;
46     },
47     addTermsFromList: function(inputString, field)
48     {
49         var inputArr = inputString.split(';');
50         for(var i=0; i < inputArr.length; i++)
51         {
52             if(inputArr[i].length < 3) continue;
53             this.advTerms[this.numTerms] = {"field": field, "value": inputArr[i] };
54             this.numTerms++;
55         }
56     },
57     removeTermByIdx: function(index)
58     {
59         this.advTerms.splice(index, 1);
60         this.numTerms--;
61     },
62     toCCL: function()
63     {   
64         // TODO escape the characters
65         var ccl = '';
66         if( this.simpleQuery != '')
67             ccl = '"'+this.simpleQuery+'"';
68         for(var i = 0; i < this.advTerms.length; i++)
69         {
70             if (ccl != '') ccl = ccl + ' and ';
71             ccl = ccl + this.advTerms[i].field+'="'+this.advTerms[i].value+'"';
72         }
73         return ccl;
74     },
75     addFilter: function(name, value)
76     {
77         var filter = {"name": name, "id": value };
78         this.filterHash[this.filterNums] = filter;
79         this.filterNums++;
80     },
81     setFilter: function(name, value)
82     {
83         this.filterHash = new Array();
84         this.filterNums = 0;
85         this.addFilter(name, value);
86     },
87     getFilter: function(index)
88     {
89         return this.filterHash[index].id;
90     },
91     getFilterName: function(index)
92     {
93         return this.filterHash[index].name;
94     },
95     removeFilter: function(index)
96     {
97         this.filterHash.splice(index, 1);
98         this.filterNums--;
99     },
100     clearFilter: function()
101     {
102         this.filterHash = new Array();
103         this.filterNums = 0;
104     },
105     getFilterString: function()
106     {
107         //temporary
108         if(!this.filterNums)
109             return undefined;
110         var filter = '';
111         for(var i = 0; i < this.filterHash.length; i++)
112         {
113             if (filter != '') filter = filter + '|';            
114             filter += 'id='+this.filterHash[i].id; 
115         }
116         return filter;
117     },
118     totalLength: function()
119     {
120         var simpleLength = this.simpleQuery != '' ? 1 : 0;
121         return this.advTerms.length + simpleLength;
122     }
123 }