package com.mucommander.commons.file.archive.sevenzip.provider.SevenZip;
import java.io.File;
import com.mucommander.commons.file.archive.sevenzip.provider.SevenZip.Archive.IArchiveExtractCallback;
import com.mucommander.commons.file.archive.sevenzip.provider.SevenZip.Archive.IInArchive;
import com.mucommander.commons.file.archive.sevenzip.provider.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) {
System.out.println("askExtractMode = " + askExtractMode);
_extractMode = false;
switch (askExtractMode) {
case IInArchive.NExtract_NAskMode_kExtract:
_extractMode = true;
};
System.out.println("here1");
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;
};
System.out.println("here2");
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");
}
}
}
/*
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);
*/
PrintNewLine();
return HRESULT.S_OK;
}
java.io.OutputStream _outFileStream;
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();
File file = new File(_filePath);
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(_filePath,"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;
}
com.mucommander.commons.file.archive.sevenzip.provider.SevenZip.Archive.IInArchive _archiveHandler; // IInArchive
String _filePath; // name inside arcvhive
String _diskFilePath; // full path to file on disk
public long NumErrors;
boolean PasswordIsDefined;
String Password;
boolean _extractMode;
boolean isDirectory;
public ArchiveExtractCallback() { PasswordIsDefined = false; }
public void Init(com.mucommander.commons.file.archive.sevenzip.provider.SevenZip.Archive.IInArchive archiveHandler) {
NumErrors = 0;
_archiveHandler = archiveHandler;
}
}