package maps.convert;
import javax.swing.JProgressBar;
import javax.swing.JLabel;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import rescuecore2.misc.gui.ShapeDebugFrame;
import rescuecore2.log.Logger;
/**
A step in the map conversion process.
*/
public abstract class ConvertStep {
/** A ShapeDebugFrame for use by subclasses. */
protected ShapeDebugFrame debug;
private JProgressBar progress;
private JLabel status;
/**
Construct a ConvertStep.
*/
protected ConvertStep() {
this.progress = new JProgressBar();
this.status = new JLabel();
progress.setString("");
progress.setStringPainted(true);
debug = new ShapeDebugFrame();
}
/**
Set the progress level.
@param amount The new progress.
*/
protected void setProgress(final int amount) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.setValue(amount);
progress.setString(progress.getValue() + " / " + progress.getMaximum());
}
});
}
/**
Increase the progress level by one.
*/
protected void bumpProgress() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.setValue(progress.getValue() + 1);
progress.setString(progress.getValue() + " / " + progress.getMaximum());
}
});
}
/**
Increase the maximum progress level by one.
*/
protected void bumpMaxProgress() {
bumpMaxProgress(1);
}
/**
Increase the maximum progress level by some amount.
@param amount The amount to increase the maximum progress level.
*/
protected void bumpMaxProgress(final int amount) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.setMaximum(progress.getMaximum() + amount);
progress.setString(progress.getValue() + " / " + progress.getMaximum());
}
});
}
/**
Set the progress maximum.
@param max The new progress maximum.
*/
protected void setProgressLimit(final int max) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.setIndeterminate(false);
progress.setMaximum(max);
progress.setString(progress.getValue() + " / " + progress.getMaximum());
}
});
}
/**
Set the status label.
@param s The new status label.
*/
protected void setStatus(final String s) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
status.setText(s);
}
});
}
/**
Get the JProgressBar component for this step.
@return The progress bar component.
*/
public JProgressBar getProgressBar() {
return progress;
}
/**
Get the status component for this step.
@return The status component.
*/
public JComponent getStatusComponent() {
return status;
}
/**
Perform the conversion step.
*/
public final void doStep() {
try {
Logger.pushLogContext(getClass().getName());
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.setIndeterminate(true);
}
});
step();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.setIndeterminate(false);
progress.setValue(progress.getMaximum());
}
});
debug.deactivate();
}
finally {
Logger.popLogContext();
}
}
/**
Get a user-friendly description of this step.
@return A description string.
*/
public abstract String getDescription();
/**
Perform the step.
*/
protected abstract void step();
}