major optimization updates
[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.l10n.ClassBasedTranslator;
5 import net.sf.openrocket.l10n.DebugTranslator;
6 import net.sf.openrocket.l10n.ExceptionSuppressingTranslator;
7 import net.sf.openrocket.l10n.Translator;
8 import net.sf.openrocket.logging.LogHelper;
9 import net.sf.openrocket.logging.LogLevel;
10 import net.sf.openrocket.logging.LogLevelBufferLogger;
11 import net.sf.openrocket.logging.PrintStreamLogger;
12
13 /**
14  * A class that provides singleton instances / beans for other classes to utilize.
15  * 
16  * @author Sampo Niskanen <sampo.niskanen@iki.fi>
17  */
18 public final class Application {
19         
20         private static LogHelper logger;
21         private static LogLevelBufferLogger logBuffer;
22         
23         private static Translator baseTranslator = new DebugTranslator(null);
24         
25         private static ThrustCurveMotorSetDatabase motorSetDatabase;
26         
27
28         // Initialize the logger to something sane for testing without executing Startup
29         static {
30                 setLogOutputLevel(LogLevel.DEBUG);
31         }
32         
33         
34         /**
35          * Retrieve the logger to be used in logging.  By default this returns
36          * a logger that outputs to stdout/stderr even if not separately initialized,
37          * useful for development and debugging.
38          */
39         public static LogHelper getLogger() {
40                 return logger;
41         }
42         
43         /**
44          * Set the logger to be used in logging.  Note that calling this will only have effect
45          * on not-yet loaded classes, as the instance is stored in a static variable.
46          */
47         public static void setLogger(LogHelper logger) {
48                 Application.logger = logger;
49         }
50         
51         
52
53         /**
54          * Return the log buffer.
55          * 
56          * @return the logBuffer or null if not initialized
57          */
58         public static LogLevelBufferLogger getLogBuffer() {
59                 return logBuffer;
60         }
61         
62         /**
63          * Set the log buffer logger.  The logger must be separately configured
64          * to receive the logging.
65          */
66         public static void setLogBuffer(LogLevelBufferLogger logBuffer) {
67                 Application.logBuffer = logBuffer;
68         }
69         
70         
71         /**
72          * Set the logging to output the specified log level and upwards to standard output.
73          * 
74          * @param level         the minimum logging level to output.
75          */
76         public static void setLogOutputLevel(LogLevel level) {
77                 logger = new PrintStreamLogger();
78                 for (LogLevel l : LogLevel.values()) {
79                         if (l.atLeast(level)) {
80                                 ((PrintStreamLogger) logger).setOutput(l, System.out);
81                         }
82                 }
83                 
84         }
85         
86         
87         /**
88          * Return the translator to use for obtaining translated strings.
89          * @return      a translator.
90          */
91         public static Translator getTranslator() {
92                 Translator t = baseTranslator;
93                 t = new ClassBasedTranslator(t, 1);
94                 t = new ExceptionSuppressingTranslator(t);
95                 return t;
96         }
97         
98         /**
99          * Set the translator used in obtaining translated strings.
100          * @param translator    the translator to set.
101          */
102         public static void setBaseTranslator(Translator translator) {
103                 Application.baseTranslator = translator;
104         }
105         
106         
107
108         /**
109          * Return the database of all thrust curves loaded into the system.
110          */
111         public static ThrustCurveMotorSetDatabase getMotorSetDatabase() {
112                 return motorSetDatabase;
113         }
114         
115         /**
116          * Set the database of thrust curves loaded into the system.
117          */
118         public static void setMotorSetDatabase(ThrustCurveMotorSetDatabase motorSetDatabase) {
119                 Application.motorSetDatabase = motorSetDatabase;
120         }
121         
122
123 }