]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/z3950.js
move toward new marc editor
[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                                                 try {
46                                                         JSAN.use('util.functional');
47                                                         var sel = obj.list.retrieve_selection();
48                                                         var list = util.functional.map_list(
49                                                                 sel,
50                                                                 function(o) { return o.getAttribute('retrieve_id'); }
51                                                         );
52                                                         obj.error.sdump('D_TRACE','cat/z3950: selection list = ' + js2JSON(list) );
53                                                         obj.controller.view.marc_import.disabled = false;
54                                                         obj.controller.view.marc_import.setAttribute('retrieve_id',list[0]);
55                                                 } catch(E) {
56                                                         alert('FIXME: ' + E);
57                                                 }
58                                         },
59                                 }
60                         );
61
62
63                         document.getAnonymousNodes(document.getElementById('c1'))[0].addEventListener(
64                                 'mouseup',
65                                 function() {
66                                         util.widgets.click(
67                                                 document.getAnonymousNodes(document.getElementById('c2'))[0]
68                                         );
69                                 }, false
70                         );
71                         document.getAnonymousNodes(document.getElementById('c2'))[0].addEventListener(
72                                 'mouseup',
73                                 function() {
74                                         util.widgets.click(
75                                                 document.getAnonymousNodes(document.getElementById('c1'))[0]
76                                         );
77                                 }, false
78                         );
79
80                         JSAN.use('util.controller'); obj.controller = new util.controller();
81                         obj.controller.init(
82                                 {
83                                         control_map : {
84                                                 'cmd_broken' : [
85                                                         ['command'],
86                                                         function() { alert('Not Yet Implemented'); }
87                                                 ],
88                                                 'result_message' : [['render'],function(e){return function(){};}],
89                                                 'server' : [['render'],function(e){return function(){};}],
90                                                 'database' : [['render'],function(e){return function(){};}],
91                                                 'port' : [['render'],function(e){return function(){};}],
92                                                 'username' : [['render'],function(e){return function(){};}],
93                                                 'password' : [['render'],function(e){return function(){};}],
94                                                 'asc_id' : [
95                                                         ['render'],
96                                                         function(e){
97                                                                 return function(){
98                                                                         e.addEventListener(
99                                                                                 'keypress',
100                                                                                 function(ev) {
101                                                                                         if (ev.keyCode && ev.keyCode == 13) {
102                                                                                                 obj.asc_search_async();
103                                                                                         }
104                                                                                 },
105                                                                                 false
106                                                                         );
107                                                                 };
108                                                         }
109                                                 ],
110                                                 'marc_import' : [
111                                                         ['command'],
112                                                         function() {
113                                                                 obj.spawn_marc_editor(
114                                                                                 obj.results.records[
115                                                                                         obj.controller.view.marc_import.getAttribute('retrieve_id')
116                                                                                 ].marcxml
117                                                                         )
118                                                                 );
119                                                         },
120                                                 ],
121                                                 'asc_search' : [
122                                                         ['command'],
123                                                         function() {
124                                                                 obj.asc_search_async();
125                                                         },
126                                                 ],
127                                                 'raw_string' : [
128                                                         ['render'],
129                                                         function(e){
130                                                                 return function(){
131                                                                         e.addEventListener(
132                                                                                 'keypress',
133                                                                                 function(ev) {
134                                                                                         if (ev.keyCode && ev.keyCode == 13) {
135                                                                                                 obj.raw_search_async();
136                                                                                         }
137                                                                                 },
138                                                                                 false
139                                                                         );
140                                                                 };
141                                                         }
142                                                 ],
143                                                 'raw_search' : [
144                                                         ['command'],
145                                                         function() {
146                                                                 obj.raw_search_async();
147                                                         },
148                                                 ],
149                                                 'menu_placeholder' : [
150                                                         ['render'],
151                                                         function(e) {
152                                                                 return function() {
153                                                                         util.widgets.remove_children(e);
154                                                                         var ml = util.widgets.make_menulist( [
155                                                                                 [ 'OCLC', 'oclc' ],
156                                                                                 [ 'Custom', 1 ],
157                                                                         ] );
158                                                                         ml.setAttribute('flex','1');
159                                                                         e.appendChild(ml);
160                                                                         /* An experiment with virtual events.  I could just use a named function
161                                                                            instead of defining one inline, and then call that once to set things
162                                                                            up, and let the event handler call it the rest of the time. */
163                                                                         ml.addEventListener(
164                                                                                 'set_server_details',
165                                                                                 function(ev) { 
166                                                                                         /* FIXME - get these values from server */
167                                                                                         switch(ev.target.value) {
168                                                                                                 case 'oclc':
169                                                                                                         obj.controller.view.server.value = 'zcat.oclc.org';
170                                                                                                         obj.controller.view.server.disabled = true;
171                                                                                                         obj.controller.view.database.value = 'OLUCWorldCat';
172                                                                                                         obj.controller.view.database.disabled = true;
173                                                                                                         obj.controller.view.port.value = '210';
174                                                                                                         obj.controller.view.port.disabled = true;
175                                                                                                         obj.controller.view.username.value = '****';
176                                                                                                         obj.controller.view.username.disabled = true;
177                                                                                                         obj.controller.view.password.value = '****';
178                                                                                                         obj.controller.view.password.disabled = true;
179                                                                                                         //obj.controller.view.raw_string.value = 'DISABLED';
180                                                                                                         //obj.controller.view.raw_string.disabled = true;
181                                                                                                         //obj.controller.view.raw_search.disabled = true;
182                                                                                                         //obj.controller.view.asc_id.value = '';
183                                                                                                         //obj.controller.view.asc_id.disabled = false;
184                                                                                                         //obj.controller.view.asc_search.disabled = false;
185                                                                                                 break;
186                                                                                                 default:
187                                                                                                         obj.controller.view.server.disabled = false;
188                                                                                                         obj.controller.view.database.disabled = false;
189                                                                                                         obj.controller.view.server.disabled = false;
190                                                                                                         obj.controller.view.port.disabled = false;
191                                                                                                         obj.controller.view.username.value = '';
192                                                                                                         obj.controller.view.username.disabled = false;
193                                                                                                         obj.controller.view.password.value = '';
194                                                                                                         obj.controller.view.password.disabled = false;
195                                                                                                         //obj.controller.view.raw_string.value = '';
196                                                                                                         //obj.controller.view.raw_string.disabled = false;
197                                                                                                         //obj.controller.view.raw_search.disabled = false;
198                                                                                                         //obj.controller.view.asc_id.value = 'DISABLED';
199                                                                                                         //obj.controller.view.asc_id.disabled = true;
200                                                                                                         //obj.controller.view.asc_search.disabled = true;
201                                                                                                 break;
202                                                                                         }
203                                                                                 },
204                                                                                 false
205                                                                         );
206                                                                         ml.addEventListener(
207                                                                                 'command',
208                                                                                 function(ev) { util.widgets.dispatch('set_server_details', ev.target); },
209                                                                                 false
210                                                                         );
211                                                                         setTimeout( function() { util.widgets.dispatch('set_server_details',ml); }, 0 );
212                                                                         obj.controller.view.server_menu = ml;
213                                                                 }
214                                                         }
215                                                 ],
216                                         }
217                                 }
218                         );
219
220                         obj.controller.render();
221
222                 } catch(E) {
223                         this.error.sdump('D_ERROR','cat.z3950.init: ' + E + '\n');
224                 }
225         },
226
227         'store_disable_search_buttons' : function() {
228                 var obj = this;
229                 JSAN.use('util.widgets');
230                 util.widgets.store_disable(
231                         obj.controller.view.asc_search,
232                         obj.controller.view.raw_search
233                 );
234                 util.widgets.disable(
235                         obj.controller.view.asc_search,
236                         obj.controller.view.raw_search
237                 );
238         },
239
240         'restore_enable_search_buttons' : function() {
241                 var obj = this;
242                 JSAN.use('util.widgets');
243                 util.widgets.restore_disable(
244                         obj.controller.view.asc_search,
245                         obj.controller.view.raw_search
246                 );
247         },
248
249         'asc_search_async' : function() {
250                 try {
251                         var obj = this;
252                         var search = obj.controller.view.asc_id.value;
253                         obj.error.sdump('D_TRACE','search string: ' + search);
254                         JSAN.use('util.widgets');
255                         util.widgets.remove_children( obj.controller.view.result_message );
256                         obj.controller.view.result_message.appendChild(
257                                 document.createTextNode( 'Searching...' )
258                         );
259                         obj.store_disable_search_buttons();
260                         var params;
261                         if (!Number(obj.controller.view.server_menu.value)) {
262                                 params = [ obj.session, search, obj.controller.view.server_menu.value ];
263                         } else {
264                                 params = [ obj.session, search, 'oclc' ];
265                         }
266                         obj.network.simple_request(
267                                 'FM_BLOB_RETRIEVE_VIA_Z3950_TCN',
268                                 [ obj.session, search, 'oclc' ],
269                                 function(req) {
270                                         obj.handle_results(req.getResultObject())
271                                         obj.restore_enable_search_buttons();
272                                 }
273                         );
274                 } catch(E) {
275                         this.error.sdump('D_ERROR',E);
276                         alert(E);
277                 }
278
279         },
280
281         'raw_search_async' : function() {
282                 try {
283                         var obj = this;
284                         var search = obj.controller.view.raw_string.value;
285                         obj.error.sdump('D_TRACE','search string: ' + search);
286                         JSAN.use('util.widgets');
287                         util.widgets.remove_children( obj.controller.view.result_message );
288                         obj.controller.view.result_message.appendChild(
289                                 document.createTextNode( 'Searching...' )
290                         );
291                         obj.store_disable_search_buttons();
292                         if (!Number(obj.controller.view.server_menu.value)) {
293                                 params = [ 
294                                         obj.session, 
295                                         {
296                                                 'search':search,
297                                                 'service':obj.controller.view.server_menu.value,
298                                         }
299                                 ];
300                         } else {
301                                 params = [ 
302                                         obj.session, 
303                                         {
304                                                 'search':search,
305                                                 'server':obj.controller.view.server.value, 
306                                                 'prt':obj.controller.view.port.value, 
307                                                 'db':obj.controller.view.database.value, 
308                                                 'username':obj.controller.view.username.value, 
309                                                 'password':obj.controller.view.password.value 
310                                         }
311
312                                 ];
313                         }
314                         obj.network.simple_request(
315                                 'FM_BLOB_RETRIEVE_VIA_Z3950_RAW',
316                                 params,
317                                 function(req) {
318                                         obj.handle_results(req.getResultObject())
319                                         obj.restore_enable_search_buttons();
320                                 }
321                         );
322                 } catch(E) {
323                         this.error.sdump('D_ERROR',E);
324                         alert(E);
325                 }
326         },
327
328         'handle_results' : function(results) {
329                 var obj = this;
330                 JSAN.use('util.widgets');
331                 util.widgets.remove_children( obj.controller.view.result_message );
332                 if (results == null) {
333                         obj.controller.view.result_message.appendChild(
334                                 document.createTextNode( 'Server Error: ' + api.FM_BLOB_RETRIEVE_VIA_Z3950_TCN.method + ' returned null' )
335                         );
336                         return;
337                 }
338                 if (results.count) {
339                         obj.controller.view.result_message.appendChild(
340                                 document.createTextNode( results.count + (results.count == 1 ? ' result ' : ' results ') + 'found. ' )
341                         );
342                 }
343                 if (results.records) {
344                         obj.controller.view.result_message.appendChild(
345                                 document.createTextNode( results.records.length + (results.records.length == 1 ? ' result' : ' results') + ' retrieved. ')
346                         );
347                         obj.results = results;
348                         obj.list.clear(); obj.controller.view.marc_import.disabled = true;
349                         for (var i = 0; i < obj.results.records.length; i++) {
350                                 obj.list.append(
351                                         {
352                                                 'retrieve_id' : i,
353                                                 'row' : {
354                                                         'my' : {
355                                                                 'mvr' : function(a){return a;}(obj.results.records[i].mvr),
356                                                         }
357                                                 }
358                                         }
359                                 );
360                         }
361                 } else {
362                         obj.controller.view.result_message.appendChild(
363                                 document.createTextNode( 'Too many results to retrieve. ')
364                         );
365                 }
366         },
367
368         'spawn_marc_editor' : function(my_marcxml) {
369                 var obj = this;
370                 xulG.new_tab(
371                         xulG.url_prefix(urls.XUL_MARC_EDIT), 
372                         { 'tab_name' : 'MARC Editor' }, 
373                         { 
374                                 'record' : { 'marc' : my_marcxml },
375                                 'save' : {
376                                         'label' : 'Import Record',
377                                         'func' : function (new_marcxml) {
378                                                 alert('We got MARC!  Put network call to import here.');
379                                         }
380                                 }
381                         } 
382                 );
383         },
384
385 }
386
387 dump('exiting cat.z3950.js\n');