]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/z3950.js
fleshing this out
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / cat / z3950.js
1 dump('entering cat.z3950.js\n');
2
3 if (typeof cat == 'undefined') cat = {};
4 cat.z3950 = function (params) {
5         try {
6                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
7                 JSAN.use('util.error'); this.error = new util.error();
8                 JSAN.use('util.network'); this.network = new util.network();
9         } catch(E) {
10                 dump('cat.z3950: ' + E + '\n');
11         }
12 }
13
14 cat.z3950.prototype = {
15
16         'init' : function( params ) {
17
18                 try {
19                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
20                         JSAN.use('util.widgets');
21
22                         var obj = this;
23
24                         obj.session = params['session'];
25
26                         JSAN.use('circ.util');
27                         var columns = circ.util.columns(
28                                 {
29                                         'tcn' : { 'hidden' : false },
30                                         'isbn' : { 'hidden' : false },
31                                         'title' : { 'hidden' : false, 'flex' : '1' },
32                                         'author' : { 'hidden' : false },
33                                         'edition' : { 'hidden' : false },
34                                         'pubdate' : { 'hidden' : false },
35                                         'publisher' : { 'hidden' : false },
36                                 }
37                         );
38
39                         JSAN.use('util.list'); obj.list = new util.list('results');
40                         obj.list.init(
41                                 {
42                                         'columns' : columns,
43                                         'map_row_to_column' : circ.util.std_map_row_to_column(),
44                                         'on_select' : function(ev) {
45                                                 JSAN.use('util.functional');
46                                                 var sel = obj.list.retrieve_selection();
47                                                 var list = util.functional.map_list(
48                                                         sel,
49                                                         function(o) { return o.getAttribute('retrieve_id'); }
50                                                 );
51                                                 obj.sdump('D_TRACE','cat/z3950: selection list = ' + js2JSON(list) );
52                                         },
53                                 }
54                         );
55
56
57                         document.getAnonymousNodes(document.getElementById('c1'))[0].addEventListener(
58                                 'mouseup',
59                                 function() {
60                                         util.widgets.click(
61                                                 document.getAnonymousNodes(document.getElementById('c2'))[0]
62                                         );
63                                 }, false
64                         );
65                         document.getAnonymousNodes(document.getElementById('c2'))[0].addEventListener(
66                                 'mouseup',
67                                 function() {
68                                         util.widgets.click(
69                                                 document.getAnonymousNodes(document.getElementById('c1'))[0]
70                                         );
71                                 }, false
72                         );
73
74                         JSAN.use('util.controller'); obj.controller = new util.controller();
75                         obj.controller.init(
76                                 {
77                                         control_map : {
78                                                 'cmd_broken' : [
79                                                         ['command'],
80                                                         function() { alert('Not Yet Implemented'); }
81                                                 ],
82                                                 'result_message' : [['render'],function(e){return function(){};}],
83                                                 'server' : [['render'],function(e){return function(){};}],
84                                                 'database' : [['render'],function(e){return function(){};}],
85                                                 'port' : [['render'],function(e){return function(){};}],
86                                                 'username' : [['render'],function(e){return function(){};}],
87                                                 'password' : [['render'],function(e){return function(){};}],
88                                                 'asc_id' : [
89                                                         ['render'],
90                                                         function(e){
91                                                                 return function(){
92                                                                         e.addEventListener(
93                                                                                 'keypress',
94                                                                                 function(ev) {
95                                                                                         if (ev.keyCode && ev.keyCode == 13) {
96                                                                                                 obj.asc_search_async();
97                                                                                         }
98                                                                                 },
99                                                                                 false
100                                                                         );
101                                                                 };
102                                                         }
103                                                 ],
104                                                 'import' : [
105                                                         ['command'],
106                                                         function() {
107                                                         },
108                                                 ],
109                                                 'asc_search' : [
110                                                         ['command'],
111                                                         function() {
112                                                                 obj.asc_search_async();
113                                                         },
114                                                 ],
115                                                 'raw_string' : [
116                                                         ['render'],
117                                                         function(e){
118                                                                 return function(){
119                                                                         e.addEventListener(
120                                                                                 'keypress',
121                                                                                 function(ev) {
122                                                                                         if (ev.keyCode && ev.keyCode == 13) {
123                                                                                                 obj.raw_search_async();
124                                                                                         }
125                                                                                 },
126                                                                                 false
127                                                                         );
128                                                                 };
129                                                         }
130                                                 ],
131                                                 'raw_search' : [
132                                                         ['command'],
133                                                         function() {
134                                                                 obj.raw_search_async();
135                                                         },
136                                                 ],
137                                                 'menu_placeholder' : [
138                                                         ['render'],
139                                                         function(e) {
140                                                                 return function() {
141                                                                         util.widgets.remove_children(e);
142                                                                         var ml = util.widgets.make_menulist( [
143                                                                                 [ 'System Defaults', 0 ],
144                                                                                 [ 'Custom', 1 ],
145                                                                         ] );
146                                                                         ml.setAttribute('flex','1');
147                                                                         e.appendChild(ml);
148                                                                         /* An experiment with virtual events.  I could just use a named function
149                                                                            instead of defining one inline, and then call that once to set things
150                                                                            up, and let the event handler call it the rest of the time. */
151                                                                         ml.addEventListener(
152                                                                                 'set_server_details',
153                                                                                 function(ev) { 
154                                                                                         /* FIXME - get these values from server */
155                                                                                         switch(ev.target.value) {
156                                                                                                 case 0: case '0':
157                                                                                                         obj.controller.view.server.value = 'zcat.oclc.org';
158                                                                                                         obj.controller.view.server.disabled = true;
159                                                                                                         obj.controller.view.database.value = 'OLUCWorldCat';
160                                                                                                         obj.controller.view.database.disabled = true;
161                                                                                                         obj.controller.view.port.value = '210';
162                                                                                                         obj.controller.view.port.disabled = true;
163                                                                                                         obj.controller.view.username.value = '****';
164                                                                                                         obj.controller.view.username.disabled = true;
165                                                                                                         obj.controller.view.password.value = '****';
166                                                                                                         obj.controller.view.password.disabled = true;
167                                                                                                         obj.controller.view.raw_string.value = 'DISABLED';
168                                                                                                         obj.controller.view.raw_string.disabled = true;
169                                                                                                         obj.controller.view.raw_search.disabled = true;
170                                                                                                         obj.controller.view.asc_id.value = '';
171                                                                                                         obj.controller.view.asc_id.disabled = false;
172                                                                                                         obj.controller.view.asc_search.disabled = false;
173                                                                                                 break;
174                                                                                                 default:
175                                                                                                         obj.controller.view.server.disabled = false;
176                                                                                                         obj.controller.view.database.disabled = false;
177                                                                                                         obj.controller.view.server.disabled = false;
178                                                                                                         obj.controller.view.port.disabled = false;
179                                                                                                         obj.controller.view.username.value = '';
180                                                                                                         obj.controller.view.username.disabled = false;
181                                                                                                         obj.controller.view.password.value = '';
182                                                                                                         obj.controller.view.password.disabled = false;
183                                                                                                         obj.controller.view.raw_string.value = '';
184                                                                                                         obj.controller.view.raw_string.disabled = false;
185                                                                                                         obj.controller.view.raw_search.disabled = false;
186                                                                                                         obj.controller.view.asc_id.value = 'DISABLED';
187                                                                                                         obj.controller.view.asc_id.disabled = true;
188                                                                                                         obj.controller.view.asc_search.disabled = true;
189                                                                                                 break;
190                                                                                         }
191                                                                                 },
192                                                                                 false
193                                                                         );
194                                                                         ml.addEventListener(
195                                                                                 'command',
196                                                                                 function(ev) { util.widgets.dispatch('set_server_details', ev.target); },
197                                                                                 false
198                                                                         );
199                                                                         setTimeout( function() { util.widgets.dispatch('set_server_details',ml); }, 0 );
200                                                                 }
201                                                         }
202                                                 ],
203                                         }
204                                 }
205                         );
206
207                         obj.controller.render();
208
209                 } catch(E) {
210                         this.error.sdump('D_ERROR','cat.z3950.init: ' + E + '\n');
211                 }
212         },
213
214         'store_disable_search_buttons' : function() {
215                 var obj = this;
216                 JSAN.use('util.widgets');
217                 util.widgets.store_disable(
218                         obj.controller.view.asc_search,
219                         obj.controller.view.raw_search
220                 );
221                 util.widgets.disable(
222                         obj.controller.view.asc_search,
223                         obj.controller.view.raw_search
224                 );
225         },
226
227         'restore_enable_search_buttons' : function() {
228                 var obj = this;
229                 JSAN.use('util.widgets');
230                 util.widgets.restore_disable(
231                         obj.controller.view.asc_search,
232                         obj.controller.view.raw_search
233                 );
234         },
235
236         'asc_search_async' : function() {
237                 try {
238                         var obj = this;
239                         var search = obj.controller.view.asc_id.value;
240                         obj.error.sdump('D_TRACE','search string: ' + search);
241                         JSAN.use('util.widgets');
242                         util.widgets.remove_children( obj.controller.view.result_message );
243                         obj.controller.view.result_message.appendChild(
244                                 document.createTextNode( 'Searching...' )
245                         );
246                         obj.store_disable_search_buttons();
247                         obj.network.simple_request(
248                                 'FM_BRN_RETRIEVE_VIA_Z3950_TCN',
249                                 [ obj.session, search ],
250                                 function(req) {
251                                         obj.handle_results(req.getResultObject())
252                                         obj.restore_enable_search_buttons();
253                                 }
254                         );
255                 } catch(E) {
256                         this.error.sdump('D_ERROR',E);
257                         alert(E);
258                 }
259
260         },
261
262         'raw_search_async' : function() {
263                 try {
264                         var obj = this;
265                         var search = obj.controller.view.raw_string.value;
266                         obj.error.sdump('D_TRACE','search string: ' + search);
267                         JSAN.use('util.widgets');
268                         util.widgets.remove_children( obj.controller.view.result_message );
269                         obj.controller.view.result_message.appendChild(
270                                 document.createTextNode( 'Searching...' )
271                         );
272                         obj.store_disable_search_buttons();
273                         obj.network.simple_request(
274                                 'FM_BRN_RETRIEVE_VIA_Z3950_RAW',
275                                 [ 
276                                         obj.session, 
277                                         obj.controller.view.server.value, 
278                                         obj.controller.view.port.value, 
279                                         obj.controller.view.database.value, 
280                                         search, 
281                                         obj.controller.view.username.value, 
282                                         obj.controller.view.password.value 
283                                 ],
284                                 function(req) {
285                                         obj.handle_results(req.getResultObject())
286                                         obj.restore_enable_search_buttons();
287                                 }
288                         );
289                 } catch(E) {
290                         this.error.sdump('D_ERROR',E);
291                         alert(E);
292                 }
293         },
294
295         'handle_results' : function(results) {
296                 var obj = this;
297                 JSAN.use('util.widgets');
298                 util.widgets.remove_children( obj.controller.view.result_message );
299                 if (results == null) {
300                         obj.controller.view.result_message.appendChild(
301                                 document.createTextNode( 'Server Error: ' + api.FM_BRN_RETRIEVE_VIA_Z3950_TCN.method + ' returned null' )
302                         );
303                         return;
304                 }
305                 if (results.count) {
306                         obj.controller.view.result_message.appendChild(
307                                 document.createTextNode( results.count + (results.count == 1 ? ' result ' : ' results ') + 'found. ' )
308                         );
309                 }
310                 if (results.records) {
311                         obj.controller.view.result_message.appendChild(
312                                 document.createTextNode( results.records.length + (results.records.length == 1 ? ' result' : ' results') + ' retrieved. ')
313                         );
314                         obj.results = results;
315                         obj.list.clear(); 
316                         for (var i = 0; i < obj.results.records.length; i++) {
317                                 obj.list.append(
318                                         {
319                                                 'retrieve_id' : i,
320                                                 'row' : {
321                                                         'my' : {
322                                                                 'mvr' : function(a){return a;}(obj.results.records[i].mvr),
323                                                         }
324                                                 }
325                                         }
326                                 );
327                         }
328                 } else {
329                         obj.controller.view.result_message.appendChild(
330                                 document.createTextNode( 'Too many results to retrieve. ')
331                         );
332                 }
333         },
334
335 }
336
337 dump('exiting cat.z3950.js\n');