From c53ab40722cf1845727d050fa8be50288e5736e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michae=CC=88l=20van=20de=20Giessen?= Date: Thu, 14 Jun 2018 17:11:39 +0200 Subject: [PATCH 1/4] added public to SessionContext class to access getUserId() method --- src/main/java/com/bunq/sdk/context/SessionContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/bunq/sdk/context/SessionContext.java b/src/main/java/com/bunq/sdk/context/SessionContext.java index 26b3a8b8..d44b1f05 100644 --- a/src/main/java/com/bunq/sdk/context/SessionContext.java +++ b/src/main/java/com/bunq/sdk/context/SessionContext.java @@ -12,7 +12,7 @@ /** * Context of your current bunq Public API session. */ -class SessionContext implements java.io.Serializable { +public class SessionContext implements java.io.Serializable { /** * Error constants. From ab4b0b06d49c41667c459af09e425b37da0384f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michae=CC=88l=20van=20de=20Giessen?= Date: Thu, 14 Jun 2018 17:22:58 +0200 Subject: [PATCH 2/4] initUserContext from the SessionContext --- src/main/java/com/bunq/sdk/context/BunqContext.java | 2 +- src/main/java/com/bunq/sdk/context/SessionContext.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/bunq/sdk/context/BunqContext.java b/src/main/java/com/bunq/sdk/context/BunqContext.java index 754bc625..6bb7f3a2 100644 --- a/src/main/java/com/bunq/sdk/context/BunqContext.java +++ b/src/main/java/com/bunq/sdk/context/BunqContext.java @@ -15,7 +15,7 @@ public final class BunqContext { public static void loadApiContext(ApiContext apiContext) { BunqContext.apiContext = apiContext; - BunqContext.userContext = new UserContext(apiContext.getSessionContext().getUserId()); + BunqContext.userContext = apiContext.getSessionContext().initUserContext(); BunqContext.userContext.initMainMonetaryAccount(); } diff --git a/src/main/java/com/bunq/sdk/context/SessionContext.java b/src/main/java/com/bunq/sdk/context/SessionContext.java index d44b1f05..92743a63 100644 --- a/src/main/java/com/bunq/sdk/context/SessionContext.java +++ b/src/main/java/com/bunq/sdk/context/SessionContext.java @@ -102,4 +102,7 @@ public Integer getUserId() { return userId; } + public UserContext initUserContext() { + return new UserContext(getUserId()); + } } From c87bd608a04c22fd584986497ab408af15ce9877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michae=CC=88l=20van=20de=20Giessen?= Date: Thu, 14 Jun 2018 20:58:36 +0200 Subject: [PATCH 3/4] being able to construct the UserContext using a non-static ApiContext --- .../com/bunq/sdk/context/BunqContext.java | 3 +- .../com/bunq/sdk/context/SessionContext.java | 31 +++------ .../com/bunq/sdk/context/UserContext.java | 63 +++++++------------ .../endpoint/MonetaryAccountBank.java | 27 +++++++- .../sdk/model/generated/endpoint/User.java | 14 ++++- 5 files changed, 68 insertions(+), 70 deletions(-) diff --git a/src/main/java/com/bunq/sdk/context/BunqContext.java b/src/main/java/com/bunq/sdk/context/BunqContext.java index 6bb7f3a2..df332d76 100644 --- a/src/main/java/com/bunq/sdk/context/BunqContext.java +++ b/src/main/java/com/bunq/sdk/context/BunqContext.java @@ -15,8 +15,7 @@ public final class BunqContext { public static void loadApiContext(ApiContext apiContext) { BunqContext.apiContext = apiContext; - BunqContext.userContext = apiContext.getSessionContext().initUserContext(); - BunqContext.userContext.initMainMonetaryAccount(); + BunqContext.userContext = new UserContext(apiContext); } public static ApiContext getApiContext() { diff --git a/src/main/java/com/bunq/sdk/context/SessionContext.java b/src/main/java/com/bunq/sdk/context/SessionContext.java index 92743a63..06769c75 100644 --- a/src/main/java/com/bunq/sdk/context/SessionContext.java +++ b/src/main/java/com/bunq/sdk/context/SessionContext.java @@ -53,14 +53,10 @@ public class SessionContext implements java.io.Serializable { SessionContext(SessionServer sessionServer) { this.token = sessionServer.getSessionToken().getToken(); this.expiryTime = calculateExpiryTime(sessionServer); - this.userId = getUserId(sessionServer.getReferencedObject()); - } - - private Integer getUserId(BunqModel user) { - if (user instanceof UserPerson) { - return ((UserPerson) user).getId(); - } else if (user instanceof UserCompany) { - return ((UserCompany) user).getId(); + if (sessionServer.getUserPerson()!=null) { + this.userId = sessionServer.getUserPerson().getId(); + } else if (sessionServer.getUserCompany()!=null) { + this.userId = sessionServer.getUserCompany().getId(); } else { throw new BunqException(ERROR_UNEXPECTED_USER_TYPE); } @@ -70,23 +66,16 @@ private static Date calculateExpiryTime(SessionServer sessionServer) { Date expiryTime = new Date(); long sessionTimeoutMilliseconds = getSessionTimeout(sessionServer) * MILLISECONDS_IN_SECOND; expiryTime.setTime(expiryTime.getTime() + sessionTimeoutMilliseconds); - return expiryTime; } private static int getSessionTimeout(SessionServer sessionServer) { - UserCompany userCompany = sessionServer.getUserCompany(); - - if (userCompany != null) { - return userCompany.getSessionTimeout(); + if (sessionServer.getUserCompany() != null) { + return sessionServer.getUserCompany().getSessionTimeout(); } - - UserPerson userPerson = sessionServer.getUserPerson(); - - if (userPerson != null) { - return userPerson.getSessionTimeout(); + if (sessionServer.getUserPerson() != null) { + return sessionServer.getUserPerson().getSessionTimeout(); } - return SESSION_TIMEOUT_DEFAULT; } @@ -101,8 +90,4 @@ Date getExpiryTime() { public Integer getUserId() { return userId; } - - public UserContext initUserContext() { - return new UserContext(getUserId()); - } } diff --git a/src/main/java/com/bunq/sdk/context/UserContext.java b/src/main/java/com/bunq/sdk/context/UserContext.java index 9155204f..16a69863 100644 --- a/src/main/java/com/bunq/sdk/context/UserContext.java +++ b/src/main/java/com/bunq/sdk/context/UserContext.java @@ -16,44 +16,31 @@ public class UserContext { */ private static final String ERROR_UNEXPECTED_USER_INSTANCE = "\"%s\" is unexpected user instance."; private static final String ERROR_NO_ACTIVE_MONETARY_ACCOUNT_FOUND = "No active monetary account found."; - private static final String ERROR_PRIMARY_MONETARY_ACCOUNT_IS_NOT_SET = "Primary monetaryAccount is not set."; - private static final String MONETARY_ACCOUNT_STATUS_ACTIVE = "ACTIVE"; - - private UserCompany userCompany; - private UserPerson userPerson; - private MonetaryAccountBank primaryMonetaryAccountBank; - private Integer userId; - - public UserContext(Integer userId) { - BunqModel userObject = User.list().getValue().get(0).getReferencedObject(); - - this.setUser(userObject); - this.userId = userId; - } - - private void setUser(BunqModel user) { - if (user instanceof UserPerson) { - this.userPerson = (UserPerson) user; - } else if (user instanceof UserCompany) { - this.userCompany = (UserCompany) user; + private final UserCompany userCompany; + private final UserPerson userPerson; + private final MonetaryAccountBank primaryMonetaryAccountBank; + private final Integer userId; + + public UserContext(ApiContext apiContext) { + this.userId = apiContext.getSessionContext().getUserId(); + User user = User.getFirst(apiContext); + if (user.getUserPerson()!=null) { + this.userPerson = user.getUserPerson(); + this.userCompany = null; + } else if (user.getUserCompany()!=null) { + this.userCompany = user.getUserCompany(); + this.userPerson = null; } else { throw new BunqException(ERROR_UNEXPECTED_USER_INSTANCE); } - } - - public void initMainMonetaryAccount() { - List allMonetaryAccount = MonetaryAccountBank.list().getValue(); - - for (MonetaryAccountBank monetaryAccountBank : allMonetaryAccount) { - if (monetaryAccountBank.getStatus().equals(MONETARY_ACCOUNT_STATUS_ACTIVE)) { - this.primaryMonetaryAccountBank = monetaryAccountBank; - - return; - } + MonetaryAccountBank monetaryAccountBank = MonetaryAccountBank.getFirstActive(apiContext); + if(monetaryAccountBank!=null) { + this.primaryMonetaryAccountBank = monetaryAccountBank; + } + else { + throw new BunqException(ERROR_NO_ACTIVE_MONETARY_ACCOUNT_FOUND); } - - throw new BunqException(ERROR_NO_ACTIVE_MONETARY_ACCOUNT_FOUND); } public Integer getUserId() { @@ -68,16 +55,8 @@ public boolean isOnlyUserCompanySet() { return this.userPerson == null && this.userCompany != null; } - public boolean isBothUserTypeSet() { - return this.userPerson != null && this.userCompany != null; - } - public Integer getMainMonetaryAccountId() { - if (this.primaryMonetaryAccountBank == null) { - throw new BunqException(ERROR_PRIMARY_MONETARY_ACCOUNT_IS_NOT_SET); - } else { - return this.primaryMonetaryAccountBank.getId(); - } + return this.primaryMonetaryAccountBank.getId(); } public UserPerson getUserPerson() { diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/MonetaryAccountBank.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/MonetaryAccountBank.java index f8fefe35..4ef5459c 100644 --- a/src/main/java/com/bunq/sdk/model/generated/endpoint/MonetaryAccountBank.java +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/MonetaryAccountBank.java @@ -1,5 +1,7 @@ package com.bunq.sdk.model.generated.endpoint; +import com.bunq.sdk.context.ApiContext; +import com.bunq.sdk.exception.BunqException; import com.bunq.sdk.http.ApiClient; import com.bunq.sdk.http.BunqResponse; import com.bunq.sdk.http.BunqResponseRaw; @@ -48,6 +50,7 @@ public class MonetaryAccountBank extends BunqModel { public static final String FIELD_REASON_DESCRIPTION = "reason_description"; public static final String FIELD_NOTIFICATION_FILTERS = "notification_filters"; public static final String FIELD_SETTING = "setting"; + private static final String MONETARY_ACCOUNT_STATUS_ACTIVE = "ACTIVE"; /** * Object type. @@ -404,16 +407,36 @@ public static BunqResponse update(Integer monetaryAccountBankId, String return update(monetaryAccountBankId, description, dailyLimit, avatarUuid, status, subStatus, reason, reasonDescription, notificationFilters, setting, null); } + /** + * Gets the first active MonetaryAccountBank or null + */ + public static MonetaryAccountBank getFirstActive(ApiContext apiContext) { + List allMonetaryAccount = list(apiContext, null,null).getValue(); + for (MonetaryAccountBank monetaryAccountBank : allMonetaryAccount) { + if (monetaryAccountBank.getStatus().equals(MONETARY_ACCOUNT_STATUS_ACTIVE)) { + return monetaryAccountBank; + } + } + return null; + } + /** * Gets a listing of all MonetaryAccountBanks of a given user. */ - public static BunqResponse> list(Map params, Map customHeaders) { - ApiClient apiClient = new ApiClient(getApiContext()); + private static BunqResponse> list(ApiContext apiContext, Map params, Map customHeaders) { + ApiClient apiClient = new ApiClient(apiContext); BunqResponseRaw responseRaw = apiClient.get(String.format(ENDPOINT_URL_LISTING, determineUserId()), params, customHeaders); return fromJsonList(MonetaryAccountBank.class, responseRaw, OBJECT_TYPE_GET); } + /** + * Gets a listing of all MonetaryAccountBanks of a given user. + */ + public static BunqResponse> list(Map params, Map customHeaders) { + return list(getApiContext(),params,customHeaders); + } + public static BunqResponse> list() { return list(null, null); } diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/User.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/User.java index 369e5048..aff1d903 100644 --- a/src/main/java/com/bunq/sdk/model/generated/endpoint/User.java +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/User.java @@ -1,5 +1,6 @@ package com.bunq.sdk.model.generated.endpoint; +import com.bunq.sdk.context.ApiContext; import com.bunq.sdk.exception.BunqException; import com.bunq.sdk.http.ApiClient; import com.bunq.sdk.http.BunqResponse; @@ -71,11 +72,22 @@ public static BunqResponse get(Map params) { return get(params, null); } + /** + * Get first of all available users. + */ + public static User getFirst(ApiContext apiContext) { + return list(apiContext,null,null).getValue().get(0); + } + /** * Get a collection of all available users. */ public static BunqResponse> list(Map params, Map customHeaders) { - ApiClient apiClient = new ApiClient(getApiContext()); + return list(getApiContext(),params,customHeaders); + } + + private static BunqResponse> list(ApiContext apiContext,Map params, Map customHeaders) { + ApiClient apiClient = new ApiClient(apiContext); BunqResponseRaw responseRaw = apiClient.get(ENDPOINT_URL_LISTING, params, customHeaders); return fromJsonList(User.class, responseRaw); From 46a42cb155133f64f8f678c0aa2ab0f7232ab3f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michae=CC=88l=20van=20de=20Giessen?= Date: Thu, 14 Jun 2018 21:21:40 +0200 Subject: [PATCH 4/4] UserContext wrapping ApiContext --- .../com/bunq/sdk/context/UserContext.java | 14 +++++++++----- .../com/bunq/sdk/context/UserContextTest.java | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/bunq/sdk/context/UserContextTest.java diff --git a/src/main/java/com/bunq/sdk/context/UserContext.java b/src/main/java/com/bunq/sdk/context/UserContext.java index 16a69863..37a2e27e 100644 --- a/src/main/java/com/bunq/sdk/context/UserContext.java +++ b/src/main/java/com/bunq/sdk/context/UserContext.java @@ -17,14 +17,14 @@ public class UserContext { private static final String ERROR_UNEXPECTED_USER_INSTANCE = "\"%s\" is unexpected user instance."; private static final String ERROR_NO_ACTIVE_MONETARY_ACCOUNT_FOUND = "No active monetary account found."; + private final ApiContext apiContext; private final UserCompany userCompany; private final UserPerson userPerson; private final MonetaryAccountBank primaryMonetaryAccountBank; - private final Integer userId; public UserContext(ApiContext apiContext) { - this.userId = apiContext.getSessionContext().getUserId(); - User user = User.getFirst(apiContext); + this.apiContext = apiContext; + User user = User.getFirst(this.apiContext); if (user.getUserPerson()!=null) { this.userPerson = user.getUserPerson(); this.userCompany = null; @@ -34,7 +34,7 @@ public UserContext(ApiContext apiContext) { } else { throw new BunqException(ERROR_UNEXPECTED_USER_INSTANCE); } - MonetaryAccountBank monetaryAccountBank = MonetaryAccountBank.getFirstActive(apiContext); + MonetaryAccountBank monetaryAccountBank = MonetaryAccountBank.getFirstActive(this.apiContext); if(monetaryAccountBank!=null) { this.primaryMonetaryAccountBank = monetaryAccountBank; } @@ -43,8 +43,12 @@ public UserContext(ApiContext apiContext) { } } + public ApiContext getApiContext() { + return apiContext; + } + public Integer getUserId() { - return this.userId; + return this.apiContext.getSessionContext().getUserId(); } public boolean isOnlyUserPersonSet() { diff --git a/src/test/java/com/bunq/sdk/context/UserContextTest.java b/src/test/java/com/bunq/sdk/context/UserContextTest.java new file mode 100644 index 00000000..665db3b5 --- /dev/null +++ b/src/test/java/com/bunq/sdk/context/UserContextTest.java @@ -0,0 +1,19 @@ +package com.bunq.sdk.context; + +import com.bunq.sdk.BunqSdkTestBase; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class UserContextTest extends BunqSdkTestBase { + + @Test + public void testConstruct() { + ApiContext context = getApiContext(); + + UserContext sut = new UserContext(context); + + assertNotNull(sut.getUserId()); + assertNotNull(sut.getMainMonetaryAccountId()); + } +} \ No newline at end of file