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;
}
Aggregations