1 16 17 package org.pentaho.data; 18 19 import java.util.HashMap ; 20 21 import org.dom4j.Document; 22 import org.dom4j.DocumentHelper; 23 import org.dom4j.Element; 24 import org.pentaho.core.connection.IPentahoMetaData; 25 import org.pentaho.core.connection.IPentahoResultSet; 26 import org.pentaho.messages.util.LocaleHelper; 27 28 public class DataGrid { 29 30 public static final int STYLE_ROWS = 1; 31 32 public static final int STYLE_TREE = 2; 33 34 Document gridDocument; 35 36 int documentStyle; 37 38 public DataGrid(int documentStyle) { 39 this.documentStyle = documentStyle; 40 } 41 42 public Document getDataDocument() { 43 return gridDocument; 44 } 45 46 public int getDocumentStyle() { 47 return documentStyle; 48 } 49 50 public void populate(IPentahoResultSet results) { 51 52 switch (documentStyle) { 53 case STYLE_ROWS: 54 populateRowStyle(results); 55 } 56 57 } 58 59 protected void populateRowStyle(IPentahoResultSet results) { 60 gridDocument = DocumentHelper.createDocument(); 61 gridDocument.setXMLEncoding(LocaleHelper.getSystemEncoding()); 62 Element root = gridDocument.addElement("datagrid"); 64 Element metadataNode = root.addElement("metadata"); HashMap headerMap = new HashMap (); 67 IPentahoMetaData metadata = results.getMetaData(); 68 Object headers[][] = metadata.getColumnHeaders(); 70 addHeaderMetadata(headers, metadataNode, headerMap); 71 72 Element rowsNode = root.addElement("data"); Object row[] = results.next(); 75 76 while (row != null) { 77 Element rowNode = rowsNode.addElement("row"); Element currentNode = rowNode; 80 String headerId; 81 for (int columnNo = 0; columnNo < row.length; columnNo++) { 82 Object columnHeader; 84 for (int headerNo = 0; headerNo < headers.length; headerNo++) { 85 columnHeader = headers[headerNo][columnNo]; 86 headerId = (String ) headerMap.get(columnHeader); 87 currentNode = currentNode.addElement(headerId); 88 if (headerNo < row.length) { 89 currentNode.addElement("value").setText(row[headerNo].toString()); } 91 } 95 } 96 row = results.next(); 97 } 98 } 100 101 protected void addHeaderMetadata(Object headers[][], Element metadataNode, HashMap headerMap) { 102 if (headers == null) { 103 return; 104 } 105 HashMap metadataMap = new HashMap (); 107 for (int x = 0; x < headers.length; x++) { 108 for (int y = 0; y < headers[x].length; y++) { 109 Object header = headers[x][y]; 110 if (header instanceof String ) { 111 String headerStr = (String ) header; 112 metadataMap.put(headerStr, headerStr); 113 createMetadata(headerStr, metadataNode, headerMap); 114 } 115 else { 117 String headerStr = header.toString(); 118 metadataMap.put(headerStr, headerStr); 119 createMetadata(headerStr, metadataNode, headerMap); 120 } 121 122 } 123 } 124 } 125 126 protected void createMetadata(String header, Element metadataNode, HashMap headerMap) { 127 Element node = metadataNode.addElement("header"); String id = "header" + headerMap.keySet().size(); node.addAttribute("id", id); node.addElement("name").setText(header); node.addAttribute("format", ""); Element title = node.addElement("title"); title.setText(header); 134 headerMap.put(header, id); 135 } 136 137 } 139 | Popular Tags |