/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.marketdata.availability; import java.io.Serializable; import java.util.ArrayList; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.util.ArgumentChecker; /** * An implementation of {@link MarketDataAvailabilityFilter} based on a {@link MarketDataAvailabilityProvider} * <p> * A filter would normally be created from a provider if necessary by calling its {@link MarketDataAvailabilityProvider#getAvailabilityFilter()} method which may offer a more efficient conversion than * constructing an instance of this class. This is provided to assist in the implementation of that method. */ public class ProviderMarketDataAvailabilityFilter implements MarketDataAvailabilityFilter { private final MarketDataAvailabilityProvider _provider; public ProviderMarketDataAvailabilityFilter(final MarketDataAvailabilityProvider provider) { ArgumentChecker.notNull(provider, "provider"); _provider = provider; } protected MarketDataAvailabilityProvider getProvider() { return _provider; } @Override public boolean isAvailable(final ComputationTargetSpecification targetSpec, final Object target, final ValueRequirement desiredValue) { return getProvider().getAvailability(targetSpec, target, desiredValue) != null; } @Override public MarketDataAvailabilityProvider withProvider(final MarketDataAvailabilityProvider provider) { if (getProvider() == provider) { return provider; } else { return new MarketDataAvailabilityProvider() { @Override public ValueSpecification getAvailability(final ComputationTargetSpecification targetSpec, final Object target, final ValueRequirement desiredValue) throws MarketDataNotSatisfiableException { if (isAvailable(targetSpec, target, desiredValue)) { return provider.getAvailability(targetSpec, target, desiredValue); } else { return null; } } @Override public MarketDataAvailabilityFilter getAvailabilityFilter() { return ProviderMarketDataAvailabilityFilter.this; } @Override public Serializable getAvailabilityHintKey() { final ArrayList<Serializable> key = new ArrayList<Serializable>(2); key.add(getProvider().getAvailabilityHintKey()); key.add(provider.getAvailabilityHintKey()); return key; } }; } } }