/** * Copyright 2011 Intuit Inc. All Rights Reserved */ package com.intuit.tank.proxy.table; /* * #%L * proxy-extension * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; import java.util.Vector; import javax.swing.table.DefaultTableModel; import com.intuit.tank.conversation.Transaction; import com.intuit.tank.entity.Application; import com.intuit.tank.util.HeaderParser; /** * TransactionTableModel * * @author dangleton * */ public class TransactionTableModel extends DefaultTableModel { private static final long serialVersionUID = 1L; private static final int STATUS_INDEX = 5; private static final int FILTERED_INDEX = 6; private static final int REDIRECTED_INDEX = 7; private List<Transaction> dataList = new ArrayList<Transaction>(); private static Transaction NULL_TRANSACTION = new Transaction(); private Set<String> hostSet = new TreeSet<String>(); private static final String[] COLUMN_NAMES = new String[] { "#", "Method", "Path", "Url", "Content-Type", "Status Code", "Filtered", "wasRedirect" }; public TransactionTableModel() { this.setColumnCount(COLUMN_NAMES.length); this.setColumnIdentifiers(COLUMN_NAMES); } /** * @{inheritDoc */ @Override public Class<?> getColumnClass(int columnIndex) { if (columnIndex == 0 || columnIndex == STATUS_INDEX) { return Integer.class; } else if (columnIndex == FILTERED_INDEX || columnIndex == REDIRECTED_INDEX) { return Boolean.class; } return String.class; } /** * @{inheritDoc */ @Override public boolean isCellEditable(int arg0, int arg1) { return false; } public void addTransaction(Transaction t, boolean filtered) { HeaderParser req = new HeaderParser(t.getRequest()); HeaderParser res = new HeaderParser(t.getResponse()); Vector<Object> rowData = new Vector<Object>(COLUMN_NAMES.length + 1); rowData.add(dataList.size() + 1); rowData.add(req.getMethod()); rowData.add(req.getPath()); rowData.add(req.getUrl(t.getRequest().getProtocol())); rowData.add(res.getContentType()); rowData.add(res.getStatusCode()); rowData.add(filtered ? Boolean.TRUE : Boolean.FALSE); rowData.add(t.getRequest().getHeaders().contains(Application.REDIRECT_MARKER)); dataList.add(t); hostSet.add(req.getHost()); this.addRow(rowData); } /** * @return the hostSet */ public Set<String> getHostSet() { return hostSet; } /** * @param hostSet * the hostSet to set */ public void setHostSet(Set<String> hostSet) { this.hostSet = hostSet; } public void setTransactions(List<Transaction> transactions) { clear(); for (Transaction t : transactions) { addTransaction(t, false); } } public Transaction getTransactionForIndex(int index) { Transaction ret = null; if (index >= 0 && index < dataList.size()) { ret = dataList.get(index); } return ret; } public void removeTransaction(Transaction t, int rowIndex) { if (dataList.remove(t)) { dataList.add(rowIndex, NULL_TRANSACTION); for (int i = getRowCount(); --i >= 0;) { if ((Integer) getValueAt(i, 0) - 1 == rowIndex) { this.removeRow(i); break; } } } } /** * */ public void clear() { dataList.clear(); hostSet.clear(); this.getDataVector().clear(); this.fireTableDataChanged(); } /** * @return */ public List<Transaction> getTransactions() { List<Transaction> ret = new ArrayList<Transaction>(dataList.size()); int index = 0; for (Transaction t : dataList) { if (t != NULL_TRANSACTION && !isRowFiltered(index++)) { ret.add(t); } } return ret; } /** * @return */ public List<Transaction> getAllTransactions() { List<Transaction> ret = new ArrayList<Transaction>(dataList.size()); for (Transaction t : dataList) { if (t != NULL_TRANSACTION) { ret.add(t); } } return ret; } /** * @return */ @SuppressWarnings("rawtypes") public boolean isRowFiltered(int row) { Vector v = (Vector) getDataVector().get(row); return (Boolean) v.get(TransactionTableModel.FILTERED_INDEX); } /** * @return */ @SuppressWarnings("rawtypes") public boolean isRedirected(int row) { Vector v = (Vector) getDataVector().get(row); return (Boolean) v.get(TransactionTableModel.REDIRECTED_INDEX); } /** * @return */ @SuppressWarnings("rawtypes") public int getStatus(int row) { Vector v = (Vector) getDataVector().get(row); return (Integer) v.get(TransactionTableModel.STATUS_INDEX); } }