jtulach@348: package org.apidesign.stateful.api; jtulach@348: jtulach@348: /** API for notifying progress. jtulach@348: * jtulach@348: * @author Jaroslav Tulach jtulach@348: */ jtulach@348: // BEGIN: progress.api jtulach@350: public abstract class ProgressStateful { jtulach@350: public static ProgressStateful create(String name) { jtulach@348: return createImpl(name); jtulach@348: } jtulach@348: public abstract void start(int totalAmount); jtulach@348: public abstract void progress(int howMuch); jtulach@348: public abstract void finish(); jtulach@348: // FINISH: progress.api jtulach@348: jtulach@350: ProgressStateful() { jtulach@348: } jtulach@348: jtulach@350: private static ProgressStateful createImpl(String name) { jtulach@348: return new Impl(name); jtulach@348: } jtulach@348: jtulach@350: private static final class Impl extends ProgressStateful { jtulach@348: private final String name; jtulach@348: private int total = -1; jtulach@348: private int current; jtulach@348: jtulach@348: public Impl(String name) { jtulach@348: this.name = name; jtulach@348: } jtulach@348: jtulach@348: @Override jtulach@348: public void start(int totalAmount) { jtulach@348: total = totalAmount; jtulach@348: } jtulach@348: jtulach@348: @Override jtulach@348: public void progress(int howMuch) { jtulach@348: if (total == -1) { jtulach@348: throw new IllegalStateException("Call start first!"); jtulach@348: } jtulach@348: current = howMuch; jtulach@348: } jtulach@348: jtulach@348: @Override jtulach@348: public void finish() { jtulach@348: total = -1; jtulach@348: current = 0; jtulach@348: } jtulach@348: jtulach@348: } jtulach@348: }