/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.server.conversion;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.analytics.financial.greeks.BucketedGreekResultCollection;
import com.opengamma.engine.value.ValueSpecification;
/**
*
*/
public class BucketedVegaConverter implements ResultConverter<BucketedGreekResultCollection> {
private static final Logger s_logger = LoggerFactory.getLogger(BucketedVegaConverter.class);
private static final DecimalFormat FORMAT = new DecimalFormat("##.###");
@Override
public Object convertForDisplay(ResultConverterCache context, ValueSpecification valueSpec, BucketedGreekResultCollection value, ConversionMode mode) {
Map<String, Object> result = new HashMap<String, Object>();
if (value.getBucketedGreeks(BucketedGreekResultCollection.BUCKETED_VEGA) != null) {
double[] expiries = value.getExpiries();
double[][] strikes = value.getStrikes();
double[] uniqueStrikes = strikes[0];
for (int i = 1; i < strikes.length; i++) {
if (strikes[i].length != uniqueStrikes.length) {
s_logger.warn("Did not have a rectangular bucketed vega surface");
return result;
}
}
result.put("yCount", expiries.length);
result.put("xCount", uniqueStrikes.length);
if (mode == ConversionMode.FULL) {
double[][] surface = value.getBucketedGreeks(BucketedGreekResultCollection.BUCKETED_VEGA);
boolean[][] missingValues = new boolean[surface.length][surface[0].length];
Object[] yLabels = new Object[expiries.length];
Object[] xLabels = new Object[uniqueStrikes.length];
for (int i = 0; i < expiries.length; i++) {
yLabels[i] = FORMAT.format(expiries[i]);
}
for (int i = 0; i < uniqueStrikes.length; i++) {
xLabels[i] = FORMAT.format(i);
}
result.put("xs", xLabels);
result.put("ys", yLabels);
result.put("surface", surface);
result.put("missingValues", missingValues);
}
}
return result;
}
@Override
public Object convertForHistory(ResultConverterCache context, ValueSpecification valueSpec, BucketedGreekResultCollection value) {
return null;
}
@Override
public String convertToText(ResultConverterCache context, ValueSpecification valueSpec, BucketedGreekResultCollection value) {
return "Bucketed Vega";
}
@Override
public String getFormatterName() {
return "SURFACE_DATA";
}
}