/** * */ package com.aionemu.packetsamurai.gui.logrepo; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DateFormat; import java.util.Calendar; import java.util.Locale; import java.util.TimeZone; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import com.aionemu.packetsamurai.logrepo.LogFile; import com.aionemu.packetsamurai.logrepo.LogRepository; import com.aionemu.packetsamurai.logrepo.RemoteLogRepositoryBackend; /** * @author Ulysses R. Ribeiro * */ @SuppressWarnings("serial") class LogDetailsPanel extends JPanel { private JLabel _fileNameLabel = new JLabel("Filename: "); private JLabel _fileStatusLabel = new JLabel("Local: "); private JLabel _fileInfoLabel = new JLabel(""); private JButton _saveButton = new JButton("Save"); private JEditorPane _commentEditor = new JEditorPane(); private LogFile _logFile; public LogDetailsPanel(String name) { _saveButton.setEnabled(false); this.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder(name), BorderFactory.createEmptyBorder(2,2,2,2))); this.setLayout(new GridBagLayout()); GridBagConstraints cons = new GridBagConstraints(); _saveButton.addActionListener(new SaveButtonListener()); _saveButton.setActionCommand("save"); cons.insets = new Insets(2,2,2,2); cons.anchor = GridBagConstraints.NORTHWEST; this.add(_fileNameLabel, cons); cons.gridx = 1; cons.anchor = GridBagConstraints.NORTHEAST; this.add(_saveButton, cons); cons.fill = GridBagConstraints.BOTH; cons.anchor = GridBagConstraints.NORTHWEST; cons.gridx = 0; cons.gridy = 1; this.add(_fileStatusLabel, cons); cons.gridy = 2; this.add(_fileInfoLabel, cons); cons.weighty = 0.5; cons.gridy = 3; cons.gridheight = 5; this.add(new JScrollPane(_commentEditor), cons); } public void showDetails(LogFile logFile) { _saveButton.setEnabled(true); _logFile = logFile; this.setFileName(logFile.getName()); this.setStatus(logFile.isLocal(), logFile.isRemote()); this.setFileInfo(logFile); this.setCommentText(logFile.getComments()); } protected void setFileName(String name) { _fileNameLabel.setText("Filename: "+name); } protected void setStatus(boolean isLocal, boolean isRemote) { _fileStatusLabel.setText("<html>Local: <font color="+(isLocal ? "green" : "red")+">"+(isLocal ? "YES" : "NO")+"</font> Remote: <font color="+(isRemote ? "green" : "red")+">"+(isRemote ? "YES" : "NO")+"</font></html>"); } protected void setFileInfo(LogFile logFile) { String lastModified; String uploaded; if (logFile.isLocal()) { Calendar calendar = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault()); calendar.setTimeInMillis(logFile.getFile().lastModified()); lastModified = DateFormat.getInstance().format(calendar.getTime()); if (logFile.isRemote()) { calendar.setTimeInMillis(logFile.getUploadedTime()); uploaded = DateFormat.getInstance().format(calendar.getTime()); } else { uploaded = "N/A"; } } else { Calendar calendar = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault()); calendar.setTimeInMillis(logFile.getUploadedTime()); uploaded = DateFormat.getInstance().format(calendar.getTime()); lastModified = "N/A"; } _fileInfoLabel.setText("<html><font color=blue>Filesize:</font> "+logFile.getSize()+" bytes <font color=blue>Last-Modified:</font> "+lastModified+" <font color=blue>Uploaded:</font> "+uploaded+"</html>"); } protected void setCommentText(String text) { _commentEditor.setText(text); } class SaveButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if (cmd.equals("save")) { _logFile.setComments(_commentEditor.getText()); } Thread update = new Thread ( new Runnable() { public void run() { RemoteLogRepositoryBackend.getInstance().updateLogDetails(_logFile); } } ); update.setName("LogFile Details Updater Thread"); update.start(); LogRepository.getInstance().runSaveDatabase(); } } }