-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
349 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
|
||
} |
25 changes: 25 additions & 0 deletions
25
src/main/java/com/gooddata/warehouse/WarehouseUsersDeserializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
19
src/main/java/com/gooddata/warehouse/WarehouseUsersSerializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
src/test/java/com/gooddata/warehouse/WarehouseUserTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
45
src/test/java/com/gooddata/warehouse/WarehouseUsersTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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")); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"user" : { | ||
"role" : "admin", | ||
"login" : "foo@bar.com" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"user" : { | ||
"role" : "admin", | ||
"profile" : "/gdc/account/profile/{profile-id}" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{ | ||
"users": { | ||
"items": [], | ||
"paging": {}, | ||
"links": {} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
} | ||
} | ||
} |