/*
* Copyright 2008-2017 by Emeric Vernat
*
* This file is part of Java Melody.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.bull.javamelody;
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.lang.Thread.UncaughtExceptionHandler;
import java.net.URL;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import org.apache.log4j.Logger;
import net.bull.javamelody.swing.util.MSwingUtilities;
import net.bull.javamelody.swing.util.ShadowPopupFactory;
/**
* Classe Main.
* @author Emeric Vernat
*/
public final class Main {
private Main() {
super();
}
/**
* Méthode main.
* @param args Arguments du programme
*/
public static void main(String[] args) {
log("starting");
// jnlp prefix to fix:
// http://stackoverflow.com/questions/19400725/with-java-update-7-45-the-system-properties-no-more-set-from-jnlp-tag-property
// https://bugs.openjdk.java.net/browse/JDK-8023821
for (final Object property : Collections.list(System.getProperties().keys())) {
final String name = String.valueOf(property);
if (name.startsWith(JnlpPage.JNLP_PREFIX)) {
final String value = System.getProperty(name);
System.setProperty(name.substring(JnlpPage.JNLP_PREFIX.length()), value);
}
}
initLookAndFeel();
// une touche bleu-clair pour avoir une teinte moins grisatre
UIManager.put("control", new Color(225, 225, 250));
ShadowPopupFactory.install();
MSwingUtilities.initEscapeClosesDialogs();
// on définit le répertoire courant, car par exemple dans JavaWebStart il n'est pas bon par défaut
System.setProperty("user.dir", System.getProperty("user.home"));
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
MSwingUtilities.showException(e);
}
});
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
// affichage de la frame dans le thread AWT
showFrame();
} catch (final Throwable t) { // NOPMD
MSwingUtilities.showException(t);
exit();
}
}
});
}
static void showFrame() throws IOException {
final String application = System.getProperty("javamelody.application");
final String url = System.getProperty("javamelody.url");
final String range = System.getProperty("javamelody.range");
if (application == null || url == null || range == null) {
throw new IllegalStateException(
"There must be 3 system properties: javamelody.application, javamelody.url, javamelody.range");
}
final String locale = System.getProperty("javamelody.locale");
if (locale != null) {
System.setProperty("user.language", locale);
}
final boolean collectorServer = Boolean
.parseBoolean(System.getProperty("javamelody.collectorServer"));
final List<URL> urls = Arrays.asList(new URL(url));
final Range selectedRange = Range.parse(range);
log("Monitoring of " + application + " on " + url);
log("creating frame");
final RemoteCollector remoteCollector = new RemoteCollector(application, urls);
remoteCollector.setCookies(System.getProperty("cookies"));
final MainPanel contentPane = new MainPanel(remoteCollector, selectedRange,
collectorServer);
final MainFrame frame = new MainFrame();
frame.setTitle(I18N.getFormattedString("Monitoring_sur", application));
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
log("closing");
}
});
frame.setContentPane(contentPane);
frame.setVisible(true);
log("frame displayed");
}
static void log(String message) {
Logger.getLogger(Main.class).info(message);
}
/**
* Initialisation du L&F.
*/
private static void initLookAndFeel() {
// UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
for (final LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
try {
UIManager.setLookAndFeel(info.getClassName());
break;
} catch (final Exception e) {
throw new RuntimeException(e); // NOPMD
}
}
}
}
@SuppressWarnings("all")
static void exit() {
System.exit(1); // NOPMD
}
}