/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.transport; import java.util.concurrent.ExecutorService; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import com.opengamma.transport.socket.SocketEndPointDescriptionProvider; import com.opengamma.transport.socket.SocketFudgeConnection; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.SingletonFactoryBean; /** * Creates a {@link FudgeConnection} based on an end-point description. Typically an end-point is determined by a REST query to the host. */ public class FudgeConnectionFactoryBean extends SingletonFactoryBean<FudgeConnection> { private FudgeContext _fudgeContext; private ExecutorService _executorService; private EndPointDescriptionProvider _endPointDescriptionProvider; public void setFudgeContext(final FudgeContext fudgeContext) { _fudgeContext = fudgeContext; } public FudgeContext getFudgeContext() { return _fudgeContext; } public void setExecutorService(final ExecutorService executorService) { _executorService = executorService; } public ExecutorService getExecutorService() { return _executorService; } public void setEndPointDescription(final EndPointDescriptionProvider endPoint) { _endPointDescriptionProvider = endPoint; } public EndPointDescriptionProvider getEndPointDescription() { return _endPointDescriptionProvider; } private FudgeMsg resolveEndPointDescription() { if (_endPointDescriptionProvider != null) { ArgumentChecker.notNull(getFudgeContext(), "fudgeContext"); return _endPointDescriptionProvider.getEndPointDescription(getFudgeContext()); } else { return null; } } @Override protected FudgeConnection createObject() { final FudgeMsg endPoint = resolveEndPointDescription(); ArgumentChecker.notNull(endPoint, "endPointDescription"); if (SocketEndPointDescriptionProvider.TYPE_VALUE.equals(endPoint.getString(SocketEndPointDescriptionProvider.TYPE_KEY))) { final SocketFudgeConnection connection = (getExecutorService() != null) ? new SocketFudgeConnection(getFudgeContext(), getExecutorService()) : new SocketFudgeConnection(getFudgeContext()); connection.setServer(endPoint); return connection; } throw new IllegalArgumentException("Don't know how to create end-point " + endPoint); } }