/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.config;
import java.util.Map.Entry;
import org.joda.beans.impl.flexi.FlexiBean;
import com.opengamma.engine.view.ViewDefinition;
import com.opengamma.financial.analytics.fxforwardcurve.FXForwardCurveDefinition;
import com.opengamma.financial.analytics.fxforwardcurve.FXForwardCurveSpecification;
import com.opengamma.financial.analytics.ircurve.CurveSpecificationBuilderConfiguration;
import com.opengamma.financial.analytics.ircurve.YieldCurveDefinition;
import com.opengamma.financial.analytics.ircurve.calcconfig.MultiCurveCalculationConfig;
import com.opengamma.financial.analytics.volatility.cube.VolatilityCubeDefinition;
import com.opengamma.financial.analytics.volatility.surface.VolatilitySurfaceDefinition;
import com.opengamma.financial.analytics.volatility.surface.VolatilitySurfaceSpecification;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.web.AbstractPerRequestWebResource;
import com.opengamma.web.json.CurveSpecificationBuilderConfigurationJSONBuilder;
import com.opengamma.web.json.FXForwardCurveDefinitionJSONBuilder;
import com.opengamma.web.json.FXForwardCurveSpecificationJSONBuilder;
import com.opengamma.web.json.MultiCurveCalculationConfigJSONBuilder;
import com.opengamma.web.json.ViewDefinitionJSONBuilder;
import com.opengamma.web.json.VolatilityCubeDefinitionJSONBuilder;
import com.opengamma.web.json.VolatilitySurfaceDefinitionJSONBuilder;
import com.opengamma.web.json.VolatilitySurfaceSpecificationJSONBuilder;
import com.opengamma.web.json.YieldCurveDefinitionJSONBuilder;
/**
* Abstract base class for RESTful config resources.
*/
public abstract class AbstractWebConfigResource
extends AbstractPerRequestWebResource<WebConfigData> {
/**
* Config xml form parameter name
*/
protected static final String CONFIG_XML = "configXML";
/**
* HTML ftl directory
*/
protected static final String HTML_DIR = "configs/html/";
/**
* JSON ftl directory
*/
protected static final String JSON_DIR = "configs/json/";
/**
* The Config Types provider
*/
private final ConfigTypesProvider _configTypesProvider = ConfigTypesProvider.getInstance();
/**
* Creates the resource.
*
* @param configMaster the config master, not null
*/
protected AbstractWebConfigResource(final ConfigMaster configMaster) {
super(new WebConfigData());
ArgumentChecker.notNull(configMaster, "configMaster");
data().setConfigMaster(configMaster);
initializeMetaData();
initializeJSONBuilders();
}
//init meta-data
private void initializeMetaData() {
for (Entry<String, Class<?>> entry : _configTypesProvider.getConfigTypeMap().entrySet()) {
data().getTypeMap().put(entry.getKey(), entry.getValue());
}
}
private void initializeJSONBuilders() {
data().getJsonBuilderMap().put(ViewDefinition.class, ViewDefinitionJSONBuilder.INSTANCE);
data().getJsonBuilderMap().put(YieldCurveDefinition.class, YieldCurveDefinitionJSONBuilder.INSTANCE);
data().getJsonBuilderMap().put(CurveSpecificationBuilderConfiguration.class, CurveSpecificationBuilderConfigurationJSONBuilder.INSTANCE);
data().getJsonBuilderMap().put(VolatilityCubeDefinition.class, VolatilityCubeDefinitionJSONBuilder.INSTANCE);
data().getJsonBuilderMap().put(VolatilitySurfaceDefinition.class, VolatilitySurfaceDefinitionJSONBuilder.INSTANCE);
data().getJsonBuilderMap().put(VolatilitySurfaceSpecification.class, VolatilitySurfaceSpecificationJSONBuilder.INSTANCE);
data().getJsonBuilderMap().put(FXForwardCurveDefinition.class, FXForwardCurveDefinitionJSONBuilder.INSTANCE);
data().getJsonBuilderMap().put(FXForwardCurveSpecification.class, FXForwardCurveSpecificationJSONBuilder.INSTANCE);
data().getJsonBuilderMap().put(MultiCurveCalculationConfig.class, MultiCurveCalculationConfigJSONBuilder.INSTANCE);
}
/**
* Creates the resource.
*
* @param parent the parent resource, not null
*/
protected AbstractWebConfigResource(final AbstractWebConfigResource parent) {
super(parent);
}
//-------------------------------------------------------------------------
/**
* Creates the output root data.
*
* @return the output root data, not null
*/
@Override
protected FlexiBean createRootData() {
FlexiBean out = super.createRootData();
out.put("uris", new WebConfigUris(data()));
return out;
}
//-------------------------------------------------------------------------
/**
* Gets the configTypesProvider.
*
* @return the configTypesProvider
*/
public ConfigTypesProvider getConfigTypesProvider() {
return _configTypesProvider;
}
}