Package hermes.fix

Source Code of hermes.fix.FIXMessageTable

/*
* Copyright 2003,2004,2005 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.fix;

import hermes.browser.IconCache;
import hermes.browser.components.PopupMenuFactory;
import hermes.browser.transferable.MessagesTransferHandler;
import hermes.swing.Colours;
import hermes.swing.SQL92FilterableTableModel;
import hermes.swing.SwingUtils;

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.TransferHandler;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

import org.apache.log4j.Logger;

import com.codestreet.selector.parser.InvalidSelectorException;
import com.jidesoft.grid.SortableTable;
import com.jidesoft.swing.JidePopupMenu;

/**
* @author colincrist@hermesjms.com
* @version $Id: FIXMessageTable.java,v 1.15 2007/02/18 16:13:42 colincrist Exp
*          $
*/

public class FIXMessageTable extends SortableTable {
  /**
   *
   */
  private static final long serialVersionUID = -2044612567082104913L;
  private static final Logger log = Logger.getLogger(FIXMessageTable.class);
  private SQL92FilterableTableModel selectorModel;
  private FIXMessageTableModel model;
  private JidePopupMenu popup;
  private SessionKey sessionKey;
  private boolean autoScroll = false;

  public boolean isAutoScroll() {
    return autoScroll;
  }

  public void setAutoScroll(boolean autoScroll) {
    this.autoScroll = autoScroll;
  }

  public FIXMessageTable(final SessionKey sessionKey, final FIXMessageTableModel model) {
    super();

    this.model = model;
    this.selectorModel = new SQL92FilterableTableModel(model, new FIXIdentifierExtension());
    this.selectorModel.setRowValueProvider(model);
    this.sessionKey = sessionKey;

    setSortable(true);

    setModel(selectorModel);
    setDragEnabled(true);
    setTransferHandler(new MessagesTransferHandler(this));
    getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    getColumn(FIXMessageTableModel.DIRECTION).setMaxWidth(IconCache.getIcon("hermes.back").getIconWidth() + 4);
    getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
      /**
     *
     */
      private static final long serialVersionUID = -2075897579194001018L;

      @Override
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        FIXMessage message = model.getMessageAt(selectorModel.getActualRowAt(row));

        if (model.getRole(message) == SessionRole.ACCEPTOR) {
          setIcon(IconCache.getIcon("hermes.back"));
        } else {
          setIcon(IconCache.getIcon("hermes.forward"));
        }

        return this;
      }
    });

    addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        if (SwingUtilities.isLeftMouseButton(e)) {
          // final JComponent c = (JComponent) e.getSource();
          // final TransferHandler th = c.getTransferHandler();

          getTransferHandler().exportAsDrag(FIXMessageTable.this, e, TransferHandler.COPY);
        } else if (SwingUtilities.isRightMouseButton(e)) {
          doPopup(e);
        }
      }
    });

    model.addTableModelListener(new TableModelListener() {
      public void tableChanged(TableModelEvent e) {
        if (isAutoScroll()) {
          // if (e.getType() == TableModelEvent.INSERT) {
          // getSelectionModel().setSelectionInterval(model.getRowCount()
          // - 1, model.getRowCount() - 1);
          // scrollRectToVisible(getCellRect(model.getRowCount() - 1,
          // 0, true));
          // }
        }
      }
    });
  }

  public SessionKey getSessionKey() {
    return sessionKey;
  }

  private void doPopup(MouseEvent e) {
    if (popup == null) {
      popup = PopupMenuFactory.createFIXMessageTablePopup(this);
    }

    popup.show(this, e.getX(), e.getY());
  }

  public Collection<Object> getSelectedMessages() {
    Collection<Object> rval = new ArrayList<Object>();
    int[] selected = getSelectedRows();

    for (int i = 0; i < selected.length; i++) {
      rval.add(getMessageAt(selected[i]));
    }

    return rval;
  }

  public FIXMessage getMessageAt(int row) {
    return model.getMessageAt(selectorModel.getActualRowAt(getActualRowAt(row)));
  }

  public void addMessages(Collection<FIXMessage> messages) {
    if (messages.size() > 0) {
      model.addMessages(messages);
      SwingUtils.scrollVertically((JComponent) this.getParent(), SwingUtils.getRowBounds(this, model.getRowCount(), model.getRowCount()));
    }
  }

  public void setSelector(String selector) throws InvalidSelectorException {
    selectorModel.setSelector(selector);
  }

  public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
    Component c = super.prepareRenderer(renderer, row, column);

    if (row < getRowCount()) {
      FIXMessage message = getMessageAt(row);

      if (message != null) {
        if (!isCellSelected(row, column)) {
          if (model.getRole(message) == SessionRole.ACCEPTOR) {
            c.setBackground(Colours.LIGHT_SEA_GREEN);
          } else {
            c.setBackground(Colours.LIGHT_SKY_BLUE);
          }
        }
      }
    }
    return c;
  }

  // @Override
  // public void scrollRectToVisible(Rectangle aRect) {
  // Container parent;
  // int dx = getX(), dy = getY();
  //
  // for (parent = getParent(); !(parent == null) && (!(parent instanceof
  // JViewport) || (((JViewport)
  // parent).getClientProperty("HierarchicalTable.mainViewport") == null));
  // parent = parent
  // .getParent()) {
  // Rectangle bounds = parent.getBounds();
  //
  // dx += bounds.x;
  // dy += bounds.y;
  // }
  //
  // if (!(parent == null) && !(parent instanceof CellRendererPane)) {
  // aRect.x += dx;
  // aRect.y += dy;
  //
  // ((JComponent) parent).scrollRectToVisible(aRect);
  // aRect.x -= dx;
  // aRect.y -= dy;
  // }
  // }
}
TOP

Related Classes of hermes.fix.FIXMessageTable

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.