package aliview.gui; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import aliview.AliViewWindow; import aliview.settings.Settings; public class MessageLogFrame extends JFrame{ private static final Logger logger = Logger.getLogger(MessageLogFrame.class); private static final String LF = System.getProperty("line.separator"); private JTextArea messageArea; private AliViewWindow aliViewWindow; public MessageLogFrame(AliViewWindow aliViewWin) { this.aliViewWindow = aliViewWin; messageArea = new JTextArea(); refreshLog(); JScrollPane scrollPane = new JScrollPane(messageArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); this.getContentPane().add(scrollPane, BorderLayout.CENTER); JButton btnLogStatistics = new JButton("Log statistics"); btnLogStatistics.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ aliViewWindow.createStats(); refreshLog(); } }); JButton btnRequestGC = new JButton("Request GC"); btnRequestGC.setToolTipText("Request Java Garbage Collection"); btnRequestGC.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ aliViewWindow.requestGB(); refreshLog(); } }); JButton refreshButton = new JButton("Refresh log"); refreshButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { refreshLog(); } }); JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); buttonPanel.add(btnLogStatistics); buttonPanel.add(btnRequestGC); buttonPanel.add(refreshButton); this.getContentPane().add(buttonPanel, BorderLayout.SOUTH); this.setPreferredSize(new Dimension(600,400)); this.pack(); this.setTitle("log"); this.setIconImage(AppIcons.getProgramIconImage()); this.centerLocationToThisComponent(aliViewWindow); } protected void refreshLog() { try { aliViewWindow.flushAllLogs(); File logFile = new File( System.getProperty("user.home"), File.separator + Settings.getAliViewUserDataSubdir() + File.separator + Settings.getLogfileName()); logger.info("logFile=" + logFile); String message = FileUtils.readFileToString(logFile); messageArea.setText(logFile.getAbsolutePath() + LF + message); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void placeFrameupperLeftLocationOfThis(Component parent){ if(parent != null){ int newX = parent.getX() + 150; int newY = parent.getY() + 100; this.setLocation(newX, newY); } } public void centerLocationToThisComponent(Component parent){ // align to middle of parent window if(parent != null){ int newX = parent.getX() + parent.getWidth()/2 - this.getWidth()/2; int newY = parent.getY() + parent.getHeight()/2 - this.getHeight()/2; this.setLocation(newX, newY); } } }