Fix fuel package name
authorBill Kuker <bkuker@billkuker.com>
Fri, 12 Nov 2010 14:41:39 +0000 (14:41 +0000)
committerBill Kuker <bkuker@billkuker.com>
Fri, 12 Nov 2010 14:41:39 +0000 (14:41 +0000)
gui/com/billkuker/rocketry/motorsim/fuel/AbstractFuelEditor.java [new file with mode: 0644]
gui/com/billkuker/rocketry/motorsim/fuel/FuelsEditor.java [new file with mode: 0644]
gui/com/billkuker/rocketry/motorsim/fuel/LinearFuelEditor.java [new file with mode: 0644]
gui/com/billkuker/rocketry/motorsim/fuel/SRFuelEditor.java [new file with mode: 0644]
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java
gui/fuel/AbstractFuelEditor.java [deleted file]
gui/fuel/FuelsEditor.java [deleted file]
gui/fuel/LinearFuelEditor.java [deleted file]
gui/fuel/SRFuelEditor.java [deleted file]

diff --git a/gui/com/billkuker/rocketry/motorsim/fuel/AbstractFuelEditor.java b/gui/com/billkuker/rocketry/motorsim/fuel/AbstractFuelEditor.java
new file mode 100644 (file)
index 0000000..03fb5e7
--- /dev/null
@@ -0,0 +1,81 @@
+package com.billkuker.rocketry.motorsim.fuel;\r
+\r
+import java.awt.Component;\r
+\r
+import javax.measure.quantity.Pressure;\r
+import javax.measure.quantity.Velocity;\r
+import javax.measure.unit.SI;\r
+import javax.swing.JSplitPane;\r
+import javax.swing.SwingUtilities;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Fuel;\r
+import com.billkuker.rocketry.motorsim.visual.Chart;\r
+import com.billkuker.rocketry.motorsim.visual.Editor;\r
+\r
+public abstract class AbstractFuelEditor  extends JSplitPane {\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       private final JSplitPane editParent;\r
+       private final JSplitPane editTop;\r
+       private final Fuel f;\r
+       private Chart<Pressure, Velocity> burnRate;\r
+       \r
+       public AbstractFuelEditor(Fuel f){\r
+               super(HORIZONTAL_SPLIT);\r
+               this.f = f;\r
+               \r
+               editTop = new JSplitPane(JSplitPane.VERTICAL_SPLIT);\r
+               editTop.setTopComponent(new Editor(f));\r
+               editTop.setBottomComponent(new Editor(f.getCombustionProduct()));\r
+               \r
+               editParent = new JSplitPane(JSplitPane.VERTICAL_SPLIT);\r
+               setLeftComponent(editParent);\r
+               editParent.setTopComponent(editTop);\r
+               editParent.setBottomComponent(getBurnrateEditComponent());\r
+               \r
+               setResizeWeight(0);\r
+               setDividerLocation(.3);\r
+               editParent.setDividerLocation(.5);\r
+               editTop.setDividerLocation(.5);\r
+               editParent.resetToPreferredSizes();\r
+               revalidate();\r
+\r
+               update();\r
+       }\r
+       \r
+       protected abstract Component getBurnrateEditComponent();\r
+       \r
+       public Fuel getFuel(){\r
+               return f;\r
+       }\r
+       \r
+\r
+\r
+       protected void update() {\r
+               SwingUtilities.invokeLater(new Runnable() {\r
+\r
+                       @Override\r
+                       public void run() {\r
+                               editTop.setTopComponent(new Editor(f));\r
+                               editTop.setBottomComponent(new Editor(f.getCombustionProduct()));\r
+                               if (burnRate != null)\r
+                                       AbstractFuelEditor.this.remove(burnRate);\r
+                               try {\r
+                                       burnRate = new Chart<Pressure, Velocity>(\r
+                                                       SI.MEGA(SI.PASCAL), SI.MILLIMETER.divide(SI.SECOND)\r
+                                                                       .asType(Velocity.class), f, "burnRate");\r
+                               } catch (NoSuchMethodException e) {\r
+                                       throw new Error(e);\r
+                               }\r
+                               burnRate.setDomain(burnRate.new IntervalDomain(Amount.valueOf(\r
+                                               0, SI.MEGA(SI.PASCAL)), Amount.valueOf(11, SI\r
+                                               .MEGA(SI.PASCAL)), 50));\r
+                               AbstractFuelEditor.this.setRightComponent(burnRate);\r
+                               AbstractFuelEditor.this.revalidate();\r
+                       }\r
+               });\r
+       }\r
+       \r
+}\r
diff --git a/gui/com/billkuker/rocketry/motorsim/fuel/FuelsEditor.java b/gui/com/billkuker/rocketry/motorsim/fuel/FuelsEditor.java
new file mode 100644 (file)
index 0000000..7fd1e67
--- /dev/null
@@ -0,0 +1,87 @@
+package com.billkuker.rocketry.motorsim.fuel;\r
+\r
+import java.awt.Frame;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+\r
+import javax.swing.JFrame;\r
+import javax.swing.JMenuBar;\r
+\r
+import com.billkuker.rocketry.motorsim.Fuel;\r
+import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel;\r
+import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel;\r
+import com.billkuker.rocketry.motorsim.io.MotorIO;\r
+import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;\r
+\r
+public class FuelsEditor extends MultiObjectEditor<Fuel, AbstractFuelEditor> {\r
+\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       public FuelsEditor(Frame frame) {\r
+               super(frame, "Fuel");\r
+               addCreator(new ObjectCreator() {\r
+                       @Override\r
+                       public Fuel newObject() {\r
+                               return new EditablePiecewiseLinearFuel();\r
+                       }\r
+\r
+                       @Override\r
+                       public String getName() {\r
+                               return "Linear Fuel";\r
+                       }\r
+               });\r
+               addCreator(new ObjectCreator() {\r
+                       @Override\r
+                       public Fuel newObject() {\r
+                               return new EditablePiecewiseSaintRobertFuel();\r
+                       }\r
+\r
+                       @Override\r
+                       public String getName() {\r
+                               return "Saint Robert Fuel";\r
+                       }\r
+               });\r
+       }\r
+\r
+       @Override\r
+       public AbstractFuelEditor createEditor(Fuel o) {\r
+               if ( o instanceof EditablePiecewiseLinearFuel ){\r
+                       return new LinearFuelEditor((EditablePiecewiseLinearFuel)o);\r
+               } else if ( o instanceof EditablePiecewiseSaintRobertFuel ){\r
+                       return new SRFuelEditor((EditablePiecewiseSaintRobertFuel)o);\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Fuel newObject() {\r
+               return new EditablePiecewiseLinearFuel();\r
+       }\r
+\r
+       @Override\r
+       protected Fuel loadFromFile(File f) throws IOException {\r
+               Fuel fuel =  MotorIO.readFuel(new FileInputStream(f));\r
+               return fuel;\r
+       }\r
+\r
+       @Override\r
+       protected void saveToFile(Fuel o, File f) throws IOException {\r
+               MotorIO.writeFuel(o, new FileOutputStream(f));\r
+       }\r
+       \r
+       @SuppressWarnings("deprecation")\r
+       public static void main(String args[]){\r
+               JFrame f = new JFrame();\r
+               f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\r
+               FuelsEditor fe;\r
+               f.add(fe = new FuelsEditor(f));\r
+               JMenuBar b;\r
+               f.setJMenuBar(b = new JMenuBar());\r
+               b.add(fe.getMenu());\r
+               f.setSize(1024, 768);\r
+               f.show();\r
+       }\r
+\r
+}\r
diff --git a/gui/com/billkuker/rocketry/motorsim/fuel/LinearFuelEditor.java b/gui/com/billkuker/rocketry/motorsim/fuel/LinearFuelEditor.java
new file mode 100644 (file)
index 0000000..968123f
--- /dev/null
@@ -0,0 +1,187 @@
+package com.billkuker.rocketry.motorsim.fuel;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.PropertyChangeEvent;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.measure.quantity.Pressure;
+import javax.measure.quantity.Velocity;
+import javax.measure.unit.SI;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTable;
+import javax.swing.table.AbstractTableModel;
+
+import org.jscience.physics.amount.Amount;
+
+import com.billkuker.rocketry.motorsim.RocketScience;
+import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel;
+
+public class LinearFuelEditor extends AbstractFuelEditor {
+       private static final long serialVersionUID = 1L;
+
+       private class Entry implements Comparable<Entry> {
+               Amount<Pressure> p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI));
+               Amount<Velocity> v = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(SI.METERS_PER_SECOND));
+
+               @Override
+               public int compareTo(Entry o) {
+                       return p.compareTo(o.p);
+               }
+       }
+
+       private class TM extends AbstractTableModel {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               public int getColumnCount() {
+                       return 2;
+               }
+
+               @Override
+               public int getRowCount() {
+                       return entries.size();
+               }
+
+               @Override
+               public String getColumnName(int col) {
+                       switch (col) {
+                       case 0:
+                               return "Pressure";
+                       case 1:
+                               return "Burn Rate";
+                       }
+                       return null;
+               }
+
+               @Override
+               public Object getValueAt(int rowIndex, int columnIndex) {
+                       Entry e = entries.get(rowIndex);
+                       switch (columnIndex) {
+                       case 0:
+                               return RocketScience.ammountToString(e.p);
+                       case 1:
+                               return RocketScience.ammountToString(e.v);
+                       }
+                       return null;
+               }
+
+               public boolean isCellEditable(int row, int col) {
+                       return true;
+               }
+
+               @SuppressWarnings("unchecked")
+               public void setValueAt(Object value, int row, int col) {
+                       Entry e = entries.get(row);
+                       try {
+                               switch (col) {
+                               case 0:
+                                       try {
+                                               e.p = (Amount<Pressure>) Amount.valueOf((String) value);
+                                       } catch ( Exception ee ){
+                                               double d = Double.parseDouble((String)value);
+                                               e.p = (Amount<Pressure>)Amount.valueOf(d, e.p.getUnit());
+                                       }
+                                       break;
+                               case 1:
+                                       try {
+                                               e.v = (Amount<Velocity>) Amount.valueOf((String) value);
+                                       } catch ( Exception ee ){
+                                               double d = Double.parseDouble((String)value);
+                                               e.v = (Amount<Velocity>)Amount.valueOf(d, e.v.getUnit());
+                                       }
+                                       break;
+                               }
+                       } catch (Exception ex) {
+                               ex.printStackTrace();
+                       }
+                       Collections.sort(entries);
+                       fireTableDataChanged();
+                       //f = new EditablePSRFuel(SaintRobertFuel.Type.NONSI);
+                       f.clear();
+                       for (Entry en : entries) {
+                               f.add(en.p, en.v);
+                       }
+                       f.firePropertyChange(new PropertyChangeEvent(f,"entries", null, null));
+
+                       update();
+
+               }
+
+               @Override
+               public void fireTableDataChanged() {
+                       super.fireTableDataChanged();
+               }
+
+       };
+       
+       private Vector<Entry> entries = new Vector<Entry>();
+       JPanel controls;
+       final EditablePiecewiseLinearFuel f;
+
+       public LinearFuelEditor(EditablePiecewiseLinearFuel f) {
+               super( f );
+               this.f = f;
+               for ( Map.Entry<Amount<Pressure>, Amount<Velocity>> e : f.getEntries().entrySet() ){
+                       Entry n = new Entry();
+                       n.p = e.getKey();
+                       n.v = e.getValue();
+                       entries.add(n);
+               }
+               Collections.sort(entries);
+       }
+       
+       protected  Component getBurnrateEditComponent(){
+               final TM tm = new TM();
+
+               JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+               
+
+               JTable table = new JTable(tm);
+               JScrollPane scrollpane = new JScrollPane(table);
+               scrollpane.setMinimumSize(new Dimension(200, 200));
+               editBottom.setTopComponent(scrollpane);
+
+               
+               JButton add = new JButton("Add Data");
+               add.addActionListener(new ActionListener() {
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               entries.add(new Entry());
+                               tm.fireTableDataChanged();
+                       }
+               });
+               controls = new JPanel();
+               controls.setPreferredSize(new Dimension(200, 50));
+               controls.setLayout(new FlowLayout());
+                       
+               controls.add(add);
+               
+               editBottom.setBottomComponent(controls);
+               
+               
+
+               editBottom.setDividerLocation(.8);
+               
+               return editBottom;
+       }
+
+       public static void main(String args[]) {
+               JFrame f = new JFrame();
+               f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+               f.setContentPane(new LinearFuelEditor(new EditablePiecewiseLinearFuel()));
+               f.setSize(800, 600);
+               f.setVisible(true);
+
+       }
+
+}
diff --git a/gui/com/billkuker/rocketry/motorsim/fuel/SRFuelEditor.java b/gui/com/billkuker/rocketry/motorsim/fuel/SRFuelEditor.java
new file mode 100644 (file)
index 0000000..eaebabd
--- /dev/null
@@ -0,0 +1,223 @@
+package com.billkuker.rocketry.motorsim.fuel;
+
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.PropertyChangeEvent;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.Collections;
+import java.util.Vector;
+
+import javax.measure.quantity.Pressure;
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTable;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.table.AbstractTableModel;
+
+import org.jscience.physics.amount.Amount;
+
+import com.billkuker.rocketry.motorsim.RocketScience;
+import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type;
+import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel;
+
+public class SRFuelEditor extends AbstractFuelEditor {
+       private static final long serialVersionUID = 1L;
+
+       private static final NumberFormat nf = new DecimalFormat("##########.###");
+
+       private class Entry implements Comparable<Entry> {
+               Amount<Pressure> p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI));
+               double a;
+               double n;
+
+               @Override
+               public int compareTo(Entry o) {
+                       return p.compareTo(o.p);
+               }
+       }
+
+       private class TM extends AbstractTableModel {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               public int getColumnCount() {
+                       return 3;
+               }
+
+               @Override
+               public int getRowCount() {
+                       return entries.size();
+               }
+
+               @Override
+               public String getColumnName(int col) {
+                       switch (col) {
+                       case 0:
+                               return "Pressure";
+                       case 1:
+                               return "Coefficient (a)";
+                       case 2:
+                               return "Exponent (n)";
+                       }
+                       return null;
+               }
+
+               @Override
+               public Object getValueAt(int rowIndex, int columnIndex) {
+                       Entry e = entries.get(rowIndex);
+                       switch (columnIndex) {
+                       case 0:
+                               //Format like 100 psi or 4.8 Mpa
+                               return nf.format(e.p.doubleValue(e.p.getUnit())) + " " + e.p.getUnit();
+                       case 1:
+                               return e.a;
+                       case 2:
+                               return e.n;
+                       }
+                       return null;
+               }
+
+               public boolean isCellEditable(int row, int col) {
+                       return true;
+               }
+
+               @SuppressWarnings("unchecked")
+               public void setValueAt(Object value, int row, int col) {
+                       Entry e = entries.get(row);
+                       try {
+                               switch (col) {
+                               case 0:
+                                       try {
+                                               e.p = (Amount<Pressure>) Amount.valueOf((String) value);
+                                       } catch ( Exception ee ){
+                                               double d = Double.parseDouble((String)value);
+                                               e.p = (Amount<Pressure>)Amount.valueOf(d, e.p.getUnit());
+                                       }
+                                       break;
+                               case 1:
+                                       e.a = Double.valueOf((String) value);
+                                       break;
+                               case 2:
+                                       e.n = Double.valueOf((String) value);
+                               }
+                       } catch (Exception ex) {
+                               ex.printStackTrace();
+                       }
+                       Collections.sort(entries);
+                       fireTableDataChanged();
+                       //f = new EditablePSRFuel(SaintRobertFuel.Type.NONSI);
+                       f.clear();
+                       for (Entry en : entries) {
+                               f.add(en.p, en.a, en.n);
+                       }
+                       f.firePropertyChange(new PropertyChangeEvent(f,"entries", null, null));
+
+                       update();
+
+               }
+
+               @Override
+               public void fireTableDataChanged() {
+                       super.fireTableDataChanged();
+               }
+
+       };
+       
+       private Vector<Entry> entries = new Vector<Entry>();
+       JPanel controls;
+       final EditablePiecewiseSaintRobertFuel f;
+
+       public SRFuelEditor(EditablePiecewiseSaintRobertFuel f) {
+               super( f);
+               this.f = f;
+               
+               for ( Amount<Pressure> p : f.getAMap().keySet() ){
+                       Entry e = new Entry();
+                       e.a = f.getAMap().get(p);
+                       e.n = f.getNMap().get(p);
+                       entries.add(e);
+               }
+               Collections.sort(entries);
+               
+       }
+       
+       protected  Component getBurnrateEditComponent(){
+               final TM tm = new TM();
+
+               JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+               
+
+               JTable table = new JTable(tm);
+               JScrollPane scrollpane = new JScrollPane(table);
+               scrollpane.setMinimumSize(new Dimension(200, 200));
+               editBottom.setTopComponent(scrollpane);
+
+               
+               JButton add = new JButton("Add Data");
+               add.addActionListener(new ActionListener() {
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               entries.add(new Entry());
+                               tm.fireTableDataChanged();
+                       }
+               });
+               controls = new JPanel();
+               controls.setPreferredSize(new Dimension(200, 50));
+               controls.setLayout(new FlowLayout());
+                       
+               controls.add(add);
+
+               
+               final JRadioButton si, nonsi;
+               ButtonGroup type = new ButtonGroup();
+               JPanel radio = new JPanel();
+               radio.add(si = new JRadioButton("SI"));
+               radio.add(nonsi = new JRadioButton("NonSI"));
+               controls.add(radio);
+               type.add(si);
+               type.add(nonsi);
+
+               si.setSelected(true);
+               
+               si.addChangeListener(new ChangeListener(){
+                       @Override
+                       public void stateChanged(ChangeEvent e) {
+                               if ( si.isSelected() ){
+                                       System.err.println("SI");
+                                       f.setType(Type.SI);
+                               } else {
+                                       System.err.println("NONSI");
+                                       f.setType(Type.NONSI);
+                               }
+                               update();
+                       }});
+               
+               editBottom.setBottomComponent(controls);
+               
+               
+
+               editBottom.setDividerLocation(.8);
+               
+               return editBottom;
+       }
+
+       public static void main(String args[]) {
+               JFrame f = new JFrame();
+               f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+               f.setContentPane(new SRFuelEditor(new EditablePiecewiseSaintRobertFuel()));
+               f.setSize(800, 600);
+               f.setVisible(true);
+
+       }
+
+}
index 5e9652f1ed4f4e59a07ce53cddc8059fb8180297..328e64d68900e3ed896d99e9501f8264b2a19bd6 100644 (file)
@@ -27,10 +27,10 @@ import com.billkuker.rocketry.motorsim.Fuel;
 import com.billkuker.rocketry.motorsim.Motor;\r
 import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
 import com.billkuker.rocketry.motorsim.fuel.FuelResolver;\r
+import com.billkuker.rocketry.motorsim.fuel.FuelsEditor;\r
 import com.billkuker.rocketry.motorsim.io.ENGExporter;\r
 import com.billkuker.rocketry.motorsim.io.MotorIO;\r
 \r
-import fuel.FuelsEditor;\r
 \r
 public class MotorWorkbench extends JFrame {\r
        private static final long serialVersionUID = 1L;\r
diff --git a/gui/fuel/AbstractFuelEditor.java b/gui/fuel/AbstractFuelEditor.java
deleted file mode 100644 (file)
index 23da52a..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-package fuel;\r
-\r
-import java.awt.Component;\r
-\r
-import javax.measure.quantity.Pressure;\r
-import javax.measure.quantity.Velocity;\r
-import javax.measure.unit.SI;\r
-import javax.swing.JSplitPane;\r
-import javax.swing.SwingUtilities;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-\r
-import com.billkuker.rocketry.motorsim.Fuel;\r
-import com.billkuker.rocketry.motorsim.visual.Chart;\r
-import com.billkuker.rocketry.motorsim.visual.Editor;\r
-\r
-public abstract class AbstractFuelEditor  extends JSplitPane {\r
-       private static final long serialVersionUID = 1L;\r
-\r
-       private final JSplitPane editParent;\r
-       private final JSplitPane editTop;\r
-       private final Fuel f;\r
-       private Chart<Pressure, Velocity> burnRate;\r
-       \r
-       public AbstractFuelEditor(Fuel f){\r
-               super(HORIZONTAL_SPLIT);\r
-               this.f = f;\r
-               \r
-               editTop = new JSplitPane(JSplitPane.VERTICAL_SPLIT);\r
-               editTop.setTopComponent(new Editor(f));\r
-               editTop.setBottomComponent(new Editor(f.getCombustionProduct()));\r
-               \r
-               editParent = new JSplitPane(JSplitPane.VERTICAL_SPLIT);\r
-               setLeftComponent(editParent);\r
-               editParent.setTopComponent(editTop);\r
-               editParent.setBottomComponent(getBurnrateEditComponent());\r
-               \r
-               setResizeWeight(0);\r
-               setDividerLocation(.3);\r
-               editParent.setDividerLocation(.5);\r
-               editTop.setDividerLocation(.5);\r
-               editParent.resetToPreferredSizes();\r
-               revalidate();\r
-\r
-               update();\r
-       }\r
-       \r
-       protected abstract Component getBurnrateEditComponent();\r
-       \r
-       public Fuel getFuel(){\r
-               return f;\r
-       }\r
-       \r
-\r
-\r
-       protected void update() {\r
-               SwingUtilities.invokeLater(new Runnable() {\r
-\r
-                       @Override\r
-                       public void run() {\r
-                               editTop.setTopComponent(new Editor(f));\r
-                               editTop.setBottomComponent(new Editor(f.getCombustionProduct()));\r
-                               if (burnRate != null)\r
-                                       AbstractFuelEditor.this.remove(burnRate);\r
-                               try {\r
-                                       burnRate = new Chart<Pressure, Velocity>(\r
-                                                       SI.MEGA(SI.PASCAL), SI.MILLIMETER.divide(SI.SECOND)\r
-                                                                       .asType(Velocity.class), f, "burnRate");\r
-                               } catch (NoSuchMethodException e) {\r
-                                       throw new Error(e);\r
-                               }\r
-                               burnRate.setDomain(burnRate.new IntervalDomain(Amount.valueOf(\r
-                                               0, SI.MEGA(SI.PASCAL)), Amount.valueOf(11, SI\r
-                                               .MEGA(SI.PASCAL)), 50));\r
-                               AbstractFuelEditor.this.setRightComponent(burnRate);\r
-                               AbstractFuelEditor.this.revalidate();\r
-                       }\r
-               });\r
-       }\r
-       \r
-}\r
diff --git a/gui/fuel/FuelsEditor.java b/gui/fuel/FuelsEditor.java
deleted file mode 100644 (file)
index 4d599f6..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-package fuel;\r
-\r
-import java.awt.Frame;\r
-import java.io.File;\r
-import java.io.FileInputStream;\r
-import java.io.FileOutputStream;\r
-import java.io.IOException;\r
-\r
-import javax.swing.JFrame;\r
-import javax.swing.JMenuBar;\r
-\r
-import com.billkuker.rocketry.motorsim.Fuel;\r
-import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel;\r
-import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel;\r
-import com.billkuker.rocketry.motorsim.io.MotorIO;\r
-import com.billkuker.rocketry.motorsim.visual.MultiObjectEditor;\r
-\r
-public class FuelsEditor extends MultiObjectEditor<Fuel, AbstractFuelEditor> {\r
-\r
-       private static final long serialVersionUID = 1L;\r
-\r
-       public FuelsEditor(Frame frame) {\r
-               super(frame, "Fuel");\r
-               addCreator(new ObjectCreator() {\r
-                       @Override\r
-                       public Fuel newObject() {\r
-                               return new EditablePiecewiseLinearFuel();\r
-                       }\r
-\r
-                       @Override\r
-                       public String getName() {\r
-                               return "Linear Fuel";\r
-                       }\r
-               });\r
-               addCreator(new ObjectCreator() {\r
-                       @Override\r
-                       public Fuel newObject() {\r
-                               return new EditablePiecewiseSaintRobertFuel();\r
-                       }\r
-\r
-                       @Override\r
-                       public String getName() {\r
-                               return "Saint Robert Fuel";\r
-                       }\r
-               });\r
-       }\r
-\r
-       @Override\r
-       public AbstractFuelEditor createEditor(Fuel o) {\r
-               if ( o instanceof EditablePiecewiseLinearFuel ){\r
-                       return new LinearFuelEditor((EditablePiecewiseLinearFuel)o);\r
-               } else if ( o instanceof EditablePiecewiseSaintRobertFuel ){\r
-                       return new SRFuelEditor((EditablePiecewiseSaintRobertFuel)o);\r
-               }\r
-               return null;\r
-       }\r
-\r
-       @Override\r
-       public Fuel newObject() {\r
-               return new EditablePiecewiseLinearFuel();\r
-       }\r
-\r
-       @Override\r
-       protected Fuel loadFromFile(File f) throws IOException {\r
-               Fuel fuel =  MotorIO.readFuel(new FileInputStream(f));\r
-               return fuel;\r
-       }\r
-\r
-       @Override\r
-       protected void saveToFile(Fuel o, File f) throws IOException {\r
-               MotorIO.writeFuel(o, new FileOutputStream(f));\r
-       }\r
-       \r
-       @SuppressWarnings("deprecation")\r
-       public static void main(String args[]){\r
-               JFrame f = new JFrame();\r
-               f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\r
-               FuelsEditor fe;\r
-               f.add(fe = new FuelsEditor(f));\r
-               JMenuBar b;\r
-               f.setJMenuBar(b = new JMenuBar());\r
-               b.add(fe.getMenu());\r
-               f.setSize(1024, 768);\r
-               f.show();\r
-       }\r
-\r
-}\r
diff --git a/gui/fuel/LinearFuelEditor.java b/gui/fuel/LinearFuelEditor.java
deleted file mode 100644 (file)
index 93aff74..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-package fuel;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.beans.PropertyChangeEvent;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.measure.quantity.Pressure;
-import javax.measure.quantity.Velocity;
-import javax.measure.unit.SI;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTable;
-import javax.swing.table.AbstractTableModel;
-
-import org.jscience.physics.amount.Amount;
-
-import com.billkuker.rocketry.motorsim.RocketScience;
-import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseLinearFuel;
-
-public class LinearFuelEditor extends AbstractFuelEditor {
-       private static final long serialVersionUID = 1L;
-
-       private class Entry implements Comparable<Entry> {
-               Amount<Pressure> p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI));
-               Amount<Velocity> v = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(SI.METERS_PER_SECOND));
-
-               @Override
-               public int compareTo(Entry o) {
-                       return p.compareTo(o.p);
-               }
-       }
-
-       private class TM extends AbstractTableModel {
-               private static final long serialVersionUID = 1L;
-
-               @Override
-               public int getColumnCount() {
-                       return 2;
-               }
-
-               @Override
-               public int getRowCount() {
-                       return entries.size();
-               }
-
-               @Override
-               public String getColumnName(int col) {
-                       switch (col) {
-                       case 0:
-                               return "Pressure";
-                       case 1:
-                               return "Burn Rate";
-                       }
-                       return null;
-               }
-
-               @Override
-               public Object getValueAt(int rowIndex, int columnIndex) {
-                       Entry e = entries.get(rowIndex);
-                       switch (columnIndex) {
-                       case 0:
-                               return RocketScience.ammountToString(e.p);
-                       case 1:
-                               return RocketScience.ammountToString(e.v);
-                       }
-                       return null;
-               }
-
-               public boolean isCellEditable(int row, int col) {
-                       return true;
-               }
-
-               @SuppressWarnings("unchecked")
-               public void setValueAt(Object value, int row, int col) {
-                       Entry e = entries.get(row);
-                       try {
-                               switch (col) {
-                               case 0:
-                                       try {
-                                               e.p = (Amount<Pressure>) Amount.valueOf((String) value);
-                                       } catch ( Exception ee ){
-                                               double d = Double.parseDouble((String)value);
-                                               e.p = (Amount<Pressure>)Amount.valueOf(d, e.p.getUnit());
-                                       }
-                                       break;
-                               case 1:
-                                       try {
-                                               e.v = (Amount<Velocity>) Amount.valueOf((String) value);
-                                       } catch ( Exception ee ){
-                                               double d = Double.parseDouble((String)value);
-                                               e.v = (Amount<Velocity>)Amount.valueOf(d, e.v.getUnit());
-                                       }
-                                       break;
-                               }
-                       } catch (Exception ex) {
-                               ex.printStackTrace();
-                       }
-                       Collections.sort(entries);
-                       fireTableDataChanged();
-                       //f = new EditablePSRFuel(SaintRobertFuel.Type.NONSI);
-                       f.clear();
-                       for (Entry en : entries) {
-                               f.add(en.p, en.v);
-                       }
-                       f.firePropertyChange(new PropertyChangeEvent(f,"entries", null, null));
-
-                       update();
-
-               }
-
-               @Override
-               public void fireTableDataChanged() {
-                       super.fireTableDataChanged();
-               }
-
-       };
-       
-       private Vector<Entry> entries = new Vector<Entry>();
-       JPanel controls;
-       final EditablePiecewiseLinearFuel f;
-
-       public LinearFuelEditor(EditablePiecewiseLinearFuel f) {
-               super( f );
-               this.f = f;
-               for ( Map.Entry<Amount<Pressure>, Amount<Velocity>> e : f.getEntries().entrySet() ){
-                       Entry n = new Entry();
-                       n.p = e.getKey();
-                       n.v = e.getValue();
-                       entries.add(n);
-               }
-               Collections.sort(entries);
-       }
-       
-       protected  Component getBurnrateEditComponent(){
-               final TM tm = new TM();
-
-               JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
-               
-
-               JTable table = new JTable(tm);
-               JScrollPane scrollpane = new JScrollPane(table);
-               scrollpane.setMinimumSize(new Dimension(200, 200));
-               editBottom.setTopComponent(scrollpane);
-
-               
-               JButton add = new JButton("Add Data");
-               add.addActionListener(new ActionListener() {
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                               entries.add(new Entry());
-                               tm.fireTableDataChanged();
-                       }
-               });
-               controls = new JPanel();
-               controls.setPreferredSize(new Dimension(200, 50));
-               controls.setLayout(new FlowLayout());
-                       
-               controls.add(add);
-               
-               editBottom.setBottomComponent(controls);
-               
-               
-
-               editBottom.setDividerLocation(.8);
-               
-               return editBottom;
-       }
-
-       public static void main(String args[]) {
-               JFrame f = new JFrame();
-               f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-               f.setContentPane(new LinearFuelEditor(new EditablePiecewiseLinearFuel()));
-               f.setSize(800, 600);
-               f.setVisible(true);
-
-       }
-
-}
diff --git a/gui/fuel/SRFuelEditor.java b/gui/fuel/SRFuelEditor.java
deleted file mode 100644 (file)
index 53e3dd4..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-package fuel;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.beans.PropertyChangeEvent;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.Collections;
-import java.util.Vector;
-
-import javax.measure.quantity.Pressure;
-import javax.swing.ButtonGroup;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JScrollPane;
-import javax.swing.JSplitPane;
-import javax.swing.JTable;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.table.AbstractTableModel;
-
-import org.jscience.physics.amount.Amount;
-
-import com.billkuker.rocketry.motorsim.RocketScience;
-import com.billkuker.rocketry.motorsim.fuel.SaintRobertFuel.Type;
-import com.billkuker.rocketry.motorsim.fuel.editable.EditablePiecewiseSaintRobertFuel;
-
-public class SRFuelEditor extends AbstractFuelEditor {
-       private static final long serialVersionUID = 1L;
-
-       private static final NumberFormat nf = new DecimalFormat("##########.###");
-
-       private class Entry implements Comparable<Entry> {
-               Amount<Pressure> p = Amount.valueOf(0, RocketScience.UnitPreference.getUnitPreference().getPreferredUnit(RocketScience.PSI));
-               double a;
-               double n;
-
-               @Override
-               public int compareTo(Entry o) {
-                       return p.compareTo(o.p);
-               }
-       }
-
-       private class TM extends AbstractTableModel {
-               private static final long serialVersionUID = 1L;
-
-               @Override
-               public int getColumnCount() {
-                       return 3;
-               }
-
-               @Override
-               public int getRowCount() {
-                       return entries.size();
-               }
-
-               @Override
-               public String getColumnName(int col) {
-                       switch (col) {
-                       case 0:
-                               return "Pressure";
-                       case 1:
-                               return "Coefficient (a)";
-                       case 2:
-                               return "Exponent (n)";
-                       }
-                       return null;
-               }
-
-               @Override
-               public Object getValueAt(int rowIndex, int columnIndex) {
-                       Entry e = entries.get(rowIndex);
-                       switch (columnIndex) {
-                       case 0:
-                               //Format like 100 psi or 4.8 Mpa
-                               return nf.format(e.p.doubleValue(e.p.getUnit())) + " " + e.p.getUnit();
-                       case 1:
-                               return e.a;
-                       case 2:
-                               return e.n;
-                       }
-                       return null;
-               }
-
-               public boolean isCellEditable(int row, int col) {
-                       return true;
-               }
-
-               @SuppressWarnings("unchecked")
-               public void setValueAt(Object value, int row, int col) {
-                       Entry e = entries.get(row);
-                       try {
-                               switch (col) {
-                               case 0:
-                                       try {
-                                               e.p = (Amount<Pressure>) Amount.valueOf((String) value);
-                                       } catch ( Exception ee ){
-                                               double d = Double.parseDouble((String)value);
-                                               e.p = (Amount<Pressure>)Amount.valueOf(d, e.p.getUnit());
-                                       }
-                                       break;
-                               case 1:
-                                       e.a = Double.valueOf((String) value);
-                                       break;
-                               case 2:
-                                       e.n = Double.valueOf((String) value);
-                               }
-                       } catch (Exception ex) {
-                               ex.printStackTrace();
-                       }
-                       Collections.sort(entries);
-                       fireTableDataChanged();
-                       //f = new EditablePSRFuel(SaintRobertFuel.Type.NONSI);
-                       f.clear();
-                       for (Entry en : entries) {
-                               f.add(en.p, en.a, en.n);
-                       }
-                       f.firePropertyChange(new PropertyChangeEvent(f,"entries", null, null));
-
-                       update();
-
-               }
-
-               @Override
-               public void fireTableDataChanged() {
-                       super.fireTableDataChanged();
-               }
-
-       };
-       
-       private Vector<Entry> entries = new Vector<Entry>();
-       JPanel controls;
-       final EditablePiecewiseSaintRobertFuel f;
-
-       public SRFuelEditor(EditablePiecewiseSaintRobertFuel f) {
-               super( f);
-               this.f = f;
-               
-               for ( Amount<Pressure> p : f.getAMap().keySet() ){
-                       Entry e = new Entry();
-                       e.a = f.getAMap().get(p);
-                       e.n = f.getNMap().get(p);
-                       entries.add(e);
-               }
-               Collections.sort(entries);
-               
-       }
-       
-       protected  Component getBurnrateEditComponent(){
-               final TM tm = new TM();
-
-               JSplitPane editBottom = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
-               
-
-               JTable table = new JTable(tm);
-               JScrollPane scrollpane = new JScrollPane(table);
-               scrollpane.setMinimumSize(new Dimension(200, 200));
-               editBottom.setTopComponent(scrollpane);
-
-               
-               JButton add = new JButton("Add Data");
-               add.addActionListener(new ActionListener() {
-                       @Override
-                       public void actionPerformed(ActionEvent e) {
-                               entries.add(new Entry());
-                               tm.fireTableDataChanged();
-                       }
-               });
-               controls = new JPanel();
-               controls.setPreferredSize(new Dimension(200, 50));
-               controls.setLayout(new FlowLayout());
-                       
-               controls.add(add);
-
-               
-               final JRadioButton si, nonsi;
-               ButtonGroup type = new ButtonGroup();
-               JPanel radio = new JPanel();
-               radio.add(si = new JRadioButton("SI"));
-               radio.add(nonsi = new JRadioButton("NonSI"));
-               controls.add(radio);
-               type.add(si);
-               type.add(nonsi);
-
-               si.setSelected(true);
-               
-               si.addChangeListener(new ChangeListener(){
-                       @Override
-                       public void stateChanged(ChangeEvent e) {
-                               if ( si.isSelected() ){
-                                       System.err.println("SI");
-                                       f.setType(Type.SI);
-                               } else {
-                                       System.err.println("NONSI");
-                                       f.setType(Type.NONSI);
-                               }
-                               update();
-                       }});
-               
-               editBottom.setBottomComponent(controls);
-               
-               
-
-               editBottom.setDividerLocation(.8);
-               
-               return editBottom;
-       }
-
-       public static void main(String args[]) {
-               JFrame f = new JFrame();
-               f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-               f.setContentPane(new SRFuelEditor(new EditablePiecewiseSaintRobertFuel()));
-               f.setSize(800, 600);
-               f.setVisible(true);
-
-       }
-
-}