| Clazz.declarePackage ("JSV.common"); | |
| Clazz.load (["java.io.BufferedReader", "JSV.api.JSVZipReader"], "JSV.common.JSVZipFileSequentialReader", ["java.io.StringReader", "java.util.zip.ZipInputStream", "JU.SB", "JU.Logger"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.subFileList = null; | |
| this.zis = null; | |
| this.ze = null; | |
| this.ptMark = 0; | |
| this.data = null; | |
| this.startCode = null; | |
| this.lineCount = 0; | |
| this.buf = null; | |
| this.len = 0; | |
| this.pt = 0; | |
| this.cr = '\0'; | |
| Clazz.instantialize (this, arguments); | |
| }, JSV.common, "JSVZipFileSequentialReader", java.io.BufferedReader, JSV.api.JSVZipReader); | |
| Clazz.prepareFields (c$, function () { | |
| this.buf = Clazz.newByteArray (1024, 0); | |
| }); | |
| Clazz.makeConstructor (c$, | |
| function () { | |
| Clazz.superConstructor (this, JSV.common.JSVZipFileSequentialReader, [ new java.io.StringReader ("")]); | |
| }); | |
| Clazz.overrideMethod (c$, "set", | |
| function (bis, subFileList, startCode) { | |
| this.subFileList = subFileList; | |
| this.zis = new java.util.zip.ZipInputStream (bis); | |
| this.startCode = startCode; | |
| this.nextEntry (); | |
| return this; | |
| }, "java.io.InputStream,~A,~S"); | |
| Clazz.overrideMethod (c$, "close", | |
| function () { | |
| try { | |
| this.close (); | |
| this.zis.close (); | |
| } catch (e) { | |
| if (Clazz.exceptionOf (e, java.io.IOException)) { | |
| } else { | |
| throw e; | |
| } | |
| } | |
| }); | |
| Clazz.overrideMethod (c$, "mark", | |
| function (limit) { | |
| this.ptMark = this.pt; | |
| if (this.len == 0) { | |
| this.readLine (); | |
| this.pt = this.ptMark; | |
| }}, "~N"); | |
| Clazz.overrideMethod (c$, "reset", | |
| function () { | |
| this.pt = this.ptMark; | |
| }); | |
| Clazz.overrideMethod (c$, "read", | |
| function (chars, chPt, chLen) { | |
| var l = Math.min (this.len - this.pt, chLen); | |
| this.data.getChars (0, l, chars, chPt); | |
| return l; | |
| }, "~A,~N,~N"); | |
| Clazz.overrideMethod (c$, "readLine", | |
| function () { | |
| while (this.ze != null) { | |
| try { | |
| var line = this.getEntryLine (); | |
| if (line != null) return line; | |
| } catch (e) { | |
| if (Clazz.exceptionOf (e, java.io.IOException)) { | |
| break; | |
| } else { | |
| throw e; | |
| } | |
| } | |
| this.nextEntry (); | |
| } | |
| return null; | |
| }); | |
| Clazz.defineMethod (c$, "nextEntry", | |
| function () { | |
| this.len = this.pt = 0; | |
| this.cr = '\0'; | |
| this.lineCount = 0; | |
| try { | |
| while ((this.ze = this.zis.getNextEntry ()) != null) if (this.isEntryOK (this.ze.getName ())) return; | |
| } catch (e) { | |
| if (Clazz.exceptionOf (e, Exception)) { | |
| this.ze = null; | |
| } else { | |
| throw e; | |
| } | |
| } | |
| }); | |
| Clazz.defineMethod (c$, "isEntryOK", | |
| function (name) { | |
| if (this.subFileList == null || this.subFileList.length == 1) return true; | |
| for (var i = this.subFileList.length; --i >= 0; ) if (this.subFileList[i].equals (name)) { | |
| JU.Logger.info ("...reading zip entry " + name); | |
| return true; | |
| } | |
| JU.Logger.info ("...skipping zip entry " + name); | |
| return false; | |
| }, "~S"); | |
| Clazz.defineMethod (c$, "getEntryLine", | |
| function () { | |
| var line = null; | |
| while (this.len >= 0 && (this.pt < this.len || this.zis.available () == 1)) { | |
| var pt0 = this.pt; | |
| var ch = ' '; | |
| while (this.pt < this.len && ch != this.cr) { | |
| switch (ch = this.data.charAt (this.pt++)) { | |
| case '\n': | |
| if (this.cr == '\r') { | |
| pt0 = this.pt; | |
| continue; | |
| }this.cr = '\n'; | |
| break; | |
| case '\r': | |
| if (this.cr == '\n') continue; | |
| this.cr = '\r'; | |
| break; | |
| } | |
| } | |
| if (line == null) line = new JU.SB (); | |
| if (this.pt != pt0) line.append (this.data.substring (pt0, this.pt + (ch == this.cr ? -1 : 0))); | |
| if (ch == this.cr || this.zis.available () != 1 || (this.len = this.zis.read (this.buf, 0, 1024)) < 0) { | |
| if (this.lineCount++ == 0 && this.startCode != null && line.indexOf (this.startCode) < 0) return null; | |
| return line.toString (); | |
| }this.pt = 0; | |
| this.data = String.instantialize (this.buf, 0, this.len); | |
| if (this.data.indexOf ('\0') >= 0) return null; | |
| } | |
| return (line == null ? null : line.toString ()); | |
| }); | |
| }); | |