Package hermes.browser.model

Source Code of hermes.browser.model.MessageHeaderTableModel

/*
* Copyright 2003,2004 Colin Crist
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package hermes.browser.model;

import hermes.Hermes;
import hermes.HermesException;
import hermes.HermesRuntimeException;
import hermes.browser.HermesBrowser;
import hermes.swing.HideableTableColumn;
import hermes.swing.RowValueProvider;
import hermes.util.JMSUtils;

import java.util.Date;
import java.util.Vector;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.swing.table.DefaultTableModel;

import org.apache.log4j.Logger;

import com.codestreet.selector.jms.ValueProvider;
import com.codestreet.selector.parser.IValueProvider;

/**
* @author colincrist@hermesjms.com
* @version $Id: MessageHeaderTableModel.java,v 1.2 2004/07/26 19:03:36
*          colincrist Exp $
*/

public class MessageHeaderTableModel extends DefaultTableModel implements RowValueProvider {
  /**
   *
   */
  private static final long serialVersionUID = 5348456596625232189L;
  private static final Logger log = Logger.getLogger(MessageHeaderTableModel.class);
  private final Vector<Vector> rows = new Vector<Vector>();
  private final Vector<Message> messages = new Vector<Message>();
  private final Hermes hermes;
  private String destinationName;
  private Vector<HideableTableColumn> userProperties = new Vector<HideableTableColumn>();

  public MessageHeaderTableModel(Hermes hermes, String destinationName) {
    this.hermes = hermes;
    this.destinationName = destinationName;

    addColumn("#");
    addColumn("JMSMessageId");
    addColumn("JMSDestination");
    addColumn("JMSTimestamp");
    addColumn("JMSType");
    addColumn("JMSReplyTo");
    addColumn("JMSCorrelationID");
    addColumn("JMSExpiration");
    addColumn("JMSPriority");
  }

  public IValueProvider getValueProviderForRow(int row) {
    return ValueProvider.valueOf(messages.get(row));
  }

  public Message getMessageAt(int row) {
    return (Message) messages.elementAt(row);
  }

  public void setDestinationName(String destinationName) {
    this.destinationName = destinationName;
  }

  public boolean isCellEditable(int row, int column) {
    return false;
  }

  public void clear() {
    rows.clear();
    messages.clear();

    fireTableDataChanged();
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.swing.table.TableModel#getColumnCount()
   */
  public int getColumnCount() {
    return 9 + userProperties.size();
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.swing.table.TableModel#getRowCount()
   */
  public int getRowCount() {
    if (rows == null) {
      return 0;
    }

    return rows.size();
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.swing.table.TableModel#getValueAt(int, int)
   */
  public Object getValueAt(int y, int x) {
    if (rows.size() > y) {
      Vector row = (Vector) rows.elementAt(y);

      return row.elementAt(x);
    } else {
      return null;
    }
  }

  public void removeFirstRow() {
    rows.remove(0);
    messages.remove(0);

    fireTableRowsDeleted(0, 1);
  }

  private Vector createRow(int messageIndex, Message message) throws JMSException {
    final Vector<Object> newRow = new Vector<Object>();

    newRow.add(new Long(messageIndex));
    newRow.add(message.getJMSMessageID());

    //
    // Some providers, e.g. WebSphereMQ, when dealing with messages put from
    // a non-JMS sender don't include the destination
    // on the message so if its not there we'll use the configured name.

    try {
      if (message.getJMSDestination() != null) {
        newRow.add(JMSUtils.getDestinationName(message.getJMSDestination()));
      } else {
        newRow.add(destinationName);
      }
    } catch (Exception ex) {
      log.error("cannot get JMSDestination: " + ex.getMessage());
      newRow.add("Unknown");
    }

    try {
      newRow.add(new Date(message.getJMSTimestamp()));
    } catch (Exception ex) {
      newRow.add(new Date());

      log.error("no JMSTimestamp in message: " + ex.getMessage());
    }

    try {
      newRow.add(message.getJMSType());
    } catch (Exception ex) {
      log.error("no JMSType in message: " + ex.getMessage());

      newRow.add("");
    }

    try {
      if (message.getJMSReplyTo() != null) {
        newRow.add(JMSUtils.getDestinationName(message.getJMSReplyTo()));
      } else {
        newRow.add("");
      }
    } catch (Exception ex) {
      log.error("no JMSReplyTo in message: " + ex.getMessage());

      newRow.add("");
    }

    try {
      newRow.add(message.getJMSCorrelationID());
    } catch (Exception ex) {
      log.error("no JMSCorrelationID in message: " + ex.getMessage());

      newRow.add("");
    }

    try {
      newRow.add(new Long(message.getJMSExpiration()));
    } catch (Exception ex) {
      log.error("no JMSExpiration in message: " + ex.getMessage());

      newRow.add("");
    }

    try {
      newRow.add(message.getJMSPriority());
    } catch (Exception ex) {
      log.error("no JMSPriority in message: " + ex.getMessage());

      newRow.add("");
    }

    return newRow;
  }

  public void setFinalMessageIndex(int messageIndex) {
    try {
      // log.debug("setFinalMessageIndex, messageIndex=" + messageIndex);

      if (messageIndex == -1) {
        if (rows.size() > 0) {
          rows.clear();
          messages.clear();
          fireTableDataChanged();
        }
      } else if (messageIndex != rows.size() - 1
          && (HermesBrowser.getBrowser().getMaxMessagesInBrowserPane() == -1 || messageIndex < HermesBrowser.getBrowser()
              .getMaxMessagesInBrowserPane())) {
        int lastRow = rows.size() - 1;

        while (rows.size() != messageIndex + 1) {
          if (rows.size() > 0) {
            rows.remove(rows.size() - 1);
            messages.remove(messages.size() - 1);
          } else {
            break;
          }
        }

        fireTableDataChanged();
      }
    } catch (HermesException ex) {
      throw new HermesRuntimeException(ex);
    }
  }

  public void addMessage(int messageIndex, Message message) throws JMSException {
    if (messageIndex < rows.size()) {
      Message existingMessage = messages.elementAt(messageIndex);

      // log.debug("comparing " + existingMessage.getJMSMessageID() +
      // " and "
      // + message.getJMSMessageID());

      if (existingMessage.getJMSMessageID().equals(message.getJMSMessageID())) {
        // log.debug("add message (exists) index=" + messageIndex +
        // " id=" +
        // message.getJMSMessageID());

        // The same message in the same index position, ignore it...

        return;
      } else {
        // log.debug("add message (change) index=" + messageIndex + "
        // size()= " + rows.size() + " id=" +
        // message.getJMSMessageID());

        rows.setElementAt(createRow(messageIndex, message), messageIndex);
        messages.setElementAt(message, messageIndex);
        fireTableRowsUpdated(messageIndex, messageIndex);

        return;
      }
    } else {
      // log.debug("add message (append) index=" + messageIndex + " id=" +
      // message.getJMSMessageID());
    }

    rows.add(createRow(messageIndex, message));
    messages.add(message);

    fireTableRowsInserted(messageIndex, messageIndex);
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.swing.table.TableModel#getColumnName(int)
   */
  public String getColumnName(int arg0) {
    switch (arg0) {
    case 0:
      return "#";
    case 1:
      return "JMSMessageID";
    case 2:
      return "JMSDestination";
    case 3:
      return "JMSTimestamp";
    case 4:
      return "JMSType";
    case 5:
      return "JMSReplyTo";
    case 6:
      return "JMSCorrelationID";
    case 7:
      return "JMSExpiration";
    case 8:
      return "JMSPriority";
    }

    return super.getColumnName(arg0);
  }

  public Class getColumnClass(int column) {
    switch (column) {
    case 0:
      return Long.class;
    case 1:
      return String.class;
    case 2:
      return String.class;
    case 3:
      return String.class;
    case 4:
      return String.class;
    case 5:
      return String.class;
    case 6:
      return String.class;
    case 7:
      return Long.class;
    case 8:
      return Integer.class;
    }

    return super.getColumnClass(column);
  }

  public Object getChildValueAt(int row) {
    return getMessageAt(row);
  }

  public void updateMessage(Message message) throws JMSException {
    for (int i = 0; i < messages.size(); i++) {
      if (messages.get(i).getJMSMessageID().equals(message.getJMSMessageID())) {
        messages.set(i, message);
        fireTableRowsUpdated(i, i);
        break;
      }
    }
  }
}
TOP

Related Classes of hermes.browser.model.MessageHeaderTableModel

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.