public boolean ExtractZip(final String ZipPath, final String DestFolder, final String Password) {
// Runnable r = new Runnable() {
//
// @Override
// public void run() {
// Initiate ZipFile object with the path/name of the zip file.
final ZipFile zipFile = new ZipFile(ZipPath);
final String evt = eventName + "_progress";
final String errEvt = eventName + "_error";
BA.runAsync(ba, this, evt, new Object[] {"ExtractZip", Percent, false}, new Callable<Object[]>() {
@Override
public Object[] call() throws Exception {
// return new Object[] {};
//
// }
// });
try {
//Percent = 0; oldPercent = 0;
int Percent = 0, oldPercent = 0;
// Set true to monitor progress state
zipFile.setRunInThread(true);
// Check to see if the zip file is password protected // AGGIUNTA IO (ANCHE Password NEGLI ARGOMENTI PASSATI ALLA FUNZIONE)
//if (zipFile.isEncrypted()) {
if (Password.length() > 0) {
try {
// if yes, then set the password for the zip file
zipFile.setPassword(Password.toCharArray());
} catch (Exception e) {
BA.Log("Zip4j: ExtractZip -> Cannot set Password for file " + ZipPath);
if (ba.subExists(errEvt)) {
//ba.raiseEvent(this, errEvt, "ExtractZip", "Cannot set Password for file " + ZipPath);
ba.raiseEventFromDifferentThread(this, null, 0, errEvt, false,
new Object[] {"ExtractZip", "Cannot set Password for file " + ZipPath + " " + e.getMessage()});
}
//result = false;
//return new Object[] {false};
}
}
// Extracts all files to the path specified
zipFile.extractAll(DestFolder);
// Get progress
if (ba.subExists(evt)) {
ProgressMonitor progressMonitor = zipFile.getProgressMonitor();
//while (progressMonitor.getState() == ProgressMonitor.State.BUSY) {
while (progressMonitor.getState().equals(ProgressMonitor.State.BUSY)) { // New syntax
//BA.Log("Extracting. Percent done: " + progressMonitor.getPercentDone());
Percent = progressMonitor.getPercentDone();
//BA.Log("Zip4j: OLD PERCENT: " + oldPercent + " PERCENT: " + Percent);
if (oldPercent < Percent) {
// BA.Log("Zip4j: RAISE EVENT: " + evt);
// ba.raiseEventFromDifferentThread(this, null, 0, evt, false, "ExtractZip", Percent);
// ba.raiseEvent(this, evt, "ExtractZip", Percent, false);
ba.raiseEventFromDifferentThread(this, null, 0, evt, false, new Object[] {"ExtractZip", Percent, false});
//ba.raiseEvent2(this, true, evt, false, "ExtractZip", Percent);
}
oldPercent = Percent;
// try {
// Thread.sleep(5);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
// /////////////
// while (!progressMonitor.getState().equals(ProgressMonitor.State.READY)) {
// System.out.println("Percentage done: " + progressMonitor.getPercentDone());
// System.out.println("Current file: " + progressMonitor.getFileName());
// System.out.println("Current task: " + progressMonitor.getCurrentTask());
//
// Thread.sleep(100);
// }
//
// if (progressMonitor.getResult().equals(ProgressMonitor.Result.SUCCESS)) {
// System.out.println("Successfully added folder to zip");
// } else if (progressMonitor.getResult().equals(ProgressMonitor.Result.ERROR)) {
// System.out.println("Error occurred. Error message: " + progressMonitor.getException().getMessage());
// } else if (progressMonitor.getResult().equals(ProgressMonitor.Result.CANCELLED)) {
// System.out.println("Task cancelled");
// }
// /////////////
// HERE OPERATION IS DONE
BA.Log("Zip4j: ExtractZip -> Done extracted content of file " + ZipPath +
" into Folder " + DestFolder + " Result: " + getResultString(progressMonitor.getResult()));
//ba.raiseEvent(this, evt, "ExtractZip", 100, true);
BA.Log("Zip4j: RAISE FINAL EVENT: " + evt);
ba.raiseEventFromDifferentThread(this, null, 0, evt, false, new Object[] {"ExtractZip", 100, true});
//return new Object[] {"ExtractZip", 100, true};
} else {
BA.Log("Zip4j: ExtractZip -> Sub " + OriginalEventName +
"_Progress does not exists. Use Async Mode to extract file " + ZipPath +
" into Folder " + DestFolder);
//return new Object[] {"ExtractZip", 0, false};
}
//return new Object[] {true};
//return new Object[] {"ExtractZip", 100, true};
} catch (ZipException e) {
String err = e.getMessage().replace("net.lingala.zip4j.exception.ZipException: net.lingala.zip4j.exception.ZipException: ", "");
err = err.replaceAll(":", "");
//BA.Log("Zip4j: ExtractZip -> " + err);
if (ba.subExists(errEvt)) {
ba.raiseEvent(this, errEvt, "ExtractZip", err);
ba.raiseEventFromDifferentThread(this, null, 0, errEvt, false, new Object[] {"ExtractZip", err});
}
//return new Object[] {false};
//return new Object[] {"ExtractZip", 0, false};
} finally {
try {
zipFile.close();
} catch (IOException e) {
e.printStackTrace();
if (ba.subExists(errEvt)) {
// ba.raiseEvent(this, errEvt, "ExtractZip", e.getMessage());
ba.raiseEventFromDifferentThread(this, null, 0, errEvt, false, new Object[] {"ExtractZip", e.getMessage()});
}
//return new Object[] {false};
//return new Object[] {"ExtractZip", 0, false};
};
}
return new Object[] {};
}
});
return true;
}