Package org.owasp.webscarab.plugin.compare.swing

Source Code of org.owasp.webscarab.plugin.compare.swing.ComparePanel

/*
* ComparePanel.java
*
* Created on 18 May 2005, 06:15
*/

package org.owasp.webscarab.plugin.compare.swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.List;

import javax.swing.Action;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import org.owasp.webscarab.model.ConversationID;
import org.owasp.webscarab.model.ConversationModel;
import org.owasp.webscarab.model.HttpUrl;
import org.owasp.webscarab.model.Response;
import org.owasp.webscarab.plugin.compare.Compare;
import org.owasp.webscarab.plugin.compare.CompareModel;
import org.owasp.webscarab.ui.swing.ConversationListModel;
import org.owasp.webscarab.ui.swing.ConversationRenderer;
import org.owasp.webscarab.ui.swing.ConversationTableModel;
import org.owasp.webscarab.ui.swing.DateRenderer;
import org.owasp.webscarab.ui.swing.SwingPluginUI;
import org.owasp.webscarab.util.Diff;
import org.owasp.webscarab.util.Diff.Edit;
import org.owasp.webscarab.util.swing.ColumnDataModel;
import org.owasp.webscarab.util.swing.DiffPanel;
import org.owasp.webscarab.util.swing.ListComboBoxModel;
import org.owasp.webscarab.util.swing.SwingWorker;
import org.owasp.webscarab.util.swing.TableSorter;

/**
*
* @author  rogan
*/
public class ComparePanel extends javax.swing.JPanel implements SwingPluginUI {
   
    /**
   *
   */
  private static final long serialVersionUID = -7352280691484196048L;
  private Compare _compare;
    private CompareModel _model;
    private ConversationTableModel _tableModel;
    private TableSorter _conversationSorter;
    private DiffPanel _diffPanel;
   
    private String _base = null;
   
    /** Creates new form ComparePanel */
    public ComparePanel(Compare compare) {
        initComponents();
        _compare = compare;
        _model = _compare.getModel();
        baseComboBox.setModel(new ListComboBoxModel(new ConversationListModel(_model.getConversationModel())));
        baseComboBox.setRenderer(new ConversationRenderer(_model.getConversationModel()));
        _tableModel = new ConversationTableModel(_model.getComparisonModel());
        _tableModel.addColumn(new ColumnDataModel<ConversationID>("Distance", Integer.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                return _model.getDistance(key);
            }
        });
       
        conversationTable.setDefaultRenderer(Date.class, new DateRenderer());
        _conversationSorter = new TableSorter(_tableModel, conversationTable.getTableHeader());
        conversationTable.setModel(_conversationSorter);
        _diffPanel = new DiffPanel();
        compareSplitPane.setBottomComponent(_diffPanel);
   
        baseComboBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object o = baseComboBox.getSelectedItem();
                if (o instanceof ConversationID) {
                    ConversationID id = (ConversationID) o;
                    ConversationModel cModel = _model.getConversationModel();
                    Response response = cModel.getResponse(id);
                    String cType = response.getHeader("Content-Type");
                    if (cType == null || !cType.startsWith("text")) {
                        JOptionPane.showMessageDialog(ComparePanel.this, "Selected conversation is not text", "Error", JOptionPane.ERROR_MESSAGE);
                        return;
                    }
                    byte[] content = response.getContent();
                    if (content == null || content.length == 0) {
                        JOptionPane.showMessageDialog(ComparePanel.this, "Selected conversation has no content", "Error", JOptionPane.ERROR_MESSAGE);
                        return;
                    }
                    _compare.setBaseConversation(null, id);
                    _base = new String(content);
                }
            }
        });
       
        conversationTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent evt) {
                int selected = conversationTable.getSelectedRow();
                _diffPanel.clear();
                if (selected == -1) {
                    return;
                }
                selected = _conversationSorter.modelIndex(selected);
                ConversationModel cmodel = _model.getComparisonModel();
               
                ConversationID id = cmodel.getConversationAt(selected);
                Response response = cmodel.getResponse(id);
                String contentType = response.getHeader("Content-Type");
                if (contentType == null || !contentType.startsWith("text")) {
                    JOptionPane.showMessageDialog(ComparePanel.this, "Selected conversation is not text", "Error", JOptionPane.ERROR_MESSAGE);
                    return;
                }
                byte[] content = response.getContent();
                if (content == null || content.length == 0) {
                    JOptionPane.showMessageDialog(ComparePanel.this, "Selected conversation has no content", "Error", JOptionPane.ERROR_MESSAGE);
                    return;
                }
                final String dst = new String(content);
                new SwingWorker() {
                    public Object construct() {
                        return Diff.getEdits(_base, dst);
                    }
                    public void finished() {
                        @SuppressWarnings("unchecked")
            List<Edit> edits = (List<Edit>) get();
                        _diffPanel.showDifferences(_base, dst, edits);
                    }
                }.start();
            }
        });
    }
   
    /** 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() {
        baseComboBox = new javax.swing.JComboBox();
        compareSplitPane = new javax.swing.JSplitPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        conversationTable = new javax.swing.JTable();

        setLayout(new java.awt.BorderLayout());

        baseComboBox.setMaximumSize(null);
        add(baseComboBox, java.awt.BorderLayout.NORTH);

        compareSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
        compareSplitPane.setResizeWeight(0.3);
        compareSplitPane.setOneTouchExpandable(true);
        conversationTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        jScrollPane1.setViewportView(conversationTable);

        compareSplitPane.setLeftComponent(jScrollPane1);

        add(compareSplitPane, java.awt.BorderLayout.CENTER);

    }// </editor-fold>//GEN-END:initComponents

    public Action[] getConversationActions() {
        return new Action[0];
    }   
   
    public ColumnDataModel<ConversationID>[] getConversationColumns() {
      return null;
    }   
   
    public JPanel getPanel() {
        return this;
    }
   
    public String getPluginName() {
        return "Compare";
    }
   
    public Action[] getUrlActions() {
        return new Action[0];
    }
   
    public ColumnDataModel<HttpUrl>[] getUrlColumns() {
      return null;
    }
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox baseComboBox;
    private javax.swing.JSplitPane compareSplitPane;
    private javax.swing.JTable conversationTable;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration//GEN-END:variables
   
}
TOP

Related Classes of org.owasp.webscarab.plugin.compare.swing.ComparePanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.