LocalFileHeader.java

  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.arj;

  18. import java.util.Arrays;
  19. import java.util.Objects;

  20. final class LocalFileHeader {

  21.     static final class FileTypes {
  22.         static final int BINARY = 0;
  23.         static final int SEVEN_BIT_TEXT = 1;
  24.         static final int COMMENT_HEADER = 2;
  25.         static final int DIRECTORY = 3;
  26.         static final int VOLUME_LABEL = 4;
  27.         static final int CHAPTER_LABEL = 5;
  28.     }

  29.     static final class Flags {
  30.         static final int GARBLED = 0x01;
  31.         static final int VOLUME = 0x04;
  32.         static final int EXTFILE = 0x08;
  33.         static final int PATHSYM = 0x10;
  34.         static final int BACKUP = 0x20;
  35.     }

  36.     static final class Methods {
  37.         static final int STORED = 0;
  38.         static final int COMPRESSED_MOST = 1;
  39.         static final int COMPRESSED = 2;
  40.         static final int COMPRESSED_FASTER = 3;
  41.         static final int COMPRESSED_FASTEST = 4;
  42.         static final int NO_DATA_NO_CRC = 8;
  43.         static final int NO_DATA = 9;
  44.     }

  45.     int archiverVersionNumber;
  46.     int minVersionToExtract;
  47.     int hostOS;
  48.     int arjFlags;
  49.     int method;
  50.     int fileType;
  51.     int reserved;
  52.     int dateTimeModified;
  53.     long compressedSize;
  54.     long originalSize;
  55.     long originalCrc32;
  56.     int fileSpecPosition;

  57.     int fileAccessMode;
  58.     int firstChapter;
  59.     int lastChapter;
  60.     int extendedFilePosition;

  61.     int dateTimeAccessed;
  62.     int dateTimeCreated;

  63.     int originalSizeEvenForVolumes;

  64.     String name;

  65.     String comment;

  66.     byte[][] extendedHeaders;

  67.     @Override
  68.     public boolean equals(final Object obj) {
  69.         if (this == obj) {
  70.             return true;
  71.         }
  72.         if (obj == null || getClass() != obj.getClass()) {
  73.             return false;
  74.         }
  75.         final LocalFileHeader other = (LocalFileHeader) obj;
  76.         return archiverVersionNumber == other.archiverVersionNumber && minVersionToExtract == other.minVersionToExtract && hostOS == other.hostOS
  77.                 && arjFlags == other.arjFlags && method == other.method && fileType == other.fileType && reserved == other.reserved
  78.                 && dateTimeModified == other.dateTimeModified && compressedSize == other.compressedSize && originalSize == other.originalSize
  79.                 && originalCrc32 == other.originalCrc32 && fileSpecPosition == other.fileSpecPosition && fileAccessMode == other.fileAccessMode
  80.                 && firstChapter == other.firstChapter && lastChapter == other.lastChapter && extendedFilePosition == other.extendedFilePosition
  81.                 && dateTimeAccessed == other.dateTimeAccessed && dateTimeCreated == other.dateTimeCreated
  82.                 && originalSizeEvenForVolumes == other.originalSizeEvenForVolumes && Objects.equals(name, other.name) && Objects.equals(comment, other.comment)
  83.                 && Arrays.deepEquals(extendedHeaders, other.extendedHeaders);
  84.     }

  85.     @Override
  86.     public int hashCode() {
  87.         return name == null ? 0 : name.hashCode();
  88.     }

  89.     @Override
  90.     public String toString() {
  91.         final StringBuilder builder = new StringBuilder();
  92.         builder.append("LocalFileHeader [archiverVersionNumber=");
  93.         builder.append(archiverVersionNumber);
  94.         builder.append(", minVersionToExtract=");
  95.         builder.append(minVersionToExtract);
  96.         builder.append(", hostOS=");
  97.         builder.append(hostOS);
  98.         builder.append(", arjFlags=");
  99.         builder.append(arjFlags);
  100.         builder.append(", method=");
  101.         builder.append(method);
  102.         builder.append(", fileType=");
  103.         builder.append(fileType);
  104.         builder.append(", reserved=");
  105.         builder.append(reserved);
  106.         builder.append(", dateTimeModified=");
  107.         builder.append(dateTimeModified);
  108.         builder.append(", compressedSize=");
  109.         builder.append(compressedSize);
  110.         builder.append(", originalSize=");
  111.         builder.append(originalSize);
  112.         builder.append(", originalCrc32=");
  113.         builder.append(originalCrc32);
  114.         builder.append(", fileSpecPosition=");
  115.         builder.append(fileSpecPosition);
  116.         builder.append(", fileAccessMode=");
  117.         builder.append(fileAccessMode);
  118.         builder.append(", firstChapter=");
  119.         builder.append(firstChapter);
  120.         builder.append(", lastChapter=");
  121.         builder.append(lastChapter);
  122.         builder.append(", extendedFilePosition=");
  123.         builder.append(extendedFilePosition);
  124.         builder.append(", dateTimeAccessed=");
  125.         builder.append(dateTimeAccessed);
  126.         builder.append(", dateTimeCreated=");
  127.         builder.append(dateTimeCreated);
  128.         builder.append(", originalSizeEvenForVolumes=");
  129.         builder.append(originalSizeEvenForVolumes);
  130.         builder.append(", name=");
  131.         builder.append(name);
  132.         builder.append(", comment=");
  133.         builder.append(comment);
  134.         builder.append(", extendedHeaders=");
  135.         builder.append(Arrays.toString(extendedHeaders));
  136.         builder.append("]");
  137.         return builder.toString();
  138.     }

  139. }