diff --git a/core/src/net/sf/openrocket/motor/MotorConfiguration.java b/core/src/net/sf/openrocket/motor/MotorConfiguration.java index 7148cd479..115e35350 100644 --- a/core/src/net/sf/openrocket/motor/MotorConfiguration.java +++ b/core/src/net/sf/openrocket/motor/MotorConfiguration.java @@ -186,23 +186,36 @@ public class MotorConfiguration implements FlightConfigurableParameter { /** - * Return a copy of this object. The listeners must not be copied - * to the new object. + * return an exact copy of this object */ - public E clone(); - - public void update(); + E clone(); + + /** + * return a copy of this object, corresponding to the specified Id + * + * @param fcid id to attach the new object to + * @return the desired copy + */ + E copy( final FlightConfigurationId fcid ); + + void update(); } diff --git a/core/src/net/sf/openrocket/rocketcomponent/FlightConfigurableParameterSet.java b/core/src/net/sf/openrocket/rocketcomponent/FlightConfigurableParameterSet.java index 57002c737..cc4ef365b 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/FlightConfigurableParameterSet.java +++ b/core/src/net/sf/openrocket/rocketcomponent/FlightConfigurableParameterSet.java @@ -221,10 +221,11 @@ public class FlightConfigurableParameterSet { - - private final FlightConfigurationId oldConfigId; - private final FlightConfigurationId newConfigId; - - public CopyFlightConfigurationVisitor(FlightConfigurationId oldConfigId, FlightConfigurationId newConfigId) { - super(); - this.oldConfigId = oldConfigId; - this.newConfigId = newConfigId; - } - - @Override - public void doAction(RocketComponent visitable) { - - if (visitable instanceof FlightConfigurableComponent) { - ((FlightConfigurableComponent) visitable).cloneFlightConfiguration(oldConfigId, newConfigId); - } - } - - @Override - public Void getResult() { - return null; - } - -} diff --git a/core/test/net/sf/openrocket/rocketcomponent/ParameterSetTest.java b/core/test/net/sf/openrocket/rocketcomponent/ParameterSetTest.java index 763c4a9c1..2039ebd28 100644 --- a/core/test/net/sf/openrocket/rocketcomponent/ParameterSetTest.java +++ b/core/test/net/sf/openrocket/rocketcomponent/ParameterSetTest.java @@ -51,11 +51,16 @@ public class ParameterSetTest extends BaseTestCase { public String toString(){ return "tp#:"+id; } - - @Override - public TestParameter clone(){ - return new TestParameter(); - } + + @Override + public TestParameter clone(){ + return new TestParameter(); + } + + @Override + public TestParameter copy( final FlightConfigurationId copyId){ + return new TestParameter(); + } }; @Before @@ -230,7 +235,7 @@ public class ParameterSetTest extends BaseTestCase { assertThat("set stores default value correctly: ", testSet.get(fcid2), equalTo( tp2 )); FlightConfigurationId fcid3 = new FlightConfigurationId(); - testSet.cloneFlightConfiguration(fcid2, fcid3); + testSet.copyFlightConfiguration(fcid2, fcid3); // fcid <=> tp2 should be stored.... assertThat("set should contain zero overrides: ", testSet.size(), equalTo( 2 )); assertThat("set stores default value correctly: ", testSet.get(fcid3), not( testSet.getDefault() )); diff --git a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurationPanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurationPanel.java index 6412f4910..223256343 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurationPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurationPanel.java @@ -27,8 +27,6 @@ import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.StateChangeListener; public class FlightConfigurationPanel extends JPanel implements StateChangeListener { - private static final long serialVersionUID = -5467500312467789009L; - //private static final Logger log = LoggerFactory.getLogger(FlightConfigurationPanel.class); private static final Translator trans = Application.getTranslator(); private final OpenRocketDocument document; @@ -123,7 +121,6 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe private void addConfiguration() { FlightConfigurationId newFCID = new FlightConfigurationId(); FlightConfiguration newConfig = new FlightConfiguration( rocket, newFCID ); - rocket.setFlightConfiguration(newFCID, newConfig); // Create a new simulation for this configuration. @@ -133,14 +130,15 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe } private void copyConfiguration() { - FlightConfiguration oldConfig = rocket.getSelectedConfiguration(); - FlightConfiguration newConfig = oldConfig.clone(); - FlightConfigurationId oldId = oldConfig.getFlightConfigurationID(); - FlightConfigurationId newId = newConfig.getFlightConfigurationID(); - + FlightConfiguration oldConfig = rocket.getSelectedConfiguration(); + FlightConfigurationId oldId = oldConfig.getFlightConfigurationID(); + + FlightConfigurationId newId = new FlightConfigurationId(); + FlightConfiguration newConfig = oldConfig.copy( newId); + for (RocketComponent c : rocket) { if (c instanceof FlightConfigurableComponent) { - ((FlightConfigurableComponent) c).cloneFlightConfiguration(oldId, newId); + ((FlightConfigurableComponent) c).copyFlightConfiguration(oldId, newId); } } rocket.setFlightConfiguration(newId, newConfig); @@ -170,8 +168,10 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe private void createSimulationForNewConfiguration() { Simulation newSim = new Simulation(rocket); OpenRocketDocument doc = BasicFrame.findDocument(rocket); - newSim.setName(doc.getNextSimulationName()); - doc.addSimulation(newSim); + if (doc != null) { + newSim.setName(doc.getNextSimulationName()); + doc.addSimulation(newSim); + } } private void configurationChanged() { @@ -192,7 +192,7 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe int motorMountCount = rocket.accept(new ListMotorMounts()).size(); // Count the number of recovery devices - int recoveryDeviceCount = rocket.accept(new ListComponents(RecoveryDevice.class)).size(); + int recoveryDeviceCount = rocket.accept(new ListComponents<>(RecoveryDevice.class)).size(); // Count the number of stages int stageCount = rocket.getStageCount();