com.ibm.sbt.playground.dojo.JsonWriter Maven / Gradle / Ivy
/*
* Copyright IBM Corp. 2010
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.ibm.sbt.playground.dojo;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import com.ibm.commons.util.AbstractIOException;
import com.ibm.commons.util.io.json.JsonException;
import com.ibm.commons.util.io.json.JsonGenerator;
import com.ibm.commons.util.io.json.JsonJavaFactory;
/**
* Specialized JSON writer.
*
* @author Philippe Riand
*/
public class JsonWriter extends JsonGenerator.WriterGenerator {
private int objectLevels = 0;
private boolean first[] = new boolean[32]; // max 32 for now...
public JsonWriter(Writer writer, boolean compact) {
super(JsonJavaFactory.instance,writer,compact);
}
public void startObject() throws IOException {
nl();
indent();
out('{');
first[++objectLevels]=true;
incIndent();
}
public void endObject() throws IOException {
nl();
decIndent();
indent();
out('}');
first[--objectLevels]=false;
}
public void startArray() throws IOException {
nl();
indent();
out('[');
first[++objectLevels]=true;
incIndent();
}
public void endArray() throws IOException {
nl();
decIndent();
indent();
out(']');
first[--objectLevels]=false;
}
public void startArrayItem() throws IOException {
if(!first[objectLevels]) {
out(',');
}
}
public void endArrayItem() throws IOException {
first[objectLevels]=false;
}
public void startProperty(String propertyName) throws IOException {
if(!first[objectLevels]) {
out(',');
} else {
first[objectLevels]=false;
}
nl();
incIndent();
indent();
outPropertyName(propertyName);
out(':');
}
public void endProperty() throws IOException {
decIndent();
}
// Should be moved to the core libs
@Override
public void outNumberLiteral(double d) throws IOException {
long l = (long)d;
if((double)l==d) {
String s = Long.toString(l);
out(s);
} else {
String s = Double.toString(d);
out(s);
}
}
// Should be moved to the core libs
public void outDateLiteral(Date value) throws IOException {
String s = dateToString(value, true);
outStringLiteral(s);
}
//Time Format
public static final String TIME_FORMAT_C = "yyyy-MM-dd'T'HH:mm:ssZ"; //$NON-NLS-1$
public static final String TIME_FORMAT_DO = "yyyy-MM-dd"; //$NON-NLS-1$
public static final String TIME_FORMAT_TO = "HH:mm:ss"; //$NON-NLS-1$
public static final String TIME_FORMAT_D = "yyyy-MM-dd'T'HH:mm:ss'Z'"; //$NON-NLS-1$
public static final String TIME_ZONE_UTC = "UTC"; //$NON-NLS-1$
public static SimpleDateFormat ISO8601_UTC = null;
public static SimpleDateFormat ISO8601_DT = new SimpleDateFormat(TIME_FORMAT_C); // $NON-NLS-1$
/**
* Converts a date to an ISO8601 string.
*
* @param value The date.
* @param utc If true
, format the time in UTC. If false
,
* format the time in the local time zone.
* @return The ISO8601 string.
* @throws IOException
*/
private String dateToString(Date value, boolean utc) throws IOException {
String result = null;
if ( utc ) {
if ( ISO8601_UTC == null ) {
// Initialize the UTC formatter once
TimeZone tz = TimeZone.getTimeZone(TIME_ZONE_UTC);
ISO8601_UTC = new SimpleDateFormat(TIME_FORMAT_D);
ISO8601_UTC.setTimeZone(tz);
}
result = ISO8601_UTC.format((Date)value);
}
else {
result = ISO8601_DT.format((Date)value);
}
return result;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy