/* * Copyright 2008-2014 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.BorderLayout; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.StringWriter; import java.util.List; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import net.bull.javamelody.swing.MButton; /** * Panel du dump de threads. * @author Emeric Vernat */ class ThreadsDumpPanel extends MelodyPanel { private static final long serialVersionUID = 1L; private final JavaInformations javaInformations; @SuppressWarnings("all") private final List<ThreadInformations> threadInformationsList; ThreadsDumpPanel(RemoteCollector remoteCollector, JavaInformations javaInformations) throws IOException { super(remoteCollector); assert javaInformations != null; this.javaInformations = javaInformations; this.threadInformationsList = javaInformations.getThreadInformationsList(); final String threadsDump = getThreadsDump(); setName(getString("Threads")); final JTextArea textArea = new JTextArea(); textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, textArea.getFont().getSize() - 1)); textArea.setEditable(false); textArea.setText(threadsDump); textArea.setCaretPosition(0); add(new JScrollPane(textArea), BorderLayout.CENTER); final JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 5)); buttonPanel.setOpaque(false); final MButton clipBoardButton = new MButton(getString("Copier_dans_presse-papiers")); clipBoardButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { textArea.selectAll(); textArea.copy(); textArea.setCaretPosition(0); } }); buttonPanel.add(clipBoardButton); add(buttonPanel, BorderLayout.SOUTH); } private String getThreadsDump() throws IOException { final StringWriter writer = new StringWriter(); writer.write("===== " + getFormattedString("Threads_sur", javaInformations.getHost()) + " ====="); writer.write("\n\n"); final HtmlThreadInformationsReport htmlThreadInformationsReport = new HtmlThreadInformationsReport( threadInformationsList, true, writer); htmlThreadInformationsReport.writeThreadsDump(); return writer.toString(); } }