1 package net.sf.openrocket.gui.dialogs.optimization;
3 import java.awt.Window;
4 import java.util.ArrayList;
5 import java.util.Collections;
6 import java.util.Comparator;
7 import java.util.HashMap;
11 import javax.swing.JDialog;
12 import javax.swing.JPanel;
13 import javax.swing.JScrollPane;
14 import javax.swing.JTree;
16 import net.miginfocom.swing.MigLayout;
17 import net.sf.openrocket.document.OpenRocketDocument;
18 import net.sf.openrocket.l10n.Translator;
19 import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameter;
20 import net.sf.openrocket.optimization.rocketoptimization.SimulationModifier;
21 import net.sf.openrocket.optimization.services.OptimizationServiceHelper;
22 import net.sf.openrocket.rocketcomponent.Rocket;
23 import net.sf.openrocket.startup.Application;
24 import net.sf.openrocket.util.BugException;
25 import net.sf.openrocket.util.GUIUtil;
27 public class GeneralOptimizationDialog extends JDialog {
28 private static final Translator trans = Application.getTranslator();
30 private final List<OptimizableParameter> optimizationParameters = new ArrayList<OptimizableParameter>();
31 private final Map<Object, List<SimulationModifier>> simulationModifiers =
32 new HashMap<Object, List<SimulationModifier>>();
35 private final OpenRocketDocument baseDocument;
36 private final Rocket rocketCopy;
39 public GeneralOptimizationDialog(OpenRocketDocument document, Window parent) {
40 super(parent, "Rocket optimization");
42 this.baseDocument = document;
43 this.rocketCopy = document.getRocket().copyWithOriginalID();
45 loadOptimizationParameters();
46 loadSimulationModifiers();
49 JPanel panel = new JPanel(new MigLayout("fill"));
52 JTree tree = new SimulationModifierTree(rocketCopy, simulationModifiers);
53 JScrollPane scroll = new JScrollPane(tree);
54 panel.add(scroll, "width 300lp, height 300lp");
58 GUIUtil.setDisposableDialogOptions(this, null);
62 private void loadOptimizationParameters() {
63 optimizationParameters.addAll(OptimizationServiceHelper.getOptimizableParameters(baseDocument));
65 if (optimizationParameters.isEmpty()) {
66 throw new BugException("No rocket optimization parameters found, distribution built wrong.");
69 Collections.sort(optimizationParameters, new Comparator<OptimizableParameter>() {
71 public int compare(OptimizableParameter o1, OptimizableParameter o2) {
72 return o1.getName().compareTo(o2.getName());
78 private void loadSimulationModifiers() {
80 for (SimulationModifier m : OptimizationServiceHelper.getSimulationModifiers(baseDocument)) {
81 Object key = m.getRelatedObject();
82 List<SimulationModifier> list = simulationModifiers.get(key);
84 list = new ArrayList<SimulationModifier>();
85 simulationModifiers.put(key, list);
90 for (Object key : simulationModifiers.keySet()) {
91 List<SimulationModifier> list = simulationModifiers.get(key);
92 Collections.sort(list, new Comparator<SimulationModifier>() {
94 public int compare(SimulationModifier o1, SimulationModifier o2) {
95 return o1.getName().compareTo(o2.getName());