OpenEUICC/libs/lpad-sm-dp-plus-connector/src/main/java/com/truphone/lpa/progress/DownloadProgress.java

133 lines
6.0 KiB
Java

package com.truphone.lpa.progress;
import com.truphone.lpad.progress.ProgressListener;
import com.truphone.lpad.progress.ProgressStep;
import com.truphone.util.LogStub;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.logging.Logger;
public class DownloadProgress {
private static final Logger LOG = Logger.getLogger(DownloadProgress.class.getName());
private final Executor executor;
private ProgressListener progressListener;
private DownloadProgressPhase downloadProgressPhase;
private int totalPhaseSteps;
private int currentPhaseStepSum;
public DownloadProgress() {
executor = Executors.newSingleThreadExecutor();
downloadProgressPhase = DownloadProgressPhase.AUTHENTICATING;
totalPhaseSteps = DownloadProgressPhase.AUTHENTICATING.getProgressSteps().size();
currentPhaseStepSum = 0;
}
public void stepExecuted(final ProgressStep step,
final String message) {
if (progressListener != null) {
++currentPhaseStepSum;
final DownloadProgressPhase downloadProgressPhaseAux = downloadProgressPhase;
final int totalPhaseStepsAux = totalPhaseSteps;
final int currentPhaseStepSumAux = currentPhaseStepSum;
executor.execute(new Runnable() {
@Override
public void run() {
double percentage;
if (LogStub.getInstance().isDebugEnabled()) {
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() +
" - DownloadProgress - stepExecuted - step: " + step + "; currentPhaseStepSum: " + currentPhaseStepSumAux +
"; message: " + message + "; currentProgressPhase: " + downloadProgressPhaseAux +
"; totalPhaseSteps: " + totalPhaseStepsAux);
}
percentage = calculatePercentage(downloadProgressPhaseAux, currentPhaseStepSumAux, totalPhaseStepsAux);
if (LogStub.getInstance().isDebugEnabled()) {
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() +
" - DownloadProgress - stepExecuted - onAction - step: " + step.name() +
"; message: " + message + "; percentage: " + percentage +
"; downloadProgressPhase: " + downloadProgressPhaseAux.name());
}
progressListener.onAction(downloadProgressPhaseAux.name(), step.name(), percentage, message);
}
private double calculatePercentage(final DownloadProgressPhase downloadProgressPhaseAux,
final int currentPhaseStepSumAux,
final int totalPhaseStepsAux) {
double percentage;
if (currentPhaseStepSumAux == totalPhaseStepsAux) {
percentage = 1.0;
} else {
percentage = (double) currentPhaseStepSumAux / totalPhaseStepsAux;
if (percentage > 1.0) {
percentage = 1.0;
}
}
if (LogStub.getInstance().isDebugEnabled()) {
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() +
" - DownloadProgress - calculatePercentage - percentage_1: " + percentage);
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() +
" - DownloadProgress - calculatePercentage - percentage_f: " +
(percentage * downloadProgressPhaseAux.getPhaseTotalPercentage() / 1.0 + getTotalPreviousPhases(downloadProgressPhaseAux)));
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() +
" - DownloadProgress - calculatePercentage - previous: " + getTotalPreviousPhases(downloadProgressPhaseAux));
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() +
" - DownloadProgress - calculatePercentage - current: " + (percentage * downloadProgressPhaseAux.getPhaseTotalPercentage()));
}
percentage = percentage * downloadProgressPhaseAux.getPhaseTotalPercentage() / 1.0 + getTotalPreviousPhases(downloadProgressPhaseAux);
if (LogStub.getInstance().isDebugEnabled()) {
LogStub.getInstance().logDebug(LOG, LogStub.getInstance().getTag() +
" - DownloadProgress - calculatePercentage - final: " + percentage);
}
return percentage > 1.0 ? 1.0 : percentage;
}
private double getTotalPreviousPhases(DownloadProgressPhase downloadProgressPhase) {
int currentPhaseNumber = downloadProgressPhase.ordinal();
double total = 0.0;
for (int i = 0; i < currentPhaseNumber; i++) {
total += DownloadProgressPhase.values()[i].getPhaseTotalPercentage();
}
return total;
}
});
}
}
public void setProgressListener(ProgressListener progressListener) {
this.progressListener = progressListener;
}
public void setCurrentPhase(DownloadProgressPhase downloadProgressPhase,
int totalPhaseSteps) {
this.downloadProgressPhase = downloadProgressPhase;
this.totalPhaseSteps = totalPhaseSteps;
currentPhaseStepSum = 0;
}
public void setCurrentPhase(DownloadProgressPhase downloadProgressPhase) {
setCurrentPhase(downloadProgressPhase, downloadProgressPhase.getProgressSteps().size());
}
}