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