motor selection enhancements
[debian/openrocket] / src / net / sf / openrocket / startup / Application.java
1 package net.sf.openrocket.startup;
2
3 import net.sf.openrocket.database.ThrustCurveMotorSetDatabase;
4 import net.sf.openrocket.logging.LogHelper;
5 import net.sf.openrocket.logging.LogLevel;
6 import net.sf.openrocket.logging.LogLevelBufferLogger;
7 import net.sf.openrocket.logging.PrintStreamLogger;
8
9 /**
10  * A class that provides singleton instances / beans for other classes to utilize.
11  * 
12  * @author Sampo Niskanen <sampo.niskanen@iki.fi>
13  */
14 public final class Application {
15         
16         private static LogHelper logger;
17         private static LogLevelBufferLogger logBuffer;
18         
19         private static ThrustCurveMotorSetDatabase motorSetDatabase;
20         
21
22         // Initialize the logger to something sane for testing without executing Startup
23         static {
24                 setLogOutputLevel(LogLevel.DEBUG);
25         }
26         
27         
28         /**
29          * Retrieve the logger to be used in logging.  By default this returns
30          * a logger that outputs to stdout/stderr even if not separately initialized,
31          * useful for development and debugging.
32          */
33         public static LogHelper getLogger() {
34                 return logger;
35         }
36         
37         /**
38          * Set the logger to be used in logging.  Note that calling this will only have effect
39          * on not-yet loaded classes, as the instance is stored in a static variable.
40          */
41         public static void setLogger(LogHelper logger) {
42                 Application.logger = logger;
43         }
44         
45         
46
47         /**
48          * Return the log buffer.
49          * 
50          * @return the logBuffer or null if not initialized
51          */
52         public static LogLevelBufferLogger getLogBuffer() {
53                 return logBuffer;
54         }
55         
56         /**
57          * Set the log buffer logger.  The logger must be separately configured
58          * to receive the logging.
59          */
60         public static void setLogBuffer(LogLevelBufferLogger logBuffer) {
61                 Application.logBuffer = logBuffer;
62         }
63         
64         
65         /**
66          * Set the logging to output the specified log level and upwards to standard output.
67          * 
68          * @param level         the minimum logging level to output.
69          */
70         public static void setLogOutputLevel(LogLevel level) {
71                 logger = new PrintStreamLogger();
72                 for (LogLevel l : LogLevel.values()) {
73                         if (l.atLeast(level)) {
74                                 ((PrintStreamLogger) logger).setOutput(l, System.out);
75                         }
76                 }
77                 
78         }
79         
80         
81         /**
82          * Return the database of all thrust curves loaded into the system.
83          */
84         public static ThrustCurveMotorSetDatabase getMotorSetDatabase() {
85                 return motorSetDatabase;
86         }
87         
88         /**
89          * Set the database of thrust curves loaded into the system.
90          */
91         public static void setMotorSetDatabase(ThrustCurveMotorSetDatabase motorSetDatabase) {
92                 Application.motorSetDatabase = motorSetDatabase;
93         }
94         
95
96 }