class MarketDataManager implements MarketDataListener, Lifecycle, SubscriptionStateQuery {

  public void requestMarketDataSubscriptions(final Set<ValueSpecification> requiredSubscriptions) {

    ArgumentChecker.notNull(requiredSubscriptions, "requiredSubscriptions");
    Set<ValueSpecification> newSubscriptions = manageOngoingSubscriptions(requiredSubscriptions);

    // As the market data provider calls back to ALL listeners (i.e. potentially multiple
    // views), we need to make the subscription request outside the scope of the subscriptions
    // lock otherwise we can hit deadlocks when two similar views (e.g. same view, different
    // valuation times) are launched.
    if (!newSubscriptions.isEmpty()) {
      OperationTimer timer = new OperationTimer(s_logger, "Adding {} market data subscriptions", newSubscriptions.size());
      makeSubscriptionRequest(newSubscriptions);
      timer.finished();
    }
  }

  public  MarketDataManager(MarketDataChangeListener listener,
                           MarketDataProviderResolver marketDataProviderResolver,
                           String viewProcessorName,
                           String viewProcessId);

}