From: Bill Kuker Date: Sun, 7 Nov 2010 16:07:54 +0000 (+0000) Subject: Made burn ctor not start burn. X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=bf42cf1f2244fc266d022ef78888a67769928bdc;p=sw%2Fmotorsim Made burn ctor not start burn. Add addBurnProgressListener() to burn fixed editor to creat burn then start it. --- diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index 2c863e6..32a8764 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -156,7 +156,8 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { final JLabel progress = new JLabel(); add(progress, BorderLayout.CENTER); try { - final Burn b = new Burn(motor, + final Burn b = new Burn(motor); + b.addBurnProgressListener( new Burn.BurnProgressListener() { @Override public void setProgress(float f) { @@ -171,6 +172,7 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { } } }); + b.burn(); final BurnPanel bp = new BurnPanel(b); SwingUtilities.invokeLater(new Thread() { diff --git a/src/com/billkuker/rocketry/motorsim/Burn.java b/src/com/billkuker/rocketry/motorsim/Burn.java index d863cd9..0923394 100644 --- a/src/com/billkuker/rocketry/motorsim/Burn.java +++ b/src/com/billkuker/rocketry/motorsim/Burn.java @@ -40,6 +40,9 @@ public class Burn { private static Logger log = Logger.getLogger(Burn.class); protected final Motor motor; + private boolean burning = false; + private boolean done = false; + public interface BurnProgressListener{ public void setProgress(float p); } @@ -64,6 +67,8 @@ public class Burn { protected SortedMap,Interval> data = new TreeMap, Interval>(); public SortedMap,Interval> getData(){ + if ( !done ) + throw new IllegalStateException("Burn not complete!"); return data; } @@ -72,7 +77,7 @@ public class Burn { } public Amount burnTime(){ - return data.lastKey(); + return getData().lastKey(); } public Burn(Motor m){ @@ -82,21 +87,18 @@ public class Burn { throw new IllegalArgumentException("Invalid Motor: " + e.getMessage()); } motor = m; - burn(); } - public Burn(Motor m, BurnProgressListener bpl){ - try { - m.validate(); - } catch (ValidationException e) { - throw new IllegalArgumentException("Invalid Motor: " + e.getMessage()); - } - motor = m; + public void addBurnProgressListener( BurnProgressListener bpl ){ bpls.add(bpl); - burn(); } - private void burn(){ + public void burn(){ + synchronized(this){ + if ( burning ) + throw new IllegalStateException("Already burning!"); + burning = true; + } log.info("Starting burn..."); int endPressureSteps = 0; long start = new Date().getTime(); @@ -238,6 +240,7 @@ public class Burn { long time = new Date().getTime() - start; log.info("Burn took " + time + " millis."); + done = true; } @SuppressWarnings("unchecked") @@ -252,11 +255,11 @@ public class Burn { } public Amount pressure(Amount time){ - return data.get(time).chamberPressure; + return getData().get(time).chamberPressure; } public Amount thrust(Amount time){ - return data.get(time).thrust; + return getData().get(time).thrust; } public Amount kn(Amount regression){