1/* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * - Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * - Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * - Neither the name of Oracle nor the names of its 16 * contributors may be used to endorse or promote products derived 17 * from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 20 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32if (arguments.length == 0) { 33 print("Usage: jjs ziplist -- <zip-file>"); 34 exit(1); 35} 36 37// list the content details of a .zip or .jar file 38var file = arguments[0]; 39 40// java classes used 41var Attributes = Java.type("java.util.jar.Attributes"); 42var FileTime = Java.type("java.nio.file.attribute.FileTime"); 43var JarFile = Java.type("java.util.jar.JarFile"); 44var ZipEntry = Java.type("java.util.zip.ZipEntry"); 45var ZipFile = Java.type("java.util.zip.ZipFile"); 46 47var zf = file.endsWith(".jar")? new JarFile(file) : new ZipFile(file); 48 49var entries = zf.entries(); 50// make overall output a valid JSON 51var zfObj = { 52 name: zf.name, 53 comment: zf.comment, 54 size: zf.size(), 55 entries: [] 56}; 57 58while (entries.hasMoreElements()) { 59 zfObj.entries.push(entries.nextElement()); 60} 61 62print(JSON.stringify(zfObj, function (key, value) { 63 if (value instanceof ZipEntry) { 64 return Object.bindProperties({}, value); 65 } else if (value instanceof FileTime) { 66 return value.toString(); 67 } else if (value instanceof Attributes) { 68 var attrs = {}; 69 var itr = value.entrySet().iterator(); 70 while (itr.hasNext()) { 71 var n = itr.next(); 72 attrs[n.key] = String(n.value); 73 } 74 return attrs; 75 } 76 77 return value; 78}, ' ')); 79 80zf.close(); 81