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.l10n.Translator;
16 import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameter;
17 import net.sf.openrocket.optimization.rocketoptimization.OptimizableParameterService;
18 import net.sf.openrocket.optimization.rocketoptimization.SimulationModifier;
19 import net.sf.openrocket.optimization.rocketoptimization.SimulationModifierService;
20 import net.sf.openrocket.startup.Application;
21 import net.sf.openrocket.util.BugException;
23 public class GeneralOptimizationDialog extends JDialog {
25 private final List<OptimizableParameter> optimizationParameters = new ArrayList<OptimizableParameter>();
26 private final Map<Object, List<SimulationModifier>> simulationModifiers =
27 new HashMap<Object, List<SimulationModifier>>();
28 private static final Translator trans = Application.getTranslator();
31 private final OpenRocketDocument document;
33 public GeneralOptimizationDialog(OpenRocketDocument document, Window parent) {
34 this.document = document;
36 loadOptimizationParameters();
37 loadSimulationModifiers();
41 private void loadOptimizationParameters() {
42 ServiceLoader<OptimizableParameterService> loader =
43 ServiceLoader.load(OptimizableParameterService.class);
45 for (OptimizableParameterService g : loader) {
46 optimizationParameters.addAll(g.getParameters(document));
49 if (optimizationParameters.isEmpty()) {
50 throw new BugException("No rocket optimization parameters found, distribution built wrong.");
53 Collections.sort(optimizationParameters, new Comparator<OptimizableParameter>() {
55 public int compare(OptimizableParameter o1, OptimizableParameter o2) {
56 return o1.getName().compareTo(o2.getName());
62 private void loadSimulationModifiers() {
63 ServiceLoader<SimulationModifierService> loader = ServiceLoader.load(SimulationModifierService.class);
65 for (SimulationModifierService g : loader) {
66 for (SimulationModifier m : g.getModifiers(document)) {
67 Object key = m.getRelatedObject();
68 List<SimulationModifier> list = simulationModifiers.get(key);
70 list = new ArrayList<SimulationModifier>();
71 simulationModifiers.put(key, list);
77 for (Object key : simulationModifiers.keySet()) {
78 List<SimulationModifier> list = simulationModifiers.get(key);
79 Collections.sort(list, new Comparator<SimulationModifier>() {
81 public int compare(SimulationModifier o1, SimulationModifier o2) {
82 return o1.getName().compareTo(o2.getName());