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