/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.bbg.util;
import static com.opengamma.bbg.BloombergConstants.FIELD_ID_BBG_UNIQUE;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import org.fudgemsg.FudgeMsg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.bbg.referencedata.ReferenceDataProvider;
import com.opengamma.util.ArgumentChecker;
/**
* Utilities for {@link ReferenceDataProvider}.
* <p>
* This is a thread-safe static utility class.
*/
public final class ReferenceDataProviderUtils {
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(ReferenceDataProviderUtils.class);
/**
* Restricted constructor.
*/
private ReferenceDataProviderUtils() {
}
/**
* Gets the BUID field.
* @param securityIDs the security IDs
* @param refDataProvider the reference data provider
* @return bbgUniqueID
*/
public static Map<String, String> getBloombergUniqueIDs(final Set<String> securityIDs, final ReferenceDataProvider refDataProvider) {
if (securityIDs.isEmpty()) {
return Collections.emptyMap();
}
return singleFieldMultiSecuritiesSearch(securityIDs, FIELD_ID_BBG_UNIQUE, refDataProvider);
}
/**
* Search for a single field.
* @param securityID the security ID
* @param fieldID the field ID
* @param refDataProvider the reference data provider
* @return the field value
*/
public static String singleFieldSearch(final String securityID, final String fieldID, final ReferenceDataProvider refDataProvider) {
ArgumentChecker.notNull(securityID, "securityID");
ArgumentChecker.notNull(fieldID, "fieldID");
ArgumentChecker.notNull(refDataProvider, "Reference Data Provider");
FudgeMsg fieldData = getFields(securityID, Collections.singleton(fieldID), refDataProvider);
if (fieldData == null) {
s_logger.info("Reference data for security {} field {} returned null", securityID, fieldID);
return null;
}
return fieldData.getString(fieldID);
}
public static String singleFieldSearchIgnoreCache(String securityID, String fieldID, ReferenceDataProvider refDataProvider) {
ArgumentChecker.notNull(securityID, "securityID");
ArgumentChecker.notNull(fieldID, "fieldID");
ArgumentChecker.notNull(refDataProvider, "Reference Data Provider");
Map<String, FudgeMsg> map = refDataProvider.getReferenceDataIgnoreCache(Collections.singleton(securityID), Collections.singleton(fieldID));
FudgeMsg fieldData = map.get(securityID);
if (fieldData == null) {
s_logger.info("Reference data for security {} field {} returned null", securityID, fieldID);
return null;
}
return fieldData.getString(fieldID);
}
public static Map<String, String> singleFieldMultiSecuritiesSearch(final Set<String> secIds, final String fieldID,
ReferenceDataProvider refDataProvider) {
ArgumentChecker.notNull(secIds, "secIds");
ArgumentChecker.notNull(fieldID, "fieldID");
ArgumentChecker.notNull(refDataProvider, "refDataProvider");
return refDataProvider.getReferenceDataValues(secIds, fieldID);
}
public static FudgeMsg getFields(String securityDes, Set<String> fields, ReferenceDataProvider refDataProvider) {
Map<String, FudgeMsg> map = refDataProvider.getReferenceData(Collections.singleton(securityDes), fields);
return map.get(securityDes);
}
public static Map<String, FudgeMsg> getFields(Set<String> bloombergKeys, Set<String> fields, ReferenceDataProvider refDataProvider) {
ArgumentChecker.notEmpty(bloombergKeys, "bloombergKeys");
ArgumentChecker.notEmpty(fields, "fields");
ArgumentChecker.notNull(refDataProvider, "refDataProvider");
return refDataProvider.getReferenceData(bloombergKeys, fields);
}
}