• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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