Java tutorial
/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.bbg.livedata; import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Set; import net.sf.ehcache.CacheManager; import org.fudgemsg.FudgeMsg; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.opengamma.bbg.referencedata.ReferenceDataProvider; import com.opengamma.bbg.util.BloombergDataUtils; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.id.ExternalScheme; import com.opengamma.livedata.normalization.StandardRuleResolver; import com.opengamma.livedata.resolver.DefaultDistributionSpecificationResolver; import com.opengamma.livedata.resolver.DistributionSpecificationResolver; import com.opengamma.livedata.resolver.EHCachingDistributionSpecificationResolver; import com.opengamma.livedata.resolver.IdResolver; import com.opengamma.livedata.resolver.NormalizationRuleResolver; import com.opengamma.livedata.server.StandardLiveDataServer; import com.opengamma.livedata.server.Subscription; import com.opengamma.util.ArgumentChecker; /** * Allows common functionality to be shared between the live and recorded Bloomberg data servers */ public abstract class AbstractBloombergLiveDataServer extends StandardLiveDataServer { private static final Logger s_logger = LoggerFactory.getLogger(AbstractBloombergLiveDataServer.class); private static final String DEFAULT_BBG_SUB_PREFIX = "/buid/"; private NormalizationRuleResolver _normalizationRules; private IdResolver _idResolver; private DistributionSpecificationResolver _defaultDistributionSpecificationResolver; /** * Creates an instance. * * @param cacheManager the cache manager, not null */ public AbstractBloombergLiveDataServer(CacheManager cacheManager) { super(cacheManager); } //------------------------------------------------------------------------- /** * Gets the reference data provider. * * @return the reference data provider */ protected abstract ReferenceDataProvider getReferenceDataProvider(); @Override protected ExternalScheme getUniqueIdDomain() { return ExternalSchemes.BLOOMBERG_BUID; } @Override protected boolean snapshotOnSubscriptionStartRequired(Subscription subscription) { // As per Kirk, it is possible that you don't get all fields initially. // Should we optimize this by asset type? return true; } /** * * @return the prefix to use when making the subscription, including slashes. * e.g. "/buid/" */ protected String getBloombergSubscriptionPathPrefix() { return DEFAULT_BBG_SUB_PREFIX; } @Override public Map<String, FudgeMsg> doSnapshot(Collection<String> uniqueIds) { ArgumentChecker.notNull(uniqueIds, "Unique IDs"); if (uniqueIds.isEmpty()) { return Collections.emptyMap(); } Set<String> buids = Sets.newHashSetWithExpectedSize(uniqueIds.size()); for (String uniqueId : uniqueIds) { String buid = getBloombergSubscriptionPathPrefix() + uniqueId; buids.add(buid); } // caching ref data provider must not be used here Map<String, FudgeMsg> snapshotValues = getReferenceDataProvider().getReferenceDataIgnoreCache(buids, BloombergDataUtils.STANDARD_FIELDS_SET); Map<String, FudgeMsg> returnValue = Maps.newHashMap(); for (String buid : buids) { FudgeMsg fieldData = snapshotValues.get(buid); if (fieldData == null) { Exception e = new Exception("Stack Trace"); e.fillInStackTrace(); s_logger.error("Could not find result for {} in data snapshot, skipping", buid, e); //throw new OpenGammaRuntimeException("Result for " + buid + " was not found"); } else { String securityUniqueId = buid.substring(getBloombergSubscriptionPathPrefix().length()); returnValue.put(securityUniqueId, fieldData); } } return returnValue; } public synchronized NormalizationRuleResolver getNormalizationRules() { if (_normalizationRules == null) { _normalizationRules = new StandardRuleResolver(BloombergDataUtils.getDefaultNormalizationRules( getReferenceDataProvider(), getCacheManager(), getUniqueIdDomain())); } return _normalizationRules; } public synchronized IdResolver getIdResolver() { if (_idResolver == null) { _idResolver = new BloombergIdResolver(getReferenceDataProvider()); } return _idResolver; } public synchronized DistributionSpecificationResolver getDefaultDistributionSpecificationResolver() { if (_defaultDistributionSpecificationResolver == null) { BloombergJmsTopicNameResolver topicResolver = new BloombergJmsTopicNameResolver( getReferenceDataProvider()); DefaultDistributionSpecificationResolver distributionSpecResolver = new DefaultDistributionSpecificationResolver( getIdResolver(), getNormalizationRules(), topicResolver); return new EHCachingDistributionSpecificationResolver(distributionSpecResolver, getCacheManager(), "BBG"); } return _defaultDistributionSpecificationResolver; } }