/**
 * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.livedata.resolver;

import java.util.Collection;
import java.util.Map;

import com.opengamma.livedata.LiveDataSpecification;
import com.opengamma.livedata.server.DistributionSpecification;

/**
 * Determines how market data should be distributed to clients.
 */
public interface DistributionSpecificationResolver extends Resolver<LiveDataSpecification, DistributionSpecification> {

  /**
   * Determines how market data should be distributed to clients.
   * 
   * @param liveDataSpecificationFromClient what the client wants. Different specs from the client can map to the same distribution spec. 
   * @return a valid distribution specification. Null if the distribution spec cannot be built.  
   */
  DistributionSpecification resolve(LiveDataSpecification liveDataSpecificationFromClient);
  
  /**
   * Same as calling {@link #resolve(LiveDataSpecification)} 
   * individually, but since it works in bulk, may be more efficient. 
   * 
   * @param liveDataSpecifications what the client wants. Different specs from the client can map to the same distribution spec. 
   * @return map from request to result.  
   * For each input spec, there must be an entry in the map.
   * @throws IllegalArgumentException if the distribution spec cannot be built.  
   */
  Map<LiveDataSpecification, DistributionSpecification> resolve(Collection<LiveDataSpecification> liveDataSpecifications);
  
}

/**
 * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.livedata.resolver;

import java.util.Collection;
import java.util.Map;

import com.opengamma.livedata.LiveDataSpecification;
import com.opengamma.livedata.server.DistributionSpecification;

/**
 * Determines how market data should be distributed to clients.
 */
public interface DistributionSpecificationResolver extends Resolver<LiveDataSpecification, DistributionSpecification> {

  /**
   * Determines how market data should be distributed to clients.
   * 
   * @param liveDataSpecificationFromClient what the client wants. Different specs from the client can map to the same distribution spec. 
   * @return a valid distribution specification. Null if the distribution spec cannot be built.  
   */
  DistributionSpecification resolve(LiveDataSpecification liveDataSpecificationFromClient);
  
  /**
   * Same as calling {@link #resolve(LiveDataSpecification)} 
   * individually, but since it works in bulk, may be more efficient. 
   * 
   * @param liveDataSpecifications what the client wants. Different specs from the client can map to the same distribution spec. 
   * @return map from request to result.  
   * For each input spec, there must be an entry in the map.
   * The value will be null if the distribution spec cannot be build for that spec  
   */
  Map<LiveDataSpecification, DistributionSpecification> resolve(Collection<LiveDataSpecification> liveDataSpecifications);
  
}

Comment the semantics of the spec resolver to match the (more useful) semantics of the implementations
Comment the semantics of the spec resolver to match the (more useful) semantics of the implementations
