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;
10 import java.util.ServiceLoader;
12 import javax.swing.JDialog;
14 import net.sf.openrocket.document.OpenRocketDocument;
15 import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameter;
16 import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameterService;
17 import net.sf.openrocket.optimization.rocketoptimization.SimulationModifier;
18 import net.sf.openrocket.optimization.rocketoptimization.SimulationModifierService;
19 import net.sf.openrocket.util.BugException;
21 public class GeneralOptimizationDialog extends JDialog {
23 private final List<OptimizableParameter> optimizationParameters = new ArrayList<OptimizableParameter>();
24 private final Map<Object, List<SimulationModifier>> simulationModifiers =
25 new HashMap<Object, List<SimulationModifier>>();
28 private final OpenRocketDocument document;
30 public GeneralOptimizationDialog(OpenRocketDocument document, Window parent) {
31 this.document = document;
33 loadOptimizationParameters();
34 loadSimulationModifiers();
38 private void loadOptimizationParameters() {
39 ServiceLoader<OptimizableParameterService> loader =
40 ServiceLoader.load(OptimizableParameterService.class);
42 for (OptimizableParameterService g : loader) {
43 optimizationParameters.addAll(g.getParameters(document));
46 if (optimizationParameters.isEmpty()) {
47 throw new BugException("No rocket optimization parameters found, distribution built wrong.");
50 Collections.sort(optimizationParameters, new Comparator<OptimizableParameter>() {
52 public int compare(OptimizableParameter o1, OptimizableParameter o2) {
53 return o1.getName().compareTo(o2.getName());
59 private void loadSimulationModifiers() {
60 ServiceLoader<SimulationModifierService> loader = ServiceLoader.load(SimulationModifierService.class);
62 for (SimulationModifierService g : loader) {
63 for (SimulationModifier m : g.getModifiers(document)) {
64 Object key = m.getRelatedObject();
65 List<SimulationModifier> list = simulationModifiers.get(key);
67 list = new ArrayList<SimulationModifier>();
68 simulationModifiers.put(key, list);
74 for (Object key : simulationModifiers.keySet()) {
75 List<SimulationModifier> list = simulationModifiers.get(key);
76 Collections.sort(list, new Comparator<SimulationModifier>() {
78 public int compare(SimulationModifier o1, SimulationModifier o2) {
79 return o1.getName().compareTo(o2.getName());