/**
* 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 com.opengamma.analytics.financial.model.volatility.surface.VolatilitySurface;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.financial.analytics.volatility.surface.FunctionalVolatilitySurfaceData;
/**
*
*/
public class FunctionalVolatilitySurfaceDataConverter implements ResultConverter<FunctionalVolatilitySurfaceData> {
private static final DecimalFormat LABEL_FORMAT = new DecimalFormat("##.##");
@Override
public Object convertForDisplay(ResultConverterCache context, ValueSpecification valueSpec, FunctionalVolatilitySurfaceData value, ConversionMode mode) {
Map<String, Object> result = new HashMap<String, Object>();
VolatilitySurface surface = value.getSurface();
int nX = value.getNXSamples();
int nY = value.getNYSamples();
result.put("xCount", nX);
result.put("yCount", nY);
if (mode == ConversionMode.FULL) {
Object[] xs = new Object[nX];
Object[] ys = new Object[nY];
double[][] values = new double[nX][nY];
boolean[][] missingValues = new boolean[nX][nY];
double xStep = (value.getXMaximum() - value.getXMinimum()) / nX;
double yStep = (value.getYMaximum() - value.getYMinimum()) / nY;
double x = value.getXMinimum();
for (int i = 0; i < nX; i++) {
xs[i] = LABEL_FORMAT.format(x);
double y = value.getYMinimum();
for (int j = 0; j < nY; j++) {
if (i == 0) {
ys[j] = LABEL_FORMAT.format(y);
}
values[i][j] = 100 * surface.getVolatility(x, y);
y += yStep;
}
x += xStep;
}
result.put("xs", xs);
result.put("ys", ys);
result.put("surface", values);
result.put("missingValues", missingValues);
}
result.put("axesLabel", value.getYLabel() + "\\" + value.getXLabel());
return result;
}
@Override
public Object convertForHistory(ResultConverterCache context, ValueSpecification valueSpec, FunctionalVolatilitySurfaceData value) {
return null;
}
@Override
public String convertToText(ResultConverterCache context, ValueSpecification valueSpec, FunctionalVolatilitySurfaceData value) {
return "Functional Volatility Surface";
}
@Override
public String getFormatterName() {
return "SURFACE_DATA";
}
}