/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.user.impl;
import java.net.URI;
import javax.ws.rs.core.Response.Status;
import com.opengamma.core.change.ChangeManager;
import com.opengamma.core.user.UserAccount;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.master.impl.AbstractRemoteMaster;
import com.opengamma.master.user.ManageableUser;
import com.opengamma.master.user.RoleMaster;
import com.opengamma.master.user.UserEventHistoryRequest;
import com.opengamma.master.user.UserEventHistoryResult;
import com.opengamma.master.user.UserMaster;
import com.opengamma.master.user.UserSearchRequest;
import com.opengamma.master.user.UserSearchResult;
import com.opengamma.util.ArgumentChecker;
import com.sun.jersey.api.client.ClientResponse;
/**
* Provides access to a remote {@link UserMaster}.
*/
public class RemoteUserMaster
extends AbstractRemoteMaster
implements UserMaster {
/**
* The role master.
*/
private final RemoteRoleMaster _roleMaster;
/**
* Creates an instance.
*
* @param baseUri the base target URI for all RESTful web services, not null
*/
public RemoteUserMaster(final URI baseUri) {
super(baseUri);
_roleMaster = new RemoteRoleMaster(baseUri.resolve("users"));
}
/**
* Creates an instance.
*
* @param baseUri the base target URI for all RESTful web services, not null
* @param changeManager the change manager, not null
*/
public RemoteUserMaster(final URI baseUri, ChangeManager changeManager) {
this(baseUri, changeManager, changeManager);
}
/**
* Creates an instance.
*
* @param baseUri the base target URI for all RESTful web services, not null
* @param userChangeManager the change manager, not null
* @param roleChangeManager the change manager, not null
*/
public RemoteUserMaster(final URI baseUri, ChangeManager userChangeManager, ChangeManager roleChangeManager) {
super(baseUri, userChangeManager);
_roleMaster = new RemoteRoleMaster(baseUri.resolve("users"), roleChangeManager);
}
//-------------------------------------------------------------------------
@Override
public boolean nameExists(String userName) {
ArgumentChecker.notNull(userName, "userName");
URI uri = DataUserMasterResource.uriNameExists(getBaseUri(), userName);
ClientResponse response = accessRemote(uri).get(ClientResponse.class);
if (response.getStatus() == Status.NOT_FOUND.getStatusCode()) {
return false;
}
if (response.getStatus() == Status.OK.getStatusCode()) {
return true;
}
throw new IllegalStateException("Unexpected response from server: " + response.getStatus());
}
@Override
public ManageableUser getByName(String userName) {
ArgumentChecker.notNull(userName, "userName");
URI uri = DataUserMasterResource.uriUserByName(getBaseUri(), userName);
return accessRemote(uri).get(ManageableUser.class);
}
@Override
public ManageableUser getById(ObjectId objectId) {
ArgumentChecker.notNull(objectId, "objectId");
URI uri = DataUserMasterResource.uriUserById(getBaseUri(), objectId);
return accessRemote(uri).get(ManageableUser.class);
}
@Override
public UniqueId add(ManageableUser user) {
ArgumentChecker.notNull(user, "user");
URI uri = DataUserMasterResource.uriAdd(getBaseUri());
return accessRemote(uri).post(UniqueId.class, user);
}
@Override
public UniqueId update(ManageableUser user) {
ArgumentChecker.notNull(user, "user");
ArgumentChecker.notNull(user.getUniqueId(), "user.uniqueId");
URI uri = DataUserMasterResource.uriUserById(getBaseUri(), user.getUniqueId());
return accessRemote(uri).put(UniqueId.class, user);
}
@Override
public UniqueId save(ManageableUser user) {
ArgumentChecker.notNull(user, "user");
if (user.getUniqueId() != null) {
return update(user);
} else {
return add(user);
}
}
@Override
public void removeByName(String userName) {
ArgumentChecker.notNull(userName, "userName");
URI uri = DataUserMasterResource.uriUserByName(getBaseUri(), userName);
accessRemote(uri).delete();
}
@Override
public void removeById(ObjectId objectId) {
ArgumentChecker.notNull(objectId, "objectId");
URI uri = DataUserMasterResource.uriUserById(getBaseUri(), objectId);
accessRemote(uri).delete();
}
@Override
public UserSearchResult search(UserSearchRequest request) {
ArgumentChecker.notNull(request, "request");
URI uri = DataUserMasterResource.uriSearch(getBaseUri());
return accessRemote(uri).post(UserSearchResult.class, request);
}
@Override
public UserEventHistoryResult eventHistory(UserEventHistoryRequest request) {
ArgumentChecker.notNull(request, "request");
URI uri = DataUserMasterResource.uriEventHistory(getBaseUri(), request);
return accessRemote(uri).get(UserEventHistoryResult.class);
}
@Override
public UserAccount getAccount(String userName) {
ArgumentChecker.notNull(userName, "userName");
URI uri = DataUserMasterResource.uriUserByName(getBaseUri(), userName);
return accessRemote(uri).get(UserAccount.class);
}
@Override
public RoleMaster roleMaster() {
return _roleMaster;
}
}