Package com.opengamma.bbg.livedata

Source Code of com.opengamma.bbg.livedata.BloombergJmsTopicNameResolver

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

import static com.opengamma.bbg.BloombergConstants.VALID_EQUITY_TYPES;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.fudgemsg.FudgeMsg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opengamma.bbg.BloombergConstants;
import com.opengamma.bbg.referencedata.ReferenceData;
import com.opengamma.bbg.referencedata.ReferenceDataProvider;
import com.opengamma.bbg.referencedata.ReferenceDataProviderGetRequest;
import com.opengamma.bbg.referencedata.ReferenceDataProviderGetResult;
import com.opengamma.bbg.util.BloombergDomainIdentifierResolver;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.id.ExternalId;
import com.opengamma.livedata.resolver.AbstractResolver;
import com.opengamma.livedata.resolver.JmsTopicNameResolveRequest;
import com.opengamma.livedata.resolver.JmsTopicNameResolver;
import com.opengamma.util.ArgumentChecker;

/**
*
*
*/
public class BloombergJmsTopicNameResolver extends AbstractResolver<JmsTopicNameResolveRequest, String> implements JmsTopicNameResolver {
 
  private static final Logger s_logger = LoggerFactory
  .getLogger(BloombergJmsTopicNameResolver.class);
  private final ReferenceDataProvider _referenceDataProvider;
 
  private static final Set<String> BBG_VALID_EQUITY_TYPES = VALID_EQUITY_TYPES;
 
  public BloombergJmsTopicNameResolver(ReferenceDataProvider referenceDataProvider) {
    ArgumentChecker.notNull(referenceDataProvider, "Reference Data Provider");
    _referenceDataProvider = referenceDataProvider;
  }

  /**
   * @return the referenceDataProvider
   */
  public ReferenceDataProvider getReferenceDataProvider() {
    return _referenceDataProvider;
  }

  @Override
  public Map<JmsTopicNameResolveRequest, String> resolve(Collection<JmsTopicNameResolveRequest> requests) {
    Map<JmsTopicNameResolveRequest, String> returnValue = new HashMap<JmsTopicNameResolveRequest, String>();

    Map<String, Collection<JmsTopicNameResolveRequest>> lookupKey2Requests = new HashMap<String, Collection<JmsTopicNameResolveRequest>>();
   
    for (JmsTopicNameResolveRequest request : requests) {
      ExternalId marketDataUniqueId = request.getMarketDataUniqueId();
      if (!marketDataUniqueId.getScheme().equals(ExternalSchemes.BLOOMBERG_BUID)) {
        s_logger.info("No Bloomberg BUID found, was given: " + marketDataUniqueId);
        returnValue.put(request, null);
        continue;
      }
     
      String lookupKey = BloombergDomainIdentifierResolver.toBloombergKey(marketDataUniqueId);
     
      Collection<JmsTopicNameResolveRequest> requestsForLookupKey = lookupKey2Requests.get(lookupKey);
      if (requestsForLookupKey == null) {
        requestsForLookupKey = new ArrayList<JmsTopicNameResolveRequest>();
        lookupKey2Requests.put(lookupKey, requestsForLookupKey);
      }
      requestsForLookupKey.add(request);
    }
   
    if (!lookupKey2Requests.keySet().isEmpty()) {
      ReferenceDataProviderGetRequest rdRequest = ReferenceDataProviderGetRequest.createGet(
          lookupKey2Requests.keySet(), BloombergConstants.JMS_TOPIC_NAME_RESOLVER_FIELDS, true);
      ReferenceDataProviderGetResult referenceData = _referenceDataProvider.getReferenceData(rdRequest);
     
      for (Map.Entry<String, Collection<JmsTopicNameResolveRequest>> entry : lookupKey2Requests.entrySet()) {
        String lookupKey = entry.getKey();
        ReferenceData result = referenceData.getReferenceDataOrNull(lookupKey);
       
        for (JmsTopicNameResolveRequest request : entry.getValue()) {
          String jmsTopicName = getJmsTopicName(request, result);
          returnValue.put(request, jmsTopicName);
        }
      }
    }
   
    return returnValue;
  }
 
  private String getJmsTopicName(JmsTopicNameResolveRequest request, ReferenceData result) {
    if (result == null) {
      s_logger.info("No reference data available for {}", request);
      return null;
    } else if (result.isIdentifierError()) {
      s_logger.info("Failed to retrieve reference data for {}: {}", request, result.getErrors());
      return null;
    }
    FudgeMsg resultFields = result.getFieldValues();
   
    final String prefix = "LiveData" + SEPARATOR + "Bloomberg" + SEPARATOR;
    final String suffix = request.getNormalizationRule().getJmsTopicSuffix();
    final String bbgUniqueId = request.getMarketDataUniqueId().getValue();
    final String defaultTopicName = prefix + bbgUniqueId + suffix;
   
    String bbgSecurityType = resultFields.getString(BloombergConstants.FIELD_SECURITY_TYPE);
    if (bbgSecurityType == null) {
      return defaultTopicName;     
   
    } else if (BBG_VALID_EQUITY_TYPES.contains(bbgSecurityType)) {
     
      String bbgExchange = resultFields.getString(BloombergConstants.FIELD_PRIMARY_EXCHANGE_NAME);
      String bbgTicker = resultFields.getString(BloombergConstants.FIELD_TICKER);
     
      if (bbgExchange == null || bbgTicker == null) {
        return defaultTopicName;
      }
     
      return prefix + "Equity" + SEPARATOR + bbgExchange + SEPARATOR + bbgTicker + suffix;
     
    } else if (bbgSecurityType.equals(BloombergConstants.BLOOMBERG_US_DOMESTIC_BOND_SECURITY_TYPE)) {
     
      String issuer = resultFields.getString(BloombergConstants.FIELD_ISSUER);
      String cusip = resultFields.getString(BloombergConstants.FIELD_ID_CUSIP);
     
      if (issuer == null || cusip == null) {
        return defaultTopicName;        
      }
     
      return prefix + "Bond" + SEPARATOR + issuer + SEPARATOR + cusip + suffix;
     
    } else if (bbgSecurityType.equals(BloombergConstants.BLOOMBERG_GLOBAL_BOND_SECURITY_TYPE)) {
     
      String issuer = resultFields.getString(BloombergConstants.FIELD_ISSUER);
      String isin = resultFields.getString(BloombergConstants.FIELD_ID_ISIN);
     
      if (issuer == null || isin == null) {
        return defaultTopicName;        
      }
     
      return prefix + "Bond" + SEPARATOR + issuer + SEPARATOR + isin + suffix;
     
    } else if (bbgSecurityType.equals(BloombergConstants.BLOOMBERG_EQUITY_OPTION_SECURITY_TYPE)) {
     
      String underlyingTicker = resultFields.getString(BloombergConstants.FIELD_OPT_UNDL_TICKER);
      String ticker = resultFields.getString(BloombergConstants.FIELD_TICKER);
     
      if (underlyingTicker == null || ticker == null) {
        return defaultTopicName;        
      }
     
      return prefix + "EquityOption" + SEPARATOR + underlyingTicker + SEPARATOR + ticker + suffix;
                                               
    } else {
      return defaultTopicName;
    }
  }
 
}
TOP

Related Classes of com.opengamma.bbg.livedata.BloombergJmsTopicNameResolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.