package org.j7zip.SevenZip;
import java.io.File;
import org.j7zip.SevenZip.Archive.IArchiveExtractCallback;
import org.j7zip.SevenZip.Archive.IInArchive;
import org.j7zip.SevenZip.Archive.SevenZipEntry;
public class ArchiveExtractCallback implements IArchiveExtractCallback // , ICryptoGetTextPassword,
{
class OutputStream extends java.io.OutputStream {
java.io.RandomAccessFile file;
public OutputStream(java.io.RandomAccessFile f) {
file = f;
}
public void close() throws java.io.IOException {
file.close();
file = null;
}
/*
public void flush() throws java.io.IOException {
file.flush();
}
*/
public void write(byte[] b) throws java.io.IOException {
file.write(b);
}
public void write(byte[] b, int off, int len) throws java.io.IOException {
file.write(b,off,len);
}
public void write(int b) throws java.io.IOException {
file.write(b);
}
}
public int SetTotal(long size) {
return HRESULT.S_OK;
}
public int SetCompleted(long completeValue) {
return HRESULT.S_OK;
}
public void PrintString(String str) {
System.out.print(str);
}
public void PrintNewLine() {
System.out.println("");
}
public int PrepareOperation(int askExtractMode) {
/*_extractMode = false;
switch (askExtractMode) {
case IInArchive.NExtract_NAskMode_kExtract:
_extractMode = true;
};*/
switch (askExtractMode) {
case IInArchive.NExtract_NAskMode_kExtract:
PrintString("Extracting ");
break;
case IInArchive.NExtract_NAskMode_kTest:
PrintString("Testing ");
break;
case IInArchive.NExtract_NAskMode_kSkip:
PrintString("Skipping ");
break;
};
PrintString(_filePath);
return HRESULT.S_OK;
}
public int SetOperationResult(int operationResult) throws java.io.IOException {
switch(operationResult) {
case IInArchive.NExtract_NOperationResult_kOK:
break;
default:
{
NumErrors++;
PrintString(" ");
switch(operationResult) {
case IInArchive.NExtract_NOperationResult_kUnSupportedMethod:
PrintString("Unsupported Method");
break;
case IInArchive.NExtract_NOperationResult_kCRCError:
PrintString("CRC Failed");
break;
case IInArchive.NExtract_NOperationResult_kDataError:
PrintString("Data Error");
break;
default:
PrintString("Unknown Error");
}
PrintNewLine();
}
}
/*
if(_outFileStream != null && _processedFileInfo.UTCLastWriteTimeIsDefined)
_outFileStreamSpec->File.SetLastWriteTime(&_processedFileInfo.UTCLastWriteTime);
*/
if (_outFileStream != null) _outFileStream.close(); // _outFileStream.Release();
/*
if (_extractMode && _processedFileInfo.AttributesAreDefined)
NFile::NDirectory::MySetFileAttributes(_diskFilePath, _processedFileInfo.Attributes);
*/
return HRESULT.S_OK;
}
java.io.OutputStream _outFileStream;
public String outputDir = null;
public int GetStream(int index,
java.io.OutputStream [] outStream,
int askExtractMode) throws java.io.IOException {
outStream[0] = null;
SevenZipEntry item = _archiveHandler.getEntry(index);
_filePath = item.getName();
_diskFilePath = outputDir == null ? _filePath : outputDir + File.separator + _filePath;
file = new File(_diskFilePath);
switch (askExtractMode) {
case IInArchive.NExtract_NAskMode_kTest:
return HRESULT.S_OK;
case IInArchive.NExtract_NAskMode_kExtract:
try {
isDirectory = item.isDirectory();
if (isDirectory) {
if (file.isDirectory()) {
return HRESULT.S_OK;
}
if (file.mkdirs())
return HRESULT.S_OK;
else
return HRESULT.S_FALSE;
}
File dirs = file.getParentFile();
if (dirs != null) {
if (!dirs.isDirectory())
if (!dirs.mkdirs())
return HRESULT.S_FALSE;
}
long pos = item.getPosition();
if (pos == -1) {
file.delete();
}
java.io.RandomAccessFile outStr = new java.io.RandomAccessFile(_diskFilePath,"rw");
if (pos != -1) {
outStr.seek(pos);
}
outStream[0] = new OutputStream(outStr);
} catch (java.io.IOException e) {
return HRESULT.S_FALSE;
}
return HRESULT.S_OK;
}
// other case : skip ...
return HRESULT.S_OK;
}
org.j7zip.SevenZip.Archive.IInArchive _archiveHandler; // IInArchive
protected String _filePath; // name inside archive
String _diskFilePath; // full path to file on disk
protected File file;
public long NumErrors;
//boolean PasswordIsDefined;
//String Password;
//boolean _extractMode;
boolean isDirectory;
public ArchiveExtractCallback() { /*PasswordIsDefined = false;*/ }
public void Init(org.j7zip.SevenZip.Archive.IInArchive archiveHandler) {
NumErrors = 0;
_archiveHandler = archiveHandler;
}
}