X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FProgress.java;h=6f05110e8715305b438258b45cf1674b992a4451;hb=f4053377fa15da2f11e82955bfab86e673fa371c;hp=ae5960379f12bcd2cecc17d3f7a81134f38ca018;hpb=356c0336f9ef77f298f1e7d683acace117ef46ad;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/Progress.java b/src/be/nikiroo/utils/Progress.java index ae59603..6f05110 100644 --- a/src/be/nikiroo/utils/Progress.java +++ b/src/be/nikiroo/utils/Progress.java @@ -6,7 +6,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; /** * Progress reporting system, possibly nested. @@ -14,6 +13,12 @@ import java.util.Set; * @author niki */ public class Progress { + /** + * This event listener is designed to report progress events from + * {@link Progress}. + * + * @author niki + */ public interface ProgressListener extends EventListener { /** * A progression event. @@ -125,17 +130,17 @@ public class Progress { * the min to set * * - * @throws Error + * @throws RuntimeException * if min < 0 or if min > max */ public void setMin(int min) { if (min < 0) { - throw new Error("negative values not supported"); + throw new RuntimeException("negative values not supported"); } synchronized (getLock()) { if (min > max) { - throw new Error( + throw new RuntimeException( "The minimum progress value must be <= the maximum progress value"); } @@ -159,7 +164,7 @@ public class Progress { * the max to set * * - * @throws Error + * @throws RuntimeException * if max < min */ public void setMax(int max) { @@ -181,16 +186,16 @@ public class Progress { * @param max * the max * - * @throws Error + * @throws RuntimeException * if min < 0 or if min > max */ public void setMinMax(int min, int max) { if (min < 0) { - throw new Error("negative values not supported"); + throw new RuntimeException("negative values not supported"); } if (min > max) { - throw new Error( + throw new RuntimeException( "The minimum progress value must be <= the maximum progress value"); } @@ -312,8 +317,10 @@ public class Progress { * * @return the children (Who will think of the children??) */ - public Set getChildren() { - return children.keySet(); + public List getChildren() { + synchronized (getLock()) { + return new ArrayList(children.keySet()); + } } /** @@ -353,7 +360,9 @@ public class Progress { * the listener */ public void addProgressListener(ProgressListener l) { - this.listeners.add(l); + synchronized (getLock()) { + this.listeners.add(l); + } } /** @@ -365,7 +374,9 @@ public class Progress { * @return TRUE if it was found (and removed) */ public boolean removeProgressListener(ProgressListener l) { - return this.listeners.remove(l); + synchronized (getLock()) { + return this.listeners.remove(l); + } } /** @@ -378,20 +389,20 @@ public class Progress { * {@link Progress#getMax()} scale) of this child * {@link Progress} in relation to its parent * - * @throws Error + * @throws RuntimeException * if weight exceed {@link Progress#getMax()} or if progress * already has a parent */ public void addProgress(Progress progress, double weight) { if (weight < min || weight > max) { - throw new Error(String.format( + throw new RuntimeException(String.format( "Progress object %s cannot have a weight of %f, " + "it is outside of its parent (%s) range (%f)", progress.name, weight, name, max)); } if (progress.parent != null) { - throw new Error(String.format( + throw new RuntimeException(String.format( "Progress object %s cannot be added to %s, " + "as it already has a parent (%s)", progress.name, name, progress.parent.name)); @@ -402,9 +413,12 @@ public class Progress { public void progress(Progress pg, String name) { synchronized (getLock()) { double total = relativeLocalProgress; - for (Entry entry : children.entrySet()) { - total += (entry.getValue() / (max - min)) - * entry.getKey().getRelativeProgress(); + synchronized (getLock()) { + for (Entry entry : children + .entrySet()) { + total += (entry.getValue() / (max - min)) + * entry.getKey().getRelativeProgress(); + } } setRelativeProgress(pg, name, total); @@ -412,7 +426,9 @@ public class Progress { } }); - this.children.put(progress, weight); + synchronized (getLock()) { + this.children.put(progress, weight); + } } /**