/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.fxforwardcurve; import java.util.List; import com.opengamma.core.change.ChangeEvent; import com.opengamma.engine.function.config.AbstractFunctionConfigurationBean; import com.opengamma.engine.function.config.BeanDynamicFunctionConfigurationSource; import com.opengamma.engine.function.config.FunctionConfiguration; import com.opengamma.engine.function.config.FunctionConfigurationSource; import com.opengamma.engine.function.config.VersionedFunctionConfigurationBean; import com.opengamma.financial.config.ConfigMasterChangeProvider; import com.opengamma.master.config.ConfigDocument; import com.opengamma.master.config.ConfigMaster; import com.opengamma.master.config.ConfigSearchRequest; import com.opengamma.master.config.impl.ConfigSearchIterator; /** * Function repository configuration source for the functions contained in this package. */ public class FXForwardCurveFunctions extends AbstractFunctionConfigurationBean { /** * Default instance of a repository configuration source exposing the functions from this package. * * @return the configuration source exposing functions from this package */ public static FunctionConfigurationSource instance() { return new FXForwardCurveFunctions().getObjectCreating(); } public static FunctionConfigurationSource providers(final ConfigMaster configMaster) { return new BeanDynamicFunctionConfigurationSource(ConfigMasterChangeProvider.of(configMaster)) { @Override protected VersionedFunctionConfigurationBean createConfiguration() { final Providers providers = new Providers(); providers.setConfigMaster(configMaster); return providers; } @Override protected boolean isPropogateEvent(final ChangeEvent event) { return Providers.isMonitoredType(event.getObjectId().getValue()); } }; } /** * Function repository configuration source for FX Forward curve functions based on the items defined in a Config Master. */ public static class Providers extends VersionedFunctionConfigurationBean { private ConfigMaster _configMaster; public void setConfigMaster(final ConfigMaster configMaster) { _configMaster = configMaster; } public ConfigMaster getConfigMaster() { return _configMaster; } protected void addFXForwardCurveFunctions(List<FunctionConfiguration> functions, String ccy1, String ccy2, String curveName) { functions.add(functionConfiguration(FXForwardCurveDefinitionFunction.class, ccy1, ccy2, curveName)); functions.add(functionConfiguration(FXForwardCurveSpecificationFunction.class, ccy1, ccy2, curveName)); } @Override protected void addAllConfigurations(List<FunctionConfiguration> functions) { final ConfigSearchRequest<FXForwardCurveDefinition> searchRequest = new ConfigSearchRequest<FXForwardCurveDefinition>(); searchRequest.setType(FXForwardCurveDefinition.class); searchRequest.setVersionCorrection(getVersionCorrection()); for (final ConfigDocument configDocument : ConfigSearchIterator.iterable(getConfigMaster(), searchRequest)) { String documentName = configDocument.getName(); if (!documentName.endsWith("FX_FORWARD")) { continue; } documentName = documentName.substring(0, documentName.length() - 11); final int underscore = documentName.lastIndexOf('_'); if (underscore <= 0) { continue; } String curveName = documentName.substring(0, underscore); String currencies = documentName.substring(underscore + 1); if (currencies.length() != 6) { continue; } String ccy1 = currencies.substring(0, 3); String ccy2 = currencies.substring(3); addFXForwardCurveFunctions(functions, ccy1, ccy2, curveName); } } private static boolean isMonitoredType(final String type) { return FXForwardCurveDefinition.class.getName().equals(type); } } @Override protected void addAllConfigurations(List<FunctionConfiguration> functions) { } }