package org.jboss.tools.teiid.reddeer.view; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.jboss.reddeer.common.logging.Logger; import org.jboss.reddeer.swt.api.TableItem; import org.jboss.reddeer.swt.api.TreeItem; import org.jboss.reddeer.swt.impl.ctab.DefaultCTabItem; import org.jboss.reddeer.swt.impl.table.DefaultTable; public class SQLResult { private static Logger logger = new Logger(SQLResult.class); public static final String STATUS_SUCCEEDED = "Succeeded"; private TreeItem resultRow; public SQLResult(TreeItem resultRow) { this.resultRow = resultRow; } public String getStatus() { return resultRow.getCell(0); } public int getCount() { resultRow.doubleClick(); new DefaultCTabItem("Result1").activate(); return new DefaultTable().rowCount(); } /** * Converts current SQL result into CSV format * * @return */ public String getResultAsCSV() { resultRow.doubleClick(); new DefaultCTabItem("Result1").activate(); DefaultTable table = new DefaultTable(); int colNum = table.getHeaders().size(); StringBuilder csv = new StringBuilder(); for (int i = 1; i < table.getHeaders().size(); i++) { csv.append('\"').append(table.getHeaders().get(i)).append('\"').append(','); } csv.setCharAt(csv.length() - 1, '\n'); for (TableItem t : table.getItems()) { for (int i = 1; i < colNum; i++) { csv.append('\"').append(t.getText(i)).append('\"').append(','); } csv.setCharAt(csv.length() - 1, '\n'); } return csv.toString(); } /** * Compares current query result with expected result. It converts the result into CSV. * * @param pathToExpectedResult * path to CSV file with expected result * @return true if the current and expected result are the same */ public boolean compareCSVQueryResults(File pathToExpectedResult) { String expected = null; try { expected = convertFileToString(pathToExpectedResult); } catch (IOException e) { logger.error("Can't compare query resuts", e); throw new RuntimeException(e); } String actual = getResultAsCSV(); boolean result = expected.equals(actual); if (!result) { logger.warn("Comparing of query results failed: Expected result: " + expected + "\nBut was: " + actual); } return result; } /** * Converts file into String and skips blank lines * * @param file * Path to file to be converted * @return file as a String * @throws IOException * if a file has not been found */ private String convertFileToString(File file) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; StringBuilder stringBuilder = new StringBuilder(); while ((line = reader.readLine()) != null) { if (line.trim().length() == 0) { continue; } stringBuilder.append(line); stringBuilder.append('\n'); } reader.close(); return stringBuilder.toString(); } }