Search in sources :

Example 1 with ColumnInfo

use of org.teiid.test.client.ctc.QueryResults.ColumnInfo in project teiid by teiid.

the class XMLQueryVisitationStrategy method consumeMsg.

/**
 * Consume an XML message and update the specified QueryResults instance.
 * <br>
 * @param object the instance that is to be updated with the XML message data.
 * @param resultsElement the XML element that contains the data
 * @return the updated instance.
 */
private QueryResults consumeMsg(QueryResults object, Element resultsElement) throws JDOMException {
    // -----------------------
    // Process the element ...
    // -----------------------
    QueryResults results = object;
    if (results == null) {
        results = new QueryResults();
    }
    if (resultsElement.getChild(TagNames.Elements.SELECT) == null) {
        return results;
    }
    // -------------------------------
    // Read the SELECT elements
    // -------------------------------
    Element selectElement = resultsElement.getChild(TagNames.Elements.SELECT);
    Select select = new Select();
    select = consumeMsg(select, selectElement);
    List listOfElementSymbols = select.getSymbols();
    Iterator elementSymbolItr = listOfElementSymbols.iterator();
    Collection collectionOfColumnInfos = new ArrayList();
    while (elementSymbolItr.hasNext()) {
        ElementSymbol elementSymbol = (ElementSymbol) elementSymbolItr.next();
        Class elementType = elementSymbol.getType();
        String dataType = DataTypeManager.getDataTypeName(elementType);
        ColumnInfo columnInfo = new ColumnInfo(elementSymbol.getName(), dataType, elementType);
        collectionOfColumnInfos.add(columnInfo);
    }
    // Save column info
    results.addFields(collectionOfColumnInfos);
    // -------------------------------
    // Read the TABLE of data
    // -------------------------------
    Element tableElement = resultsElement.getChild(TagNames.Elements.TABLE);
    List tableRows = tableElement.getChildren(TagNames.Elements.TABLE_ROW);
    if (tableRows.size() > 0) {
        Iterator rowIter = tableRows.iterator();
        while (rowIter.hasNext()) {
            Element rowElement = (Element) rowIter.next();
            List cellElements = rowElement.getChildren(TagNames.Elements.TABLE_CELL);
            Iterator cellIter = cellElements.iterator();
            // Read cells of the table
            ArrayList row = new ArrayList();
            Object evalue = null;
            while (cellIter.hasNext()) {
                Element cellElement = (Element) cellIter.next();
                if (cellElement.getTextTrim().equalsIgnoreCase(TagNames.Elements.NULL)) {
                    row.add(null);
                } else {
                    Element cellChildElement = (Element) cellElement.getChildren().get(0);
                    evalue = consumeMsg(cellChildElement);
                    row.add(evalue);
                }
            }
            // Save row
            results.addRecord(row);
        }
    }
    return results;
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Element(org.jdom.Element) Select(org.teiid.query.sql.lang.Select) ColumnInfo(org.teiid.test.client.ctc.QueryResults.ColumnInfo)

Aggregations

Element (org.jdom.Element)1 Select (org.teiid.query.sql.lang.Select)1 ElementSymbol (org.teiid.query.sql.symbol.ElementSymbol)1 ColumnInfo (org.teiid.test.client.ctc.QueryResults.ColumnInfo)1