/** * 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.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Set; import com.google.common.collect.Sets; import com.opengamma.id.ExternalScheme; import com.opengamma.livedata.LiveDataSpecification; import com.opengamma.util.tuple.ObjectsPair; /** * Decides based of scheme which subscriptions to fake. * Fakes iff any of the identifiers in the bundle has one of these schemes */ public class BySchemeFakeSubscriptionSelector implements FakeSubscriptionSelector { private final Set<ExternalScheme> _toFake; public BySchemeFakeSubscriptionSelector(String... toFakes) { this(getSchemes(toFakes)); } public BySchemeFakeSubscriptionSelector(ExternalScheme... toFakes) { this(Sets.newHashSet(toFakes)); } public BySchemeFakeSubscriptionSelector(Set<ExternalScheme> toFake) { _toFake = toFake; } @Override public ObjectsPair<Collection<LiveDataSpecification>, Collection<LiveDataSpecification>> splitShouldFake( FakeSubscriptionBloombergLiveDataServer server, Collection<LiveDataSpecification> specs) { if (specs.isEmpty()) { return ObjectsPair.of((Collection<LiveDataSpecification>) new ArrayList<LiveDataSpecification>(), (Collection<LiveDataSpecification>) new ArrayList<LiveDataSpecification>()); } Set<LiveDataSpecification> fakes = new HashSet<LiveDataSpecification>(); Set<LiveDataSpecification> underlyings = new HashSet<LiveDataSpecification>(); for (LiveDataSpecification liveDataSpecification : specs) { if (shouldFake(liveDataSpecification)) { fakes.add(liveDataSpecification); } else { underlyings.add(liveDataSpecification); } } return ObjectsPair.of((Collection<LiveDataSpecification>) underlyings, (Collection<LiveDataSpecification>) fakes); } private boolean shouldFake(LiveDataSpecification liveDataSpecification) { for (ExternalScheme scheme : _toFake) { if (liveDataSpecification.getIdentifier(scheme) != null) { return true; } } return false; } private static Set<ExternalScheme> getSchemes(String[] schemes) { HashSet<ExternalScheme> ret = new HashSet<ExternalScheme>(); for (String scheme : schemes) { ret.add(ExternalScheme.of(scheme)); } return ret; } }