package org.marketcetera.saclient; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.marketcetera.module.ModuleInfo; import org.marketcetera.module.ModuleURN; import org.marketcetera.util.log.I18NBoundMessage3P; import org.marketcetera.util.misc.ClassVersion; import org.marketcetera.util.ws.stateful.Client; import org.marketcetera.util.ws.stateful.ClientContext; import org.marketcetera.util.ws.wrappers.MapWrapper; /* $License$ */ /** * The client implementation that implements the details of communicating * with the remote strategy agent. * * @author anshul@marketcetera.com * @version $Id: SAClientImpl.java 16879 2014-04-15 21:40:25Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: SAClientImpl.java 16879 2014-04-15 21:40:25Z colin $") class SAClientImpl extends AbstractSAClient { /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#getProviders() */ @Override public List<ModuleURN> getProviders() throws ConnectionException { failIfDisconnected(); try { List<ModuleURN> list = mSAService.getProviders(getServiceContext()); //translate nulls to empty lists for more usable API. return list != null? list: new ArrayList<ModuleURN>(); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#getInstances(org.marketcetera.module.ModuleURN) */ @Override public List<ModuleURN> getInstances(ModuleURN inProviderURN) throws ConnectionException { failIfDisconnected(); try { List<ModuleURN> list = mSAService.getInstances(getServiceContext(), inProviderURN); //translate nulls to empty lists for more usable API. return list != null? list: new ArrayList<ModuleURN>(); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#getModuleInfo(org.marketcetera.module.ModuleURN) */ @Override public ModuleInfo getModuleInfo(ModuleURN inURN) throws ConnectionException { failIfDisconnected(); try { return mSAService.getModuleInfo(getServiceContext(), inURN); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#start(org.marketcetera.module.ModuleURN) */ @Override public void start(ModuleURN inURN) throws ConnectionException { failIfDisconnected(); try { mSAService.start(getServiceContext(), inURN); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#stop(org.marketcetera.module.ModuleURN) */ @Override public void stop(ModuleURN inURN) throws ConnectionException { failIfDisconnected(); try { mSAService.stop(getServiceContext(), inURN); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#delete(org.marketcetera.module.ModuleURN) */ @Override public void delete(ModuleURN inURN) throws ConnectionException { failIfDisconnected(); try { mSAService.delete(getServiceContext(), inURN); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#getProperties(org.marketcetera.module.ModuleURN) */ @Override public Map<String,Object> getProperties(ModuleURN inURN) throws ConnectionException { failIfDisconnected(); try { MapWrapper<String,Object> value = mSAService.getProperties(getServiceContext(), inURN); return value == null? null: value.getMap(); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#setProperties(org.marketcetera.module.ModuleURN, java.util.Map) */ @Override public Map<String,Object> setProperties(ModuleURN inURN, Map<String,Object> inProperties) throws ConnectionException { failIfDisconnected(); try { MapWrapper<String,Object> map = mSAService.setProperties(getServiceContext(), inURN, new MapWrapper<String,Object>(inProperties)); return map == null ? null : map.getMap(); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#createStrategy(org.marketcetera.saclient.CreateStrategyParameters) */ @Override public ModuleURN createStrategy(CreateStrategyParameters inParameters) throws ConnectionException { failIfDisconnected(); try { return mSAService.createStrategy(getServiceContext(), inParameters); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#getStrategyCreateParms(org.marketcetera.module.ModuleURN) */ @Override public CreateStrategyParameters getStrategyCreateParms(ModuleURN inURN) throws ConnectionException { failIfDisconnected(); try { return mSAService.getStrategyCreateParms(getServiceContext(), inURN); } catch (Exception e) { throw wrapRemoteFailure(e); } } /* (non-Javadoc) * @see org.marketcetera.saclient.SAClient#sendData(java.lang.Object) */ @Override public void sendData(Object inData) throws ConnectionException { failIfDisconnected(); try { mSAService.sendData(getServiceContext(), inData); } catch (Exception e) { throw wrapRemoteFailure(e); } } /** * Creates an instance. Once created, the client is connected to the * remote strategy agent. * * @param inParameters the connection details. Cannot be null. * @throws ConnectionException if there were errors connecting to the remote strategy agent. */ SAClientImpl(SAClientParameters inParameters) throws ConnectionException { super(inParameters); } /* (non-Javadoc) * @see org.marketcetera.saclient.AbstractSAClient#doStop() */ @Override protected void doStop() { try { if(mServiceClient != null) { mServiceClient.logout(); } } catch (Exception ignored) { } finally { mServiceClient = null; } } /* (non-Javadoc) * @see org.marketcetera.saclient.AbstractSAClient#doStart() */ @Override protected void doStart() { try { mServiceClient = new Client(parameters.getHostname(), parameters.getPort(), SAClientVersion.APP_ID, parameters.getContextClassProvider()); mServiceClient.login(parameters.getUsername(), parameters.getPassword()); mSAService = mServiceClient.getService(SAService.class); } catch (Exception e) { throw new ConnectionException(e, new I18NBoundMessage3P(Messages.ERROR_WS_CONNECT, parameters.getHostname(), String.valueOf(parameters.getPort()), parameters.getUsername())); } } /** * Gets the client context to use when making WS calls. * * @return the client context. */ private ClientContext getServiceContext() { return mServiceClient.getContext(); } /** * connection to web services service */ private Client mServiceClient; /** * provides services */ private SAService mSAService; }