/*
* Copyright 2005-2010 Ignis Software Tools Ltd. All rights reserved.
*/
package jsystem.extensions.analyzers.tabletext;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import jsystem.framework.analyzer.AnalyzerParameterImpl;
/**
* Check that one of the fields of given table column is the expected value. for
* example test that the port '0/1' (value) exist in the 'Port' (headerName)
* column.
*
* Port Status ------ -------- 0/1 Enable 0/2 Disable 0/3 -
*
* @author guy.arieli
*
*/
public class ValueInTable extends AnalyzerParameterImpl {
protected TTable table;
protected String headerName;
protected String value;
protected boolean isRegExp = false;
public ValueInTable(String headerName, String value) throws Exception {
this.headerName = headerName;
this.value = value;
}
public ValueInTable(String headerName, String value, boolean isRegxp) throws Exception {
this.headerName = headerName;
this.value = value;
this.isRegExp = isRegxp;
}
public void analyze() {
title = "ValueInTable: Header name: " + headerName + " value: " + value;
StringBuffer sb = new StringBuffer("Header name: " + headerName + "\n" + "Value: " + value + "\n");
try {
if (testAgainst instanceof TableRepository) {
table = ((TableRepository) testAgainst).getTable();
} else {
table = new Table((String) testAgainst);
}
} catch (Exception e) {
sb.append("Unable to init table: " + e.getMessage() + "\n");
sb.append(testAgainst);
message = sb.toString();
status = false;
return;
}
int columnNumber = 0;
try {
columnNumber = table.getHeaderFieldIndex(headerName);
} catch (Exception e) {
sb.append("Unable to header field: " + e.getMessage() + "\n");
sb.append(testAgainst);
message = sb.toString();
status = false;
return;
}
int totalNumberOfRows = table.getNumberOfRows();
status = false;
for (int i = 0; i < totalNumberOfRows; i++) {
String actualCell = table.getCell(i, columnNumber);
if (isRegExp) {
Pattern p = Pattern.compile("(" + value + ")");
Matcher m = p.matcher(actualCell);
status = m.find();
if (status) {
sb.append(testAgainst);
message = sb.toString();
message = message.replaceAll(actualCell, "<b>" + actualCell + "</b>");
break;
}
} else {
if (actualCell.equals(value)) {
sb.append(testAgainst);
message = sb.toString();
status = true;
break;
}
}
}
}
}