package com.billkuker.rocketry.motorsim;\r
\r
-import java.net.URI;\r
-\r
import javax.measure.quantity.Pressure;\r
import javax.measure.quantity.Temperature;\r
import javax.measure.quantity.Velocity;\r
public interface Fuel {\r
\r
public String getName();\r
- \r
- public URI getURI();\r
\r
public Amount<VolumetricDensity> getIdealDensity();\r
\r
package com.billkuker.rocketry.motorsim.fuel;\r
\r
import java.net.URI;\r
+import java.net.URISyntaxException;\r
import java.util.Collections;\r
import java.util.HashMap;\r
+import java.util.HashSet;\r
import java.util.Map;\r
+import java.util.Set;\r
\r
import com.billkuker.rocketry.motorsim.Fuel;\r
\r
public static class FuelNotFound extends Exception {\r
private static final long serialVersionUID = 1L;\r
}\r
+ \r
+ public static interface FuelsChangeListener {\r
+ public void fuelsChanged();\r
+ }\r
\r
+ private static Set<FuelsChangeListener> listeners = new HashSet<FuelResolver.FuelsChangeListener>();\r
private static Map<URI, Fuel> fuels = new HashMap<URI, Fuel>();\r
+ private static Map<Fuel, URI> uris = new HashMap<Fuel, URI>();\r
\r
static {\r
- add(new KNSB());\r
- add(new KNDX());\r
- add(new KNSU());\r
- add(new KNER());\r
+ try {\r
+ add(new KNSB(), new URI("motorsim:KNSB"));\r
+ add(new KNDX(), new URI("motorsim:KNDX"));\r
+ add(new KNSU(), new URI("motorsim:KNSU"));\r
+ add(new KNER(), new URI("motorsim:KNER"));\r
+ } catch (URISyntaxException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ \r
+ public static void addFuelsChangeListener(FuelsChangeListener l){\r
+ listeners.add(l);\r
+ }\r
+ \r
+ public static void removeFuelsChangeListener(FuelsChangeListener l){\r
+ listeners.remove(l);\r
}\r
\r
public static Map<URI, Fuel> getFuelMap(){\r
return Collections.unmodifiableMap(fuels);\r
}\r
\r
+ public static URI getURI( Fuel f ){\r
+ return uris.get(f);\r
+ }\r
+ \r
public static Fuel getFuel(URI u) throws FuelNotFound {\r
if (fuels.containsKey(u))\r
return fuels.get(u);\r
throw new FuelNotFound();\r
}\r
\r
- private static void add(Fuel f) {\r
- fuels.put(f.getURI(), f);\r
+ private static void add(Fuel f, URI uri) {\r
+ fuels.put(uri, f);\r
+ uris.put(f, uri);\r
+ for ( FuelsChangeListener l : listeners )\r
+ l.fuelsChanged();\r
}\r
}\r
package com.billkuker.rocketry.motorsim.fuel;\r
\r
-import java.net.URI;\r
-import java.net.URISyntaxException;\r
-\r
import javax.measure.quantity.Pressure;\r
import javax.measure.quantity.Velocity;\r
import javax.measure.quantity.VolumetricDensity;\r
}\r
\r
public abstract Amount<VolumetricDensity> getIdealDensity();\r
-\r
- public URI getURI(){\r
- try {\r
- return new URI("motorsim:" + this.getClass().getSimpleName());\r
- } catch (URISyntaxException e) {\r
- throw new Error("Shouldn't happen", e);\r
- }\r
- }\r
\r
public String getName(){\r
return this.getClass().getSimpleName();\r
package com.billkuker.rocketry.motorsim.fuel.editable;\r
\r
-import java.net.URI;\r
-\r
import com.billkuker.rocketry.motorsim.Fuel;\r
\r
public interface EditableFuel extends Fuel{\r
public void setName(String name);\r
- public void setURI(URI uri);\r
}\r
package com.billkuker.rocketry.motorsim.fuel.editable;\r
\r
-import java.net.URI;\r
import java.util.HashMap;\r
import java.util.Map;\r
import java.util.NoSuchElementException;\r
import org.apache.log4j.Logger;\r
import org.jscience.physics.amount.Amount;\r
\r
-import com.billkuker.rocketry.motorsim.Fuel;\r
import com.billkuker.rocketry.motorsim.RocketScience;\r
import com.billkuker.rocketry.motorsim.fuel.EditableCombustionProduct;\r
import com.billkuker.rocketry.motorsim.visual.Chart;\r
\r
\r
private String name = "New Linear Fuel";\r
- private URI uri;\r
private double combustionEfficiency = .97;\r
private double densityRatio = .96;\r
private Amount<VolumetricDensity> density = Amount.valueOf(1889, 0, SI.KILOGRAM.divide(SI.METER.pow(3))).to(VolumetricDensity.UNIT);\r
public void setName(String name) {\r
this.name = name;\r
}\r
-\r
- @Override\r
- public URI getURI() {\r
- return uri;\r
- }\r
-\r
- @Override\r
- public void setURI(URI uri) {\r
- this.uri = uri;\r
- }\r
-\r
\r
public Map<Amount<Pressure>, Amount<Velocity>> getEntries() {\r
HashMap<Amount<Pressure>, Amount<Velocity>> ret = new HashMap<Amount<Pressure>, Amount<Velocity>>();\r
package com.billkuker.rocketry.motorsim.fuel.editable;\r
\r
-import java.net.URI;\r
import java.util.HashMap;\r
import java.util.Map;\r
\r
private double densityRatio = 1;\r
private EditableCombustionProduct cp;\r
private String name = "New Fuel";\r
- private URI uri;\r
\r
public EditablePiecewiseSaintRobertFuel() {\r
super(Type.SI);\r
aMap.put(p, _a);\r
nMap.put(p, _n);\r
}\r
-\r
- @Override\r
- public URI getURI() {\r
- return uri;\r
- }\r
-\r
- @Override\r
- public void setURI(URI uri) {\r
- this.uri = uri;\r
- }\r
\r
public Amount<VolumetricDensity> getIdealDensity() {\r
return idealDensity;\r
MarshallingContext ctx) {\r
/*Fuel f = (Fuel)o;\r
w.setValue(f.getURI().toString());*/\r
- ctx.convertAnother(((Fuel)o).getURI());\r
+ ctx.convertAnother(FuelResolver.getURI((Fuel)o));\r
}\r
\r
@Override\r