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