Package org.owasp.webscarab.ui.swing

Source Code of org.owasp.webscarab.ui.swing.ConversationTableModel$Listener

/***********************************************************************
*
* $CVSHeader$
*
* This file is part of WebScarab, an Open Web Application Security
* Project utility. For details, please see http://www.owasp.org/
*
* Copyright (c) 2002 - 2004 Rogan Dawes
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* Getting Source
* ==============
*
* Source for this application is maintained at Sourceforge.net, a
* repository for free software projects.
*
* For details, please see http://www.sourceforge.net/projects/owasp
*
*/

/*
* ConversationTableModel.java
*
* Created on June 21, 2004, 6:05 PM
*/

package org.owasp.webscarab.ui.swing;

import org.owasp.webscarab.model.ConversationModel;
import org.owasp.webscarab.model.ConversationID;
import org.owasp.webscarab.model.HttpUrl;
import org.owasp.webscarab.model.ConversationListener;
import org.owasp.webscarab.model.ConversationEvent;

import org.owasp.webscarab.util.swing.ExtensibleTableModel;
import org.owasp.webscarab.util.swing.ColumnDataModel;

import javax.swing.SwingUtilities;

import java.util.logging.Logger;
import java.util.Date;

/**
*
* @author  knoppix
*/
public class ConversationTableModel extends ExtensibleTableModel<ConversationID> {
   
    /**
   *
   */
  private static final long serialVersionUID = 5188752872581098199L;

  protected ConversationModel _model = null;
   
    private Listener _listener = new Listener();
   
    protected Logger _logger = Logger.getLogger(getClass().getName());
   
    /** Creates a new instance of ConversationTableModel */
    public ConversationTableModel(ConversationModel model) {
        _model = model;
        addStandardColumns();
        _model.addConversationListener(_listener);
    }
   
    private void addStandardColumns() {
        ColumnDataModel<ConversationID> cdm = new ColumnDataModel<ConversationID>("Date", Date.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                return _model.getConversationDate(key);
            }
        };
        addColumn(cdm);
       
        cdm = new ColumnDataModel<ConversationID>("Method", String.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                return _model.getRequestMethod(key);
            }
        };
        addColumn(cdm);
       
        cdm = new ColumnDataModel<ConversationID>("Host", String.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                HttpUrl url = _model.getRequestUrl(key);
                return url.getScheme() + "://" + url.getHost() + ":" + url.getPort();
            }
        };
        addColumn(cdm);
       
        cdm = new ColumnDataModel<ConversationID>("Path", String.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                HttpUrl url = _model.getRequestUrl(key);
                return url.getPath();
            }
        };
        addColumn(cdm);
       
        cdm = new ColumnDataModel<ConversationID>("Parameters", String.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                HttpUrl url = _model.getRequestUrl(key);
                return url.getParameters();
            }
        };
        addColumn(cdm);
       
        cdm = new ColumnDataModel<ConversationID>("Status", String.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                return _model.getResponseStatus(key);
            }
        };
        addColumn(cdm);
       
        cdm = new ColumnDataModel<ConversationID>("Origin", String.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                return _model.getConversationOrigin(key);
            }
        };
        addColumn(cdm);

        cdm = new ColumnDataModel<ConversationID>("Tag", String.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                return _model.getConversationProperty(key, "TAG");
            }
      public boolean isEditable(ConversationID key) {
        return true;
      }
            public void setValue(Object aValue, ConversationID key) {
              String value = aValue == null ? null : aValue.toString();
              _model.setConversationProperty(key, "TAG", value);
            }
        };
        addColumn(cdm);

        cdm = new ColumnDataModel<ConversationID>("Size", String.class) {
            public Object getValue(ConversationID key) {
                if (_model == null) return null;
                return _model.getConversationProperty(key, "RESPONSE_SIZE");
            }
        };
        addColumn(cdm);

    }
   
    public ConversationID getKeyAt(int row) {
        return _model.getConversationAt(row);
    }
   
    public int indexOfKey(ConversationID key) {
        return _model.getIndexOfConversation((ConversationID) key);
    }
   
    public int getRowCount() {
        if (_model == null) return 0;
        return _model.getConversationCount();
    }
   
    public int getColumnCount() {
        return super.getColumnCount()+1;
    }
   
    public Object getValueAt(int row, int column) {
      ConversationID key = getKeyAt(row);
        if (column == 0) return key;
        return super.getValueAt(key, column-1);
    }
   
    /**
     * Returns the name of the column at <code>column</code>.  This is used
     * to initialize the table's column header name.  Note: this name does
     * not need to be unique; two columns in a table can have the same name.
     *
     * @param  column the index of the column
     * @return  the name of the column
     */
    public String getColumnName(int column) {
        if (column == 0) return "ID";
        return super.getColumnName(column-1);
    }
   
    /**
     * Returns the most specific superclass for all the cell values
     * in the column.  This is used by the <code>JTable</code> to set up a
     * default renderer and editor for the column.
     *
     * @param column the index of the column
     * @return the common ancestor class of the object values in the model.
     */
    public Class<?> getColumnClass(int column) {
        if (column == 0) return ConversationID.class;
        return super.getColumnClass(column-1);
    }
   
   
  public boolean isCellEditable(int row, int column) {
        if (column == 0) return false;
    return super.isCellEditable(row, column-1);
  }

  public void setValueAt(Object value, int row, int column) {
        if (column == 0) return;
    super.setValueAt(value, row, column-1);
  }

  protected void addedConversation(ConversationEvent evt) {
        ConversationID id = evt.getConversationID();
        int row = indexOfKey(id);
        fireTableRowsInserted(row, row);
    }
   
    protected void removedConversation(ConversationEvent evt) {
        fireTableDataChanged();
    }
   
    protected void changedConversations() {
        fireTableDataChanged();
    }
   
    private class Listener implements ConversationListener {
       
        public void conversationAdded(final ConversationEvent evt) {
            if (SwingUtilities.isEventDispatchThread()) {
                addedConversation(evt);
            } else {
                try {
                    SwingUtilities.invokeAndWait(new Runnable() {
                        public void run() {
                            addedConversation(evt);
                        }
                    });
                } catch (Exception e) {
                    _logger.warning("Exception processing " + evt + ": " + e);
                }
            }
        }
       
        public void conversationChanged(final ConversationEvent evt) {
            // we don't care. The values that we care about specifically
            // are set when the conversationAdded event is fired, and
            // do not change afterwards.
            // Other changes in user-supplied columns fire their own events
        }
       
        public void conversationRemoved(final ConversationEvent evt) {
            if (SwingUtilities.isEventDispatchThread()) {
                removedConversation(evt);
            } else {
                try {
                    SwingUtilities.invokeAndWait(new Runnable() {
                        public void run() {
                            removedConversation(evt);
                        }
                    });
                } catch (Exception e) {
                    _logger.warning("Exception processing " + evt + ": " + e);
                }
            }
        }
       
        public void conversationsChanged() {
            if (SwingUtilities.isEventDispatchThread()) {
                changedConversations();
            } else {
                try {
                    SwingUtilities.invokeAndWait(new Runnable() {
                        public void run() {
                            changedConversations();
                        }
                    });
                } catch (Exception e) {
                    _logger.warning("Exception: " + e);
                }
            }
        }
       
    }
   
}
TOP

Related Classes of org.owasp.webscarab.ui.swing.ConversationTableModel$Listener

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.