EMMA Coverage Report (generated Sun Apr 20 22:38:01 CEST 2008)
[all classes][net.sf.jomic.ui]

COVERAGE SUMMARY FOR SOURCE FILE [AboutFrame.java]

nameclass, %method, %block, %line, %
AboutFrame.java100% (1/1)83%  (5/6)89%  (491/553)79%  (43.5/55)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AboutFrame100% (1/1)83%  (5/6)89%  (491/553)79%  (43.5/55)
hyperlinkUpdate (HyperlinkEvent): void 0%   (0/1)0%   (0/35)0%   (0/9)
getHeading (String): String 100% (1/1)89%  (32/36)88%  (3.5/4)
getLinks (String, String []): String 100% (1/1)89%  (96/108)91%  (13.6/15)
AboutFrame (): void 100% (1/1)93%  (115/123)97%  (20.4/21)
<static initializer> 100% (1/1)99%  (242/245)100% (3/3)
dispose (): void 100% (1/1)100% (6/6)100% (3/3)

1// Jomic - a viewer for comic book archives.
2// Copyright (C) 2004-2008 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.ui;
17 
18import java.net.URL;
19import java.util.Date;
20 
21import javax.swing.Icon;
22import javax.swing.event.HyperlinkEvent;
23import javax.swing.event.HyperlinkListener;
24 
25import net.roydesign.ui.StandardMacAboutFrame;
26import net.sf.jomic.common.JomicTools;
27import net.sf.jomic.common.Version;
28import net.sf.jomic.tools.ErrorTools;
29import net.sf.jomic.tools.LocaleTools;
30import net.sf.jomic.tools.StringTools;
31import net.sf.jomic.tools.SystemTools;
32 
33/**
34 *  AboutFrame is a frame with an icon, a text using a Mac OS X Cocoa style.
35 *
36 * @author    Thomas Aglassinger
37 */
38public class AboutFrame extends StandardMacAboutFrame implements HyperlinkListener
39{
40    private static final String[] APPLICATION_CREDITS = new String[]{
41            "ant", "http://ant.apache.org/",
42            "BrowserLauncher", "http://sourceforge.net/projects/browserlauncher/",
43            "Crystal icons", "http://www.everaldo.com/crystal.html",
44            "FontBox", "http://www.fontbox.org/",
45            "gnu.regexp", "http://www.cacas.org/java/gnu/regexp/",
46            "IzPack", "http://www.izforge.com/izpack/",
47            "JAI", "http://java.sun.com/products/java-media/jai/",
48            "JavaHelp", "http://java.sun.com/products/javahelp/",
49            "JDOM", "http://www.jdom.org/",
50            "JSAP", "http://www.martiansoftware.com/jsap/",
51            "Log4j", "http://logging.apache.org/log4j/",
52            "MRJAdapter", "http://homepage.mac.com/sroy/mrjadapter/",
53            "PDFBox", "http://www.pdfbox.org/",
54            "Quaqua", "http://www.randelshofer.ch/quaqua/",
55            "Xalan-J", "http://xml.apache.org/xalan-j/",
56            "Xerces", "http://xml.apache.org/"
57            };
58 
59    private static final String[] DEVELOPMENT_CREDITS = new String[]{
60            "Abbot", "http://abbot.sourceforge.net/",
61            "Batik", "http://xml.apache.org/batik/",
62            "Checkstyle", "http://checkstyle.sourceforge.net/",
63            "eclipse", "http://www.eclipse.org/",
64            "EMMA", "http://emma.sourceforge.net/",
65            "FOP", "http://xmlgraphics.apache.org/fop/",
66            "gnuplot", "http://www.gnuplot.info/",
67            "JDepend", "http://clarkware.com/software/JDepend.html",
68            "JRefactory", "http://jrefactory.sourceforge.net/",
69            "JUnit", "http://www.junit.org/",
70            "Subcommander", "http://subcommander.tigris.org/",
71            "Subversion", "http://subversion.tigris.org/"
72            };
73 
74    private ErrorTools errorTools;
75    private JomicTools jomicTools;
76    private LocaleTools localeTools;
77    private StringTools stringTools;
78    private SystemTools systemTools;
79 
80    /**
81     *  Creates an AboutBox with a given title, message and icon and centers it over the parent
82     *  component.
83     */
84    public AboutFrame() {
85        super("Jomic", null);
86 
87        assert APPLICATION_CREDITS.length % 2 == 0;
88        assert DEVELOPMENT_CREDITS.length % 2 == 0;
89 
90        errorTools = ErrorTools.instance();
91        jomicTools = JomicTools.instance();
92        localeTools = LocaleTools.instance();
93        stringTools = StringTools.instance();
94        systemTools = SystemTools.instance();
95 
96        Icon icon = JomicTools.instance().getJomicLogo();
97        String descriptionText = localeTools.getMessage("dialogs.about.description");
98        String licenseText = localeTools.getMessage("dialogs.about.license");
99        Date versionDate = JomicTools.instance().getVersionDate();
100        Object[] versionOptions = new Object[]{Version.VERSION_TAG, versionDate};
101        String version = localeTools.getMessage("dialogs.about.version", versionOptions);
102 
103        setApplicationVersion(version);
104        setApplicationIcon(icon);
105        setCopyright(Version.COPYRIGHT);
106        setCredits("<p>" + stringTools.asHtmlEscaped(descriptionText) + "</p>"
107                + getLinks("application", APPLICATION_CREDITS)
108                + getLinks("development", DEVELOPMENT_CREDITS)
109                + getHeading("license")
110                + licenseText,
111                "text/html");
112        setHyperlinkListener(this);
113        jomicTools.setIconToJomicLogo(this);
114    }
115 
116    private String getHeading(String headingLocalizationKeySuffix) {
117        assert headingLocalizationKeySuffix != null;
118        String title = localeTools.getMessage("dialogs.about.heading." + headingLocalizationKeySuffix);
119        String result = "<p><b>" + stringTools.asHtmlEscaped(title) + "</b></p>";
120 
121        return result;
122    }
123 
124    private String getLinks(String headingLocalizationKeySuffix, String[] credits) {
125        assert headingLocalizationKeySuffix != null;
126        assert credits != null;
127        assert credits.length % 2 == 0;
128 
129        String result = getHeading(headingLocalizationKeySuffix);
130        boolean isFirst = true;
131 
132        result += "<p>";
133        for (int i = 0; i < credits.length; i += 2) {
134            String product = credits[i];
135            String link = credits[i + 1];
136 
137            if (isFirst) {
138                isFirst = false;
139            } else {
140                result += " \u00b7 ";
141            }
142            result += "<a href=\"" + stringTools.asHtmlEscaped(link) + "\">"
143                    + stringTools.asHtmlEscaped(product) + "</a>";
144        }
145        result += "</p>";
146        return result;
147    }
148 
149    public void dispose() {
150        setHyperlinkListener(null);
151        super.dispose();
152    }
153 
154    public void hyperlinkUpdate(HyperlinkEvent linkEvent) {
155        URL siteToOpen = null;
156 
157        try {
158            assert linkEvent != null;
159 
160            if (linkEvent.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
161                siteToOpen = linkEvent.getURL();
162                systemTools.openURL(siteToOpen.toExternalForm());
163            }
164        } catch (Throwable error) {
165            errorTools.showErrorMessage(this, localeTools.getMessage("errors.cannotOpenLink", siteToOpen), error);
166        }
167    }
168}

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