package ch.ethz.karto.swa.atlas; import ika.utils.PropertiesLoader; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Insets; import java.awt.event.ActionEvent; import java.util.Properties; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.ScrollPaneConstants; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; public class SystemInfo { private static final String PROPERTIES_FILE = "ch.ethz.karto.swa.atlas.systeminfo"; private static String newline = System.getProperty("line.separator"); protected JTextPane systemInfo; protected StyledDocument doc; protected Style docStyle, titleStyle, title1Style, title2Style, textStyle; private Properties properties; protected final static int MB = 1024 * 1024; public static void main (String[] args) { new SystemInfo(null); } private class CopyAction extends AbstractAction { CopyAction(String name) { super(name); } public void actionPerformed(ActionEvent e) { systemInfo.selectAll(); systemInfo.copy(); systemInfo.setCaretPosition(0); } } public SystemInfo(Frame parent) { properties = PropertiesLoader.loadProperties(PROPERTIES_FILE, true); JDialog dialog = new JDialog(parent); dialog.setTitle(res("windowTitle")); dialog.setModal(true); dialog.setSize(600, 600); dialog.setLocationRelativeTo(null); Container container = new Container(); container.setLayout(new BorderLayout()); systemInfo = new JTextPane(); systemInfo.setEditable(false); systemInfo.setDragEnabled(true); systemInfo.setMargin(new Insets(20, 20, 20, 20)); JScrollPane scrollPane = new JScrollPane(systemInfo, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrollPane.setBorder(BorderFactory.createEmptyBorder()); container.add(scrollPane, BorderLayout.CENTER); Container panel = new Container(); panel.setLayout(new FlowLayout(FlowLayout.RIGHT, 16, 5)); JButton copyButton = new JButton(new CopyAction(res("copy"))); panel.add(copyButton); container.add(panel, BorderLayout.SOUTH); dialog.getContentPane().add(container); createStyles(); addInfo(); dialog.setVisible(true); } private void createStyles() { doc = systemInfo.getStyledDocument(); docStyle = doc.addStyle("docStyle", null); StyleConstants.setFontFamily(docStyle, "Dialog"); StyleConstants.setLineSpacing(docStyle, 0.2f); titleStyle = doc.addStyle("titleStyle", docStyle); StyleConstants.setBold(titleStyle, true); title1Style = doc.addStyle("title1Style", titleStyle); StyleConstants.setFontSize(title1Style, 15); title2Style = doc.addStyle("title2Style", titleStyle); StyleConstants.setFontSize(title2Style, 13); textStyle = doc.addStyle("textStyle", docStyle); StyleConstants.setFontSize(textStyle, 12); } protected void addText(String text, Style style) { try { doc.insertString(doc.getLength(), text, style); } catch (Exception e) { } } protected void addTitle1(String title) { addText(title + newline, title1Style); } protected void addTitle2(String title) { addText(newline + title + newline, title2Style); } protected void addParagraph(String paragraph) { addText(paragraph + newline, textStyle); } protected void addInfo() { System.gc(); addTitle1(res("systemTitle")); addTitle2(res("osTitle")); addParagraph(String.format(res("osInfo"), info("os.name"), info("os.version"))); addTitle2(res("cpuTitle")); addParagraph(String.format(res("cpuInfo"), info("os.arch"), info("sun.arch.data.model"))); addTitle2(res("javaTitle")); addParagraph(String.format(res("javaInfo"), info("java.version"))); addParagraph(String.format(res("javaRT"), info("java.runtime.name"), info("java.runtime.version"))); addParagraph(String.format(res("javaVM"), info("java.vm.name"), info("java.vm.version"))); addParagraph(String.format(res("javaFreeMem"), Runtime.getRuntime().freeMemory() / MB)); addParagraph(String.format(res("javaTotalMem"), Runtime.getRuntime().totalMemory() / MB)); addParagraph(String.format(res("javaMaxMem"), Runtime.getRuntime().maxMemory() / MB)); doc.setParagraphAttributes(0, doc.getLength(), docStyle, true); systemInfo.setCaretPosition(0); } private String res(String id) { return properties.getProperty(id); } private static String info(String propName) { return System.getProperty(propName); } }