//$Header: /cvsroot-fuse/mec-as2/39/mendelson/comm/as2/cem/gui/DialogCEMOverview.java,v 1.1 2012/04/18 14:10:20 heller Exp $ package de.mendelson.comm.as2.cem.gui; import de.mendelson.comm.as2.cem.CEMAccessDB; import de.mendelson.comm.as2.cem.CEMEntry; import de.mendelson.comm.as2.clientserver.message.RefreshClientCEMDisplay; import de.mendelson.util.security.cert.CertificateManager; import de.mendelson.util.security.cert.KeystoreCertificate; import de.mendelson.comm.as2.log.LogAccessDB; import de.mendelson.comm.as2.message.AS2MessageInfo; import de.mendelson.comm.as2.message.AS2Payload; import de.mendelson.comm.as2.message.MessageAccessDB; import de.mendelson.comm.as2.message.loggui.DialogMessageDetails; import de.mendelson.comm.as2.partner.gui.TableCellRendererPartner; import de.mendelson.comm.as2.preferences.PreferencesAS2; import de.mendelson.util.MecResourceBundle; import de.mendelson.util.clientserver.ClientsideMessageProcessor; import de.mendelson.util.clientserver.GUIClient; import de.mendelson.util.clientserver.clients.preferences.PreferencesClient; import de.mendelson.util.clientserver.messages.ClientServerMessage; import de.mendelson.util.security.BCCryptoHelper; import de.mendelson.util.security.cert.KeystoreStorage; import de.mendelson.util.security.cert.TableCellRendererCertificates; import de.mendelson.util.security.cert.clientserver.KeystoreStorageImplClientServer; import de.mendelson.util.tables.JTableColumnResizer; import java.sql.Connection; import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.logging.Logger; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /* * 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. */ /** * Gives an overview on all CEM messages * @author S.Heller * @version $Revision: 1.1 $ */ public class DialogCEMOverview extends JDialog implements ListSelectionListener, ClientsideMessageProcessor { /**Manages all internal certificates*/ private CertificateManager certificateManager; /**DB connection of the application*/ private Connection configConnection; private Connection runtimeConnection; /**localizes the GUI*/ private MecResourceBundle rb; private GUIClient guiClient; private Logger logger = Logger.getLogger("de.mendelson.as2.client"); /** Creates new form DialogCEMOverview */ public DialogCEMOverview(JFrame parent, Connection configConnection, Connection runtimeConnection, GUIClient guiClient) { super(parent, true); this.configConnection = configConnection; this.runtimeConnection = runtimeConnection; this.guiClient = guiClient; //load resource bundle try { this.rb = (MecResourceBundle) ResourceBundle.getBundle( ResourceBundleCEMOverview.class.getName()); } //load up resourcebundle catch (MissingResourceException e) { throw new RuntimeException("Oops..resource bundle " + e.getClassName() + " not found."); } initComponents(); //load the certificates this.certificateManager = new CertificateManager(this.logger); PreferencesClient client = new PreferencesClient(guiClient.getBaseClient()); char[] keystorePass = client.get(PreferencesAS2.KEYSTORE_PASS).toCharArray(); String keystoreName = client.get(PreferencesAS2.KEYSTORE); try { KeystoreStorage storage = new KeystoreStorageImplClientServer( guiClient.getBaseClient(), keystoreName, keystorePass, BCCryptoHelper.KEYSTORE_PKCS12); this.certificateManager = new CertificateManager(this.logger); this.certificateManager.loadKeystoreCertificates(storage); } catch (Exception e) { this.logger.severe(e.getMessage()); throw new RuntimeException(e); } CEMAccessDB cemAccess = new CEMAccessDB(this.configConnection, this.runtimeConnection); ((TableModelCEMOverview) (this.jTable.getModel())).passNewData(cemAccess.getCEMEntries()); this.jTable.getColumnModel().getColumn(0).setCellRenderer(new TableCellRendererCEMSystemState()); this.jTable.getColumnModel().getColumn(1).setCellRenderer(new TableCellRendererCEMState(this.configConnection, this.runtimeConnection)); this.jTable.getColumnModel().getColumn(3).setCellRenderer(new TableCellRendererPartner(this.configConnection, this.runtimeConnection)); this.jTable.getColumnModel().getColumn(4).setCellRenderer(new TableCellRendererPartner(this.configConnection, this.runtimeConnection)); this.jTable.getColumnModel().getColumn(5).setCellRenderer(new TableCellRendererCertificates(this.certificateManager, TableCellRendererCertificates.TYPE_FINGERPRINT_SHA1)); JTableColumnResizer.adjustColumnWidthByContent(this.jTable); this.jTable.getSelectionModel().addListSelectionListener(this); this.jTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.jTabbedPane.remove(this.jPanelReasonForRejection); //this gui may process server messages, register it this.guiClient.addMessageProcessor(this); this.setButtonState(); } private void setButtonState() { int selectedRow = this.jTable.getSelectedRow(); boolean responseExists = false; boolean isPending = false; if (selectedRow >= 0) { CEMEntry entry = ((TableModelCEMOverview) this.jTable.getModel()).getRowAt(selectedRow); responseExists = entry.getResponseMessageid() != null; CEMSystemActivity activity = new CEMSystemActivity(entry); isPending = activity.getState() == CEMEntry.STATUS_PENDING_INT; } this.jButtonDisplayRequestDetails.setEnabled(selectedRow >= 0); this.jButtonDisplayResponseDetails.setEnabled(responseExists); this.jButtonCancel.setEnabled(isPending); this.jButtonRemove.setEnabled(selectedRow >= 0); } private void refresh() { CEMAccessDB cemAccess = new CEMAccessDB(this.configConnection, this.runtimeConnection); ((TableModelCEMOverview) (this.jTable.getModel())).passNewData(cemAccess.getCEMEntries()); } /**Updates the actual selected rows content*/ private void updateRowDetails() { int selectedRow = this.jTable.getSelectedRow(); if (selectedRow < 0) { this.jTextAreaDetails.setText(""); } else { CEMEntry entry = ((TableModelCEMOverview) (this.jTable.getModel())).getRowAt(selectedRow); KeystoreCertificate certificate = this.certificateManager.getKeystoreCertificateByIssuerAndSerial( entry.getIssuername(), entry.getSerialId()); if (certificate == null) { this.jTextAreaDetails.setText(""); } else { this.jTextAreaDetails.setText(certificate.getInfo()); } if (entry.getCemState() == CEMEntry.STATUS_REJECTED_INT && entry.getReasonForRejection() != null) { this.jTabbedPane.addTab(this.rb.getResourceString("tab.reasonforrejection"), this.jPanelReasonForRejection); this.jTextAreaReasonForRejection.setText(entry.getReasonForRejection()); } } } /** 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; jToolBar = new javax.swing.JToolBar(); jButtonExit = new javax.swing.JButton(); jSeparator1 = new javax.swing.JToolBar.Separator(); jButtonSendCEM = new javax.swing.JButton(); jButtonDisplayRequestDetails = new javax.swing.JButton(); jButtonDisplayResponseDetails = new javax.swing.JButton(); jSeparator2 = new javax.swing.JToolBar.Separator(); jButtonRemove = new javax.swing.JButton(); jButtonCancel = new javax.swing.JButton(); jPanelMain = new javax.swing.JPanel(); jSplitPane = new javax.swing.JSplitPane(); jScrollPaneTable = new javax.swing.JScrollPane(); jTable = new javax.swing.JTable(); jTabbedPane = new javax.swing.JTabbedPane(); jPanelCertificateInfo = new javax.swing.JPanel(); jScrollPaneDetails = new javax.swing.JScrollPane(); jTextAreaDetails = new javax.swing.JTextArea(); jPanelReasonForRejection = new javax.swing.JPanel(); jScrollPaneReasonForRejection = new javax.swing.JScrollPane(); jTextAreaReasonForRejection = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle(this.rb.getResourceString( "title")); getContentPane().setLayout(new java.awt.GridBagLayout()); jToolBar.setFloatable(false); jToolBar.setRollover(true); jButtonExit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/mendelson/comm/as2/cem/gui/close16x16.gif"))); // NOI18N jButtonExit.setText(this.rb.getResourceString( "button.exit")); jButtonExit.setFocusable(false); jButtonExit.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonExit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonExitActionPerformed(evt); } }); jToolBar.add(jButtonExit); jToolBar.add(jSeparator1); jButtonSendCEM.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/mendelson/comm/as2/cem/gui/cem16x16.gif"))); // NOI18N jButtonSendCEM.setText(this.rb.getResourceString( "button.sendcem")); jButtonSendCEM.setFocusable(false); jButtonSendCEM.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonSendCEM.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonSendCEMActionPerformed(evt); } }); jToolBar.add(jButtonSendCEM); jButtonDisplayRequestDetails.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/mendelson/comm/as2/cem/gui/messagedetails16x16.gif"))); // NOI18N jButtonDisplayRequestDetails.setText(this.rb.getResourceString( "button.requestdetails")); jButtonDisplayRequestDetails.setFocusable(false); jButtonDisplayRequestDetails.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonDisplayRequestDetails.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonDisplayRequestDetailsActionPerformed(evt); } }); jToolBar.add(jButtonDisplayRequestDetails); jButtonDisplayResponseDetails.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/mendelson/comm/as2/cem/gui/messagedetails16x16.gif"))); // NOI18N jButtonDisplayResponseDetails.setText(this.rb.getResourceString( "button.responsedetails")); jButtonDisplayResponseDetails.setFocusable(false); jButtonDisplayResponseDetails.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonDisplayResponseDetails.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonDisplayResponseDetailsActionPerformed(evt); } }); jToolBar.add(jButtonDisplayResponseDetails); jToolBar.add(jSeparator2); jButtonRemove.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/mendelson/comm/as2/cem/gui/delete_16x16.gif"))); // NOI18N jButtonRemove.setText(this.rb.getResourceString( "button.remove")); jButtonRemove.setFocusable(false); jButtonRemove.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonRemove.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonRemoveActionPerformed(evt); } }); jToolBar.add(jButtonRemove); jButtonCancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/de/mendelson/comm/as2/cem/gui/delete_16x16.gif"))); // NOI18N jButtonCancel.setText(this.rb.getResourceString( "button.cancel")); jButtonCancel.setFocusable(false); jButtonCancel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButtonCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonCancelActionPerformed(evt); } }); jToolBar.add(jButtonCancel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; getContentPane().add(jToolBar, gridBagConstraints); jPanelMain.setLayout(new java.awt.GridBagLayout()); jSplitPane.setDividerLocation(200); jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jTable.setModel(new TableModelCEMOverview()); jTable.setShowHorizontalLines(false); jTable.setShowVerticalLines(false); jScrollPaneTable.setViewportView(jTable); jSplitPane.setLeftComponent(jScrollPaneTable); jPanelCertificateInfo.setLayout(new java.awt.GridBagLayout()); jTextAreaDetails.setColumns(20); jTextAreaDetails.setEditable(false); jTextAreaDetails.setFont(new java.awt.Font("Dialog", 0, 12)); jTextAreaDetails.setRows(5); jScrollPaneDetails.setViewportView(jTextAreaDetails); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanelCertificateInfo.add(jScrollPaneDetails, gridBagConstraints); jTabbedPane.addTab(this.rb.getResourceString( "tab.certificate"), jPanelCertificateInfo); jPanelReasonForRejection.setLayout(new java.awt.GridBagLayout()); jTextAreaReasonForRejection.setColumns(20); jTextAreaReasonForRejection.setEditable(false); jTextAreaReasonForRejection.setFont(new java.awt.Font("Dialog", 0, 12)); jTextAreaReasonForRejection.setRows(5); jScrollPaneReasonForRejection.setViewportView(jTextAreaReasonForRejection); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanelReasonForRejection.add(jScrollPaneReasonForRejection, gridBagConstraints); jTabbedPane.addTab(this.rb.getResourceString("tab.reasonforrejection"), jPanelReasonForRejection); jSplitPane.setRightComponent(jTabbedPane); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; jPanelMain.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; getContentPane().add(jPanelMain, gridBagConstraints); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-895)/2, (screenSize.height-520)/2, 895, 520); }// </editor-fold>//GEN-END:initComponents private void jButtonSendCEMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSendCEMActionPerformed JFrame parent = (JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, this); DialogSendCEM dialog = new DialogSendCEM(parent, this.certificateManager, this.configConnection, this.runtimeConnection, this.guiClient.getBaseClient()); dialog.setVisible(true); }//GEN-LAST:event_jButtonSendCEMActionPerformed private void jButtonDisplayRequestDetailsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDisplayRequestDetailsActionPerformed int selectedRow = this.jTable.getSelectedRow(); if (selectedRow >= 0) { CEMEntry entry = ((TableModelCEMOverview) this.jTable.getModel()).getRowAt(selectedRow); MessageAccessDB messageAccess = new MessageAccessDB(this.configConnection, this.runtimeConnection); AS2MessageInfo info = messageAccess.getLastMessageEntry(entry.getRequestMessageid()); if (info != null) { List<AS2Payload> payload = messageAccess.getPayload(entry.getRequestMessageid()); JFrame parent = (JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, this); DialogMessageDetails dialog = new DialogMessageDetails(parent, this.configConnection, this.runtimeConnection, this.guiClient.getBaseClient(), info, payload); dialog.setVisible(true); } else { this.logger.warning("CEMOverview: No message info available for for message id " + entry.getRequestMessageid()); } } }//GEN-LAST:event_jButtonDisplayRequestDetailsActionPerformed private void jButtonDisplayResponseDetailsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDisplayResponseDetailsActionPerformed int selectedRow = this.jTable.getSelectedRow(); if (selectedRow >= 0) { CEMEntry entry = ((TableModelCEMOverview) this.jTable.getModel()).getRowAt(selectedRow); MessageAccessDB messageAccess = new MessageAccessDB(this.configConnection, this.runtimeConnection); AS2MessageInfo info = messageAccess.getLastMessageEntry(entry.getResponseMessageid()); if (info != null) { List<AS2Payload> payload = messageAccess.getPayload(entry.getResponseMessageid()); JFrame parent = (JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, this); DialogMessageDetails dialog = new DialogMessageDetails(parent, this.configConnection, this.runtimeConnection, this.guiClient.getBaseClient(), info, payload); dialog.setVisible(true); } } }//GEN-LAST:event_jButtonDisplayResponseDetailsActionPerformed private void jButtonExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonExitActionPerformed //this gui must no longer process the server messages this.guiClient.removeMessageProcessor(this); this.setVisible(false); this.dispose(); }//GEN-LAST:event_jButtonExitActionPerformed private void jButtonRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRemoveActionPerformed int selectedRow = this.jTable.getSelectedRow(); if (selectedRow >= 0) { TableModelCEMOverview model = (TableModelCEMOverview) this.jTable.getModel(); //cancel the operation CEMEntry entry = model.getRowAt(selectedRow); CEMAccessDB cemAccess = new CEMAccessDB(this.configConnection, this.runtimeConnection); cemAccess.setPendingRequestsToState(entry.getInitiatorAS2Id(), entry.getReceiverAS2Id(), entry.getCategory(), entry.getRequestId(), CEMEntry.STATUS_CANCELED_INT); //remove the underlaying log entries LogAccessDB logAccess = new LogAccessDB(this.configConnection, this.runtimeConnection); //remove the underlaying messages MessageAccessDB messageAccess = new MessageAccessDB(this.configConnection, this.runtimeConnection); if (entry.getRequestMessageid() != null) { logAccess.deleteMessageLog(entry.getRequestMessageid()); messageAccess.deleteMessage(entry.getRequestMessageid()); } if (entry.getResponseMessageid() != null) { logAccess.deleteMessageLog(entry.getResponseMessageid()); messageAccess.deleteMessage(entry.getResponseMessageid()); } cemAccess.removeEntry(entry.getInitiatorAS2Id(), entry.getReceiverAS2Id(), entry.getCategory(), entry.getRequestId()); this.refresh(); if (selectedRow >= model.getRowCount()) { selectedRow = model.getRowCount() - 1; } //last row? if (model.getRowCount() == 0) { selectedRow = -1; } if (selectedRow >= 0) { this.jTable.setRowSelectionInterval(selectedRow, selectedRow); } } }//GEN-LAST:event_jButtonRemoveActionPerformed private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelActionPerformed int selectedRow = this.jTable.getSelectedRow(); if (selectedRow >= 0) { CEMEntry entry = ((TableModelCEMOverview) this.jTable.getModel()).getRowAt(selectedRow); CEMAccessDB cemAccess = new CEMAccessDB(this.configConnection, this.runtimeConnection); //cancel entry cemAccess.setPendingRequestsToState(entry.getInitiatorAS2Id(), entry.getReceiverAS2Id(), entry.getCategory(), entry.getRequestId(), CEMEntry.STATUS_CANCELED_INT); this.refresh(); this.jTable.setRowSelectionInterval(selectedRow, selectedRow); } }//GEN-LAST:event_jButtonCancelActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonCancel; private javax.swing.JButton jButtonDisplayRequestDetails; private javax.swing.JButton jButtonDisplayResponseDetails; private javax.swing.JButton jButtonExit; private javax.swing.JButton jButtonRemove; private javax.swing.JButton jButtonSendCEM; private javax.swing.JPanel jPanelCertificateInfo; private javax.swing.JPanel jPanelMain; private javax.swing.JPanel jPanelReasonForRejection; private javax.swing.JScrollPane jScrollPaneDetails; private javax.swing.JScrollPane jScrollPaneReasonForRejection; private javax.swing.JScrollPane jScrollPaneTable; private javax.swing.JToolBar.Separator jSeparator1; private javax.swing.JToolBar.Separator jSeparator2; private javax.swing.JSplitPane jSplitPane; private javax.swing.JTabbedPane jTabbedPane; private javax.swing.JTable jTable; private javax.swing.JTextArea jTextAreaDetails; private javax.swing.JTextArea jTextAreaReasonForRejection; private javax.swing.JToolBar jToolBar; // End of variables declaration//GEN-END:variables /**Makes this a ListSelectionListener*/ @Override public void valueChanged(ListSelectionEvent e) { this.jTabbedPane.remove(this.jPanelReasonForRejection); this.setButtonState(); //display the selected rows content this.updateRowDetails(); } @Override public boolean processMessageFromServer(ClientServerMessage message) { if (message instanceof RefreshClientCEMDisplay) { this.refresh(); return (true); } return (false); } }