/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.bbg.livedata.faketicks; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalScheme; import com.opengamma.livedata.LiveDataSpecification; import com.opengamma.livedata.resolver.DistributionSpecificationResolver; import com.opengamma.livedata.server.DistributionSpecification; /** * Wraps a {@link DistributionSpecificationResolver} from Strong Bloomberg space into Fake bloomberg space */ public class FakeDistributionSpecificationResolver implements DistributionSpecificationResolver { private final DistributionSpecificationResolver _underlying; /** * @param underlying the bloomberg spec resolver */ public FakeDistributionSpecificationResolver(DistributionSpecificationResolver underlying) { super(); _underlying = underlying; } @Override public DistributionSpecification resolve(LiveDataSpecification liveDataSpecificationFromClient) { DistributionSpecification underResolved = _underlying.resolve(liveDataSpecificationFromClient); return wrap(underResolved); } @Override public Map<LiveDataSpecification, DistributionSpecification> resolve( Collection<LiveDataSpecification> liveDataSpecifications) { Map<LiveDataSpecification, DistributionSpecification> underResolved = _underlying .resolve(liveDataSpecifications); HashMap<LiveDataSpecification, DistributionSpecification> ret = new HashMap<LiveDataSpecification, DistributionSpecification>(); for (Entry<LiveDataSpecification, DistributionSpecification> entry : underResolved.entrySet()) { ret.put(entry.getKey(), wrap(entry.getValue())); } return ret; } private DistributionSpecification wrap(DistributionSpecification underResolved) { if (underResolved == null) { return null; } ExternalId identifier = underResolved.getMarketDataId(); ExternalScheme wrappedScheme; if (identifier.getScheme().equals(ExternalSchemes.BLOOMBERG_BUID)) { wrappedScheme = ExternalSchemes.BLOOMBERG_BUID_WEAK; } else if (identifier.getScheme().equals(ExternalSchemes.BLOOMBERG_TICKER)) { wrappedScheme = ExternalSchemes.BLOOMBERG_TICKER_WEAK; } else { throw new IllegalArgumentException("Unsupported scheme: " + identifier.getScheme()); } ExternalId wrapped = ExternalId.of(wrappedScheme, identifier.getValue()); return new DistributionSpecification(wrapped, underResolved.getNormalizationRuleSet(), underResolved.getJmsTopic().concat(".Fake")); } }