1 16 package org.pentaho.core.connection; 17 18 import java.io.ByteArrayOutputStream ; 19 import java.sql.Date ; 20 import java.sql.Timestamp ; 21 22 import org.dom4j.Document; 23 import org.dom4j.dom.DOMDocumentFactory; 24 import org.dom4j.io.OutputFormat; 25 import org.dom4j.io.XMLWriter; 26 27 public class DataUtilities implements IPentahoDataTypes { 28 public DataUtilities() { 29 super(); 30 } 32 33 45 public static Object [][] pivotDimensions(Object [][] source) { 46 Object [][] result = null; 47 if (source.length > 0) { 48 result = new Object [source[0].length][source.length]; 49 for (int row = 0; row < source.length; row++) { 50 for (int column = 0; column < source[row].length; column++) { 51 result[column][row] = source[row][column]; 52 } 53 } 54 } else { 55 result = source; 56 } 57 return result; 58 } 59 60 69 public static Object [][] filterDataByRows(Object [][] data, Integer [] rowsToInclude) { 70 if (rowsToInclude == null) { return data; 73 } 74 Object [][] result = new Object [rowsToInclude.length][data[0].length]; 75 for (int row = 0; row < rowsToInclude.length; row++) { 76 Object [] rowHeaderRow = data[rowsToInclude[row].intValue()]; 77 for (int column = 0; column < rowHeaderRow.length; column++) { 78 result[row][column] = rowHeaderRow[column]; 79 } 80 } 81 return result; 82 } 83 84 93 public static Object [][] filterDataByColumns(Object [][] data, Integer [] columnsToInclude) { 94 if (columnsToInclude == null) { 95 return data; 96 } 97 Object [][] result = new Object [data.length][columnsToInclude.length]; 98 for (int column = 0; column < columnsToInclude.length; column++) { 99 for (int row = 0; row < data.length; row++) { 100 result[row][column] = data[row][columnsToInclude[column].intValue()]; 101 } 102 } 103 return result; 104 } 105 106 117 public static Object [][] filterData(Object [][] data, Integer [] rowsToInclude, Integer [] columnsToInclude) { 118 Object [][] result = filterDataByColumns(data, columnsToInclude); 119 result = filterDataByRows(result, rowsToInclude); 120 return result; 121 } 122 123 128 public static String getXMLString(IPentahoResultSet resultSet) { 129 Document document = DOMDocumentFactory.getInstance().createDocument(); 130 org.dom4j.Element resultSetNode = document.addElement("result-set"); Object [] colHeaders = resultSet.getMetaData().getColumnHeaders()[0]; 132 String metaDataStr = ""; Object firstDataRow[] = resultSet.getDataRow(0); 134 for (int i = 0; i < firstDataRow.length; i++) { 135 metaDataStr += firstDataRow[i].getClass().getName() + (i == firstDataRow.length - 1 ? "" : ","); } 137 resultSetNode.addComment(metaDataStr); 138 int rowCount = resultSet.getRowCount(); 139 for (int i = 0; i < rowCount; i++) { 140 Object row[] = resultSet.getDataRow(i); 141 org.dom4j.Element rowNode = resultSetNode.addElement("row"); for (int j = 0; j < row.length; j++) { 143 String column = colHeaders[j].toString(); 144 String value = row[j] != null ? row[j].toString() : ""; if (row[j] instanceof Timestamp || row[j] instanceof Date ) { 146 value = String.valueOf(((Timestamp ) row[j]).getTime()); 147 } 148 org.dom4j.Element dataNode = rowNode.addElement(column); 149 dataNode.setText(value); 150 } 151 } 152 OutputFormat format = OutputFormat.createPrettyPrint(); 153 ByteArrayOutputStream outStream = new ByteArrayOutputStream (); 154 try { 155 XMLWriter writer = new XMLWriter(outStream, format); 156 writer.write(document); 157 return outStream.toString(); 158 } catch (Exception e) { 159 } 161 return document.asXML(); 162 } 163 } 164 | Popular Tags |