1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 package org.apache.commons.compress.archivers.zip; 19 20 import java.util.Collections; 21 import java.util.HashMap; 22 import java.util.Map; 23 import java.util.zip.ZipEntry; 24 25 /** 26 * List of known compression methods 27 * 28 * Many of these methods are currently not supported by commons compress 29 * 30 * @since 1.5 31 */ 32 public enum ZipMethod { 33 34 /** 35 * Compression method 0 for uncompressed entries. 36 * 37 * @see ZipEntry#STORED 38 */ 39 STORED(ZipEntry.STORED), 40 41 /** 42 * UnShrinking. 43 * dynamic Lempel-Ziv-Welch-Algorithm 44 * 45 * @see <a href="https://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 46 * method: (2 bytes)</a> 47 */ 48 UNSHRINKING(1), 49 50 /** 51 * Reduced with compression factor 1. 52 * 53 * @see <a href="https://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 54 * method: (2 bytes)</a> 55 */ 56 EXPANDING_LEVEL_1(2), 57 58 /** 59 * Reduced with compression factor 2. 60 * 61 * @see <a href="https://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 62 * method: (2 bytes)</a> 63 */ 64 EXPANDING_LEVEL_2(3), 65 66 /** 67 * Reduced with compression factor 3. 68 * 69 * @see <a href="https://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 70 * method: (2 bytes)</a> 71 */ 72 EXPANDING_LEVEL_3(4), 73 74 /** 75 * Reduced with compression factor 4. 76 * 77 * @see <a href="https://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 78 * method: (2 bytes)</a> 79 */ 80 EXPANDING_LEVEL_4(5), 81 82 /** 83 * Imploding. 84 * 85 * @see <a href="https://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 86 * method: (2 bytes)</a> 87 */ 88 IMPLODING(6), 89 90 /** 91 * Tokenization. 92 * 93 * @see <a href="https://www.pkware.com/documents/casestudies/APPNOTE.TXT">Explanation of fields: compression 94 * method: (2 bytes)</a> 95 */ 96 TOKENIZATION(7), 97 98 /** 99 * 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="https://www.winzip.com/wz54.htm">https://www.winzip.com/wz54.htm</a> 109 */ 110 ENHANCED_DEFLATED(9), 111 112 /** 113 * PKWARE Data Compression Library Imploding. 114 * 115 * @see <a href="https://www.winzip.com/wz54.htm">https://www.winzip.com/wz54.htm</a> 116 */ 117 PKWARE_IMPLODING(10), 118 119 /** 120 * Compression Method 12 for bzip2. 121 * 122 * @see <a href="https://www.winzip.com/wz54.htm">https://www.winzip.com/wz54.htm</a> 123 */ 124 BZIP2(12), 125 126 /** 127 * Compression Method 14 for LZMA. 128 * 129 * @see <a href="https://www.7-zip.org/sdk.html">https://www.7-zip.org/sdk.html</a> 130 * @see <a href="https://www.winzip.com/wz54.htm">https://www.winzip.com/wz54.htm</a> 131 */ 132 LZMA(14), 133 134 135 /** 136 * Compression Method 95 for XZ. 137 * 138 * @see <a href="https://www.winzip.com/wz54.htm">https://www.winzip.com/wz54.htm</a> 139 */ 140 XZ(95), 141 142 /** 143 * Compression Method 96 for Jpeg compression. 144 * 145 * @see <a href="https://www.winzip.com/wz54.htm">https://www.winzip.com/wz54.htm</a> 146 */ 147 JPEG(96), 148 149 /** 150 * Compression Method 97 for WavPack. 151 * 152 * @see <a href="https://www.winzip.com/wz54.htm">https://www.winzip.com/wz54.htm</a> 153 */ 154 WAVPACK(97), 155 156 /** 157 * Compression Method 98 for PPMd. 158 * 159 * @see <a href="https://www.winzip.com/wz54.htm">https://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="https://www.winzip.com/wz54.htm">https://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()) { method.getCode()185 cte.put(method.getCode(), method); 186 } 187 codeToEnum = Collections.unmodifiableMap(cte); 188 } 189 ZipMethod()190 private ZipMethod() { 191 this(UNKNOWN_CODE); 192 } 193 194 /** 195 * private constructor for enum style class. 196 */ ZipMethod(final int code)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 */ getCode()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 */ getMethodByCode(final int code)220 public static ZipMethod getMethodByCode(final int code) { 221 return codeToEnum.get(code); 222 } 223 } 224