/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.property; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; import com.opengamma.engine.ComputationTarget; import com.opengamma.engine.function.FunctionCompilationContext; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ValueRequirement; /** * Abstract function for injecting default properties into the dependency graph. A single * property and one or more value names are defined at construction to simplify evaluation * of default values. */ public abstract class StaticDefaultPropertyFunction extends DefaultPropertyFunction { private final String _propertyName; private final Set<String> _valueNames; protected StaticDefaultPropertyFunction(final ComputationTargetType targetType, final String propertyName, final boolean permitWithout, final String valueName) { super(targetType, permitWithout); _propertyName = propertyName; _valueNames = Collections.singleton(valueName); } protected StaticDefaultPropertyFunction(final ComputationTargetType targetType, final String propertyName, final boolean permitWithout, final String... valueNames) { super(targetType, permitWithout); _propertyName = propertyName; _valueNames = new HashSet<String>(Arrays.asList(valueNames)); } protected Set<String> getValueNames() { return _valueNames; } protected String getPropertyName() { return _propertyName; } @Override protected void getDefaults(final PropertyDefaults defaults) { for (String valueName : getValueNames()) { defaults.addValuePropertyName(valueName, getPropertyName()); } } /** * Returns the default value(s) to set for the property. If a default value is * not available, must return null. * * @param context the function compilation context, not null * @param target the computation target, not null * @param desiredValue the initial requirement, not null * @return the default values or null if there is no default to inject */ protected abstract Set<String> getDefaultValue(FunctionCompilationContext context, ComputationTarget target, ValueRequirement desiredValue); @Override protected Set<String> getDefaultValue(final FunctionCompilationContext context, final ComputationTarget target, final ValueRequirement desiredValue, final String propertyName) { assert getPropertyName().equals(propertyName); return getDefaultValue(context, target, desiredValue); } }