62865ef7b2a3046cdb35b1d9f0a6c7c897d453a7
[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.singleFilter = null;
10     this.advTerms = new Array();
11     this.filterHash = new Array();
12     this.numTerms = 0;
13     this.filterNums = 0;
14 };
15 pzQuery.prototype = {
16     reset: function()
17     {
18         this.simpleQuery = '';
19         this.advTerms = new Array();
20         this.simpleFilter = null;
21         this.numTerms = 0;
22     },
23     addTerm: function(field, value)
24     {
25         var term = {"field": field, "value": value};
26         this.advTerms[this.numTerms] = term;
27         this.numTerms++;
28     },
29     getTermValueByIdx: function(index)
30     {
31         return this.advTerms[index].value;
32     },
33     getTermFieldByIdx: function(index)
34     {
35         return this.advTerms[index].field;
36     },
37     /* semicolon separated list of terms for given field*/
38     getTermsByField: function(field)
39     {
40         var terms = '';
41         for(var i = 0; i < this.advTerms.length; i++)
42         {
43             if( this.advTerms[i].field == field )
44                 terms = terms + this.queryHas[i].value + ';';
45         }
46         return terms;
47     },
48     addTermsFromList: function(inputString, field)
49     {
50         var inputArr = inputString.split(';');
51         for(var i=0; i < inputArr.length; i++)
52         {
53             if(inputArr[i].length < 3) continue;
54             this.advTerms[this.numTerms] = {"field": field, "value": inputArr[i] };
55             this.numTerms++;
56         }
57     },
58     removeTermByIdx: function(index)
59     {
60         this.advTerms.splice(index, 1);
61         this.numTerms--;
62     },
63     toCCL: function()
64     {   
65         // TODO escape the characters
66         var ccl = '';
67         if( this.simpleQuery != '')
68             ccl = '"'+this.simpleQuery+'"';
69         for(var i = 0; i < this.advTerms.length; i++)
70         {
71             if (ccl != '') ccl = ccl + ' and ';
72             ccl = ccl + this.advTerms[i].field+'="'+this.advTerms[i].value+'"';
73         }
74         return ccl;
75     },
76     addFilter: function(name, value)
77     {
78         var filter = {"name": name, "id": value };
79         this.filterHash[this.filterHash.length] = filter;
80         this.filterNums++
81         return  this.filterHash.length - 1;
82     },
83     setFilter: function(name, value)
84     {
85         this.filterHash = new Array();
86         this.filterNums = 0;
87         this.addFilter(name, value);
88     },
89     getFilter: function(index)
90     {
91         return this.filterHash[index].id;
92     },
93     getFilterName: function(index)
94     {
95         return this.filterHash[index].name;
96     },
97     removeFilter: function(index)
98     {
99         delete this.filterHash[index];
100         this.filterNums--;
101     },
102     clearFilter: function()
103     {
104         this.filterHash = new Array();
105         this.filterNums = 0;
106     },
107     getFilterString: function()
108     {
109         //temporary
110         if( this.singleFilter != null ) {
111             return 'pz:id='+this.singleFilter.id;
112         } 
113         else if( this.filterNums <= 0 ) {
114             return undefined;
115         }
116
117         var filter = 'pz:id=';
118         for(var i = 0; i < this.filterHash.length; i++)
119         {
120             if (this.filterHash[i] == undefined) continue;
121             if (filter > 'pz:id=') filter = filter + '|';            
122             filter += this.filterHash[i].id; 
123         }
124         return filter;
125     },
126     totalLength: function()
127     {
128         var simpleLength = this.simpleQuery != '' ? 1 : 0;
129         return this.advTerms.length + simpleLength;
130     },
131     clearSingleFilter: function()
132     {
133         this.singleFilter = null;
134     },
135     setSingleFilter: function(name, value)
136     {
137         this.singleFilter = {"name": name, "id": value };
138     },
139     getSingleFilterName: function()
140     {
141         return this.singleFilter.name;
142     }
143 }