/* Copyright (c) 2014 Boundless and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/org/documents/edl-v10.html * * Contributors: * Victor Olaya (Boundless) - initial implementation */ package org.locationtech.geogig.api; public class SubProgressListener extends DefaultProgressListener { /** Initial starting value */ float start; /** Amount of work we have been asked to perform */ float amount; /** Scale between subprogress and delegate */ float scale; ProgressListener parentProgressListener; /** * Create a sub progress monitor, used to delegate work to a separate process. * * @param progress parent progress to notify as we get work done * @param amount amount of progress represented */ public SubProgressListener(ProgressListener progress, float amount) { super(); parentProgressListener = progress; this.start = progress.getProgress(); this.amount = (amount > 0.0f) ? amount : 0.0f; float max = parentProgressListener.getMaxProgress(); this.scale = this.amount / max; } @Override public void started() { super.progress = 0.0f; } @Override public void complete() { parentProgressListener.setProgress(start + amount); progress = getMaxProgress(); } @Override public float getProgress() { return progress; } @Override public void setProgress(float progress) { this.progress = progress; parentProgressListener.setProgress(start + (scale * progress)); } @Override public void setDescription(String description) { parentProgressListener.setDescription(description); } @Override public String getDescription() { return parentProgressListener.getDescription(); } @Override public void setMaxProgress(float maxProgress) { super.setMaxProgress(maxProgress); } @Override public float getMaxProgress() { return super.getMaxProgress(); } @Override public boolean isCompleted() { return super.isCompleted(); } @Override public void dispose() { super.dispose(); } @Override public boolean isCanceled() { return parentProgressListener.isCanceled(); } @Override public void cancel() { parentProgressListener.cancel(); } }