a68412e175b051cbacb85ec876adce0c1a9d35f9
[debian/openrocket] / src / net / sf / openrocket / gui / dialogs / optimization / GeneralOptimizationDialog.java
1 package net.sf.openrocket.gui.dialogs.optimization;
2
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;
8 import java.util.List;
9 import java.util.Map;
10
11 import javax.swing.JDialog;
12 import javax.swing.JPanel;
13 import javax.swing.JScrollPane;
14 import javax.swing.JTree;
15
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;
26
27 public class GeneralOptimizationDialog extends JDialog {
28         private static final Translator trans = Application.getTranslator();
29         
30         private final List<OptimizableParameter> optimizationParameters = new ArrayList<OptimizableParameter>();
31         private final Map<Object, List<SimulationModifier>> simulationModifiers =
32                         new HashMap<Object, List<SimulationModifier>>();
33         
34
35         private final OpenRocketDocument baseDocument;
36         private final Rocket rocketCopy;
37         
38         
39         public GeneralOptimizationDialog(OpenRocketDocument document, Window parent) {
40                 super(parent, "Rocket optimization");
41                 
42                 this.baseDocument = document;
43                 this.rocketCopy = document.getRocket().copyWithOriginalID();
44                 
45                 loadOptimizationParameters();
46                 loadSimulationModifiers();
47                 
48
49                 JPanel panel = new JPanel(new MigLayout("fill"));
50                 
51
52                 JTree tree = new SimulationModifierTree(rocketCopy, simulationModifiers);
53                 JScrollPane scroll = new JScrollPane(tree);
54                 panel.add(scroll, "width 300lp, height 300lp");
55                 
56
57                 this.add(panel);
58                 GUIUtil.setDisposableDialogOptions(this, null);
59         }
60         
61         
62         private void loadOptimizationParameters() {
63                 optimizationParameters.addAll(OptimizationServiceHelper.getOptimizableParameters(baseDocument));
64                 
65                 if (optimizationParameters.isEmpty()) {
66                         throw new BugException("No rocket optimization parameters found, distribution built wrong.");
67                 }
68                 
69                 Collections.sort(optimizationParameters, new Comparator<OptimizableParameter>() {
70                         @Override
71                         public int compare(OptimizableParameter o1, OptimizableParameter o2) {
72                                 return o1.getName().compareTo(o2.getName());
73                         }
74                 });
75         }
76         
77         
78         private void loadSimulationModifiers() {
79                 
80                 for (SimulationModifier m : OptimizationServiceHelper.getSimulationModifiers(baseDocument)) {
81                         Object key = m.getRelatedObject();
82                         List<SimulationModifier> list = simulationModifiers.get(key);
83                         if (list == null) {
84                                 list = new ArrayList<SimulationModifier>();
85                                 simulationModifiers.put(key, list);
86                         }
87                         list.add(m);
88                 }
89                 
90                 for (Object key : simulationModifiers.keySet()) {
91                         List<SimulationModifier> list = simulationModifiers.get(key);
92                         Collections.sort(list, new Comparator<SimulationModifier>() {
93                                 @Override
94                                 public int compare(SimulationModifier o1, SimulationModifier o2) {
95                                         return o1.getName().compareTo(o2.getName());
96                                 }
97                         });
98                 }
99                 
100         }
101         
102
103
104 }