package com.skcraft.playblock.installer; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Desktop; import java.awt.Dimension; import java.io.File; import java.io.PrintWriter; import java.io.StringWriter; import java.net.URI; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; public final class SetupUtils { private SetupUtils() { } public static void openUrl(String url) { try { Desktop.getDesktop().browse(new URI(url)); } catch (Throwable e) { showMessageDialog(null, "Failed to open " + url, e, "Error opening URL", JOptionPane.ERROR_MESSAGE); } } public static boolean isParent(File testParent, File child) { File parent = child.getParentFile(); while (parent != null) { if (parent.equals(testParent)) return true; parent = parent.getParentFile(); } return false; } public static void showMessageDialog(Component parentComponent, String message, String title, int messageType) { showMessageDialog(parentComponent, message, (String) null, title, messageType); } public static void showMessageDialog(Component parentComponent, String message, String log, String title, int messageType) { JLabel label = new JLabel(message); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout(0, 10)); panel.add(label, BorderLayout.NORTH); if (log != null) { JTextArea textArea = new JTextArea(log); textArea.setEditable(false); textArea.setFont(label.getFont()); textArea.setTabSize(4); JScrollPane scrollPane = new JScrollPane(textArea) { @Override public Dimension getPreferredSize() { return new Dimension(400, 150); } }; panel.add(scrollPane, BorderLayout.CENTER); } JOptionPane.showMessageDialog(parentComponent, panel, title, messageType); } public static void showMessageDialog(Component parentComponent, String message, Throwable t, String title, int messageType) { StringWriter writer = new StringWriter(); writer.write("To report this error, please provide:\n\n"); t.printStackTrace(new PrintWriter(writer)); showMessageDialog(parentComponent, message, writer.toString(), title, messageType); } public static boolean yesNo(Component parent, String message, String title) { return 0 == JOptionPane.showConfirmDialog(parent, message, title, JOptionPane.YES_NO_OPTION); } }