* @return The input string builder.
*/
static StringBuilder appendCellJson(TableCell cell,
StringBuilder sb, boolean includeFormatting, boolean isLastColumn,
boolean renderDateAsDateConstructor) {
Value value = cell.getValue();
ValueType type = cell.getType();
StringBuilder valueJson = new StringBuilder();
GregorianCalendar calendar;
String escapedFormattedString = "";
boolean isJsonNull = false;
// Prepare a Json string representing the current value.
DateValue dateValue;
TimeOfDayValue timeOfDayValue;
if ((value == null) || (value.isNull())) {
valueJson.append("null");
isJsonNull = true;
} else {
switch (type) {
case BOOLEAN:
valueJson.append(((BooleanValue) value).getValue());
break;
case DATE:
valueJson.append("Date(");
dateValue = (DateValue) value;
valueJson.append(dateValue.getYear()).append(",");
valueJson.append(dateValue.getMonth()).append(",");
valueJson.append(dateValue.getDayOfMonth());
valueJson.append(")");
if (renderDateAsDateConstructor) {
// Rendering date as a call to Date constructor, e.g new Date(2011,1,1)
valueJson.insert(0, "new ");
} else {
// Rendering date in string format, e.g "Date(2011,1,1)"
valueJson.insert(0, "\"");
valueJson.append("\"");
}
break;
case NUMBER:
valueJson.append(((NumberValue) value).getValue());
break;
case TEXT:
valueJson.append("\"");
valueJson.append(EscapeUtil.jsonEscape(value.toString()));
valueJson.append("\"");
break;
case TIMEOFDAY:
valueJson.append("[");
timeOfDayValue = (TimeOfDayValue) value;
valueJson.append(timeOfDayValue.getHours()).append(",");
valueJson.append(timeOfDayValue.getMinutes()).append(",");
valueJson.append(timeOfDayValue.getSeconds()).append(",");
valueJson.append(timeOfDayValue.getMilliseconds());
valueJson.append("]");
break;
case DATETIME:
calendar = ((DateTimeValue) value).getCalendar();
valueJson.append("Date(");
valueJson.append(calendar.get(GregorianCalendar.YEAR)).append(",");
valueJson.append(calendar.get(GregorianCalendar.MONTH)).append(",");
valueJson.append(calendar.get(GregorianCalendar.DAY_OF_MONTH));
valueJson.append(",");
valueJson.append(calendar.get(GregorianCalendar.HOUR_OF_DAY));
valueJson.append(",");
valueJson.append(calendar.get(GregorianCalendar.MINUTE)).append(",");
valueJson.append(calendar.get(GregorianCalendar.SECOND));
valueJson.append(")");
if (renderDateAsDateConstructor) {
// Rendering date as a call to Date constructor, e.g new Date(2011,1,1,0,0,0)
valueJson.insert(0, "new ");
} else {
// Rendering date in string format, e.g "Date(2011,1,1,0,0,0)"
valueJson.insert(0, "\"");
valueJson.append("\"");
}
break;
default:
throw new IllegalArgumentException("Illegal value Type " + type);
}
}
// Prepare an escaped string representing the current formatted value.
String formattedValue = cell.getFormattedValue();
if ((value != null) && !value.isNull() && (formattedValue != null)) {
escapedFormattedString = EscapeUtil.jsonEscape(formattedValue);
// Check for a value of type TEXT if the formatted value equals
// its ordinary toString.
if ((type == ValueType.TEXT) && value.toString().equals(formattedValue)) {
escapedFormattedString = "";
}
}
// Add a Json for this cell. And,