Package hermes.fix

Source Code of hermes.fix.FIXMessageViewTableModel$RowDef

/*
* 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 java.util.Iterator;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

import org.apache.log4j.Logger;

import quickfix.DataDictionary;
import quickfix.Field;
import quickfix.FieldMap;
import quickfix.FieldNotFound;
import quickfix.FieldType;
import quickfix.Group;

/**
* @author colincrist@hermesjms.com
* @version $Id: FIXMessageViewTableModel.java,v 1.5 2006/08/01 07:29:35
*          colincrist Exp $
*/

public class FIXMessageViewTableModel extends AbstractTableModel {
  /**
   *
   */
  private static final Logger log = Logger.getLogger(FIXMessageViewTableModel.class);

  private static final long serialVersionUID = 7400479603426161337L;
  public static final String FIELD = "Field";
  public static final String NAME = "Name";
  public static final String VALUE = "Value";
  public static final String DESCRIPTION = "Description";

  private String[] columns = { FIELD, NAME, VALUE, DESCRIPTION };

  private FIXMessage message;
  private Vector<RowDef> rows = new Vector<RowDef>();

  public enum RowType {
    HEADER, APPLICATION, TRAILER
  }

  private class RowDef {
    RowType type;
    int tag;
    public String fieldName;
    public String fieldValue;
    public Object fieldValueName = "";
  }

  public FIXMessageViewTableModel(FIXMessage message) throws FIXException, FieldNotFound {
    super();
    this.message = message;

    String msgType = message.getMsgType();

    processFieldMap("", message.getDictionary(), msgType, message.getMessage().getHeader());
    processFieldMap("", message.getDictionary(), msgType, message.getMessage());
    processFieldMap("", message.getDictionary(), msgType, message.getMessage().getTrailer());
  }

  private boolean isGroupCountField(DataDictionary dd, Field field) {
    return dd.getFieldTypeEnum(field.getTag()) == FieldType.NumInGroup;
  }

  private void processFieldMap(String prefix, DataDictionary dd, String msgType, FieldMap fieldMap) {

    Iterator fieldIterator = fieldMap.iterator();
    while (fieldIterator.hasNext()) {
      Field field = (Field) fieldIterator.next();
      try {
        if (!isGroupCountField(dd, field)) {
          String value = fieldMap.getString(field.getTag());
          if (dd.hasFieldValue(field.getTag())) {
            value = dd.getValueName(field.getTag(), fieldMap.getString(field.getTag())) + " (" + value + ")";
          }
          RowDef rowDef = new RowDef();
          if (dd.isHeaderField(field.getField())) {
            rowDef.type = RowType.HEADER;
          } else if (dd.isTrailerField(field.getField())) {
            rowDef.type = RowType.TRAILER;
          } else {
            rowDef.type = RowType.APPLICATION;
          }
          String fieldName = dd.getFieldName(field.getTag());
          rowDef.tag = field.getTag();
          rowDef.fieldName = prefix + (fieldName == null ? "" : fieldName);
          rowDef.fieldValue = value == null ? "" : value;
          try {
            rowDef.fieldValueName = dd.getValueName(field.getTag(), fieldMap.getString(field.getTag()));
          } catch (Throwable ex) {

          }

          rows.add(rowDef);
        }
      } catch (FieldNotFound f) {
        log.error(f);
      }
    }

    Iterator groupsKeys = fieldMap.groupKeyIterator();
    while (groupsKeys.hasNext()) {
      int groupCountTag = ((Integer) groupsKeys.next()).intValue();

      RowDef rowDef = new RowDef();
      rowDef.type = RowType.APPLICATION;
      rowDef.tag = groupCountTag;
      rowDef.fieldName = prefix + ((dd.getFieldName(groupCountTag) == null) ? "" : dd.getFieldName(groupCountTag));
      rowDef.fieldValue = Integer.toString(fieldMap.getGroupCount(groupCountTag));
      rows.add(rowDef);

      Group g = new Group(groupCountTag, 0);
      int i = 1;
      while (fieldMap.hasGroup(i, groupCountTag)) {
        try {
          fieldMap.getGroup(i, g);
          processFieldMap(prefix + "  ", dd, msgType, g);
        } catch (FieldNotFound ex) {
          log.error(ex);
        }
        i++;

      }
    }
  }

  public int getRowCount() {
    if (rows != null) {
      return rows.size();
    } else {
      return 0;
    }
  }

  public int getColumnCount() {
    return columns.length;
  }

  @Override
  public Class<?> getColumnClass(int columnIndex) {
    if (columnIndex == 0) {
      return Integer.class;
    } else {
      return String.class;
    }
  }

  public RowType getRowType(int row) {
    RowDef rowDef = rows.get(row);

    return rowDef.type;
  }

  @Override
  public String getColumnName(int column) {
    return columns[column];
  }

  public Object getValueAt(int rowIndex, int columnIndex) {
    RowDef row = rows.get(rowIndex);

    switch (columnIndex) {
    case 0:
      return row.tag;
    case 1:
      return row.fieldName;
    case 2:
      return row.fieldValue;
    case 3:
      return row.fieldValueName;

    default:
      return "";
    }
  }

}
TOP

Related Classes of hermes.fix.FIXMessageViewTableModel$RowDef

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.