/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.marketdata.live; import static org.mockito.Mockito.mock; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertTrue; import java.util.Collections; import java.util.concurrent.TimeUnit; import org.fudgemsg.FudgeContext; import org.fudgemsg.MutableFudgeMsg; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.core.value.MarketDataRequirementNames; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.marketdata.MarketDataSnapshot; import com.opengamma.engine.marketdata.availability.FixedMarketDataAvailabilityProvider; import com.opengamma.engine.marketdata.availability.MarketDataAvailabilityFilter; import com.opengamma.engine.marketdata.spec.MarketData; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ValueProperties; import com.opengamma.engine.value.ValuePropertyNames; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.id.ExternalId; import com.opengamma.id.UniqueId; import com.opengamma.livedata.LiveDataSpecification; import com.opengamma.livedata.UserPrincipal; import com.opengamma.livedata.msg.LiveDataSubscriptionResponse; import com.opengamma.livedata.msg.LiveDataSubscriptionResult; import com.opengamma.livedata.test.TestLiveDataClient; import com.opengamma.util.test.TestGroup; /** * Test LiveDataSnapshotProvider. */ @Test(groups = TestGroup.UNIT) public class InMemoryLKVLiveMarketDataProviderTest { private static final String _marketDataRequirement = MarketDataRequirementNames.MARKET_VALUE; protected ExternalId getTicker(final String ticker) { return ExternalId.of("Foo", ticker); } protected ValueRequirement constructRequirement(final String ticker) { return new ValueRequirement(_marketDataRequirement, ComputationTargetType.PRIMITIVE, getTicker(ticker)); } protected ComputationTargetSpecification constructTargetSpec(final String ticker) { return new ComputationTargetSpecification(ComputationTargetType.PRIMITIVE, UniqueId.of("Bar", ticker + " UID")); } protected ValueSpecification constructSpecification(final String ticker) { return new ValueSpecification(_marketDataRequirement, constructTargetSpec(ticker), ValueProperties.with(ValuePropertyNames.FUNCTION, "MarketData").get()); } @Test public void testSnapshotting() { final TestLiveDataClient liveDataClient = new TestLiveDataClient(); try { FixedMarketDataAvailabilityProvider availabilityProvider = new FixedMarketDataAvailabilityProvider(); availabilityProvider.addAvailableData(getTicker("test1"), constructSpecification("test1")); availabilityProvider.addAvailableData(getTicker("test2"), constructSpecification("test2")); availabilityProvider.addAvailableData(getTicker("test3"), constructSpecification("test3")); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, availabilityProvider.getAvailabilityFilter(), UserPrincipal.getTestUser()); ValueSpecification test1Specification = provider.getAvailabilityProvider(MarketData.live()).getAvailability(constructTargetSpec("test1"), getTicker("test1"), constructRequirement("test1")); ValueSpecification test2Specification = provider.getAvailabilityProvider(MarketData.live()).getAvailability(constructTargetSpec("test2"), getTicker("test2"), constructRequirement("test2")); ValueSpecification test3Specification = provider.getAvailabilityProvider(MarketData.live()).getAvailability(constructTargetSpec("test3"), getTicker("test3"), constructRequirement("test3")); LiveDataSpecification test1test2FullyQualifiedSpecification = new LiveDataSpecification(liveDataClient.getDefaultNormalizationRuleSetId(), ExternalId.of("fq-test1test2", "test1test2")); LiveDataSpecification test3FullyQualifiedSpecification = new LiveDataSpecification(liveDataClient.getDefaultNormalizationRuleSetId(), ExternalId.of("fq-test3", "test3")); provider.subscribe(test1Specification); provider.subscribe(test2Specification); provider.subscribe(test3Specification); provider.subscribe(test3Specification); provider.subscribe(test3Specification); assertEquals(3, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(3, liveDataClient.getSubscriptionRequests().size()); LiveDataSubscriptionResponse test1Response = new LiveDataSubscriptionResponse(LiveMarketDataAvailabilityProvider.getLiveDataSpecification(test1Specification), LiveDataSubscriptionResult.SUCCESS, null, test1test2FullyQualifiedSpecification, "test1test2", null); LiveDataSubscriptionResponse test2Response = new LiveDataSubscriptionResponse(LiveMarketDataAvailabilityProvider.getLiveDataSpecification(test2Specification), LiveDataSubscriptionResult.SUCCESS, null, test1test2FullyQualifiedSpecification, "test1test2", null); LiveDataSubscriptionResponse test3Response = new LiveDataSubscriptionResponse(LiveMarketDataAvailabilityProvider.getLiveDataSpecification(test3Specification), LiveDataSubscriptionResult.SUCCESS, null, test3FullyQualifiedSpecification, "test3", null); provider.subscriptionResultsReceived(ImmutableList.of(test1Response, test2Response, test3Response)); liveDataClient.subscriptionRequestSatisfied( Iterables.getOnlyElement(liveDataClient.getSubscriptionRequests().get(0)), test1Response); liveDataClient.subscriptionRequestSatisfied( Iterables.getOnlyElement(liveDataClient.getSubscriptionRequests().get(1)), test2Response); liveDataClient.subscriptionRequestSatisfied( Iterables.getOnlyElement(liveDataClient.getSubscriptionRequests().get(2)), test3Response); assertEquals(3, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(5, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(3, liveDataClient.getSubscriptionRequests().size()); final MutableFudgeMsg msg1 = new FudgeContext().newMessage(); msg1.add(_marketDataRequirement, 52.07); final MutableFudgeMsg msg3a = new FudgeContext().newMessage(); msg3a.add(_marketDataRequirement, 52.16); final MutableFudgeMsg msg3b = new FudgeContext().newMessage(); msg3b.add(_marketDataRequirement, 52.17); liveDataClient.marketDataReceived(test1test2FullyQualifiedSpecification, msg1); liveDataClient.marketDataReceived(test3FullyQualifiedSpecification, msg3a); liveDataClient.marketDataReceived(test3FullyQualifiedSpecification, msg3b); assertTrue(provider.getUnderlyingProvider().getAllValueKeys().contains(test1Specification)); assertTrue(provider.getUnderlyingProvider().getAllValueKeys().contains(test2Specification)); assertTrue(provider.getUnderlyingProvider().getAllValueKeys().contains(test3Specification)); final MarketDataSnapshot snapshot = provider.snapshot(null); snapshot.init(Collections.<ValueSpecification>emptySet(), 0, TimeUnit.MILLISECONDS); final Double test1Value = (Double) snapshot.query(test1Specification); assertNotNull(test1Value); assertEquals(52.07, test1Value, 0.000001); final Double test2Value = (Double) snapshot.query(test2Specification); assertNotNull(test2Value); assertEquals(52.07, test2Value, 0.000001); final Double test3Value = (Double) snapshot.query(test3Specification); assertNotNull(test3Value); assertEquals(52.17, test3Value, 0.000001); assertNull(snapshot.query(constructSpecification("invalidticker"))); provider.unsubscribe(test1Specification); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test1Specification)); assertTrue(provider.getUnderlyingProvider().getAllValueKeys().contains(test2Specification)); assertTrue(provider.getUnderlyingProvider().getAllValueKeys().contains(test3Specification)); assertEquals(0, liveDataClient.getCancelRequests().size()); provider.unsubscribe(test2Specification); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test1Specification)); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test2Specification)); assertTrue(provider.getUnderlyingProvider().getAllValueKeys().contains(test3Specification)); assertEquals(1, liveDataClient.getCancelRequests().size()); provider.unsubscribe(test3Specification); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test1Specification)); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test2Specification)); assertTrue(provider.getUnderlyingProvider().getAllValueKeys().contains(test3Specification)); assertEquals(1, liveDataClient.getCancelRequests().size()); provider.unsubscribe(test3Specification); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test1Specification)); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test2Specification)); assertTrue(provider.getUnderlyingProvider().getAllValueKeys().contains(test3Specification)); assertEquals(1, liveDataClient.getCancelRequests().size()); provider.unsubscribe(test3Specification); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test1Specification)); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test2Specification)); assertFalse(provider.getUnderlyingProvider().getAllValueKeys().contains(test3Specification)); assertEquals(2, liveDataClient.getCancelRequests().size()); } finally { liveDataClient.close(); } } @Test public void testFullyQualifiedSpecSameAsRequestSpec() { // Tests rewrite for PLAT-5947 final TestLiveDataClient liveDataClient = new TestLiveDataClient(); try { FixedMarketDataAvailabilityProvider availabilityProvider = new FixedMarketDataAvailabilityProvider(); availabilityProvider.addAvailableData(getTicker("test1"), constructSpecification("test1")); availabilityProvider.addAvailableData(getTicker("test2"), constructSpecification("test2")); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, availabilityProvider.getAvailabilityFilter(), UserPrincipal.getTestUser()); ValueSpecification test1Specification = provider.getAvailabilityProvider(MarketData.live()).getAvailability(constructTargetSpec("test1"), getTicker("test1"), constructRequirement("test1")); ValueSpecification test2Specification = provider.getAvailabilityProvider(MarketData.live()).getAvailability(constructTargetSpec("test2"), getTicker("test2"), constructRequirement("test2")); // Make the fully-qualified specification the same as one of the requested specifications LiveDataSpecification test1test2FullyQualifiedSpecification = LiveMarketDataAvailabilityProvider.getLiveDataSpecification(test1Specification); provider.subscribe(test1Specification); provider.subscribe(test2Specification); assertEquals(2, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(2, liveDataClient.getSubscriptionRequests().size()); LiveDataSubscriptionResponse test1Response = new LiveDataSubscriptionResponse(LiveMarketDataAvailabilityProvider.getLiveDataSpecification(test1Specification), LiveDataSubscriptionResult.SUCCESS, null, test1test2FullyQualifiedSpecification, "test1test2", null); LiveDataSubscriptionResponse test2Response = new LiveDataSubscriptionResponse(LiveMarketDataAvailabilityProvider.getLiveDataSpecification(test2Specification), LiveDataSubscriptionResult.SUCCESS, null, test1test2FullyQualifiedSpecification, "test1test2", null); provider.subscriptionResultsReceived(ImmutableList.of(test1Response, test2Response)); liveDataClient.subscriptionRequestSatisfied( Iterables.getOnlyElement(liveDataClient.getSubscriptionRequests().get(0)), test1Response); liveDataClient.subscriptionRequestSatisfied( Iterables.getOnlyElement(liveDataClient.getSubscriptionRequests().get(1)), test2Response); assertEquals(2, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(2, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(2, liveDataClient.getSubscriptionRequests().size()); final MutableFudgeMsg msg1 = new FudgeContext().newMessage(); msg1.add(_marketDataRequirement, 52.07); liveDataClient.marketDataReceived(test1test2FullyQualifiedSpecification, msg1); final MarketDataSnapshot snapshot = provider.snapshot(null); snapshot.init(Collections.<ValueSpecification>emptySet(), 0, TimeUnit.MILLISECONDS); final Double test1Value = (Double) snapshot.query(test1Specification); assertNotNull(test1Value); assertEquals(52.07, test1Value, 0.000001); final Double test2Value = (Double) snapshot.query(test2Specification); assertNotNull(test2Value); assertEquals(52.07, test2Value, 0.000001); } finally { liveDataClient.close(); } } @Test public void testUnsubscribeWhileNewSubscriptionPending() { TestLiveDataClient liveDataClient = new TestLiveDataClient(); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser()); ValueSpecification primitiveSpecification = createPrimitiveValueSpec("AAPL."); provider.subscribe(primitiveSpecification); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); provider.unsubscribe(primitiveSpecification); assertEquals(0, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); assertEquals(0, liveDataClient.getCancelRequests().size()); LiveDataSpecification liveDataSpecification = LiveMarketDataAvailabilityProvider.getLiveDataSpecification(primitiveSpecification); LiveDataSubscriptionResponse primitiveResponse = new LiveDataSubscriptionResponse(liveDataSpecification, LiveDataSubscriptionResult.SUCCESS, null, liveDataSpecification, "primitive", null); provider.subscriptionResultReceived(primitiveResponse); assertEquals(0, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); assertEquals(1, liveDataClient.getCancelRequests().size()); } @Test public void testUnsubscribeWhileNewSubscriptionPendingWithExistingActiveSubscriptionOnSameFullyQualifiedSpecification() { TestLiveDataClient liveDataClient = new TestLiveDataClient(); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser()); ValueSpecification test1Specification = createPrimitiveValueSpec("AAPL."); provider.subscribe(test1Specification); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); LiveDataSpecification test1LiveDataSpecification = LiveMarketDataAvailabilityProvider.getLiveDataSpecification(test1Specification); LiveDataSubscriptionResponse test1Response = new LiveDataSubscriptionResponse(test1LiveDataSpecification, LiveDataSubscriptionResult.SUCCESS, null, test1LiveDataSpecification, "primitive", null); provider.subscriptionResultReceived(test1Response); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); ValueSpecification test2Specification = createPrimitiveValueSpec("VOD."); provider.subscribe(test2Specification); assertEquals(2, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(2, liveDataClient.getSubscriptionRequests().size()); provider.unsubscribe(test2Specification); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(2, liveDataClient.getSubscriptionRequests().size()); // Simulate the test2 subscription request now receiving a response indicating the same fully-qualified specification as test1 LiveDataSpecification test2LiveDataSpecification = LiveMarketDataAvailabilityProvider.getLiveDataSpecification(test2Specification); LiveDataSubscriptionResponse test2Response = new LiveDataSubscriptionResponse(test2LiveDataSpecification, LiveDataSubscriptionResult.SUCCESS, null, test1LiveDataSpecification, "primitive", null); provider.subscriptionResultReceived(test2Response); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(2, liveDataClient.getSubscriptionRequests().size()); // We already have existing demand for the fully-qualified spec, so we shouldn't cancel the subscription assertEquals(0, liveDataClient.getCancelRequests().size()); } @Test public void testDuplicateSubscriptionResponseReceived() { TestLiveDataClient liveDataClient = new TestLiveDataClient(); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser()); ValueSpecification primitiveSpecification = createPrimitiveValueSpec("AAPL."); provider.subscribe(primitiveSpecification); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); LiveDataSpecification liveDataSpecification = LiveMarketDataAvailabilityProvider.getLiveDataSpecification(primitiveSpecification); LiveDataSubscriptionResponse primitiveResponse = new LiveDataSubscriptionResponse(liveDataSpecification, LiveDataSubscriptionResult.SUCCESS, null, liveDataSpecification, "primitive", null); provider.subscriptionResultReceived(primitiveResponse); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); assertEquals(0, liveDataClient.getCancelRequests().size()); provider.subscriptionResultReceived(primitiveResponse); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); assertEquals(0, liveDataClient.getCancelRequests().size()); } @Test public void testResubscribe() { TestLiveDataClient liveDataClient = new TestLiveDataClient(); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser()); ValueSpecification primitiveSpecification = createPrimitiveValueSpec("AAPL."); provider.subscribe(primitiveSpecification); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); LiveDataSpecification liveDataSpecification = LiveMarketDataAvailabilityProvider.getLiveDataSpecification(primitiveSpecification); LiveDataSubscriptionResponse primitiveResponse = new LiveDataSubscriptionResponse(liveDataSpecification, LiveDataSubscriptionResult.SUCCESS, null, liveDataSpecification, "primitive", null); provider.subscriptionResultReceived(primitiveResponse); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); assertEquals(0, liveDataClient.getCancelRequests().size()); provider.resubscribe(ImmutableSet.of(liveDataSpecification.getIdentifiers().getExternalIds().first().getScheme())); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(2, liveDataClient.getSubscriptionRequests().size()); assertEquals(0, liveDataClient.getCancelRequests().size()); provider.subscriptionResultReceived(primitiveResponse); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(1, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(2, liveDataClient.getSubscriptionRequests().size()); assertEquals(0, liveDataClient.getCancelRequests().size()); } @Test public void testDifferentSpecsSameLiveData1() { TestLiveDataClient liveDataClient = new TestLiveDataClient(); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser()); ValueSpecification primitive = createPrimitiveValueSpec("AAPL."); ValueSpecification sec = createSecurityValueSpec("AAPL."); provider.subscribe(primitive); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); provider.subscribe(sec); // Already have a pending request for this LiveDataSpecification assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); } @Test public void testDifferentSpecsSameLiveData2() { TestLiveDataClient liveDataClient = new TestLiveDataClient(); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser()); ValueSpecification primitive = createPrimitiveValueSpec("AAPL."); ValueSpecification sec = createSecurityValueSpec("AAPL."); provider.subscribe(ImmutableSet.of(primitive, sec)); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); } @Test public void testSubscriptionHasTotalSubscriberCount() { TestLiveDataClient liveDataClient = new TestLiveDataClient(); InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(liveDataClient, mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser()); ValueSpecification primitive = createPrimitiveValueSpec("AAPL."); ValueSpecification sec = createSecurityValueSpec("AAPL."); provider.subscribe(primitive); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); provider.subscribe(primitive); provider.subscribe(sec); assertEquals(1, provider.getRequestedLiveDataSubscriptionCount()); assertEquals(0, provider.getActiveValueSpecificationSubscriptionCount()); assertEquals(1, liveDataClient.getSubscriptionRequests().size()); SubscriptionInfo sub = Iterables.getFirst(provider.queryByTicker("AAPL.").values(), null); assertEquals("PENDING", sub.getState()); assertEquals(3, sub.getSubscriberCount()); } private ValueSpecification createPrimitiveValueSpec(String ticker) { // Create spec of the form // VSpec[Market_All, CTSpec[PRIMITIVE, ExternalId-ACTIVFEED_TICKER~AAPL.], {Normalization=[OpenGamma],Function=[LiveMarketData],Id=[ACTIVFEED_TICKER~AAPL.]}] ExternalId externalId = ExternalSchemes.activFeedTickerSecurityId(ticker); ValueProperties properties = ValueProperties.builder().with(ValuePropertyNames.FUNCTION, "LiveMarketData").with("Normalization", "OpenGamma").with("Id", externalId.toString()).get(); ComputationTargetSpecification targetSpecification = new ComputationTargetSpecification(ComputationTargetType.PRIMITIVE, UniqueId.of("ExternalId", externalId.toString())); return new ValueSpecification("Market_All", targetSpecification, properties); } private ValueSpecification createSecurityValueSpec(String ticker) { // Create spec of the form // VSpec[Market_All, CTSpec[SECURITY, DbSec~295921~0], {Normalization=[OpenGamma],Function=[LiveMarketData],Id=[ACTIVFEED_TICKER~AAPL.]}] ExternalId externalId = ExternalSchemes.activFeedTickerSecurityId(ticker); ValueProperties properties = ValueProperties.builder().with(ValuePropertyNames.FUNCTION, "LiveMarketData").with("Normalization", "OpenGamma").with("Id", externalId.toString()).get(); ComputationTargetSpecification targetSpecification = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("DbSec", "1234", "1")); return new ValueSpecification("Market_All", targetSpecification, properties); } }