001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.compress.archivers.sevenz; 018 019import java.io.File; 020import java.io.IOException; 021 022/** 023 * Usage: archive-name [list] 024 */ 025public class CLI { 026 027 private enum Mode { 028 LIST("Analysing") { 029 private String getContentMethods(final SevenZArchiveEntry entry) { 030 final StringBuilder sb = new StringBuilder(); 031 boolean first = true; 032 for (final SevenZMethodConfiguration m : entry.getContentMethods()) { 033 if (!first) { 034 sb.append(", "); 035 } 036 first = false; 037 sb.append(m.getMethod()); 038 if (m.getOptions() != null) { 039 sb.append("(").append(m.getOptions()).append(")"); 040 } 041 } 042 return sb.toString(); 043 } 044 045 @Override 046 public void takeAction(final SevenZFile archive, final SevenZArchiveEntry entry) { 047 System.out.print(entry.getName()); 048 if (entry.isDirectory()) { 049 System.out.print(" dir"); 050 } else { 051 System.out.print(" " + entry.getCompressedSize() + "/" + entry.getSize()); 052 } 053 if (entry.getHasLastModifiedDate()) { 054 System.out.print(" " + entry.getLastModifiedDate()); 055 } else { 056 System.out.print(" no last modified date"); 057 } 058 if (!entry.isDirectory()) { 059 System.out.println(" " + getContentMethods(entry)); 060 } else { 061 System.out.println(); 062 } 063 } 064 }; 065 066 private final String message; 067 068 Mode(final String message) { 069 this.message = message; 070 } 071 072 public String getMessage() { 073 return message; 074 } 075 076 public abstract void takeAction(SevenZFile archive, SevenZArchiveEntry entry) throws IOException; 077 } 078 079 private static Mode grabMode(final String[] args) { 080 if (args.length < 2) { 081 return Mode.LIST; 082 } 083 return Enum.valueOf(Mode.class, args[1].toUpperCase()); 084 } 085 086 public static void main(final String[] args) throws Exception { 087 if (args.length == 0) { 088 usage(); 089 return; 090 } 091 final Mode mode = grabMode(args); 092 System.out.println(mode.getMessage() + " " + args[0]); 093 final File f = new File(args[0]); 094 if (!f.isFile()) { 095 System.err.println(f + " doesn't exist or is a directory"); 096 } 097 try (final SevenZFile archive = new SevenZFile(f)) { 098 SevenZArchiveEntry ae; 099 while ((ae = archive.getNextEntry()) != null) { 100 mode.takeAction(archive, ae); 101 } 102 } 103 } 104 105 private static void usage() { 106 System.out.println("Parameters: archive-name [list]"); 107 } 108 109}