Package com.opengamma.web.analytics.blotter

Source Code of com.opengamma.web.analytics.blotter.JsonDataSink

/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics.blotter;

import java.util.Collection;
import java.util.Map;

import org.joda.beans.Bean;
import org.joda.beans.MetaBean;
import org.joda.beans.MetaProperty;
import org.json.JSONObject;

import com.google.common.collect.Maps;
import com.opengamma.util.ArgumentChecker;

/**
* Receives data from a Joda bean and writes it into a JSON object.
*/
/* package */ class JsonDataSink implements BeanDataSink<JSONObject> {

  /** The JSON structure. */
  private final Map<String, Object> _json = Maps.newHashMap();
  /** For converting object values to strings to populate the JSON. */
  private final Converters _converters;

  /* package */ JsonDataSink(Converters converters) {
    ArgumentChecker.notNull(converters, "converters");
    _converters = converters;
  }

  @Override
  public void setBeanData(MetaBean metaBean, Bean bean) {
    _json.put("type", metaBean.beanType().getSimpleName());
  }

  @Override
  public void setValue(String propertyName, Object value) {
    _json.put(propertyName, value);
  }

  @Override
  public void setCollection(String propertyName, Collection<?> values) {
    _json.put(propertyName, values);
  }

  @Override
  public void setMap(String propertyName, Map<?, ?> values) {
    _json.put(propertyName, values);
  }

  @Override
  public Object convert(Object value, MetaProperty<?> property, Class<?> type, BeanTraverser traverser) {
    Object convertedValue = _converters.convert(value, property, type);
    if (convertedValue != Converters.CONVERSION_FAILED) {
      return convertedValue;
    }
    if (Bean.class.isAssignableFrom(value.getClass())) {
      Bean bean = (Bean) value;
      BuildingBeanVisitor<JSONObject> visitor = new BuildingBeanVisitor<>(bean, new JsonDataSink(_converters));
      return traverser.traverse(bean.metaBean(), visitor);
    } else {
      throw new IllegalArgumentException("Unable to convert " + value.getClass().getName());
    }
  }

  @Override
  public JSONObject finish() {
    return new JSONObject(_json);
  }

}
TOP

Related Classes of com.opengamma.web.analytics.blotter.JsonDataSink

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.