From 714d48695c6bce1487e643118302bad50da1770b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michae=CC=88l=20van=20de=20Giessen?= Date: Sun, 17 Jun 2018 17:01:26 +0200 Subject: [PATCH] build UserContext non-static (bunq/sdk_java#93) UserContext building without static references, backwards compatible --- .../com/bunq/sdk/context/BunqContext.java | 3 +- .../com/bunq/sdk/context/SessionContext.java | 1 - .../com/bunq/sdk/context/UserContext.java | 48 +++++++------------ .../sdk/model/core/UserContextHelper.java | 47 ++++++++++++++++++ .../com/bunq/sdk/context/UserContextTest.java | 19 ++++++++ 5 files changed, 85 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/bunq/sdk/model/core/UserContextHelper.java create mode 100644 src/test/java/com/bunq/sdk/context/UserContextTest.java diff --git a/src/main/java/com/bunq/sdk/context/BunqContext.java b/src/main/java/com/bunq/sdk/context/BunqContext.java index 2f758c42..b6ddbffe 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 = new UserContext(apiContext.getSessionContext().getUserId()); - 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 d44b1f05..fb43dee0 100644 --- a/src/main/java/com/bunq/sdk/context/SessionContext.java +++ b/src/main/java/com/bunq/sdk/context/SessionContext.java @@ -101,5 +101,4 @@ Date getExpiryTime() { public Integer getUserId() { return userId; } - } diff --git a/src/main/java/com/bunq/sdk/context/UserContext.java b/src/main/java/com/bunq/sdk/context/UserContext.java index a5c18777..087297bc 100644 --- a/src/main/java/com/bunq/sdk/context/UserContext.java +++ b/src/main/java/com/bunq/sdk/context/UserContext.java @@ -2,6 +2,7 @@ import com.bunq.sdk.exception.BunqException; import com.bunq.sdk.model.core.BunqModel; +import com.bunq.sdk.model.core.UserContextHelper; import com.bunq.sdk.model.generated.endpoint.MonetaryAccountBank; import com.bunq.sdk.model.generated.endpoint.User; import com.bunq.sdk.model.generated.endpoint.UserCompany; @@ -18,54 +19,41 @@ public class UserContext { 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 static final int INDEX_FIRST = 0; - + private final ApiContext apiContext; private UserCompany userCompany; private UserPerson userPerson; private MonetaryAccountBank primaryMonetaryAccountBank; - private Integer userId; - - public UserContext(Integer userId) { - this.setUser(this.getUserObject()); - this.userId = userId; - } - private BunqModel getUserObject() { - return User.list().getValue().get(INDEX_FIRST).getReferencedObject(); + public UserContext(ApiContext apiContext) { + this.apiContext = apiContext; + refreshContext(); } - private void setUser(BunqModel user) { - if (user instanceof UserPerson) { - this.userPerson = (UserPerson) user; - } else if (user instanceof UserCompany) { - this.userCompany = (UserCompany) user; + private void initUser(User user) { + if (user!=null && user.getUserPerson()!=null) { + this.userPerson = user.getUserPerson(); + } else if (user!=null && user.getUserCompany()!=null) { + this.userCompany = user.getUserCompany(); } 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; - } + private void initMainMonetaryAccount(MonetaryAccountBank monetaryAccountBank) { + if(monetaryAccountBank==null) { + throw new BunqException(ERROR_NO_ACTIVE_MONETARY_ACCOUNT_FOUND); } - - throw new BunqException(ERROR_NO_ACTIVE_MONETARY_ACCOUNT_FOUND); + this.primaryMonetaryAccountBank = monetaryAccountBank; } public void refreshContext() { - this.setUser(this.getUserObject()); - this.initMainMonetaryAccount(); + UserContextHelper helper = new UserContextHelper(this.apiContext); + this.initUser(helper.getFirstUser()); + this.initMainMonetaryAccount(helper.getFirstActiveMonetaryAccountBank(getUserId())); } public Integer getUserId() { - return this.userId; + return this.apiContext.getSessionContext().getUserId(); } public boolean isOnlyUserPersonSet() { diff --git a/src/main/java/com/bunq/sdk/model/core/UserContextHelper.java b/src/main/java/com/bunq/sdk/model/core/UserContextHelper.java new file mode 100644 index 00000000..83221c3f --- /dev/null +++ b/src/main/java/com/bunq/sdk/model/core/UserContextHelper.java @@ -0,0 +1,47 @@ +package com.bunq.sdk.model.core; + +import com.bunq.sdk.context.ApiContext; +import com.bunq.sdk.http.ApiClient; +import com.bunq.sdk.http.BunqResponse; +import com.bunq.sdk.http.BunqResponseRaw; +import com.bunq.sdk.model.generated.endpoint.MonetaryAccountBank; +import com.bunq.sdk.model.generated.endpoint.User; + +import java.util.List; + +public class UserContextHelper extends BunqModel { + private static final String MONETARY_ACCOUNT_STATUS_ACTIVE = "ACTIVE"; + private static final int INDEX_FIRST = 0; + + private final ApiClient apiClient; + + public UserContextHelper(ApiContext apiContext) { + this.apiClient = new ApiClient(apiContext); + } + + private BunqResponseRaw getRawResponse(String url) { + return this.apiClient.get(url, null, null); + } + + public User getFirstUser() { + BunqResponseRaw responseRaw = getRawResponse("user"); + BunqResponse> response = fromJsonList(User.class, responseRaw); + return response.getValue().get(INDEX_FIRST); + } + + public MonetaryAccountBank getFirstActiveMonetaryAccountBank(Integer userId) { + BunqResponseRaw responseRaw = getRawResponse(String.format("user/%s/monetary-account-bank", userId)); + BunqResponse> response = fromJsonList(MonetaryAccountBank.class, responseRaw, MonetaryAccountBank.class.getSimpleName()); + for (MonetaryAccountBank monetaryAccountBank : response.getValue()) { + if (monetaryAccountBank.getStatus().equals(MONETARY_ACCOUNT_STATUS_ACTIVE)) { + return monetaryAccountBank; + } + } + return null; + } + + @Override + public boolean isAllFieldNull() { + return true; + } +} 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..2c631976 --- /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