View Javadoc
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  package org.apache.commons.compress.archivers.zip;
18  
19  import java.util.zip.ZipException;
20  
21  /**
22   * Controls details of parsing ZIP extra fields.
23   *
24   * @since 1.19
25   */
26  public interface ExtraFieldParsingBehavior extends UnparseableExtraFieldBehavior {
27  
28      /**
29       * Creates an instance of ZipExtraField for the given id.
30       * <p>
31       * A good default implementation would be {@link ExtraFieldUtils#createExtraField}.
32       * </p>
33       *
34       * @param headerId the id for the extra field
35       * @return an instance of ZipExtraField, must not be {@code null}
36       * @throws ZipException           if an error occurs
37       * @throws InstantiationException if unable to instantiate the class, not thrown by Commons Compress.
38       * @throws IllegalAccessException if not allowed to instantiate the class, not thrown by Commons Compress.
39       */
40      ZipExtraField createExtraField(ZipShort headerId) throws ZipException, InstantiationException, IllegalAccessException;
41  
42      /**
43       * Fills in the extra field data for a single extra field.
44       * <p>
45       * A good default implementation would be {@link ExtraFieldUtils#fillExtraField}.
46       * </p>
47       *
48       * @param field the extra field instance to fill
49       * @param data  the array of extra field data
50       * @param off   offset into data where this field's data starts
51       * @param len   the length of this field's data
52       * @param local whether the extra field data stems from the local file header. If this is false then the data is part if the central directory header extra
53       *              data.
54       * @return the filled field. Usually this is the same as {@code
55       * field} but it could be a replacement extra field as well. Must not be {@code null}.
56       * @throws ZipException if an error occurs
57       */
58      ZipExtraField fill(ZipExtraField field, byte[] data, int off, int len, boolean local) throws ZipException;
59  }