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 * 017 */ 018package org.apache.commons.compress.archivers.sevenz; 019 020import java.io.File; 021import java.io.IOException; 022 023public class CLI { 024 025 026 private enum Mode { 027 LIST("Analysing") { 028 @Override 029 public void takeAction(final SevenZFile archive, final SevenZArchiveEntry entry) { 030 System.out.print(entry.getName()); 031 if (entry.isDirectory()) { 032 System.out.print(" dir"); 033 } else { 034 System.out.print(" " + entry.getCompressedSize() 035 + "/" + entry.getSize()); 036 } 037 if (entry.getHasLastModifiedDate()) { 038 System.out.print(" " + entry.getLastModifiedDate()); 039 } else { 040 System.out.print(" no last modified date"); 041 } 042 if (!entry.isDirectory()) { 043 System.out.println(" " + getContentMethods(entry)); 044 } else { 045 System.out.println(); 046 } 047 } 048 049 private String getContentMethods(final SevenZArchiveEntry entry) { 050 final StringBuilder sb = new StringBuilder(); 051 boolean first = true; 052 for (final SevenZMethodConfiguration m : entry.getContentMethods()) { 053 if (!first) { 054 sb.append(", "); 055 } 056 first = false; 057 sb.append(m.getMethod()); 058 if (m.getOptions() != null) { 059 sb.append("(").append(m.getOptions()).append(")"); 060 } 061 } 062 return sb.toString(); 063 } 064 }; 065 066 private final String message; 067 Mode(final String message) { 068 this.message = message; 069 } 070 public String getMessage() { 071 return message; 072 } 073 public abstract void takeAction(SevenZFile archive, SevenZArchiveEntry entry) 074 throws IOException; 075 } 076 077 public static void main(final String[] args) throws Exception { 078 if (args.length == 0) { 079 usage(); 080 return; 081 } 082 final Mode mode = grabMode(args); 083 System.out.println(mode.getMessage() + " " + args[0]); 084 final File f = new File(args[0]); 085 if (!f.isFile()) { 086 System.err.println(f + " doesn't exist or is a directory"); 087 } 088 try (final SevenZFile archive = new SevenZFile(f)) { 089 SevenZArchiveEntry ae; 090 while((ae=archive.getNextEntry()) != null) { 091 mode.takeAction(archive, ae); 092 } 093 } 094 } 095 096 private static void usage() { 097 System.out.println("Parameters: archive-name [list]"); 098 } 099 100 private static Mode grabMode(final String[] args) { 101 if (args.length < 2) { 102 return Mode.LIST; 103 } 104 return Enum.valueOf(Mode.class, args[1].toUpperCase()); 105 } 106 107}