/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.marketdata; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.CountDownLatch; import com.opengamma.engine.marketdata.availability.MarketDataAvailabilityProvider; import com.opengamma.engine.marketdata.spec.MarketDataSpecification; import com.opengamma.engine.value.ValueSpecification; /** * Mock {@link MarketDataProvider} */ public class MockMarketDataProvider extends AbstractMarketDataProvider { private final String _name; private final boolean _subscriptionsSucceed; private final CountDownLatch _responseLatch; private final Map<ValueSpecification, Object> _values = new HashMap<ValueSpecification, Object>(); private int _queryCount; private int _snapshotCount; public MockMarketDataProvider(final String name, final boolean subscriptionsSucceed, final int subscriptionCount) { _name = name; _subscriptionsSucceed = subscriptionsSucceed; _responseLatch = new CountDownLatch(subscriptionCount); } //------------------------------------------------------------------------- @Override public void subscribe(final ValueSpecification valueSpecification) { subscribe(Collections.singleton(valueSpecification)); } @Override public void subscribe(final Set<ValueSpecification> valueSpecifications) { final Thread t = new Thread(new Runnable() { @Override public void run() { if (_subscriptionsSucceed) { subscriptionsSucceeded(valueSpecifications); } else { subscriptionFailed(valueSpecifications, _name); } _responseLatch.countDown(); } }); t.start(); } @Override public void unsubscribe(final ValueSpecification valueSpecification) { } @Override public void unsubscribe(final Set<ValueSpecification> valueSpecifications) { } @Override public MarketDataAvailabilityProvider getAvailabilityProvider(final MarketDataSpecification marketDataSpec) { return null; } @Override public MarketDataPermissionProvider getPermissionProvider() { return null; } @Override public boolean isCompatible(final MarketDataSpecification marketDataSpec) { return false; } @Override public MarketDataSnapshot snapshot(final MarketDataSpecification marketDataSpec) { _snapshotCount++; return new MockMarketDataSnapshot(this); } //------------------------------------------------------------------------- public void awaitSubscriptionResponses() throws InterruptedException { _responseLatch.await(); } public void put(final ValueSpecification specification, final Object value) { _values.put(specification, value); } /*package*/void incrementQueryCount() { _queryCount++; } /*package*/Object getValue(final ValueSpecification specification) { return _values.get(specification); } public int getAndResetQueryCount() { final int count = _queryCount; _queryCount = 0; return count; } public int getAndResetSnapshotCount() { final int count = _snapshotCount; _snapshotCount = 0; return count; } }