//$Header: /cvsroot-fuse/mec-as2/39/mendelson/comm/as2/message/loggui/DialogMessageDetails.java,v 1.1 2012/04/18 14:10:30 heller Exp $ package de.mendelson.comm.as2.message.loggui; import de.mendelson.comm.as2.log.LogAccessDB; import de.mendelson.comm.as2.log.LogEntry; import de.mendelson.comm.as2.message.AS2Info; import de.mendelson.comm.as2.message.AS2MessageInfo; import de.mendelson.comm.as2.message.AS2Payload; import de.mendelson.comm.as2.message.MessageAccessDB; import de.mendelson.util.log.IRCColors; import java.text.SimpleDateFormat; import de.mendelson.util.MecResourceBundle; import de.mendelson.util.clientserver.BaseClient; import de.mendelson.util.tables.JTableColumnResizer; import java.awt.Color; import java.sql.Connection; import java.text.DateFormat; import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.TableColumn; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import javax.swing.text.StyledDocument; /* * Copyright (C) mendelson-e-commerce GmbH Berlin Germany * * This software is subject to the license agreement set forth in the license. * Please read and agree to all terms before using this software. * Other product and brand names are trademarks of their respective owners. */ /** * Dialog to show the about info * @author S.Heller * @version $Revision: 1.1 $ */ public class DialogMessageDetails extends JDialog implements ListSelectionListener { private Logger logger = Logger.getLogger("de.mendelson.as2.client"); /**Localize the GUI*/ private MecResourceBundle rb = null; /**Stores information about the message */ private AS2MessageInfo overviewInfo = null; /**Stores the payloads*/ private List<AS2Payload> payload = null; private JPanelFileDisplay jPanelFileDisplayRaw; private JPanelFileDisplay jPanelFileDisplayHeader; private JPanelFileDisplay[] jPanelFileDisplayPayload; private LogAccessDB logAccess; //db connection private Connection runtimeConnection; private Connection configConnection; /** Creates new form AboutDialog */ public DialogMessageDetails(JFrame parent, Connection configConnection, Connection runtimeConnection, BaseClient baseClient, AS2MessageInfo overviewInfo, List<AS2Payload> payload) { super(parent, true); this.runtimeConnection = runtimeConnection; this.configConnection = configConnection; //load resource bundle try { this.rb = (MecResourceBundle) ResourceBundle.getBundle( ResourceBundleMessageDetails.class.getName()); } catch (MissingResourceException e) { throw new RuntimeException("Oops..resource bundle " + e.getClassName() + " not found."); } this.jPanelFileDisplayRaw = new JPanelFileDisplay(baseClient); this.jPanelFileDisplayHeader = new JPanelFileDisplay(baseClient); this.payload = payload; this.overviewInfo = overviewInfo; this.setTitle(this.rb.getResourceString("title")); this.initComponents(); this.jLabelAS2MessageInfo.setText(overviewInfo.getMessageId()); this.getRootPane().setDefaultButton(this.jButtonOk); this.jTableMessageDetails.getTableHeader().setReorderingAllowed(false); //first icon TableColumn column = this.jTableMessageDetails.getColumnModel().getColumn(0); column.setMaxWidth(20); column.setResizable(false); column = this.jTableMessageDetails.getColumnModel().getColumn(2); column.setMaxWidth(20); column.setResizable(false); this.displayData(overviewInfo); this.jTabbedPane.addTab(this.rb.getResourceString("message.raw.decrypted"), jPanelFileDisplayRaw); this.jTabbedPane.addTab(this.rb.getResourceString("message.header"), jPanelFileDisplayHeader); this.jPanelFileDisplayPayload = new JPanelFileDisplay[payload.size()]; for (int i = 0; i < this.payload.size(); i++) { this.jPanelFileDisplayPayload[i] = new JPanelFileDisplay(baseClient); if (payload.size() == 1) { this.jTabbedPane.addTab(this.rb.getResourceString("message.payload"), jPanelFileDisplayPayload[i]); } else { this.jTabbedPane.addTab(this.rb.getResourceString("message.payload.multiple", String.valueOf(i + 1)), jPanelFileDisplayPayload[i]); } } this.jTableMessageDetails.getSelectionModel().addListSelectionListener(this); try { this.logAccess = new LogAccessDB(this.configConnection, this.runtimeConnection); } catch (Exception e) { this.logger.severe(e.getMessage()); } this.displayProcessLog(); JTableColumnResizer.adjustColumnWidthByContent(this.jTableMessageDetails); this.jTableMessageDetails.getSelectionModel().setSelectionInterval(0, 0); } /**Displays the message details log*/ private void displayProcessLog() { StyledDocument document = (StyledDocument) this.jTextPaneLog.getDocument(); StyleContext context = StyleContext.getDefaultStyleContext(); Style currentStyle = context.getStyle(StyleContext.DEFAULT_STYLE); Color defaultColor = (Color) currentStyle.getAttribute(StyleConstants.Foreground); LogEntry[] entries = this.logAccess.getLog(overviewInfo.getMessageId()); StringBuilder buffer = new StringBuilder(); DateFormat format = SimpleDateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); for (int i = 0; i < entries.length; i++) { currentStyle.removeAttribute(StyleConstants.Foreground); currentStyle.addAttribute(StyleConstants.Foreground, defaultColor); buffer.append("[").append(format.format(entries[i].getMillis())).append("] "); try { document.insertString(document.getLength(), buffer.toString(), currentStyle); } catch (Throwable ignore) { //nop } buffer.setLength(0); if (entries[i].getLevel().equals(Level.WARNING)) { currentStyle.addAttribute(StyleConstants.Foreground, IRCColors.COLOR_NAVY.brighter()); } else if (entries[i].getLevel().equals(Level.SEVERE)) { currentStyle.addAttribute(StyleConstants.Foreground, IRCColors.COLOR_RED); } else if (entries[i].getLevel().equals(Level.FINE)) { currentStyle.addAttribute(StyleConstants.Foreground, IRCColors.COLOR_GREEN); } else { currentStyle.addAttribute(StyleConstants.Foreground, defaultColor); } buffer.append(entries[i].getMessage()).append("\n"); try { document.insertString(document.getLength(), buffer.toString(), currentStyle); } catch (Throwable ignore) { //nop } buffer.setLength(0); currentStyle.removeAttribute(StyleConstants.Foreground); currentStyle.addAttribute(StyleConstants.Foreground, defaultColor); } } /**Displays all messages that contain to the passed overview object*/ private void displayData(AS2MessageInfo overviewRow) { try { MessageAccessDB messageAccess = new MessageAccessDB(this.configConnection, this.runtimeConnection); List<AS2Info> details = messageAccess.getMessageDetails(overviewRow.getMessageId()); ((TableModelMessageDetails) this.jTableMessageDetails.getModel()).passNewData(details); } catch (Exception e) { JFrame parent = (JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, this); JOptionPane.showMessageDialog(parent, e.getMessage()); } } /**ListSelectionListener*/ @Override public void valueChanged(ListSelectionEvent listSelectionEvent) { int selectedRow = this.jTableMessageDetails.getSelectedRow(); if (selectedRow >= 0) { AS2Info info = ((TableModelMessageDetails) this.jTableMessageDetails.getModel()).getRow(selectedRow); String rawFileName = null; if (!info.isMDN()) { AS2MessageInfo messageInfo = (AS2MessageInfo) info; if (messageInfo.getRawFilenameDecrypted() != null) { rawFileName = messageInfo.getRawFilenameDecrypted(); } else if (messageInfo.getRawFilename() != null) { rawFileName = messageInfo.getRawFilename(); } } else { if (info.getRawFilename() != null) { rawFileName = info.getRawFilename(); } } this.jPanelFileDisplayRaw.displayFile(rawFileName); String headerFilename = null; if (info.getHeaderFilename() != null) { headerFilename = info.getHeaderFilename(); } this.jPanelFileDisplayHeader.displayFile(headerFilename); try { if (this.payload.size() > 0) { for (int i = 0; i < payload.size(); i++) { String payloadFilename = this.payload.get(i).getPayloadFilename(); this.jPanelFileDisplayPayload[i].displayFile(payloadFilename); } } } catch (Exception e) { //nop } } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; jPanelMain = new javax.swing.JPanel(); jPanelHeader = new javax.swing.JPanel(); jLabelAS2MessageInfo = new javax.swing.JLabel(); jPanelInfo = new javax.swing.JPanel(); jSplitPane = new javax.swing.JSplitPane(); jScrollPaneList = new javax.swing.JScrollPane(); jTableMessageDetails = new javax.swing.JTable(); jTabbedPane = new javax.swing.JTabbedPane(); jPanelProcessLog = new javax.swing.JPanel(); jScrollPaneLog = new javax.swing.JScrollPane(); jTextPaneLog = new javax.swing.JTextPane(); jPanelButton = new javax.swing.JPanel(); jButtonOk = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); jPanelMain.setLayout(new java.awt.GridBagLayout()); jPanelHeader.setLayout(new java.awt.GridBagLayout()); jLabelAS2MessageInfo.setText("<Info>"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; jPanelHeader.add(jLabelAS2MessageInfo, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jPanelMain.add(jPanelHeader, gridBagConstraints); jPanelInfo.setLayout(new java.awt.GridBagLayout()); jSplitPane.setDividerLocation(200); jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jTableMessageDetails.setModel(new TableModelMessageDetails()); jTableMessageDetails.setShowHorizontalLines(false); jTableMessageDetails.setShowVerticalLines(false); jScrollPaneList.setViewportView(jTableMessageDetails); jSplitPane.setLeftComponent(jScrollPaneList); jPanelProcessLog.setLayout(new java.awt.GridBagLayout()); jTextPaneLog.setEditable(false); jScrollPaneLog.setViewportView(jTextPaneLog); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanelProcessLog.add(jScrollPaneLog, gridBagConstraints); jTabbedPane.addTab(this.rb.getResourceString( "tab.log"), jPanelProcessLog); jSplitPane.setRightComponent(jTabbedPane); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanelInfo.add(jSplitPane, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); jPanelMain.add(jPanelInfo, gridBagConstraints); jButtonOk.setFont(new java.awt.Font("Dialog", 0, 12)); jButtonOk.setText(this.rb.getResourceString( "button.ok" )); jButtonOk.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonOkActionPerformed(evt); } }); jPanelButton.add(jButtonOk); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; jPanelMain.add(jPanelButton, gridBagConstraints); getContentPane().add(jPanelMain, java.awt.BorderLayout.CENTER); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-929)/2, (screenSize.height-565)/2, 929, 565); }// </editor-fold>//GEN-END:initComponents private void jButtonOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOkActionPerformed this.setVisible(false); this.dispose(); }//GEN-LAST:event_jButtonOkActionPerformed /** Closes the dialog */ private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog this.setVisible(false); this.dispose(); }//GEN-LAST:event_closeDialog // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonOk; private javax.swing.JLabel jLabelAS2MessageInfo; private javax.swing.JPanel jPanelButton; private javax.swing.JPanel jPanelHeader; private javax.swing.JPanel jPanelInfo; private javax.swing.JPanel jPanelMain; private javax.swing.JPanel jPanelProcessLog; private javax.swing.JScrollPane jScrollPaneList; private javax.swing.JScrollPane jScrollPaneLog; private javax.swing.JSplitPane jSplitPane; private javax.swing.JTabbedPane jTabbedPane; private javax.swing.JTable jTableMessageDetails; private javax.swing.JTextPane jTextPaneLog; // End of variables declaration//GEN-END:variables }