attila@963: /* attila@963: * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. attila@963: * attila@963: * Redistribution and use in source and binary forms, with or without attila@963: * modification, are permitted provided that the following conditions attila@963: * are met: attila@963: * attila@963: * - Redistributions of source code must retain the above copyright attila@963: * notice, this list of conditions and the following disclaimer. attila@963: * attila@963: * - Redistributions in binary form must reproduce the above copyright attila@963: * notice, this list of conditions and the following disclaimer in the attila@963: * documentation and/or other materials provided with the distribution. attila@963: * attila@963: * - Neither the name of Oracle nor the names of its attila@963: * contributors may be used to endorse or promote products derived attila@963: * from this software without specific prior written permission. attila@963: * attila@963: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS attila@963: * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, attila@963: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR attila@963: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR attila@963: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, attila@963: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, attila@963: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR attila@963: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF attila@963: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING attila@963: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS attila@963: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. attila@963: */ attila@963: attila@963: if (arguments.length == 0) { attila@963: print("Usage: jjs ziplist -- "); attila@963: exit(1); attila@963: } attila@963: attila@963: // list the content details of a .zip or .jar file attila@963: var file = arguments[0]; attila@963: attila@963: // java classes used attila@963: var Attributes = Java.type("java.util.jar.Attributes"); attila@963: var FileTime = Java.type("java.nio.file.attribute.FileTime"); attila@963: var JarFile = Java.type("java.util.jar.JarFile"); attila@963: var ZipEntry = Java.type("java.util.zip.ZipEntry"); attila@963: var ZipFile = Java.type("java.util.zip.ZipFile"); attila@963: attila@963: var zf = file.endsWith(".jar")? new JarFile(file) : new ZipFile(file); attila@963: attila@963: var entries = zf.entries(); attila@963: // make overall output a valid JSON attila@963: var zfObj = { attila@963: name: zf.name, attila@963: comment: zf.comment, attila@963: size: zf.size(), attila@963: entries: [] attila@963: }; attila@963: attila@963: while (entries.hasMoreElements()) { attila@963: zfObj.entries.push(entries.nextElement()); attila@963: } attila@963: attila@963: print(JSON.stringify(zfObj, function (key, value) { attila@963: if (value instanceof ZipEntry) { attila@963: return Object.bindProperties({}, value); attila@963: } else if (value instanceof FileTime) { attila@963: return value.toString(); attila@963: } else if (value instanceof Attributes) { attila@963: var attrs = {}; attila@963: var itr = value.entrySet().iterator(); attila@963: while (itr.hasNext()) { attila@963: var n = itr.next(); attila@963: attrs[n.key] = String(n.value); attila@963: } attila@963: return attrs; attila@963: } attila@963: attila@963: return value; attila@963: }, ' ')); attila@963: attila@963: zf.close();