/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.json; import java.util.Iterator; import java.util.SortedSet; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.financial.analytics.ircurve.CurveSpecificationBuilderConfiguration; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.time.Tenor; /** * Custom JSON builder to convert CurveSpecificationBuilderConfiguration to JSON object and back again */ public final class CurveSpecificationBuilderConfigurationJSONBuilder extends AbstractJSONBuilder<CurveSpecificationBuilderConfiguration> { /** * Singleton */ public static final CurveSpecificationBuilderConfigurationJSONBuilder INSTANCE = new CurveSpecificationBuilderConfigurationJSONBuilder(); /** * JSON template */ private static final String TEMPLATE = createTemplate(); /** * Restricted constructor */ private CurveSpecificationBuilderConfigurationJSONBuilder() { } @Override public CurveSpecificationBuilderConfiguration fromJSON(String json) { ArgumentChecker.notNull(json, "JSON document"); return fromJSON(CurveSpecificationBuilderConfiguration.class, json); } @Override public String toJSON(CurveSpecificationBuilderConfiguration object) { ArgumentChecker.notNull(object, "curveSpecificationBuilderConfiguration"); JSONObject message; try { message = new JSONObject(fudgeToJson(object)); message.put("tenors", new JSONArray(getTenors(object))); } catch (JSONException ex) { throw new OpenGammaRuntimeException("Error converting cpnverspecification builder configuration to JSON", ex); } return message.toString(); } private String[] getTenors(final CurveSpecificationBuilderConfiguration curveSpec) { SortedSet<Tenor> allTenors = curveSpec.getAllTenors(); String[] periods = new String[allTenors.size()]; Iterator<Tenor> iterator = allTenors.iterator(); for (int i = 0; i < allTenors.size(); i++) { periods[i] = iterator.next().getPeriod().toString(); } return periods; } private static String createTemplate() { return null; } @Override public String getTemplate() { return TEMPLATE; } }