defer turning chunks of xml or marc-breaker into actual records until next() is called
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 28 Nov 2009 23:15:21 +0000 (23:15 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 28 Nov 2009 23:15:21 +0000 (23:15 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@15036 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/js/dojo/MARC/Batch.js

index 83027a5..88f0c24 100644 (file)
@@ -24,13 +24,28 @@ if(!dojo._hasResource["MARC.Batch"]) {
     dojo.declare('MARC.Batch', null, {
 
         constructor : function(kwargs) {
-            this.current_record = 0;
+            this.ready = false;
             this.records = [];
-            this.type = kwargs.type || 'xml';
             this.source = kwargs.source;
+            this.current_record = 0;
 
-            if (kwargs.url) this.fetchURL( kwargs.url );
-            this.parse();
+            if (this.source) this.ready = true;
+            if (!this.ready && kwargs.url) this.fetchURL( kwargs.url );
+
+            if (this.ready) this.parse();
+        },
+
+        parse : function () {
+            if (dojo.isObject( this.source )) { // assume an xml collection document
+                this.source = dojo.query('record', this.source);
+                this.type = 'xml';
+            } else if (this.source.match(/^\s*</)) { // this is xml text
+                this.source = dojox.xml.parser.parse( this.source );
+                this.parse();
+            } else { // must be a breaker doc. split on blank lines
+                this.source = this.source.split(/^$/);
+                this.type = 'breaker';
+            }
         },
 
         fetchURL : function (u) {
@@ -46,24 +61,18 @@ if(!dojo._hasResource["MARC.Batch"]) {
             });
         },
 
-        next : function () { return this.records[this.current_record++] },
+        next : function () {
+            var chunk = this.source[this.current_record++];
 
-        parse : function () {
-            if (this.source && dojo.isObject( this.source )) { // assume an xml collection document
-                this.records = dojo.map(
-                    dojo.query('record', this.source),
-                    function (r) { return new MARC.Record({xml:r}) }
-                );
-            } else if (this.source && this.source.match(/^\s*</)) { // this is xml text
-                this.source = dojox.xml.parser.parse( this.source );
-                this.parse();
-            } else if (this.source) { // must be a breaker doc. split on blank lines
-                this.records = dojo.map(
-                    this.source.split(/^$/),
-                    function (r) { return new MARC.Record({breaker:r}) }
-                );
+            if (chunk) {
+                var args = {};
+                args[this.type] = chunk;
+                return new MARC.Record(args);
             }
+
+            return null;
         }
+
     });
 }