Skip to content

Commit

Permalink
Add WarehouseUser with paging
Browse files Browse the repository at this point in the history
  • Loading branch information
liry authored and martiner committed Jul 30, 2015
1 parent 71fe188 commit c9d46da
Show file tree
Hide file tree
Showing 14 changed files with 349 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/main/java/com/gooddata/warehouse/WarehouseService.java
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,18 @@ private PageableList<Warehouse> listWarehouses(final URI uri) {
}
}

public PageableList<WarehouseUser> listWarehouseUsers(final Warehouse warehouse, final Page page) {
notNull(warehouse, "warehouse");
notNull(warehouse.getId(), "warehouse.id");
notNull(page, "page");
try {
final WarehouseUsers result = restTemplate.getForObject(WarehouseUsers.URI, WarehouseUsers.class, warehouse.getId());
return result != null ? result : new PageableList<WarehouseUser>();
} catch (GoodDataException | RestClientException e) {
throw new GoodDataException("Unable to list users of warehouse " + warehouse.getId(), e);
}
}

/**
* Updates given Warehouse.
*
Expand Down
76 changes: 76 additions & 0 deletions src/main/java/com/gooddata/warehouse/WarehouseUser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.gooddata.warehouse;

import org.codehaus.jackson.annotate.JsonCreator;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonTypeInfo;
import org.codehaus.jackson.annotate.JsonTypeName;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.springframework.web.util.UriTemplate;

import java.util.Map;

import static com.gooddata.util.Validate.notNull;
import static org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion.NON_NULL;

/**
* Warehouse user
*/
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
@JsonTypeName("user")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include = NON_NULL)
public class WarehouseUser {

public static final String URI = WarehouseUsers.URI + "/{userId}";
public static final UriTemplate TEMPLATE = new UriTemplate(URI);

private static final String SELF_LINK = "self";

private String role;
private String profile;
private String login;
private Map<String, String> links;

public WarehouseUser(final String role, final String profile, final String login) {
this.role = notNull(role, "role");
if (profile == null) {
notNull(login, "login");
}
if (login == null) {
notNull(profile, "profile");
}
this.profile = profile;
this.login = login;
}

@JsonCreator
public WarehouseUser(@JsonProperty("role") String role, @JsonProperty("profile") String profile,
@JsonProperty("login") String login, @JsonProperty("links") Map<String, String> links) {
this(role, profile, login);
this.links = links;
}

public String getRole() {
return role;
}

public String getProfile() {
return profile;
}

public String getLogin() {
return login;
}

public Map<String, String> getLinks() {
return links;
}

@JsonIgnore
public String getUri() {
return links != null ? links.get(SELF_LINK): null;
}

}
38 changes: 38 additions & 0 deletions src/main/java/com/gooddata/warehouse/WarehouseUsers.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.gooddata.warehouse;

import com.gooddata.collections.PageableList;
import com.gooddata.collections.Paging;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonTypeInfo;
import org.codehaus.jackson.annotate.JsonTypeName;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.springframework.web.util.UriTemplate;

import java.util.List;
import java.util.Map;

/**
* List of warehouse users.
*/
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
@JsonTypeName(WarehouseUsers.ROOT_NODE)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonDeserialize(using = WarehouseUsersDeserializer.class)
@JsonSerialize(using = WarehouseUsersSerializer.class)
public class WarehouseUsers extends PageableList<WarehouseUser> {

public static final String URI = Warehouse.URI + "/users";
public static final UriTemplate TEMPLATE = new UriTemplate(URI);

static final String ROOT_NODE = "users";

public WarehouseUsers(final List<WarehouseUser> items, final Paging paging) {
super(items, paging);
}

public WarehouseUsers(final List<WarehouseUser> items, final Paging paging, final Map<String, String> links) {
super(items, paging, links);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved.
*/
package com.gooddata.warehouse;

import com.gooddata.collections.PageableListDeserializer;
import com.gooddata.collections.Paging;

import java.util.List;
import java.util.Map;

/**
* Deserializer of JSON into warehouse users object.
*/
class WarehouseUsersDeserializer extends PageableListDeserializer<WarehouseUsers, WarehouseUser> {

protected WarehouseUsersDeserializer() {
super(WarehouseUser.class);
}

@Override
protected WarehouseUsers createList(final List<WarehouseUser> items, final Paging paging, final Map<String, String> links) {
return new WarehouseUsers(items, paging, links);
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/gooddata/warehouse/WarehouseUsersSerializer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved.
*/
package com.gooddata.warehouse;

import com.gooddata.collections.PageableListSerializer;

import static com.gooddata.warehouse.WarehouseUsers.ROOT_NODE;

/**
* Serializer of warehouse users object into JSON.
*/
class WarehouseUsersSerializer extends PageableListSerializer {

public WarehouseUsersSerializer() {
super(ROOT_NODE);
}

}
10 changes: 10 additions & 0 deletions src/test/java/com/gooddata/warehouse/WarehouseServiceAT.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.IsCollectionContaining.hasItem;

/**
Expand Down Expand Up @@ -75,6 +77,14 @@ public void shouldReturnNullOnEndOfPaging() throws Exception {
}
}

@Test(groups = "warehouse", dependsOnMethods = "createWarehouse")
public void shouldListUsers() throws Exception {
final PageableList<WarehouseUser> users = service.listWarehouseUsers(warehouse, new PageRequest(1));
assertThat(users, hasSize(1));
assertThat(users.get(0), is(notNullValue()));
assertThat(users.getNextPage(), is(nullValue()));
}

@Test(dependsOnGroups = "warehouse")
public void removeWarehouse() throws Exception {
service.removeWarehouse(warehouse);
Expand Down
53 changes: 53 additions & 0 deletions src/test/java/com/gooddata/warehouse/WarehouseUserTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.gooddata.warehouse;

import org.codehaus.jackson.map.ObjectMapper;
import org.testng.annotations.Test;

import java.util.LinkedHashMap;
import java.util.Map;

import static com.gooddata.JsonMatchers.serializesToJson;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;

public class WarehouseUserTest {

public static final String ROLE = "admin";
public static final String PROFILE = "/gdc/account/profile/{profile-id}";
public static final String LOGIN = "foo@bar.com";
public static final String SELF_LINK = "/gdc/datawarehouse/instances/{instance-id}/users/{profile-id}";
public static final Map<String, String> LINKS = new LinkedHashMap<String, String>() {{
put("self", SELF_LINK);
put("parent", "/gdc/datawarehouse/instances/{instance-id}/users");
}};

@Test
public void testSerializationWithProfile() throws Exception {
final WarehouseUser user = new WarehouseUser(ROLE, PROFILE, null);
assertThat(user, serializesToJson("/warehouse/user-createWithProfile.json"));
}

@Test
public void testSerializationWithLogin() throws Exception {
final WarehouseUser user = new WarehouseUser(ROLE, null, LOGIN);
assertThat(user, serializesToJson("/warehouse/user-createWithLogin.json"));
}

@Test
public void testCompleteSerialization() throws Exception {
final WarehouseUser user = new WarehouseUser(ROLE, PROFILE, LOGIN, LINKS);
assertThat(user, serializesToJson("/warehouse/user.json"));
}

@Test
public void testDeserialization() throws Exception {
final WarehouseUser user = new ObjectMapper()
.readValue(getClass().getResourceAsStream("/warehouse/user.json"), WarehouseUser.class);

assertThat(user.getRole(), is(ROLE));
assertThat(user.getProfile(), is(PROFILE));
assertThat(user.getLogin(), is(LOGIN));
assertThat(user.getUri(), is(SELF_LINK));
assertThat(user.getLinks(), is(LINKS));
}
}
45 changes: 45 additions & 0 deletions src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.gooddata.warehouse;

import org.testng.annotations.Test;

import java.util.Collections;

import static com.gooddata.JsonMatchers.serializesToJson;
import static com.gooddata.util.ResourceUtils.readObjectFromResource;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.startsWith;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.hamcrest.core.Is.is;

public class WarehouseUsersTest {

private final WarehouseUsers users = readObjectFromResource("/warehouse/users.json", WarehouseUsers.class);

private final WarehouseUsers empty = new WarehouseUsers(Collections.<WarehouseUser>emptyList(), null);

@Test
public void testDeserialization() throws Exception {
assertThat(users, notNullValue());
assertThat(users, hasSize(2));
assertThat(users.get(0).getProfile(), startsWith("/gdc/account/profile/{profile-id"));
}

@Test
public void shouldDeserializeEmpty() throws Exception {
final WarehouseUsers result = readObjectFromResource("/warehouse/users-empty.json", WarehouseUsers.class);
assertThat(result, hasSize(0));
assertThat(result.getPaging(), is(notNullValue()));
}

@Test
public void testSerialization() throws Exception {
assertThat(users, serializesToJson("/warehouse/users.json"));
}

@Test
public void shouldSerializeEmpty() throws Exception {
assertThat(empty, serializesToJson("/warehouse/users-empty.json"));
}
}
6 changes: 6 additions & 0 deletions src/test/resources/warehouse/user-createWithLogin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"user" : {
"role" : "admin",
"login" : "foo@bar.com"
}
}
6 changes: 6 additions & 0 deletions src/test/resources/warehouse/user-createWithProfile.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"user" : {
"role" : "admin",
"profile" : "/gdc/account/profile/{profile-id}"
}
}
10 changes: 10 additions & 0 deletions src/test/resources/warehouse/user-withoutLogin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"user" : {
"role" : "admin",
"profile" : "/gdc/account/profile/{profile-id}",
"links" : {
"self" : "/gdc/datawarehouse/instances/{instance-id}/users/{profile-id}",
"parent" : "/gdc/datawarehouse/instances/{instance-id}/users"
}
}
}
11 changes: 11 additions & 0 deletions src/test/resources/warehouse/user.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"user" : {
"role" : "admin",
"profile" : "/gdc/account/profile/{profile-id}",
"login" : "foo@bar.com",
"links" : {
"self" : "/gdc/datawarehouse/instances/{instance-id}/users/{profile-id}",
"parent" : "/gdc/datawarehouse/instances/{instance-id}/users"
}
}
}
7 changes: 7 additions & 0 deletions src/test/resources/warehouse/users-empty.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"users": {
"items": [],
"paging": {},
"links": {}
}
}
31 changes: 31 additions & 0 deletions src/test/resources/warehouse/users.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"users": {
"items": [
{
"user": {
"role": "admin",
"profile": "/gdc/account/profile/{profile-id}",
"links": {
"self": "/gdc/datawarehouse/instances/{instance-id}/users/{profile-id}",
"parent": "/gdc/datawarehouse/instances/{instance-id}/users"
}
}
},
{
"user": {
"role": "dataAdmin",
"profile": "/gdc/account/profile/{profile-id-2}",
"links": {
"self": "/gdc/datawarehouse/instances/{instance-id}/users/{profile-id-2}",
"parent": "/gdc/datawarehouse/instances/{instance-id}/users"
}
}
}
],
"paging": {},
"links": {
"parent": "/gdc/datawarehouse/{instance-id}",
"self": "/gdc/datawarehouse/instances/{instance-id}/users"
}
}
}

0 comments on commit c9d46da

Please sign in to comment.