import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
/**
* Progress reporting system, possibly nested.
* A progression event.
*
* @param progress
- * the {@link Progress} object that generated it, or a parent
+ * the {@link Progress} object that generated it
* @param name
* the first non-null name of the {@link Progress} step that
* generated this event
return name;
}
+ /**
+ * The name of this {@link Progress} step.
+ *
+ * @param name
+ * the new name
+ */
+ public void setName(String name) {
+ this.name = name;
+ // will fire an action event:
+ setProgress(this.localProgress);
+ }
+
/**
* The minimum progress value.
*
public void setProgress(int progress) {
int diff = this.progress - this.localProgress;
this.localProgress = progress;
- setTotalProgress(name, progress + diff);
+ setTotalProgress(this, name, progress + diff);
}
/**
return (((double) progress) / (max - min));
}
+ /**
+ * Return the list of direct children of this {@link Progress}.
+ *
+ * @return the children (who will think of them??)
+ */
+ public Set<Progress> getChildren() {
+ return children.keySet();
+ }
+
/**
* Set the total progress value (including the optional children
* {@link Progress}), on a {@link Progress#getMin()} to
* {@link Progress#getMax()} scale.
*
+ * @param pg
+ * the {@link Progress} to report as the progression emitter
* @param name
* the current name (if it is NULL, the first non-null name in
- * the hierarchy will overwrite it)
+ * the hierarchy will overwrite it) of the {@link Progress} who
+ * emitted this change
* @param progress
* the progress to set
*/
- private void setTotalProgress(String name, int progress) {
+ private void setTotalProgress(Progress pg, String name, int progress) {
this.progress = progress;
for (ProgressListener l : listeners) {
- l.progress(this, name);
+ l.progress(pg, name);
}
}
this.listeners.add(l);
}
+ /**
+ * Remove a {@link ProgressListener} that would trigger on progress changes.
+ *
+ * @param l
+ * the listener
+ *
+ * @return TRUE if it was found (and removed)
+ */
+ public boolean removeProgressListener(ProgressListener l) {
+ return this.listeners.remove(l);
+ }
+
/**
* Add a child {@link Progress} of the given weight.
*
name = Progress.this.name;
}
- setTotalProgress(name, (int) Math.round(total * (max - min)));
+ setTotalProgress(progress, name,
+ (int) Math.round(total * (max - min)));
}
});