/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.analyticservice; import java.util.Collection; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.core.position.Position; import com.opengamma.core.position.PositionSource; import com.opengamma.core.position.Trade; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.id.ExternalId; import com.opengamma.livedata.resolver.AbstractResolver; import com.opengamma.util.ArgumentChecker; /** * Resolves */ public class DefaultJmsTopicNameResolver extends AbstractResolver<JmsTopicNameResolveRequest, String> implements JmsTopicNameResolver { /** Logger **/ private static final Logger s_logger = LoggerFactory.getLogger(DefaultJmsTopicNameResolver.class); private static final String PROVIDER_ID_FIELD = "providerId"; private static final String PREFIX = "OGAnalytics"; private static final String MISSING_PROVIDER_ID = "UNKNOWN_ID"; private final PositionSource _positionSource; public DefaultJmsTopicNameResolver(final PositionSource positionSource) { ArgumentChecker.notNull(positionSource, "positionSource"); _positionSource = positionSource; } @Override public String resolve(JmsTopicNameResolveRequest request) { ValueSpecification valueSpecification = request.getValueSpecification(); Position position = _positionSource.getPosition(valueSpecification.getTargetSpecification().getUniqueId()); String providerId = getProviderId(position); String result = PREFIX + SEPARATOR + providerId + SEPARATOR + request.getCalcConfig() + SEPARATOR + request.getValueSpecification().getValueName(); // if (request.getValueSpecification().getProperties() != null) { // result += SEPARATOR + request.getValueSpecification().getProperties().toSimpleString(); // } s_logger.debug("{} resolved to {}", request, result); return result; } private String getProviderId(final Position position) { String result = null; Map<String, String> positionAttrs = position.getAttributes(); if (positionAttrs != null) { result = positionAttrs.get(PROVIDER_ID_FIELD); if (result == null) { Collection<Trade> trades = position.getTrades(); if (trades != null) { for (Trade trade : trades) { if (trade != null) { Map<String, String> tradeAttrs = trade.getAttributes(); result = tradeAttrs.get(PROVIDER_ID_FIELD); if (result != null) { break; } } } } } } if (result == null) { result = MISSING_PROVIDER_ID; } else { result = ExternalId.parse(result).getValue(); } return result; } }