/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.intel.mtwilson.user.management.client.jaxrs;
import com.intel.mtwilson.jaxrs2.client.MtWilsonClient;
import com.intel.mtwilson.user.management.rest.v2.model.RoleCollection;
import com.intel.mtwilson.user.management.rest.v2.model.RoleFilterCriteria;
import com.intel.mtwilson.user.management.rest.v2.model.Role;
import java.net.URL;
import java.util.HashMap;
import java.util.Properties;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Roles extends MtWilsonClient {
Logger log = LoggerFactory.getLogger(getClass().getName());
public Roles(URL url) throws Exception{
super(url);
}
public Roles(Properties properties) throws Exception {
super(properties);
}
/**
* Creates an new Role in the system that could be assigned to the users.
* @param role - Role object that needs to be created.
* @return Created Role object.
* @since Mt.Wilson 2.0
* @mtwRequiresPermissions roles:create
* @mtwContentTypeReturned JSON/XML/YAML
* @mtwMethodType POST
* @mtwSampleRestCall
* <pre>
* https://server.com:8181/mtwilson/v2/roles
* Input: {"role_name":"MTW_Admin"}
* Output: {"id":"17dbfd48-12a4-4328-85af-43b0d5adfee3","role_name":"MTW_Admin"}
* </pre>
* @mtwSampleApiCall
* <pre>
* Roles client = new Roles(My.configuration().getClientProperties());
* Role role = new Role();
* role.setRoleName("MTW_Admin");
* Role createRole = client.createRole(role);
* </pre>
*/
public Role createRole(Role role) {
log.debug("target: {}", getTarget().getUri().toString());
Role newRole = getTarget().path("roles").request().accept(MediaType.APPLICATION_JSON).post(Entity.json(role), Role.class);
return newRole;
}
/**
* Deletes the Role with the specified UUID from the system. All the associated permissions would also
* be deleted.
* @param uuid - UUID of the Role that has to be deleted.
* @return N/A
* @since Mt.Wilson 2.0
* @mtwRequiresPermissions roles:delete
* @mtwContentTypeReturned N/A
* @mtwMethodType DELETE
* @mtwSampleRestCall
* <pre>
* https://server.com:8181/mtwilson/v2/roles/17dbfd48-12a4-4328-85af-43b0d5adfee3
* </pre>
* @mtwSampleApiCall
* <pre>
* Roles client = new Roles(My.configuration().getClientProperties());
* client.deleteRole("17dbfd48-12a4-4328-85af-43b0d5adfee3");
* </pre>
*/
public void deleteRole(String uuid) {
log.debug("target: {}", getTarget().getUri().toString());
HashMap<String,Object> map = new HashMap<>();
map.put("id", uuid);
Response obj = getTarget().path("roles/{id}").resolveTemplates(map).request(MediaType.APPLICATION_JSON).delete();
if( !obj.getStatusInfo().getFamily().equals(Response.Status.Family.SUCCESSFUL)) {
throw new WebApplicationException("Delete role failed");
}
}
/**
* Deletes the Role(s) matching the specified search criteria.
* @param criteria RoleFilterCriteria object specifying the search criteria. The search options include
* id, nameEqualTo and nameContains.
* @return N/A
* @since Mt.Wilson 2.0
* @mtwRequiresPermissions roles:delete,search
* @mtwContentTypeReturned N/A
* @mtwMethodType DELETE
* @mtwSampleRestCall
* <pre>
* https://server.com:8181/mtwilson/v2/roles?nameContains=admin
* </pre>
* @mtwSampleApiCall
* <pre>
* Roles client = new Roles(My.configuration().getClientProperties());
* RoleFilterCriteria criteria = new RoleFilterCriteria();
* criteria.nameContains = "admin";
* client.deleteRole(criteria);
* </pre>
*/
public void deleteRole(RoleFilterCriteria criteria) {
log.debug("target: {}", getTarget().getUri().toString());
Response obj = getTargetPathWithQueryParams("roles", criteria).request(MediaType.APPLICATION_JSON).delete();
if( !obj.getStatusInfo().getFamily().equals(Response.Status.Family.SUCCESSFUL)) {
throw new WebApplicationException("Delete role failed");
}
}
/**
* Updates the details of the Role in the system. Only the comments can be updated.
* @param role - Role object details that needs to be updated.
* @return Updated role object.
* @since Mt.Wilson 2.0
* @mtwRequiresPermissions roles:store
* @mtwContentTypeReturned JSON/XML/YAML
* @mtwMethodType PUT
* @mtwSampleRestCall
* <pre>
* https://server.com:8181/mtwilson/v2/roles/17dbfd48-12a4-4328-85af-43b0d5adfee3
* Input: {"description":"MTW Admin role"}
* Output: {"id":"17dbfd48-12a4-4328-85af-43b0d5adfee3","description":"MTW Admin role"}
* </pre>
* @mtwSampleApiCall
* <pre>
* Roles client = new Roles(My.configuration().getClientProperties());
* Role role = new Role();
* role.setId(UUID.valueOf("17dbfd48-12a4-4328-85af-43b0d5adfee3"));
* role.setDescription("MTW Admin role");
* role = client.editRole(role);
* </pre>
*/
public Role editRole(Role role) {
log.debug("target: {}", getTarget().getUri().toString());
HashMap<String,Object> map = new HashMap<>();
map.put("id", role.getId().toString());
Role newRole = getTarget().path("roles/{id}").resolveTemplates(map).request().accept(MediaType.APPLICATION_JSON).put(Entity.json(role), Role.class);
return newRole;
}
/**
* Retrieves the Role object with the specified UUID
* @param uuid - UUID of the Role to be retrieved
* @return Role object matching the specified UUID.
* @since Mt.Wilson 2.0
* @mtwRequiresPermissions roles:retrieve
* @mtwContentTypeReturned JSON/XML/YAML
* @mtwMethodType GET
* @mtwSampleRestCall
* <pre>
* https://server.com:8181/mtwilson/v2/roles/17dbfd48-12a4-4328-85af-43b0d5adfee3
* Output: {"id":"17dbfd48-12a4-4328-85af-43b0d5adfee3","role_name":"MTW_Admin","description":"MTW Admin role"}
* </pre>
* @mtwSampleApiCall
* <pre>
* Roles client = new Roles(My.configuration().getClientProperties());
* Role retrieveRole = client.retrieveRole("17dbfd48-12a4-4328-85af-43b0d5adfee3");
* </pre>
*/
public Role retrieveRole(String uuid) {
log.debug("target: {}", getTarget().getUri().toString());
HashMap<String,Object> map = new HashMap<>();
map.put("id", uuid);
Role role = getTarget().path("roles/{id}").resolveTemplates(map).request(MediaType.APPLICATION_JSON).get(Role.class);
return role;
}
/**
* Searches for the Role's with the specified set of criteria.
* @param RoleFilterCriteria object specifying the filter criteria. The search options include
* id, nameEqualTo and nameContains. Also, if the caller wants to retrieve the list of all the registered
* roles, the filter option can be disabled by setting the filter criteria to false. By default
* the filter criteria is true. [Ex: /v2/roles?filter=false retrieves the list of all the roles]
* @return RoleCollection with the Roles that meet the specified filter criteria
* @since Mt.Wilson 2.0
* @mtwRequiresPermissions roles:search
* @mtwContentTypeReturned JSON/XML/YAML
* @mtwMethodType GET
* @mtwSampleRestCall
* <pre>
* https://server.com:8181/mtwilson/v2/roles?filter=false
* Output: {"roles":[{"id":"0199a936-9a49-482a-8c63-cfe7a9412d7e","role_name":"server_manager"},
* {"id":"177b1d3c-b0aa-4543-8509-92fde907a4a9","role_name":"admin","description":"user created role"}]}
* </pre>
* @mtwSampleApiCall
* <pre>
* Roles client = new Roles(My.configuration().getClientProperties());
* RoleFilterCriteria criteria = new RoleFilterCriteria();
* criteria.filter = false;
* RoleCollection roles = client.searchRoles(criteria);
* </pre>
*/
public RoleCollection searchRoles(RoleFilterCriteria criteria) {
log.debug("target: {}", getTarget().getUri().toString());
RoleCollection roles = getTargetPathWithQueryParams("roles", criteria).request(MediaType.APPLICATION_JSON).get(RoleCollection.class);
return roles;
}
}