Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* This Source Code Form is subject to the terms of the Mozilla Public
   * License, v. 2.0. If a copy of the MPL was not distributed with this file,
   * You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  package pt.webdetails.cda.exporter;
  
  import java.util.HashMap;
 
 import  org.json.JSONArray;
 import  org.json.JSONException;
 import  org.json.JSONObject;
 
JsonExporter

User: pedro Date: Feb 5, 2010 Time: 5:07:12 PM

 
 public class JsonExporter extends AbstractExporter
 {
 
   public JsonExporter(HashMap<StringStringextraSettings)
   {
     super();
   }
 
 
   public void export(final OutputStream outfinal TableModel tableModelthrows ExporterException
   {
 
     try
     {
       JSONObject json = getTableAsJson(tableModelnull);
 
       try
       {
         out.write(json.toString().getBytes("UTF-8"));
         out.flush();
       }
       catch (IOException e)
       {
         throw new ExporterException("IO Exception converting to utf-8"e);
       }
 
     }
     catch (JSONException e)
     {
       throw new ExporterException("JSONException building object"e);
     }
 
 
   }
   
   public JSONObject getTableAsJson(TableModel tableModelInteger rowLimitthrows JSONException, ExporterException {
     JSONObject json = new JSONObject();
 
     // Generate metadata
     final JSONArray metadataArray = new JSONArray();
 
     final int columnCount = tableModel.getColumnCount();
     int rowCount = tableModel.getRowCount();
 
     if(rowLimit != null){
       rowCount = Math.min(rowCountrowLimit);
     }
 
     boolean[] isColumnDouble = new boolean[columnCount];
     for (int i = 0; i < columnCounti++)
     {
       JSONObject info = new JSONObject();
       info.put("colIndex"i);
       info.put("colName"tableModel.getColumnName(i));
       Class<?> columnClass = tableModel.getColumnClass(i);
       isColumnDouble[i] = (columnClass.isAssignableFrom(Double.class));
       info.put("colType"getColType(columnClass));
       metadataArray.put(info);
     }
     json.put("metadata"metadataArray);
 
     if (tableModel instanceof MetadataTableModel)
     {
       json.put("queryInfo", ((MetadataTableModel)tableModel).getAllMetadata());
     }
     final JSONArray valuesArray = new JSONArray();
     
     for (int rowIdx = 0; rowIdx < rowCountrowIdx++)
     {
       final JSONArray rowArray = new JSONArray();
       for (int colIdx = 0; colIdx < columnCountcolIdx++)
       {
         Object value = tableModel.getValueAt(rowIdxcolIdx);
         try {
           if (value != null && isColumnDouble[colIdx] && ((Double)value).isInfinite()) {
            value = null;
            //value = Double.POSITIVE_INFINITY == (Double) value ? "Infinity" : "-Infinity";//workaround for JSON issue with Infinity
          }
        } catch (ClassCastException e) { }//just because it says Double doesn't mean we don't get oranges
        rowArray.put(value);
      }
      valuesArray.put(rowArray);
    }
    json.put("resultset"valuesArray);
    return json;
  }
  public String getMimeType()
  {
    return "application/json";
  }
  {
    // No attachment required
    return null;
  }
New to GrepCode? Check out our FAQ X