7c5894c70ca8c01663de22d06a04ef9ca73d3411
[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 import java.util.ServiceLoader;
11
12 import javax.swing.JDialog;
13
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;
22
23 public class GeneralOptimizationDialog extends JDialog {
24         
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();
29
30
31         private final OpenRocketDocument document;
32         
33         public GeneralOptimizationDialog(OpenRocketDocument document, Window parent) {
34                 this.document = document;
35                 
36                 loadOptimizationParameters();
37                 loadSimulationModifiers();
38         }
39         
40         
41         private void loadOptimizationParameters() {
42                 ServiceLoader<OptimizableParameterService> loader =
43                                 ServiceLoader.load(OptimizableParameterService.class);
44                 
45                 for (OptimizableParameterService g : loader) {
46                         optimizationParameters.addAll(g.getParameters(document));
47                 }
48                 
49                 if (optimizationParameters.isEmpty()) {
50                         throw new BugException("No rocket optimization parameters found, distribution built wrong.");
51                 }
52                 
53                 Collections.sort(optimizationParameters, new Comparator<OptimizableParameter>() {
54                         @Override
55                         public int compare(OptimizableParameter o1, OptimizableParameter o2) {
56                                 return o1.getName().compareTo(o2.getName());
57                         }
58                 });
59         }
60         
61         
62         private void loadSimulationModifiers() {
63                 ServiceLoader<SimulationModifierService> loader = ServiceLoader.load(SimulationModifierService.class);
64                 
65                 for (SimulationModifierService g : loader) {
66                         for (SimulationModifier m : g.getModifiers(document)) {
67                                 Object key = m.getRelatedObject();
68                                 List<SimulationModifier> list = simulationModifiers.get(key);
69                                 if (list == null) {
70                                         list = new ArrayList<SimulationModifier>();
71                                         simulationModifiers.put(key, list);
72                                 }
73                                 list.add(m);
74                         }
75                 }
76                 
77                 for (Object key : simulationModifiers.keySet()) {
78                         List<SimulationModifier> list = simulationModifiers.get(key);
79                         Collections.sort(list, new Comparator<SimulationModifier>() {
80                                 @Override
81                                 public int compare(SimulationModifier o1, SimulationModifier o2) {
82                                         return o1.getName().compareTo(o2.getName());
83                                 }
84                         });
85                 }
86                 
87         }
88         
89 }