/**
* 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.ManageableRole;
import com.opengamma.master.user.RoleEventHistoryRequest;
import com.opengamma.master.user.RoleEventHistoryResult;
import com.opengamma.master.user.RoleMaster;
import com.opengamma.master.user.RoleSearchRequest;
import com.opengamma.master.user.RoleSearchResult;
import com.opengamma.util.ArgumentChecker;
import com.sun.jersey.api.client.ClientResponse;
/**
* Provides access to a remote {@link RoleMaster}.
*/
public class RemoteRoleMaster
extends AbstractRemoteMaster
implements RoleMaster {
/**
* Creates an instance.
*
* @param baseUri the base target URI for all RESTful web services, not null
*/
public RemoteRoleMaster(final URI baseUri) {
super(baseUri);
}
/**
* Creates an instance.
*
* @param baseUri the base target URI for all RESTful web services, not null
* @param changeManager the change manager, not null
*/
public RemoteRoleMaster(final URI baseUri, ChangeManager changeManager) {
super(baseUri, changeManager);
}
//-------------------------------------------------------------------------
@Override
public boolean nameExists(String roleName) {
ArgumentChecker.notNull(roleName, "roleName");
URI uri = DataRoleMasterResource.uriNameExists(getBaseUri(), roleName);
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 ManageableRole getByName(String roleName) {
ArgumentChecker.notNull(roleName, "roleName");
URI uri = DataRoleMasterResource.uriRoleByName(getBaseUri(), roleName);
return accessRemote(uri).get(ManageableRole.class);
}
@Override
public ManageableRole getById(ObjectId objectId) {
ArgumentChecker.notNull(objectId, "objectId");
URI uri = DataRoleMasterResource.uriRoleById(getBaseUri(), objectId);
return accessRemote(uri).get(ManageableRole.class);
}
@Override
public UniqueId add(ManageableRole role) {
ArgumentChecker.notNull(role, "role");
URI uri = DataRoleMasterResource.uriAdd(getBaseUri());
return accessRemote(uri).post(UniqueId.class, role);
}
@Override
public UniqueId update(ManageableRole role) {
ArgumentChecker.notNull(role, "role");
ArgumentChecker.notNull(role.getUniqueId(), "role.uniqueId");
URI uri = DataRoleMasterResource.uriRoleById(getBaseUri(), role.getUniqueId());
return accessRemote(uri).put(UniqueId.class, role);
}
@Override
public UniqueId save(ManageableRole role) {
ArgumentChecker.notNull(role, "role");
if (role.getUniqueId() != null) {
return update(role);
} else {
return add(role);
}
}
@Override
public void removeByName(String roleName) {
ArgumentChecker.notNull(roleName, "roleName");
URI uri = DataRoleMasterResource.uriRoleByName(getBaseUri(), roleName);
accessRemote(uri).delete();
}
@Override
public void removeById(ObjectId objectId) {
ArgumentChecker.notNull(objectId, "objectId");
URI uri = DataRoleMasterResource.uriRoleById(getBaseUri(), objectId);
accessRemote(uri).delete();
}
@Override
public RoleSearchResult search(RoleSearchRequest request) {
ArgumentChecker.notNull(request, "request");
URI uri = DataRoleMasterResource.uriSearch(getBaseUri());
return accessRemote(uri).post(RoleSearchResult.class, request);
}
@Override
public RoleEventHistoryResult eventHistory(RoleEventHistoryRequest request) {
ArgumentChecker.notNull(request, "request");
URI uri = DataRoleMasterResource.uriEventHistory(getBaseUri(), request);
return accessRemote(uri).get(RoleEventHistoryResult.class);
}
@Override
public UserAccount resolveAccount(UserAccount account) {
ArgumentChecker.notNull(account, "account");
URI uri = DataRoleMasterResource.uriResolveRole(getBaseUri(), account);
return accessRemote(uri).post(UserAccount.class, account);
}
}