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.zip; 019 020import java.util.Collections; 021import java.util.HashMap; 022import java.util.Map; 023import java.util.zip.ZipEntry; 024 025/** 026 * List of known compression methods 027 * 028 * Many of these methods are currently not supported by commons compress 029 * 030 * @since 1.5 031 */ 032public enum ZipMethod { 033 034 /** 035 * Compression method 0 for uncompressed entries. 036 * 037 * @see ZipEntry#STORED 038 */ 039 STORED(ZipEntry.STORED), 040 041 /** 042 * UnShrinking. 043 * dynamic Lempel-Ziv-Welch-Algorithm 044 * 045 * @see <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 046 * method: (2 bytes)</a> 047 */ 048 UNSHRINKING(1), 049 050 /** 051 * Reduced with compression factor 1. 052 * 053 * @see <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 054 * method: (2 bytes)</a> 055 */ 056 EXPANDING_LEVEL_1(2), 057 058 /** 059 * Reduced with compression factor 2. 060 * 061 * @see <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 062 * method: (2 bytes)</a> 063 */ 064 EXPANDING_LEVEL_2(3), 065 066 /** 067 * Reduced with compression factor 3. 068 * 069 * @see <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 070 * method: (2 bytes)</a> 071 */ 072 EXPANDING_LEVEL_3(4), 073 074 /** 075 * Reduced with compression factor 4. 076 * 077 * @see <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 078 * method: (2 bytes)</a> 079 */ 080 EXPANDING_LEVEL_4(5), 081 082 /** 083 * Imploding. 084 * 085 * @see <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 086 * method: (2 bytes)</a> 087 */ 088 IMPLODING(6), 089 090 /** 091 * Tokenization. 092 * 093 * @see <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 094 * method: (2 bytes)</a> 095 */ 096 TOKENIZATION(7), 097 098 /** 099 * Compression method 8 for compressed (deflated) entries. 100 * 101 * @see ZipEntry#DEFLATED 102 */ 103 DEFLATED(ZipEntry.DEFLATED), 104 105 /** 106 * Compression Method 9 for enhanced deflate. 107 * 108 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 109 */ 110 ENHANCED_DEFLATED(9), 111 112 /** 113 * PKWARE Data Compression Library Imploding. 114 * 115 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 116 */ 117 PKWARE_IMPLODING(10), 118 119 /** 120 * Compression Method 12 for bzip2. 121 * 122 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 123 */ 124 BZIP2(12), 125 126 /** 127 * Compression Method 14 for LZMA. 128 * 129 * @see <a href="http://www.7-zip.org/sdk.html">http://www.7-zip.org/sdk.html</a> 130 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 131 */ 132 LZMA(14), 133 134 135 /** 136 * Compression Method 95 for XZ. 137 * 138 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 139 */ 140 XZ(95), 141 142 /** 143 * Compression Method 96 for Jpeg compression. 144 * 145 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 146 */ 147 JPEG(96), 148 149 /** 150 * Compression Method 97 for WavPack. 151 * 152 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 153 */ 154 WAVPACK(97), 155 156 /** 157 * Compression Method 98 for PPMd. 158 * 159 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 160 */ 161 PPMD(98), 162 163 164 /** 165 * Compression Method 99 for AES encryption. 166 * 167 * @see <a href="http://www.winzip.com/wz54.htm">http://www.winzip.com/wz54.htm</a> 168 */ 169 AES_ENCRYPTED(99), 170 171 /** 172 * Unknown compression method. 173 */ 174 UNKNOWN(); 175 176 static final int UNKNOWN_CODE = -1; 177 178 private final int code; 179 180 private static final Map<Integer, ZipMethod> codeToEnum; 181 182 static { 183 final Map<Integer, ZipMethod> cte = new HashMap<>(); 184 for (final ZipMethod method : values()) { 185 cte.put(method.getCode(), method); 186 } 187 codeToEnum = Collections.unmodifiableMap(cte); 188 } 189 190 private ZipMethod() { 191 this(UNKNOWN_CODE); 192 } 193 194 /** 195 * private constructor for enum style class. 196 */ 197 ZipMethod(final int code) { 198 this.code = code; 199 } 200 201 /** 202 * the code of the compression method. 203 * 204 * @see ZipArchiveEntry#getMethod() 205 * 206 * @return an integer code for the method 207 */ 208 public int getCode() { 209 return code; 210 } 211 212 213 /** 214 * returns the {@link ZipMethod} for the given code or null if the 215 * method is not known. 216 * @param code the code 217 * @return the {@link ZipMethod} for the given code or null if the 218 * method is not known. 219 */ 220 public static ZipMethod getMethodByCode(final int code) { 221 return codeToEnum.get(code); 222 } 223}