Fix Cache (URL to File could fail if no parent)
[nikiroo-utils.git] / src / be / nikiroo / utils / Progress.java
index d722fc91c3289e9f0b0425cba4bfba87fdc1b88f..38ce29f9c8b49e6c4a27dd939fbf4d89d330817f 100644 (file)
@@ -14,6 +14,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 +131,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 +165,7 @@ public class Progress {
         *            the max to set
         * 
         * 
-        * @throws Error
+        * @throws RuntimeException
         *             if max &lt; min
         */
        public void setMax(int max) {
@@ -181,16 +187,16 @@ public class Progress {
         * @param max
         *            the max
         * 
-        * @throws Error
+        * @throws RuntimeException
         *             if min &lt; 0 or if min &gt; 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");
                }
 
@@ -293,14 +299,18 @@ public class Progress {
         * @return TRUE if it is
         */
        public boolean isDone() {
-               return relativeProgress >= 1d;
+               return getProgress() == max;
        }
 
        /**
         * Mark the {@link Progress} as done by setting its value to max.
         */
        public void done() {
-               setProgress(getMax());
+               synchronized (getLock()) {
+                       double childrenProgress = relativeProgress - relativeLocalProgress;
+                       relativeLocalProgress = 1 - childrenProgress;
+                       setRelativeProgress(this, name, 1d);
+               }
        }
 
        /**
@@ -374,20 +384,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));