Implement simulation & flightdata(branch) cloning

This commit is contained in:
SiboVG 2023-03-29 22:44:49 +02:00
parent 0e1cd01377
commit 3eb513c78f
3 changed files with 63 additions and 1 deletions

View File

@ -523,6 +523,37 @@ public class Simulation implements ChangeSource, Cloneable {
mutex.unlock("copy");
}
}
public Simulation clone() {
mutex.lock("clone");
try {
Simulation clone = (Simulation) super.clone();
clone.mutex = SafetyMutex.newInstance();
clone.status = status;
clone.options = this.options.clone();
clone.simulationExtensions = new ArrayList<>();
for (SimulationExtension c : this.simulationExtensions) {
clone.simulationExtensions.add(c.clone());
}
clone.listeners = new ArrayList<>();
if (simulatedConditions != null) {
clone.simulatedConditions = simulatedConditions.clone();
} else {
clone.simulatedConditions = null;
}
clone.simulatedConfigurationDescription = simulatedConfigurationDescription;
clone.simulatedData = simulatedData.clone();
clone.simulatedConfigurationID = simulatedConfigurationID;
return clone;
} catch (CloneNotSupportedException e) {
throw new BugException("Clone not supported, BUG", e);
} finally {
mutex.unlock("clone");
}
}
/**

View File

@ -273,7 +273,23 @@ public class FlightData {
return mutable.isMutable();
}
public FlightData clone() {
FlightData clone = new FlightData();
clone.warnings.addAll(warnings);
for (FlightDataBranch b : branches) {
clone.branches.add(b.clone());
}
clone.maxAltitude = maxAltitude;
clone.maxVelocity = maxVelocity;
clone.maxAcceleration = maxAcceleration;
clone.maxMachNumber = maxMachNumber;
clone.timeToApogee = timeToApogee;
clone.flightTime = flightTime;
clone.groundHitVelocity = groundHitVelocity;
clone.launchRodVelocity = launchRodVelocity;
clone.deploymentVelocity = deploymentVelocity;
return clone;
}
/**
* Find the maximum acceleration before apogee.

View File

@ -363,5 +363,20 @@ public class FlightDataBranch implements Monitorable {
public int getModID() {
return modID;
}
public FlightDataBranch clone() {
FlightDataType[] types = getTypes();
FlightDataBranch clone = new FlightDataBranch(branchName, types);
for (FlightDataType type : values.keySet()) {
clone.values.put(type, values.get(type).clone());
}
clone.minValues.putAll(minValues);
clone.maxValues.putAll(maxValues);
clone.events.addAll(events);
clone.timeToOptimumAltitude = timeToOptimumAltitude;
clone.optimumAltitude = optimumAltitude;
clone.modID = modID;
return clone;
}
}