/* * Created on Sep 14, 2005 * * Copyright 2005-2010 Ignis Software Tools Ltd. All rights reserved. */ package jsystem.extensions.analyzers.tabletext; import java.util.HashSet; import java.util.Set; /** * @author guy.arieli * */ public abstract class TableBasic implements TTable { protected String stringTable = null; protected String[] lines = null; protected int[] fieldsOffset = null; protected int numberOfFields = -1; protected String[] header1 = null; protected String[] header2 = null; protected String[][] cells = null; /** * Create a table instance from a cli string input. * * @param stringTable * the string to be analyze into table structure * @throws Exception */ public TableBasic(String stringTable) throws Exception { this.stringTable = stringTable; initTable(stringTable); } public TableBasic() { } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getNumberOfRows() */ public int getNumberOfRows() { return cells.length; } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getNumberOfColumns() */ public int getNumberOfColumns() { return numberOfFields; } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getCell(int, int) */ public String getCell(int row, int col) { if (col >= numberOfFields || row >= getNumberOfRows()) { return null; } return cells[row][col]; } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getRow(int) */ public String[] getRow(int row) { if (row >= getNumberOfRows()) { return null; } return cells[row]; } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getColumn(int) */ public String[] getColumn(int col) { int numberOfRows = getNumberOfRows(); String[] returnArray = new String[numberOfRows]; for (int i = 0; i < numberOfRows; i++) { returnArray[i] = getCell(i, col); } return returnArray; } protected void initLines() { lines = stringTable.split("[\\r\\n]+"); } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#findFieldInRow(java.lang.String, * int) */ public int findFieldInRow(String fieldName, int lineIndex) { String[] rowArray = getRow(lineIndex); for (int i = 0; i < rowArray.length; i++) { if (rowArray[i].equals(fieldName)) { return i; } } return -1; } protected abstract void initHeaders() throws Exception; /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getHeaders() */ public String[] getHeaders() throws Exception { return header1; } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getHeaderFieldIndex(java.lang.String) */ public abstract int getHeaderFieldIndex(String fieldName) throws Exception; public String toString() { StringBuffer sb = new StringBuffer(); for (int i = 0; i < getNumberOfRows(); i++) { for (int j = 0; j < getNumberOfColumns(); j++) { sb.append(getCell(i, j)); if (j != getNumberOfColumns() - 1) { sb.append(","); } } sb.append("\n"); } return sb.toString(); } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getTableString() */ public String getTableString() { return stringTable; } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getFirstRowIndex(java.lang.String, * java.lang.String) */ public int getFirstRowIndex(String headerField, String cellValue) throws Exception { int colIndex = getHeaderFieldIndex(headerField); String[] col = getColumn(colIndex); for (int i = 0; i < col.length; i++) { if (cellValue.equals(col[i])) { // if(cellValue.compareToIgnoreCase(col[i])==0){ return i; } } throw new Exception("Row: " + headerField + " doesn't contain field: " + cellValue); } /* * (non-Javadoc) * * @see jsystem.extensions.analyzers.tabletext.TTable#getFirstRowIndex(int, * java.lang.String) */ public int getFirstRowIndex(int colIndex, String cellValue) throws Exception { String[] col = getColumn(colIndex); for (int i = 0; i < col.length; i++) { if (cellValue.equals(col[i])) { // if(cellValue.compareToIgnoreCase(col[i])==0){ return i; } } throw new Exception("Row index: " + colIndex + " doesn't contain field: " + cellValue); } public boolean isRealKeyHeader(String keyHeader, Object testAgainst) { // to find it out we put the first column in a hashset. // If all the values in our table's first column are different, // then the size of the hashset will be the same as the size of our table's first column. // If the size is equal than it is a table with keyheader, otherwise it is without keyheader. boolean isRealKeyHeader; GetTableColumn gtc = null; try { gtc = new GetTableColumn(keyHeader); } catch (Exception e) { // throwable = e; isRealKeyHeader = false; return isRealKeyHeader; } gtc.setTestAgainst(testAgainst); gtc.analyze(); String[] keyHeaders = gtc.getColumn(); Set<String> myHashSet = new HashSet<String>(); for (int i = 0; i < keyHeaders.length; i++) { myHashSet.add(keyHeaders[i]); } if (myHashSet.size() == keyHeaders.length) isRealKeyHeader = true; else isRealKeyHeader = false; return isRealKeyHeader; } }