EMMA Coverage Report (generated Sat Oct 08 11:41:37 CEST 2011)
[all classes][net.sf.jomic.common]

COVERAGE SUMMARY FOR SOURCE FILE [StartupTools.java]

nameclass, %method, %block, %line, %
StartupTools.java100% (1/1)100% (9/9)76%  (190/251)81%  (40.7/50)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class StartupTools100% (1/1)100% (9/9)76%  (190/251)81%  (40.7/50)
getSettingsFile (String): File 100% (1/1)55%  (28/51)61%  (5.5/9)
getSettingsDir (): File 100% (1/1)61%  (35/57)71%  (10/14)
<static initializer> 100% (1/1)80%  (12/15)80%  (0.8/1)
logDuration (String): void 100% (1/1)86%  (25/29)88%  (3.5/4)
StartupTools (): void 100% (1/1)88%  (29/33)89%  (8/9)
log (String, long): void 100% (1/1)88%  (38/43)97%  (4.9/5)
disposeSplashScreen (SplashScreen): void 100% (1/1)100% (6/6)100% (2/2)
instance (): StartupTools 100% (1/1)100% (8/8)100% (3/3)
openSplashScreen (): SplashScreen 100% (1/1)100% (9/9)100% (3/3)

1// Jomic - a viewer for comic book archives.
2// Copyright (C) 2004-2011 Thomas Aglassinger
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program.  If not, see <http://www.gnu.org/licenses/>.
16package net.sf.jomic.common;
17 
18import java.io.File;
19import java.io.FileNotFoundException;
20import java.io.PrintStream;
21import java.text.SimpleDateFormat;
22import java.util.Date;
23 
24import javax.swing.SwingUtilities;
25 
26import net.roydesign.mac.MRJAdapter;
27import net.roydesign.mac.MRJFolderConstants;
28 
29/**
30 *  Utility methods used during the early startup. At that the time the following things are not
31 *  available yet:
32 *  <ul>
33 *    <li> Logging</li>
34 *    <li> Localization</li>
35 *    <li> All other classes in the net.sf.jomic.tools package</li>
36 *  </ul>
37 *
38 *
39 * @author    Thomas Aglassinger
40 */
41public final class StartupTools
42{
43    /**
44     *  Image resource for the splash screen.
45     *
46     * @see    SplashScreen
47     */
48    public static final String SPLASH_RESOURCE = "/net/sf/jomic/images/splash.jpg";
49 
50    private static StartupTools instance;
51    private boolean isMacOsX;
52    private boolean isWindows;
53    private SimpleDateFormat logDateFormat;
54 
55    /**
56     *  Stores the time when StartupTools was instantiated the first time.
57     */
58    private long startupTime;
59 
60    private StartupTools() {
61        String osName = System.getProperty("os.name").toLowerCase();
62 
63        if (Boolean.getBoolean(PropertyConstants.SYSTEM_PROPERTY_PREFIX + PropertyConstants.IGNORE_OSX)) {
64            isMacOsX = false;
65        } else {
66            isMacOsX = osName.startsWith("mac os x");
67        }
68        isWindows = osName.startsWith("windows");
69        startupTime = System.currentTimeMillis();
70        logDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
71    }
72 
73    /**
74     *  Get file where the settings are stored.
75     */
76    public File getSettingsDir() {
77        File result = null;
78 
79        // Use Mac OS X standard settings dir?
80        if (System.getProperty("mrj.version") != null) {
81            try {
82                result = MRJAdapter.findFolder(
83                        MRJFolderConstants.kUserDomain,
84                        MRJFolderConstants.kPreferencesFolderType,
85                        true);
86            } catch (FileNotFoundException ignore) {
87                logDuration("cannot get settings directory (" + result + "); using default");
88            }
89        }
90 
91        // Possibly use settings dir specified in system properties (typically for testing purpose).
92        String testSettingsPath = System.getProperty(
93                PropertyConstants.SYSTEM_PROPERTY_PREFIX + PropertyConstants.SETTINGS_DIR);
94 
95        if (testSettingsPath != null) {
96            result = new File(testSettingsPath);
97            logDuration("using test directory for settings: " + result);
98        }
99 
100        // As a last resort, use the users home directory.
101        if (result == null) {
102            logDuration("using home directory for settings");
103            result = new File(System.getProperty("user.home"));
104        }
105        return result;
106    }
107 
108    /**
109     *  Get file where the settings are stored.
110     */
111    public File getSettingsFile(String baseName) {
112        assert baseName != null;
113 
114        File result;
115        String applicationSettingsDirName = baseName;
116        File applicationSettingsDir;
117 
118        if (isMacOsX) {
119            applicationSettingsDir = getSettingsDir();
120        } else {
121            if (!isWindows) {
122                applicationSettingsDirName = "." + applicationSettingsDirName;
123            }
124            applicationSettingsDir = new File(getSettingsDir(), applicationSettingsDirName);
125        }
126        result = new File(applicationSettingsDir, baseName + ".properties");
127 
128        return result;
129    }
130 
131    public static synchronized StartupTools instance() {
132        if (instance == null) {
133            instance = new StartupTools();
134        }
135        return instance;
136    }
137 
138    /**
139     *  Dispose the splash screen in the event handling thread.
140     */
141    public void disposeSplashScreen(SplashScreen splashScreen) {
142        SwingUtilities.invokeLater(new SplashScreenDisposer(splashScreen));
143    }
144 
145    /**
146     *  Log <code>message</code> with a timestamp <code>time</code> to <code>System.out</code>.
147     */
148    public void log(String message, long time) {
149        if (Boolean.getBoolean(PropertyConstants.SYSTEM_PROPERTY_PREFIX + PropertyConstants.LOG_STARTUP)) {
150            PrintStream out = System.out;
151            String timeText = logDateFormat.format(new Date(time));
152 
153            out.println(timeText + " [" + Thread.currentThread().getName() + "] START "
154                    + StartupTools.class.getName() + " - " + message);
155        }
156    }
157 
158    /**
159     *  Log <code>message</code> to <code>System.out</code> and append the duration since startup.
160     */
161    public void logDuration(String message) {
162        assert message != null;
163        long time = System.currentTimeMillis();
164 
165        log("[after " + (time - startupTime) + " ms] " + message, time);
166    }
167 
168    public SplashScreen openSplashScreen() {
169        SplashScreen result = new SplashScreen(SPLASH_RESOURCE);
170 
171        result.splash();
172        return result;
173    }
174}

[all classes][net.sf.jomic.common]
EMMA 2.0.4217 (C) Vladimir Roubtsov