/*
* Copyright 2010 Srikanth Reddy Lingala
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.lingala.zip4j.model;
import java.util.ArrayList;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.progress.ProgressMonitor;
import net.lingala.zip4j.unzip.Unzip;
import net.lingala.zip4j.util.Zip4jUtil;
public class FileHeader {
private int signature;
private int versionMadeBy;
private int versionNeededToExtract;
private byte[] generalPurposeFlag;
private int compressionMethod;
private int lastModFileTime;
private long crc32;
private byte[] crcBuff;
private long compressedSize;
private long uncompressedSize;
private int fileNameLength;
private int extraFieldLength;
private int fileCommentLength;
private int diskNumberStart;
private byte[] internalFileAttr;
private byte[] externalFileAttr;
private long offsetLocalHeader;
private String fileName;
private String fileComment;
private boolean isDirectory;
private boolean isEncrypted;
private int encryptionMethod;
private char[] password;
private boolean dataDescriptorExists;
private Zip64ExtendedInfo zip64ExtendedInfo;
private AESExtraDataRecord aesExtraDataRecord;
private ArrayList extraDataRecords;
private boolean fileNameUTF8Encoded;
public FileHeader() {
encryptionMethod = -1;
crc32 = 0;
uncompressedSize = 0;
}
public int getSignature() {
return signature;
}
public void setSignature(int signature) {
this.signature = signature;
}
public int getVersionMadeBy() {
return versionMadeBy;
}
public void setVersionMadeBy(int versionMadeBy) {
this.versionMadeBy = versionMadeBy;
}
public int getVersionNeededToExtract() {
return versionNeededToExtract;
}
public void setVersionNeededToExtract(int versionNeededToExtract) {
this.versionNeededToExtract = versionNeededToExtract;
}
public byte[] getGeneralPurposeFlag() {
return generalPurposeFlag;
}
public void setGeneralPurposeFlag(byte[] generalPurposeFlag) {
this.generalPurposeFlag = generalPurposeFlag;
}
public int getCompressionMethod() {
return compressionMethod;
}
public void setCompressionMethod(int compressionMethod) {
this.compressionMethod = compressionMethod;
}
public int getLastModFileTime() {
return lastModFileTime;
}
public void setLastModFileTime(int lastModFileTime) {
this.lastModFileTime = lastModFileTime;
}
public long getCrc32() {
return crc32 & 0xffffffffL;
}
public void setCrc32(long crc32) {
this.crc32 = crc32;
}
public long getCompressedSize() {
return compressedSize;
}
public void setCompressedSize(long compressedSize) {
this.compressedSize = compressedSize;
}
public long getUncompressedSize() {
return uncompressedSize;
}
public void setUncompressedSize(long uncompressedSize) {
this.uncompressedSize = uncompressedSize;
}
public int getFileNameLength() {
return fileNameLength;
}
public void setFileNameLength(int fileNameLength) {
this.fileNameLength = fileNameLength;
}
public int getExtraFieldLength() {
return extraFieldLength;
}
public void setExtraFieldLength(int extraFieldLength) {
this.extraFieldLength = extraFieldLength;
}
public int getFileCommentLength() {
return fileCommentLength;
}
public void setFileCommentLength(int fileCommentLength) {
this.fileCommentLength = fileCommentLength;
}
public int getDiskNumberStart() {
return diskNumberStart;
}
public void setDiskNumberStart(int diskNumberStart) {
this.diskNumberStart = diskNumberStart;
}
public byte[] getInternalFileAttr() {
return internalFileAttr;
}
public void setInternalFileAttr(byte[] internalFileAttr) {
this.internalFileAttr = internalFileAttr;
}
public byte[] getExternalFileAttr() {
return externalFileAttr;
}
public void setExternalFileAttr(byte[] externalFileAttr) {
this.externalFileAttr = externalFileAttr;
}
public long getOffsetLocalHeader() {
return offsetLocalHeader;
}
public void setOffsetLocalHeader(long offsetLocalHeader) {
this.offsetLocalHeader = offsetLocalHeader;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileComment() {
return fileComment;
}
public void setFileComment(String fileComment) {
this.fileComment = fileComment;
}
public boolean isDirectory() {
return isDirectory;
}
public void setDirectory(boolean isDirectory) {
this.isDirectory = isDirectory;
}
/**
* Extracts file to the specified directory
* @param zipModel
* @param outPath
* @throws ZipException
*/
public void extractFile(ZipModel zipModel, String outPath,
ProgressMonitor progressMonitor, boolean runInThread) throws ZipException {
extractFile(zipModel, outPath, null, progressMonitor, runInThread);
}
/**
* Extracts file to the specified directory using any
* user defined parameters in UnzipParameters
* @param zipModel
* @param outPath
* @param unzipParameters
* @throws ZipException
*/
public void extractFile(ZipModel zipModel, String outPath,
UnzipParameters unzipParameters, ProgressMonitor progressMonitor, boolean runInThread) throws ZipException {
extractFile(zipModel, outPath, unzipParameters, null, progressMonitor, runInThread);
}
/**
* Extracts file to the specified directory using any
* user defined parameters in UnzipParameters. Output file name
* will be overwritten with the value in newFileName. If this
* parameter is null, then file name will be the same as in
* FileHeader.getFileName
* @param zipModel
* @param outPath
* @param unzipParameters
* @throws ZipException
*/
public void extractFile(ZipModel zipModel, String outPath,
UnzipParameters unzipParameters, String newFileName,
ProgressMonitor progressMonitor, boolean runInThread) throws ZipException {
if (zipModel == null) {
throw new ZipException("input zipModel is null");
}
if (!Zip4jUtil.checkOutputFolder(outPath)) {
throw new ZipException("Invalid output path");
}
if (this == null) {
throw new ZipException("invalid file header");
}
Unzip unzip = new Unzip(zipModel);
unzip.extractFile(this, outPath, unzipParameters, newFileName, progressMonitor, runInThread);
}
public boolean isEncrypted() {
return isEncrypted;
}
public void setEncrypted(boolean isEncrypted) {
this.isEncrypted = isEncrypted;
}
public int getEncryptionMethod() {
return encryptionMethod;
}
public void setEncryptionMethod(int encryptionMethod) {
this.encryptionMethod = encryptionMethod;
}
public char[] getPassword() {
return password;
}
public void setPassword(char[] password) {
this.password = password;
}
public byte[] getCrcBuff() {
return crcBuff;
}
public void setCrcBuff(byte[] crcBuff) {
this.crcBuff = crcBuff;
}
public ArrayList getExtraDataRecords() {
return extraDataRecords;
}
public void setExtraDataRecords(ArrayList extraDataRecords) {
this.extraDataRecords = extraDataRecords;
}
public boolean isDataDescriptorExists() {
return dataDescriptorExists;
}
public void setDataDescriptorExists(boolean dataDescriptorExists) {
this.dataDescriptorExists = dataDescriptorExists;
}
public Zip64ExtendedInfo getZip64ExtendedInfo() {
return zip64ExtendedInfo;
}
public void setZip64ExtendedInfo(Zip64ExtendedInfo zip64ExtendedInfo) {
this.zip64ExtendedInfo = zip64ExtendedInfo;
}
public AESExtraDataRecord getAesExtraDataRecord() {
return aesExtraDataRecord;
}
public void setAesExtraDataRecord(AESExtraDataRecord aesExtraDataRecord) {
this.aesExtraDataRecord = aesExtraDataRecord;
}
public boolean isFileNameUTF8Encoded() {
return fileNameUTF8Encoded;
}
public void setFileNameUTF8Encoded(boolean fileNameUTF8Encoded) {
this.fileNameUTF8Encoded = fileNameUTF8Encoded;
}
}