Package com.apitrary.orm.core.unmarshalling

Source Code of com.apitrary.orm.core.unmarshalling.JsonResponseConsumer

/*
* Copyright 2012 Denis Neuling
*
* 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.apitrary.orm.core.unmarshalling;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import org.apache.log4j.Logger;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.ObjectMapper;

import com.apitrary.orm.core.internal.conf.ApitraryOrmConfiguration;

/**
* <p>
* Abstract JsonResponseConsumer class.
* </p>
*
* @author Denis Neuling (denisneuling@gmail.com)
*
*/
public abstract class JsonResponseConsumer {
  protected Logger log = Logger.getLogger(getClass());

  /**
   * <p>
   * consume.
   * </p>
   *
   * @param json
   *            a {@link java.lang.String} object.
   * @throws org.codehaus.jackson.JsonParseException
   *             if any.
   * @throws java.io.IOException
   *             if any.
   */
  public void consume(String json) throws JsonParseException, IOException {
    if (ApitraryOrmConfiguration.showJson()) {
      showJson(json);
    }

    JsonFactory f = new JsonFactory();
    JsonParser jp = f.createJsonParser(json);

    JsonToken token = jp.nextToken();
    String fieldName = jp.getCurrentName();
    while (!(token == null && fieldName == null)) {
      on(token, fieldName, jp);

      token = jp.nextToken();
      fieldName = jp.getCurrentName();
    }
  }

  /**
   * <p>
   * on.
   * </p>
   *
   * @param token
   *            a {@link org.codehaus.jackson.JsonToken} object.
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   * @throws org.codehaus.jackson.JsonParseException
   *             if any.
   * @throws java.io.IOException
   *             if any.
   */
  protected void on(JsonToken token, String fieldName, JsonParser jp) throws JsonParseException, IOException {
    switch (token) {
      case START_OBJECT:
        onStartObject(fieldName, jp);
        break;
      case END_OBJECT:
        onEndObject(fieldName, jp);
        break;
      case START_ARRAY:
        onStartArray(fieldName, jp);
        break;
      case END_ARRAY:
        onEndArray(fieldName, jp);
        break;
      case FIELD_NAME:
        onFieldName(fieldName, jp);
        break;
      case VALUE_EMBEDDED_OBJECT:
        // TODO
        break;

      case VALUE_STRING:
        onString(jp.getText(), fieldName, jp);
        break;
      case VALUE_NUMBER_INT:
        onInt(jp.getValueAsInt(), fieldName, jp);
        break;
      case VALUE_NUMBER_FLOAT:
        onDouble(jp.getValueAsDouble(), fieldName, jp);
        break;
      case VALUE_TRUE:
        onBoolean(true, fieldName, jp);
        break;
      case VALUE_FALSE:
        onBoolean(false, fieldName, jp);
        break;
      case VALUE_NULL:
        onNull(fieldName, jp);
        break;
      case NOT_AVAILABLE:
        break;
      default:
        log.warn("Unhandled Token " + token + " found for field " + fieldName);
    }
  }

  /**
   * <p>
   * onFieldName.
   * </p>
   *
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onFieldName(String fieldName, JsonParser jp) {
    log.trace(fieldName);
  }

  /**
   * <p>
   * onEndArray.
   * </p>
   *
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onEndArray(String fieldName, JsonParser jp) {
    log.trace(fieldName);
  }

  /**
   * <p>
   * onStartArray.
   * </p>
   *
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onStartArray(String fieldName, JsonParser jp) {
    log.trace(fieldName);
  }

  /**
   * <p>
   * onEndObject.
   * </p>
   *
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onEndObject(String fieldName, JsonParser jp) {
    log.trace(fieldName);
  }

  /**
   * <p>
   * onStartObject.
   * </p>
   *
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onStartObject(String fieldName, JsonParser jp) {
    log.trace(fieldName);
  }

  /**
   * <p>
   * onBoolean.
   * </p>
   *
   * @param bool
   *            a {@link java.lang.Boolean} object.
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onBoolean(Boolean bool, String fieldName, JsonParser jp) {
    log.trace(fieldName + " " + bool);
  }

  /**
   * <p>
   * onInt.
   * </p>
   *
   * @param val
   *            a {@link java.lang.Integer} object.
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onInt(Integer val, String fieldName, JsonParser jp) {
    log.trace(fieldName + " " + val);
  }

  /**
   * <p>
   * onDouble.
   * </p>
   *
   * @param floating
   *            a {@link java.lang.Double} object.
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onDouble(Double floating, String fieldName, JsonParser jp) {
    log.trace(fieldName + " " + floating);
  }

  /**
   * <p>
   * onString.
   * </p>
   *
   * @param text
   *            a {@link java.lang.String} object.
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onString(String text, String fieldName, JsonParser jp) {
    log.trace(fieldName + " " + text);
  }

  /**
   * <p>
   * onNull.
   * </p>
   *
   * @param fieldName
   *            a {@link java.lang.String} object.
   * @param jp
   *            a {@link org.codehaus.jackson.JsonParser} object.
   */
  protected void onNull(String fieldName, JsonParser jp) {
    log.trace("Got null value for field " + fieldName);
  }

  /**
   * <p>
   * showJson.
   * </p>
   *
   * @param json
   *            a {@link java.lang.String} object.
   */
  public void showJson(String json) {
    try {
      JsonFactory jsonFactory = new JsonFactory();
      ObjectMapper objectMapper = new ObjectMapper();
      StringWriter stringWriter = new StringWriter();

      JsonParser jsonParser = jsonFactory.createJsonParser(new StringReader(json));
      JsonNode jsonNode = objectMapper.readTree(jsonParser);
      JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(stringWriter);
      jsonGenerator.useDefaultPrettyPrinter();

      objectMapper.writeTree(jsonGenerator, jsonNode);

      jsonGenerator.flush();
      jsonGenerator.close();

      /*
       * TODO decide upon logger usage
       */
      // String lineSeparator = System.getProperty("line.separator");
      // log.info((lineSeparator != null ? lineSeparator : "") +
      // stringWriter.toString());

      System.out.println(stringWriter.toString());
    } catch (Throwable throwable) {
      // hmm, somewhat accidentally crashed?
    }
  }
}
TOP

Related Classes of com.apitrary.orm.core.unmarshalling.JsonResponseConsumer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.