/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.expression;
import com.google.common.base.Function;
import com.opengamma.core.security.Security;
import com.opengamma.engine.ComputationTargetResolver;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.financial.security.FinancialSecurityUtils;
import com.opengamma.master.security.ManageableSecurity;
import com.opengamma.util.money.Currency;
/**
* Common synthetic properties for expression evaluation.
*/
public final class CommonSynthetics {
private static final ThreadLocal<ComputationTargetResolver.AtVersionCorrection> s_resolver = new ThreadLocal<ComputationTargetResolver.AtVersionCorrection>();
private CommonSynthetics() {
}
protected static ComputationTargetResolver.AtVersionCorrection getResolver() {
return s_resolver.get();
}
protected static void setResolver(final ComputationTargetResolver.AtVersionCorrection resolver) {
s_resolver.set(resolver);
}
public static Function<Security, Currency> securityCurrency() {
return new Function<Security, Currency>() {
@Override
public Currency apply(final Security security) {
return FinancialSecurityUtils.getCurrency(security);
}
};
}
public static Function<Security, String> securityType() {
return new Function<Security, String>() {
@Override
public String apply(final Security security) {
return security.getSecurityType();
}
};
}
public static Function<ManageableSecurity, Security> securityUnderlying() {
return new Function<ManageableSecurity, Security>() {
@Override
public Security apply(final ManageableSecurity security) {
final Object underlying = security.property("underlyingId").get();
return UserExpressionParser.resolve(ComputationTargetType.SECURITY, underlying);
}
};
}
public static void configureParser(final UserExpressionParser parser) {
parser.setSynthetic(Security.class, Currency.class, "currency", securityCurrency());
parser.setSynthetic(Security.class, String.class, "type", securityType());
parser.setSynthetic(ManageableSecurity.class, Security.class, "underlying", securityUnderlying());
}
}