/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.livedata.resolver; import org.fudgemsg.FudgeMsg; import org.fudgemsg.FudgeMsgEnvelope; import org.fudgemsg.mapping.FudgeDeserializer; import org.fudgemsg.mapping.FudgeSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.id.ExternalId; import com.opengamma.livedata.LiveDataSpecification; import com.opengamma.livedata.msg.ResolveRequest; import com.opengamma.livedata.msg.ResolveResponse; import com.opengamma.transport.FudgeRequestReceiver; import com.opengamma.util.ArgumentChecker; /** * Receives <code>ResolveRequests</code>, passes them onto a delegate <code>IdResolver</code>, * and returns <code>ResolveResponses</code>. * * @author pietari */ public class IdResolverServer implements FudgeRequestReceiver { private static final Logger s_logger = LoggerFactory.getLogger(IdResolverServer.class); private final IdResolver _delegate; public IdResolverServer(IdResolver delegate) { ArgumentChecker.notNull(delegate, "Delegate specification resolver"); _delegate = delegate; } @Override public FudgeMsg requestReceived(FudgeDeserializer deserializer, FudgeMsgEnvelope requestEnvelope) { FudgeMsg requestFudgeMsg = requestEnvelope.getMessage(); ResolveRequest resolveRequest = ResolveRequest.fromFudgeMsg(deserializer, requestFudgeMsg); s_logger.debug("Received resolve request for {}", resolveRequest.getRequestedSpecification()); LiveDataSpecification requestedSpec = resolveRequest.getRequestedSpecification(); ExternalId resolvedId = _delegate.resolve(requestedSpec.getIdentifiers()); LiveDataSpecification resolvedSpec = new LiveDataSpecification( requestedSpec.getNormalizationRuleSetId(), resolvedId); ResolveResponse response = new ResolveResponse(resolvedSpec); FudgeMsg responseFudgeMsg = response.toFudgeMsg(new FudgeSerializer(deserializer.getFudgeContext())); return responseFudgeMsg; } }