org.marketcetera.admin.AdminRpcClient Maven / Gradle / Ivy
package org.marketcetera.admin;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.PostConstruct;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.marketcetera.admin.AdminClient;
import org.marketcetera.admin.AdminRpc;
import org.marketcetera.admin.InstanceData;
import org.marketcetera.admin.Permission;
import org.marketcetera.admin.PermissionFactory;
import org.marketcetera.admin.Role;
import org.marketcetera.admin.RoleFactory;
import org.marketcetera.admin.User;
import org.marketcetera.admin.UserAttribute;
import org.marketcetera.admin.UserAttributeFactory;
import org.marketcetera.admin.UserAttributeType;
import org.marketcetera.admin.UserFactory;
import org.marketcetera.admin.AdminRpc.AdminRpcService.BlockingInterface;
import org.marketcetera.admin.impl.SimpleFixSessionAttributeDescriptor;
import org.marketcetera.admin.impl.SimpleInstanceData;
import org.marketcetera.core.ApplicationVersion;
import org.marketcetera.core.Util;
import org.marketcetera.core.VersionInfo;
import org.marketcetera.fix.ActiveFixSession;
import org.marketcetera.fix.FixSession;
import org.marketcetera.fix.FixSessionAttributeDescriptor;
import org.marketcetera.fix.FixSessionStatus;
import org.marketcetera.fix.SimpleFixSession;
import org.marketcetera.persist.CollectionPageResponse;
import org.marketcetera.persist.PageRequest;
import org.marketcetera.persist.PageResponse;
import org.marketcetera.persist.Sort;
import org.marketcetera.persist.SortDirection;
import org.marketcetera.rpc.BaseRpcClient;
import org.marketcetera.util.log.SLF4JLoggerProxy;
import org.marketcetera.util.rpc.BaseRpc;
import org.marketcetera.util.rpc.BaseRpc.LoginRequest;
import org.marketcetera.util.rpc.BaseRpc.LoginResponse;
import org.marketcetera.util.rpc.BaseRpc.LogoutRequest;
import org.marketcetera.util.rpc.BaseRpc.LogoutResponse;
import org.marketcetera.util.ws.tags.AppId;
import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.collect.Lists;
import com.google.protobuf.RpcController;
import com.google.protobuf.ServiceException;
import com.googlecode.protobuf.pro.duplex.RpcClientChannel;
/* $License$ */
/**
* Provides an RPC-based {@link AdminClient} implementation.
*
* @author Colin DuPlantis
* @version $Id$
* @since $Release$
*/
public class AdminRpcClient
extends BaseRpcClient
implements AdminClient
{
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#createFixSession(com.marketcetera.fix.FixSession)
*/
@Override
public FixSession createFixSession(FixSession inFixSession)
{
validateSession();
AdminRpc.CreateFixSessionRequest.Builder requestBuilder = AdminRpc.CreateFixSessionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting create FIX session for {}",
getSessionId(),
inFixSession);
requestBuilder.setSessionId(getSessionId().getValue());
if(inFixSession != null) {
AdminRpc.FixSession.Builder fixSessionBuilder = AdminRpc.FixSession.newBuilder();
fixSessionBuilder.setAcceptor(inFixSession.isAcceptor());
fixSessionBuilder.setAffinity(inFixSession.getAffinity());
if(inFixSession.getBrokerId() != null) {
fixSessionBuilder.setBrokerId(inFixSession.getBrokerId());
}
if(inFixSession.getDescription() != null) {
fixSessionBuilder.setDescription(inFixSession.getDescription());
}
if(inFixSession.getHost() != null) {
fixSessionBuilder.setHost(inFixSession.getHost());
}
if(inFixSession.getName() != null) {
fixSessionBuilder.setName(inFixSession.getName());
}
fixSessionBuilder.setPort(inFixSession.getPort());
if(inFixSession.getSessionId() != null) {
fixSessionBuilder.setSessionId(inFixSession.getSessionId());
}
BaseRpc.Properties.Builder propertiesBuilder = BaseRpc.Properties.newBuilder();
for(Map.Entry entry : inFixSession.getSessionSettings().entrySet()) {
BaseRpc.Property.Builder propertyBuilder = BaseRpc.Property.newBuilder();
if(entry.getKey() != null) {
propertyBuilder.setKey(entry.getKey());
propertyBuilder.setValue(entry.getValue());
propertiesBuilder.addProperty(propertyBuilder.build());
}
propertyBuilder.clear();
}
fixSessionBuilder.setSessionSettings(propertiesBuilder.build());
requestBuilder.setFixSession(fixSessionBuilder.build());
}
AdminRpc.CreateFixSessionResponse response = getClientService().createFixSession(getController(),
requestBuilder.build());
SimpleFixSession result = null;
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
if(response.hasFixSession()) {
// TODO fields
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminRpcClient#readFixSessions()
*/
@Override
public List readFixSessions()
{
validateSession();
AdminRpc.ReadFixSessionsRequest.Builder requestBuilder = AdminRpc.ReadFixSessionsRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting FIX sessions",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
AdminRpc.ReadFixSessionsResponse response = getClientService().readFixSessions(getController(),
requestBuilder.build());
List results = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.ActiveFixSession rpcFixSession : response.getFixSessionList()) {
SimpleFixSession fixSession = new SimpleFixSession();
if(rpcFixSession.getFixSession().hasAcceptor()) {
fixSession.setIsAcceptor(rpcFixSession.getFixSession().getAcceptor());
}
if(rpcFixSession.getFixSession().hasAffinity()) {
fixSession.setAffinity(rpcFixSession.getFixSession().getAffinity());
}
if(rpcFixSession.getFixSession().hasBrokerId()) {
fixSession.setBrokerId(rpcFixSession.getFixSession().getBrokerId());
}
if(rpcFixSession.getFixSession().hasDescription()) {
fixSession.setDescription(rpcFixSession.getFixSession().getDescription());
}
if(rpcFixSession.getFixSession().hasHost()) {
fixSession.setHost(rpcFixSession.getFixSession().getHost());
}
if(rpcFixSession.hasInstance()) {
fixSession.setInstance(rpcFixSession.getInstance());
}
if(rpcFixSession.hasSenderSeqNum()) {
fixSession.setSenderSequenceNumber(rpcFixSession.getSenderSeqNum());
}
if(rpcFixSession.hasTargetSeqNum()) {
fixSession.setTargetSequenceNumber(rpcFixSession.getTargetSeqNum());
}
if(rpcFixSession.getFixSession().hasName()) {
fixSession.setName(rpcFixSession.getFixSession().getName());
}
if(rpcFixSession.getFixSession().hasPort()) {
fixSession.setPort(rpcFixSession.getFixSession().getPort());
}
if(rpcFixSession.getFixSession().hasSessionId()) {
fixSession.setSessionId(rpcFixSession.getFixSession().getSessionId());
}
if(rpcFixSession.hasStatus()) {
fixSession.setStatus(FixSessionStatus.valueOf(rpcFixSession.getStatus()));
}
if(rpcFixSession.getFixSession().hasSessionSettings()) {
for(BaseRpc.Property property : rpcFixSession.getFixSession().getSessionSettings().getPropertyList()) {
String key = property.hasKey()?property.getKey():null;
String value = property.hasValue()?property.getValue():null;
if(key != null) {
fixSession.getSessionSettings().put(key,value);
}
}
}
results.add(fixSession);
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
results);
return results;
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#readFixSessions(org.marketcetera.core.PageRequest)
*/
@Override
public CollectionPageResponse readFixSessions(PageRequest inPageRequest)
{
validateSession();
AdminRpc.ReadFixSessionsRequest.Builder requestBuilder = AdminRpc.ReadFixSessionsRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting FIX sessions",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setPage(buildPageRequest(inPageRequest));
AdminRpc.ReadFixSessionsResponse response = getClientService().readFixSessions(getController(),
requestBuilder.build());
List dataElements = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.ActiveFixSession rpcFixSession : response.getFixSessionList()) {
SimpleFixSession fixSession = new SimpleFixSession();
if(rpcFixSession.getFixSession().hasAcceptor()) {
fixSession.setIsAcceptor(rpcFixSession.getFixSession().getAcceptor());
}
if(rpcFixSession.getFixSession().hasAffinity()) {
fixSession.setAffinity(rpcFixSession.getFixSession().getAffinity());
}
if(rpcFixSession.getFixSession().hasBrokerId()) {
fixSession.setBrokerId(rpcFixSession.getFixSession().getBrokerId());
}
if(rpcFixSession.getFixSession().hasDescription()) {
fixSession.setDescription(rpcFixSession.getFixSession().getDescription());
}
if(rpcFixSession.getFixSession().hasHost()) {
fixSession.setHost(rpcFixSession.getFixSession().getHost());
}
if(rpcFixSession.hasInstance()) {
fixSession.setInstance(rpcFixSession.getInstance());
}
if(rpcFixSession.hasSenderSeqNum()) {
fixSession.setSenderSequenceNumber(rpcFixSession.getSenderSeqNum());
}
if(rpcFixSession.hasTargetSeqNum()) {
fixSession.setTargetSequenceNumber(rpcFixSession.getTargetSeqNum());
}
if(rpcFixSession.getFixSession().hasName()) {
fixSession.setName(rpcFixSession.getFixSession().getName());
}
if(rpcFixSession.getFixSession().hasPort()) {
fixSession.setPort(rpcFixSession.getFixSession().getPort());
}
if(rpcFixSession.getFixSession().hasSessionId()) {
fixSession.setSessionId(rpcFixSession.getFixSession().getSessionId());
}
if(rpcFixSession.hasStatus()) {
fixSession.setStatus(FixSessionStatus.valueOf(rpcFixSession.getStatus()));
}
if(rpcFixSession.getFixSession().hasSessionSettings()) {
for(BaseRpc.Property property : rpcFixSession.getFixSession().getSessionSettings().getPropertyList()) {
String key = property.hasKey()?property.getKey():null;
String value = property.hasValue()?property.getValue():null;
if(key != null) {
fixSession.getSessionSettings().put(key,value);
}
}
}
dataElements.add(fixSession);
}
CollectionPageResponse result = new CollectionPageResponse<>();
if(response.hasPage()) {
addPageToResponse(response.getPage(),
result);
}
result.setElements(dataElements);
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#updateFixSession(java.lang.String, com.marketcetera.fix.FixSession)
*/
@Override
public void updateFixSession(String inIncomingName,
FixSession inFixSession)
{
validateSession();
AdminRpc.UpdateFixSessionRequest.Builder requestBuilder = AdminRpc.UpdateFixSessionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} update FIX session {}: {}",
getSessionId(),
inIncomingName,
inFixSession);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inIncomingName);
if(inFixSession != null) {
AdminRpc.FixSession.Builder fixSessionBuilder = AdminRpc.FixSession.newBuilder();
fixSessionBuilder.setAcceptor(inFixSession.isAcceptor());
fixSessionBuilder.setAffinity(inFixSession.getAffinity());
if(inFixSession.getBrokerId() != null) {
fixSessionBuilder.setBrokerId(inFixSession.getBrokerId());
}
if(inFixSession.getDescription() != null) {
fixSessionBuilder.setDescription(inFixSession.getDescription());
}
if(inFixSession.getHost() != null) {
fixSessionBuilder.setHost(inFixSession.getHost());
}
if(inFixSession.getName() != null) {
fixSessionBuilder.setName(inFixSession.getName());
}
fixSessionBuilder.setPort(inFixSession.getPort());
if(inFixSession.getSessionId() != null) {
fixSessionBuilder.setSessionId(inFixSession.getSessionId());
}
BaseRpc.Properties.Builder propertiesBuilder = BaseRpc.Properties.newBuilder();
for(Map.Entry entry : inFixSession.getSessionSettings().entrySet()) {
BaseRpc.Property.Builder propertyBuilder = BaseRpc.Property.newBuilder();
if(entry.getKey() != null) {
propertyBuilder.setKey(entry.getKey());
propertyBuilder.setValue(entry.getValue());
propertiesBuilder.addProperty(propertyBuilder.build());
}
propertyBuilder.clear();
}
fixSessionBuilder.setSessionSettings(propertiesBuilder.build());
requestBuilder.setFixSession(fixSessionBuilder.build());
}
AdminRpc.UpdateFixSessionResponse response = getClientService().updateFixSession(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#enableFixSession(java.lang.String)
*/
@Override
public void enableFixSession(String inName)
{
validateSession();
AdminRpc.EnableFixSessionRequest.Builder requestBuilder = AdminRpc.EnableFixSessionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} enable FIX session {}",
getSessionId(),
inName);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inName);
AdminRpc.EnableFixSessionResponse response = getClientService().enableFixSession(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#disableFixSession(java.lang.String)
*/
@Override
public void disableFixSession(String inName)
{
validateSession();
AdminRpc.DisableFixSessionRequest.Builder requestBuilder = AdminRpc.DisableFixSessionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} disable FIX session {}",
getSessionId(),
inName);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inName);
AdminRpc.DisableFixSessionResponse response = getClientService().disableFixSession(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#deleteFixSession(java.lang.String)
*/
@Override
public void deleteFixSession(String inName)
{
validateSession();
AdminRpc.DeleteFixSessionRequest.Builder requestBuilder = AdminRpc.DeleteFixSessionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} delete FIX session {}",
getSessionId(),
inName);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inName);
AdminRpc.DeleteFixSessionResponse response = getClientService().deleteFixSession(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#stopFixSession(java.lang.String)
*/
@Override
public void stopFixSession(String inName)
{
validateSession();
AdminRpc.StopFixSessionRequest.Builder requestBuilder = AdminRpc.StopFixSessionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} stop FIX session {}",
getSessionId(),
inName);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inName);
AdminRpc.StopFixSessionResponse response = getClientService().stopFixSession(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#startFixSession(java.lang.String)
*/
@Override
public void startFixSession(String inName)
{
validateSession();
AdminRpc.StartFixSessionRequest.Builder requestBuilder = AdminRpc.StartFixSessionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} start FIX session {}",
getSessionId(),
inName);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inName);
AdminRpc.StartFixSessionResponse response = getClientService().startFixSession(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#updateSequenceNumbers(java.lang.String, int, int)
*/
@Override
public void updateSequenceNumbers(String inSessionName,
int inSenderSequenceNumber,
int inTargetSequenceNumber)
{
validateSession();
AdminRpc.UpdateSequenceNumbersRequest.Builder requestBuilder = AdminRpc.UpdateSequenceNumbersRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} update sequence numbers for FIX session {} to {}:{}",
getSessionId(),
inSessionName,
inSenderSequenceNumber,
inTargetSequenceNumber);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inSessionName);
requestBuilder.setSenderSequenceNumber(inSenderSequenceNumber);
requestBuilder.setTargetSequenceNumber(inTargetSequenceNumber);
AdminRpc.UpdateSequenceNumbersResponse response = getClientService().updateSequenceNumbers(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#changeSenderSequenceNumber(java.lang.String, int)
*/
@Override
public void updateSenderSequenceNumber(String inSessionName,
int inSenderSequenceNumber)
{
validateSession();
AdminRpc.UpdateSequenceNumbersRequest.Builder requestBuilder = AdminRpc.UpdateSequenceNumbersRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} update sender sequence number for FIX session {} to {}",
getSessionId(),
inSessionName,
inSenderSequenceNumber);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inSessionName);
requestBuilder.setSenderSequenceNumber(inSenderSequenceNumber);
AdminRpc.UpdateSequenceNumbersResponse response = getClientService().updateSequenceNumbers(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#changeTargetSequenceNumber(java.lang.String, int)
*/
@Override
public void updateTargetSequenceNumber(String inSessionName,
int inTargetSequenceNumber)
{
validateSession();
AdminRpc.UpdateSequenceNumbersRequest.Builder requestBuilder = AdminRpc.UpdateSequenceNumbersRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} update target sequence number for FIX session {} to {}",
getSessionId(),
inSessionName,
inTargetSequenceNumber);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setName(inSessionName);
requestBuilder.setTargetSequenceNumber(inTargetSequenceNumber);
AdminRpc.UpdateSequenceNumbersResponse response = getClientService().updateSequenceNumbers(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#getInstanceData(int)
*/
@Override
public InstanceData getInstanceData(int inAffinity)
{
validateSession();
AdminRpc.InstanceDataRequest.Builder requestBuilder = AdminRpc.InstanceDataRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting instance data",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setAffinity(inAffinity);
AdminRpc.InstanceDataResponse response = getClientService().getInstanceData(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
SimpleInstanceData result = new SimpleInstanceData();
if(response.hasInstanceData()) {
AdminRpc.InstanceData rpcInstanceData = response.getInstanceData();
if(rpcInstanceData.hasHostname()) {
result.setHostname(rpcInstanceData.getHostname());
}
result.setPort(rpcInstanceData.getPort());
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#getFixSessionAttributeDescriptors()
*/
@Override
public Collection getFixSessionAttributeDescriptors()
{
validateSession();
AdminRpc.ReadFixSessionAttributeDescriptorsRequest.Builder requestBuilder = AdminRpc.ReadFixSessionAttributeDescriptorsRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting FIX session attribute descriptors",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
AdminRpc.ReadFixSessionAttributeDescriptorsResponse response = getClientService().readFixSessionAttributeDescriptors(getController(),
requestBuilder.build());
Collection results = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.FixSessionAttributeDescriptor rpcDescriptor : response.getFixSessionAttributeDescriptorsList()) {
SimpleFixSessionAttributeDescriptor descriptor = new SimpleFixSessionAttributeDescriptor();
if(rpcDescriptor.hasAdvice()) {
descriptor.setAdvice(rpcDescriptor.getAdvice());
}
if(rpcDescriptor.hasDefaultValue()) {
descriptor.setDefaultValue(rpcDescriptor.getDefaultValue());
}
if(rpcDescriptor.hasDescription()) {
descriptor.setDescription(rpcDescriptor.getDescription());
}
if(rpcDescriptor.hasName()) {
descriptor.setName(rpcDescriptor.getName());
}
if(rpcDescriptor.hasPattern()) {
descriptor.setPattern(rpcDescriptor.getPattern());
}
if(rpcDescriptor.hasRequired()) {
descriptor.setRequired(rpcDescriptor.getRequired());
}
results.add(descriptor);
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
results);
return results;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminRpcClient#getPermissionsForUsername()
*/
@Override
public Set getPermissionsForCurrentUser()
{
validateSession();
AdminRpc.PermissionsForUsernameRequest.Builder requestBuilder = AdminRpc.PermissionsForUsernameRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting permissions",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
AdminRpc.PermissionsForUsernameResponse response = getClientService().getPermissionsForUsername(getController(),
requestBuilder.build());
Set results = new HashSet<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
results.addAll(response.getPermissionsList());
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
results);
return results;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminRpcClient#changeUserPassword(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void changeUserPassword(String inUsername,
String inOldPassword,
String inNewPassword)
{
validateSession();
AdminRpc.ChangeUserPasswordRequest.Builder requestBuilder = AdminRpc.ChangeUserPasswordRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting change user password for {}",
getSessionId(),
inUsername);
requestBuilder.setSessionId(getSessionId().getValue());
inUsername = StringUtils.trimToNull(inUsername);
if(inUsername != null) {
requestBuilder.setUsername(inUsername);
}
inOldPassword = StringUtils.trimToNull(inOldPassword);
if(inOldPassword != null) {
requestBuilder.setOldPassword(inOldPassword);
}
inNewPassword = StringUtils.trimToNull(inNewPassword);
if(inOldPassword != null) {
requestBuilder.setNewPassword(inNewPassword);
}
AdminRpc.ChangeUserPasswordResponse response = getClientService().changeUserPassword(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
SLF4JLoggerProxy.trace(this,
"{} change password for {} succeeded",
getSessionId(),
inUsername);
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#createUser(com.marketcetera.admin.User, java.lang.String)
*/
@Override
public User createUser(User inNewUser,
String inPassword)
{
validateSession();
AdminRpc.CreateUserRequest.Builder requestBuilder = AdminRpc.CreateUserRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting create user for {}",
getSessionId(),
inNewUser);
requestBuilder.setSessionId(getSessionId().getValue());
if(inNewUser != null) {
AdminRpc.User.Builder userBuilder = AdminRpc.User.newBuilder();
userBuilder.setActive(inNewUser.isActive());
if(inNewUser.getDescription() != null) {
userBuilder.setDescription(inNewUser.getDescription());
}
if(inNewUser.getName() != null) {
userBuilder.setName(inNewUser.getName());
}
requestBuilder.setUser(userBuilder.build());
}
inPassword = StringUtils.trimToNull(inPassword);
if(inPassword != null) {
requestBuilder.setPassword(inPassword);
}
AdminRpc.CreateUserResponse response = getClientService().createUser(getController(),
requestBuilder.build());
User result = null;
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
if(response.hasUser()) {
AdminRpc.User rpcUser = response.getUser();
boolean isActive = false;
String description = null;
String name = null;
String password = "********";
if(rpcUser.hasActive()) {
isActive = rpcUser.getActive();
}
if(rpcUser.hasDescription()) {
description = rpcUser.getDescription();
}
if(rpcUser.hasName()) {
name = rpcUser.getName();
}
result = userFactory.create(name,
password,
description,
isActive);
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#updateUser(java.lang.String, com.marketcetera.admin.User)
*/
@Override
public User updateUser(String inUsername,
User inUpdatedUser)
{
validateSession();
AdminRpc.UpdateUserRequest.Builder requestBuilder = AdminRpc.UpdateUserRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting user update for {}: {}",
getSessionId(),
inUsername,
inUpdatedUser);
requestBuilder.setSessionId(getSessionId().getValue());
inUsername = StringUtils.trimToNull(inUsername);
if(inUsername != null) {
requestBuilder.setUsername(inUsername);
}
if(inUpdatedUser != null) {
AdminRpc.User.Builder userBuilder = AdminRpc.User.newBuilder();
userBuilder.setActive(inUpdatedUser.isActive());
if(inUpdatedUser.getDescription() != null) {
userBuilder.setDescription(inUpdatedUser.getDescription());
}
if(inUpdatedUser.getName() != null) {
userBuilder.setName(inUpdatedUser.getName());
}
requestBuilder.setUser(userBuilder.build());
}
AdminRpc.UpdateUserResponse response = getClientService().updateUser(getController(),
requestBuilder.build());
User result = null;
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
if(response.hasUser()) {
AdminRpc.User rpcUser = response.getUser();
boolean isActive = false;
String description = null;
String name = null;
String password = "********";
if(rpcUser.hasActive()) {
isActive = rpcUser.getActive();
}
if(rpcUser.hasDescription()) {
description = rpcUser.getDescription();
}
if(rpcUser.hasName()) {
name = rpcUser.getName();
}
result = userFactory.create(name,
password,
description,
isActive);
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminRpcClient#deleteUser(java.lang.String)
*/
@Override
public void deleteUser(String inUsername)
{
validateSession();
AdminRpc.DeleteUserRequest.Builder requestBuilder = AdminRpc.DeleteUserRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting user delete for {}",
getSessionId(),
inUsername);
requestBuilder.setSessionId(getSessionId().getValue());
inUsername = StringUtils.trimToNull(inUsername);
if(inUsername != null) {
requestBuilder.setUsername(inUsername);
}
AdminRpc.DeleteUserResponse response = getClientService().deleteUser(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
SLF4JLoggerProxy.trace(this,
"{} delete user for {} succeeded",
getSessionId(),
inUsername);
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#deactivateUser(java.lang.String)
*/
@Override
public void deactivateUser(String inName)
{
validateSession();
AdminRpc.DeactivateUserRequest.Builder requestBuilder = AdminRpc.DeactivateUserRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting deactivate user for {}",
getSessionId(),
inName);
requestBuilder.setSessionId(getSessionId().getValue());
inName = StringUtils.trimToNull(inName);
if(inName != null) {
requestBuilder.setUsername(inName);
}
AdminRpc.DeactivateUserResponse response = getClientService().deactivateUser(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
SLF4JLoggerProxy.trace(this,
"{} deactivate user for {} succeeded",
getSessionId(),
inName);
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#createRole(com.marketcetera.admin.Role)
*/
@Override
public Role createRole(Role inRole)
{
validateSession();
AdminRpc.CreateRoleRequest.Builder requestBuilder = AdminRpc.CreateRoleRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting create role for {}",
getSessionId(),
inRole);
requestBuilder.setSessionId(getSessionId().getValue());
if(inRole != null) {
AdminRpc.Role.Builder roleBuilder = AdminRpc.Role.newBuilder();
if(inRole.getDescription() != null) {
roleBuilder.setDescription(inRole.getDescription());
}
if(inRole.getName() != null) {
roleBuilder.setName(inRole.getName());
}
for(Permission permission : inRole.getPermissions()) {
requestBuilder.addPermissionName(permission.getName());
}
for(User user : inRole.getSubjects()) {
requestBuilder.addUsername(user.getName());
}
requestBuilder.setRole(roleBuilder.build());
}
AdminRpc.CreateRoleResponse response = getClientService().createRole(getController(),
requestBuilder.build());
Role result = null;
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
if(response.hasRole()) {
AdminRpc.Role rpcRole = response.getRole();
String name = null;
String description = null;
if(rpcRole.hasDescription()) {
description = rpcRole.getDescription();
}
if(rpcRole.hasName()) {
name = rpcRole.getName();
}
result = roleFactory.create(name,
description);
for(AdminRpc.Permission rpcPermission : rpcRole.getPermissionList()) {
description = null;
name = null;
if(rpcPermission.hasDescription()) {
description = rpcPermission.getDescription();
}
if(rpcPermission.hasName()) {
name = rpcPermission.getName();
}
result.getPermissions().add(permissionFactory.create(name,
description));
}
for(AdminRpc.User rpcUser : rpcRole.getUserList()) {
description = null;
name = null;
if(rpcUser.hasDescription()) {
description = rpcUser.getDescription();
}
if(rpcUser.hasName()) {
name = rpcUser.getName();
}
result.getSubjects().add(userFactory.create(name,
"********",
description,
rpcUser.getActive()));
}
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#readRoles()
*/
@Override
public List readRoles()
{
validateSession();
AdminRpc.ReadRolesRequest.Builder requestBuilder = AdminRpc.ReadRolesRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting roles",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
AdminRpc.ReadRolesResponse response = getClientService().readRoles(getController(),
requestBuilder.build());
List results = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.Role rpcRole : response.getRoleList()) {
String description = null;
String name = null;
if(rpcRole.hasDescription()) {
description = rpcRole.getDescription();
}
if(rpcRole.hasName()) {
name = rpcRole.getName();
}
Role role = roleFactory.create(name,
description);
for(AdminRpc.Permission rpcPermission : rpcRole.getPermissionList()) {
description = null;
name = null;
if(rpcPermission.hasDescription()) {
description = rpcPermission.getDescription();
}
if(rpcPermission.hasName()) {
name = rpcPermission.getName();
}
role.getPermissions().add(permissionFactory.create(name,
description));
}
for(AdminRpc.User rpcUser : rpcRole.getUserList()) {
description = null;
name = null;
if(rpcUser.hasDescription()) {
description = rpcUser.getDescription();
}
if(rpcUser.hasName()) {
name = rpcUser.getName();
}
User subject = userFactory.create(name,
"********",
description,
rpcUser.getActive());
role.getSubjects().add(subject);
}
results.add(role);
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
results);
return results;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#readRoles(org.marketcetera.core.PageRequest)
*/
@Override
public CollectionPageResponse readRoles(PageRequest inPageRequest)
{
validateSession();
AdminRpc.ReadRolesRequest.Builder requestBuilder = AdminRpc.ReadRolesRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting roles",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setPage(buildPageRequest(inPageRequest));
AdminRpc.ReadRolesResponse response = getClientService().readRoles(getController(),
requestBuilder.build());
List results = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.Role rpcRole : response.getRoleList()) {
String description = null;
String name = null;
if(rpcRole.hasDescription()) {
description = rpcRole.getDescription();
}
if(rpcRole.hasName()) {
name = rpcRole.getName();
}
Role role = roleFactory.create(name,
description);
for(AdminRpc.Permission rpcPermission : rpcRole.getPermissionList()) {
description = null;
name = null;
if(rpcPermission.hasDescription()) {
description = rpcPermission.getDescription();
}
if(rpcPermission.hasName()) {
name = rpcPermission.getName();
}
role.getPermissions().add(permissionFactory.create(name,
description));
}
for(AdminRpc.User rpcUser : rpcRole.getUserList()) {
description = null;
name = null;
if(rpcUser.hasDescription()) {
description = rpcUser.getDescription();
}
if(rpcUser.hasName()) {
name = rpcUser.getName();
}
User subject = userFactory.create(name,
"********",
description,
rpcUser.getActive());
role.getSubjects().add(subject);
}
results.add(role);
}
CollectionPageResponse result = new CollectionPageResponse<>();
if(response.hasPage()) {
addPageToResponse(response.getPage(),
result);
}
result.setElements(results);
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#updateRole(java.lang.String, com.marketcetera.admin.Role)
*/
@Override
public Role updateRole(String inName,
Role inRole)
{
validateSession();
AdminRpc.UpdateRoleRequest.Builder requestBuilder = AdminRpc.UpdateRoleRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting role update for {}: {}",
getSessionId(),
inName,
inRole);
requestBuilder.setSessionId(getSessionId().getValue());
inName = StringUtils.trimToNull(inName);
if(inName != null) {
requestBuilder.setRoleName(inName);
}
if(inRole != null) {
AdminRpc.Role.Builder roleBuilder = AdminRpc.Role.newBuilder();
if(inRole.getDescription() != null) {
roleBuilder.setDescription(inRole.getDescription());
}
if(inRole.getName() != null) {
roleBuilder.setName(inRole.getName());
}
requestBuilder.setRole(roleBuilder.build());
for(Permission permission : inRole.getPermissions()) {
requestBuilder.addPermissionName(permission.getName());
}
for(User user : inRole.getSubjects()) {
requestBuilder.addUsername(user.getName());
}
}
AdminRpc.UpdateRoleResponse response = getClientService().updateRole(getController(),
requestBuilder.build());
Role result = null;
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
if(response.hasRole()) {
AdminRpc.Role rpcRole = response.getRole();
String roleName = null;
String description = null;
if(rpcRole.hasDescription()) {
description = rpcRole.getDescription();
}
if(rpcRole.hasName()) {
roleName = rpcRole.getDescription();
}
result = roleFactory.create(roleName,
description);
for(AdminRpc.Permission rpcPermission : rpcRole.getPermissionList()) {
description = null;
String name = null;
if(rpcPermission.hasDescription()) {
description = rpcPermission.getDescription();
}
if(rpcPermission.hasName()) {
name = rpcPermission.getName();
}
result.getPermissions().add(permissionFactory.create(name,
description));
}
for(AdminRpc.User rpcUser : rpcRole.getUserList()) {
description = null;
String name = null;
if(rpcUser.hasDescription()) {
description = rpcUser.getDescription();
}
if(rpcUser.hasName()) {
name = rpcUser.getName();
}
result.getSubjects().add(userFactory.create(name,
"********",
description,
rpcUser.getActive()));
}
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#deleteRole(java.lang.String)
*/
@Override
public void deleteRole(String inName)
{
validateSession();
AdminRpc.DeleteRoleRequest.Builder requestBuilder = AdminRpc.DeleteRoleRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting role delete for {}",
getSessionId(),
inName);
requestBuilder.setSessionId(getSessionId().getValue());
inName = StringUtils.trimToNull(inName);
if(inName != null) {
requestBuilder.setRoleName(inName);
}
AdminRpc.DeleteRoleResponse response = getClientService().deleteRole(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
SLF4JLoggerProxy.trace(this,
"{} delete role for {} succeeded",
getSessionId(),
inName);
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminRpcClient#getUsers()
*/
@Override
public List readUsers()
{
validateSession();
AdminRpc.ReadUsersRequest.Builder requestBuilder = AdminRpc.ReadUsersRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting users",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
AdminRpc.ReadUsersResponse response = getClientService().readUsers(getController(),
requestBuilder.build());
List results = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.User rpcUser : response.getUserList()) {
results.add(createUserFrom(rpcUser));
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
results);
return results;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#readUsers(org.marketcetera.core.PageRequest)
*/
@Override
public CollectionPageResponse readUsers(PageRequest inPageRequest)
{
validateSession();
AdminRpc.ReadUsersRequest.Builder requestBuilder = AdminRpc.ReadUsersRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting users",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setPage(buildPageRequest(inPageRequest));
AdminRpc.ReadUsersResponse response = getClientService().readUsers(getController(),
requestBuilder.build());
List dataElements = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.User rpcUser : response.getUserList()) {
boolean isActive = false;
String description = null;
String name = null;
String password = "********";
if(rpcUser.hasActive()) {
isActive = rpcUser.getActive();
}
if(rpcUser.hasDescription()) {
description = rpcUser.getDescription();
}
if(rpcUser.hasName()) {
name = rpcUser.getName();
}
User user = userFactory.create(name,
password,
description,
isActive);
dataElements.add(user);
}
CollectionPageResponse result = new CollectionPageResponse<>();
if(response.hasPage()) {
addPageToResponse(response.getPage(),
result);
}
result.setElements(dataElements);
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#createPermission(com.marketcetera.admin.Permission)
*/
@Override
public Permission createPermission(Permission inPermission)
{
validateSession();
AdminRpc.CreatePermissionRequest.Builder requestBuilder = AdminRpc.CreatePermissionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting create permission for {}",
getSessionId(),
inPermission);
requestBuilder.setSessionId(getSessionId().getValue());
AdminRpc.Permission.Builder permissionBuilder = AdminRpc.Permission.newBuilder();
String description = StringUtils.trimToNull(inPermission.getDescription());
if(description != null) {
permissionBuilder.setDescription(description);
}
String permissionName = StringUtils.trimToNull(inPermission.getName());
if(permissionName != null) {
permissionBuilder.setName(permissionName);
}
requestBuilder.setPermission(permissionBuilder.build());
AdminRpc.CreatePermissionResponse response = getClientService().createPermission(getController(),
requestBuilder.build());
Permission result = null;
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
if(response.hasPermission()) {
AdminRpc.Permission rpcPermission = response.getPermission();
permissionName = null;
description = null;
if(rpcPermission.hasDescription()) {
description = rpcPermission.getDescription();
}
if(rpcPermission.hasName()) {
permissionName = rpcPermission.getName();
}
result = permissionFactory.create(permissionName,
description);
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminRpcClient#readPermissions()
*/
@Override
public List readPermissions()
{
validateSession();
AdminRpc.ReadPermissionsRequest.Builder requestBuilder = AdminRpc.ReadPermissionsRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting permissions",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
AdminRpc.ReadPermissionsResponse response = getClientService().readPermissions(getController(),
requestBuilder.build());
List results = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.Permission rpcPermission : response.getPermissionList()) {
try {
String permissionName = null;
String description = null;
if(rpcPermission.hasName()) {
permissionName = rpcPermission.getName();
}
if(rpcPermission.hasDescription()) {
description = rpcPermission.getDescription();
}
Permission permission = permissionFactory.create(permissionName,
description);
results.add(permission);
} catch (Exception e) {
String message = ExceptionUtils.getRootCauseMessage(e);
if(SLF4JLoggerProxy.isDebugEnabled(this)) {
SLF4JLoggerProxy.warn(this,
e,
"Unable to read {}: {}",
rpcPermission,
message);
} else {
SLF4JLoggerProxy.warn(this,
"Unable to read {}: {}",
rpcPermission,
message);
}
}
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
results);
return results;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#readPermissions(org.marketcetera.core.PageRequest)
*/
@Override
public CollectionPageResponse readPermissions(PageRequest inPageRequest)
{
validateSession();
AdminRpc.ReadPermissionsRequest.Builder requestBuilder = AdminRpc.ReadPermissionsRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting permissions",
getSessionId());
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setPage(buildPageRequest(inPageRequest));
AdminRpc.ReadPermissionsResponse response = getClientService().readPermissions(getController(),
requestBuilder.build());
Collection dataElements = new ArrayList<>();
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
for(AdminRpc.Permission rpcPermission : response.getPermissionList()) {
try {
String permissionName = null;
String description = null;
if(rpcPermission.hasName()) {
permissionName = rpcPermission.getName();
}
if(rpcPermission.hasDescription()) {
description = rpcPermission.getDescription();
}
Permission permission = permissionFactory.create(permissionName,
description);
dataElements.add(permission);
} catch (Exception e) {
String message = ExceptionUtils.getRootCauseMessage(e);
if(SLF4JLoggerProxy.isDebugEnabled(this)) {
SLF4JLoggerProxy.warn(this,
e,
"Unable to read {}: {}",
rpcPermission,
message);
} else {
SLF4JLoggerProxy.warn(this,
"Unable to read {}: {}",
rpcPermission,
message);
}
}
}
CollectionPageResponse result = new CollectionPageResponse<>();
if(response.hasPage()) {
addPageToResponse(response.getPage(),
result);
}
result.setElements(dataElements);
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminRpcClient#updatePermission(java.lang.String, com.marketcetera.admin.Permission)
*/
@Override
public Permission updatePermission(String inPermissionName,
Permission inUpdatedPermission)
{
validateSession();
AdminRpc.UpdatePermissionRequest.Builder requestBuilder = AdminRpc.UpdatePermissionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting permission update for {}: {}",
getSessionId(),
inPermissionName,
inUpdatedPermission);
requestBuilder.setSessionId(getSessionId().getValue());
inPermissionName = StringUtils.trimToNull(inPermissionName);
if(inPermissionName != null) {
requestBuilder.setPermissionName(inPermissionName);
}
if(inUpdatedPermission != null) {
AdminRpc.Permission.Builder permissionBuilder = AdminRpc.Permission.newBuilder();
if(inUpdatedPermission.getDescription() != null) {
permissionBuilder.setDescription(inUpdatedPermission.getDescription());
}
if(inUpdatedPermission.getName() != null) {
permissionBuilder.setName(inUpdatedPermission.getName());
}
requestBuilder.setPermission(permissionBuilder.build());
}
AdminRpc.UpdatePermissionResponse response = getClientService().updatePermission(getController(),
requestBuilder.build());
Permission result = null;
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
if(response.hasPermission()) {
AdminRpc.Permission rpcPermission = response.getPermission();
String permissionName = null;
String description = null;
if(rpcPermission.hasDescription()) {
description = rpcPermission.getDescription();
}
if(rpcPermission.hasName()) {
permissionName = rpcPermission.getDescription();
}
result = permissionFactory.create(permissionName,
description);
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
result);
return result;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminRpcClient#deletePermission(java.lang.String)
*/
@Override
public void deletePermission(String inPermissionName)
{
validateSession();
AdminRpc.DeletePermissionRequest.Builder requestBuilder = AdminRpc.DeletePermissionRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting permission delete for {}",
getSessionId(),
inPermissionName);
requestBuilder.setSessionId(getSessionId().getValue());
inPermissionName = StringUtils.trimToNull(inPermissionName);
if(inPermissionName != null) {
requestBuilder.setPermissionName(inPermissionName);
}
AdminRpc.DeletePermissionResponse response = getClientService().deletePermission(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
SLF4JLoggerProxy.trace(this,
"{} delete permission for {} succeeded",
getSessionId(),
inPermissionName);
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#getUserAttribute(java.lang.String, com.marketcetera.admin.UserAttributeType)
*/
@Override
public UserAttribute getUserAttribute(String inUsername,
UserAttributeType inAttributeType)
{
validateSession();
AdminRpc.ReadUserAttributeRequest.Builder requestBuilder = AdminRpc.ReadUserAttributeRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting user attribute {} for {}",
getSessionId(),
inAttributeType,
inUsername);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setAttributeType(inAttributeType.name());
requestBuilder.setUsername(inUsername);
AdminRpc.ReadUserAttributeResponse response = getClientService().readUserAttribute(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
UserAttribute userAttribute = null;
if(response.hasUserAttribute()) {
AdminRpc.UserAttribute rpcUserAttribute = response.getUserAttribute();
User user = null;
if(rpcUserAttribute.hasUser()) {
user = createUserFrom(rpcUserAttribute.getUser());
}
String attribute = null;
if(rpcUserAttribute.hasAttribute()) {
attribute = rpcUserAttribute.getAttribute();
}
UserAttributeType userAttributeType = null;
if(rpcUserAttribute.hasAttributeType()) {
userAttributeType = UserAttributeType.valueOf(rpcUserAttribute.getAttributeType());
}
userAttribute = userAttributeFactory.create(user,
userAttributeType,
attribute);
}
SLF4JLoggerProxy.trace(this,
"{} returning {}",
getSessionId(),
userAttribute);
return userAttribute;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.marketcetera.admin.AdminClient#setUserAttribute(java.lang.String, com.marketcetera.admin.UserAttributeType, java.lang.String)
*/
@Override
public void setUserAttribute(String inUsername,
UserAttributeType inAttributeType,
String inAttribute)
{
validateSession();
AdminRpc.WriteUserAttributeRequest.Builder requestBuilder = AdminRpc.WriteUserAttributeRequest.newBuilder();
try {
SLF4JLoggerProxy.trace(this,
"{} requesting write user attribute {} for {}: {}",
getSessionId(),
inAttributeType,
inUsername,
inAttribute);
requestBuilder.setSessionId(getSessionId().getValue());
requestBuilder.setAttributeType(inAttributeType.name());
requestBuilder.setUsername(inUsername);
requestBuilder.setAttribute(inAttribute==null?"":inAttribute);
AdminRpc.WriteUserAttributeResponse response = getClientService().writeUserAttribute(getController(),
requestBuilder.build());
if(response.getStatus().getFailed()) {
throw new RuntimeException(response.getStatus().getMessage());
}
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
/**
* Validate and start the object.
*/
@Override
@PostConstruct
public void start()
{
Validate.notNull(permissionFactory,
"Permission factory required");
Validate.notNull(userFactory,
"User factory required");
try {
super.start();
} catch (Exception e) {
SLF4JLoggerProxy.warn(this,
e);
if(e instanceof RuntimeException) {
throw (RuntimeException)e;
}
throw new RuntimeException(e);
}
}
/**
* Get the permissionFactory value.
*
* @return a PermissionFactory value
*/
public PermissionFactory getPermissionFactory()
{
return permissionFactory;
}
/**
* Sets the permissionFactory value.
*
* @param inPermissionFactory a PermissionFactory value
*/
public void setPermissionFactory(PermissionFactory inPermissionFactory)
{
permissionFactory = inPermissionFactory;
}
/**
* Get the roleFactory value.
*
* @return a RoleFactory value
*/
public RoleFactory getRoleFactory()
{
return roleFactory;
}
/**
* Sets the roleFactory value.
*
* @param inRoleFactory a RoleFactory value
*/
public void setRoleFactory(RoleFactory inRoleFactory)
{
roleFactory = inRoleFactory;
}
/**
* Get the userFactory value.
*
* @return a UserFactory value
*/
public UserFactory getUserFactory()
{
return userFactory;
}
/**
* Sets the userFactory value.
*
* @param inUserFactory a UserFactory value
*/
public void setUserFactory(UserFactory inUserFactory)
{
userFactory = inUserFactory;
}
/**
* Get the userAttributeFactory value.
*
* @return a UserAttributeFactory value
*/
public UserAttributeFactory getUserAttributeFactory()
{
return userAttributeFactory;
}
/**
* Sets the userAttributeFactory value.
*
* @param inUserAttributeFactory a UserAttributeFactory value
*/
public void setUserAttributeFactory(UserAttributeFactory inUserAttributeFactory)
{
userAttributeFactory = inUserAttributeFactory;
}
/**
* Create a new AdminRpcClientImpl instance.
*/
AdminRpcClient() {}
/* (non-Javadoc)
* @see com.marketcetera.admin.BaseRpcClient#getAppId()
*/
@Override
protected AppId getAppId()
{
return APP_ID;
}
/* (non-Javadoc)
* @see com.marketcetera.admin.BaseRpcClient#getVersionInfo()
*/
@Override
protected VersionInfo getVersionInfo()
{
return APP_ID_VERSION;
}
/* (non-Javadoc)
* @see com.marketcetera.admin.BaseRpcClient#createClient(com.googlecode.protobuf.pro.duplex.RpcClientChannel)
*/
@Override
protected BlockingInterface createClient(RpcClientChannel inChannel)
{
return AdminRpc.AdminRpcService.newBlockingStub(inChannel);
}
/* (non-Javadoc)
* @see com.marketcetera.admin.BaseRpcClient#executeLogin(com.google.protobuf.RpcController, org.marketcetera.util.rpc.BaseRpc.LoginRequest)
*/
@Override
protected LoginResponse executeLogin(RpcController inController,
LoginRequest inRequest)
throws ServiceException
{
return getClientService().login(inController,
inRequest);
}
/* (non-Javadoc)
* @see com.marketcetera.admin.BaseRpcClient#executeLogout(com.google.protobuf.RpcController, org.marketcetera.util.rpc.BaseRpc.LogoutRequest)
*/
@Override
protected LogoutResponse executeLogout(RpcController inController,
LogoutRequest inRequest)
throws ServiceException
{
return getClientService().logout(inController,
inRequest);
}
/**
* Create a user from the given RPC value.
*
* @param inRpcUser an AdminRpc.User value
* @return a User value
*/
private User createUserFrom(AdminRpc.User inRpcUser)
{
boolean isActive = false;
String description = null;
String name = null;
String password = "********";
if(inRpcUser.hasActive()) {
isActive = inRpcUser.getActive();
}
if(inRpcUser.hasDescription()) {
description = inRpcUser.getDescription();
}
if(inRpcUser.hasName()) {
name = inRpcUser.getName();
}
User user = userFactory.create(name,
password,
description,
isActive);
return user;
}
/**
* Add the results from the given RPC page to the given response object.
*
* @param inRpcPage a BaseRpc.PageResponse value
* @param inResponse a PageResponse value
*/
private void addPageToResponse(BaseRpc.PageResponse inRpcPage,
PageResponse inResponse)
{
if(inRpcPage.hasPageMaxSize()) {
inResponse.setPageMaxSize(inRpcPage.getPageMaxSize());
}
if(inRpcPage.hasPageNumber()) {
inResponse.setPageNumber(inRpcPage.getPageNumber());
}
if(inRpcPage.hasPageSize()) {
inResponse.setPageSize(inRpcPage.getPageSize());
}
if(inRpcPage.hasTotalPages()) {
inResponse.setTotalPages(inRpcPage.getTotalPages());
}
if(inRpcPage.hasTotalSize()) {
inResponse.setTotalSize(inRpcPage.getTotalSize());
}
if(inRpcPage.hasSortOrder()) {
List sortOrder = Lists.newArrayList();
for(BaseRpc.Sort rpcSort : inRpcPage.getSortOrder().getSortList()) {
Sort sort = new Sort();
if(rpcSort.hasDirection()) {
sort.setDirection(rpcSort.getDirection()==BaseRpc.SortDirection.ASCENDING?SortDirection.ASCENDING:SortDirection.DESCENDING);
}
if(rpcSort.hasProperty()) {
sort.setProperty(rpcSort.getProperty());
}
sortOrder.add(sort);
}
inResponse.setSortOrder(sortOrder);
}
}
/**
* Build an RPC page request from the given request object.
*
* @param inPageRequest a PageRequest value
* @return a BaseRpc.PageRequest value
*/
private BaseRpc.PageRequest buildPageRequest(PageRequest inPageRequest)
{
BaseRpc.PageRequest.Builder pageRequestBuilder = BaseRpc.PageRequest.newBuilder();
pageRequestBuilder.setPage(inPageRequest.getPageNumber());
pageRequestBuilder.setSize(inPageRequest.getPageSize());
if(inPageRequest.getSortOrder() != null && !inPageRequest.getSortOrder().isEmpty()) {
BaseRpc.SortOrder.Builder sortOrderBuilder = BaseRpc.SortOrder.newBuilder();
BaseRpc.Sort.Builder sortBuilder = BaseRpc.Sort.newBuilder();
for(Sort sort : inPageRequest.getSortOrder()) {
sortBuilder.setDirection(sort.getDirection()==SortDirection.ASCENDING?BaseRpc.SortDirection.ASCENDING:BaseRpc.SortDirection.DESCENDING);
sortBuilder.setProperty(sort.getProperty());
sortOrderBuilder.addSort(sortBuilder.build());
sortBuilder.clear();
}
pageRequestBuilder.setSortOrder(sortOrderBuilder.build());
}
return pageRequestBuilder.build();
}
/**
* creates {@link UserAttributeFactory} objects
*/
@Autowired
private UserAttributeFactory userAttributeFactory;
/**
* creates {@link Permission} objects
*/
@Autowired
private PermissionFactory permissionFactory;
/**
* creates {@link User} objects
*/
@Autowired
private UserFactory userFactory;
/**
* creates {@link Role} objects
*/
@Autowired
private RoleFactory roleFactory;
/**
* The client's application ID: the application name.
*/
public static final String APP_ID_NAME = "AdminRpcClient"; //$NON-NLS-1$
/**
* The client's application ID: the version.
*/
public static final VersionInfo APP_ID_VERSION = ApplicationVersion.getVersion(AdminClient.class);
/**
* The client's application ID: the ID.
*/
public static final AppId APP_ID = Util.getAppId(APP_ID_NAME,APP_ID_VERSION.getVersionInfo());
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy