/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.security.function; import static com.google.common.collect.Sets.newHashSet; import static com.opengamma.engine.value.ValueRequirementNames.BLOOMBERG_BUID; import java.util.Collections; import java.util.Set; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.core.security.Security; import com.opengamma.engine.ComputationTarget; import com.opengamma.engine.function.AbstractFunction; import com.opengamma.engine.function.FunctionCompilationContext; import com.opengamma.engine.function.FunctionExecutionContext; import com.opengamma.engine.function.FunctionInputs; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ComputedValue; import com.opengamma.engine.value.ValueProperties; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.util.async.AsynchronousExecution; /** * If attached to security's ExternalIdBundle, displays its {@link ExternalSchemes.BLOOMBERG_BUID} */ public class BloombergBuidFunction extends AbstractFunction.NonCompiledInvoker { @Override public Set<ComputedValue> execute(FunctionExecutionContext executionContext, final FunctionInputs inputs, ComputationTarget target, Set<ValueRequirement> desiredValues) throws AsynchronousExecution { ValueRequirement desiredValue = Iterables.getFirst(desiredValues, null); ValueSpecification valueSpecification = ValueSpecification.of(desiredValue.getValueName(), target.toSpecification(), desiredValue.getConstraints()); Security security = target.getPositionOrTrade().getSecurity(); if (security != null) { ExternalIdBundle externalIdBundle = security.getExternalIdBundle(); if (externalIdBundle != null) { ExternalId externalId = externalIdBundle.getExternalId(ExternalSchemes.BLOOMBERG_BUID); if (externalId != null) { return newHashSet(new ComputedValue(valueSpecification, externalId.getValue())); } } } return newHashSet(new ComputedValue(valueSpecification, "")); } @Override public ComputationTargetType getTargetType() { return ComputationTargetType.POSITION_OR_TRADE; } @Override public Set<ValueSpecification> getResults(FunctionCompilationContext context, ComputationTarget target) { return Collections.singleton( new ValueSpecification(BLOOMBERG_BUID, target.toSpecification(), ValueProperties.all())); } @Override public Set<ValueRequirement> getRequirements(FunctionCompilationContext context, ComputationTarget target, ValueRequirement desiredValue) { return ImmutableSet.of(); } }