package oneapi.client.impl;
import java.util.ArrayList;
import java.util.List;
import oneapi.client.CustomerProfileClient;
import oneapi.config.Configuration;
import oneapi.listener.LoginListener;
import oneapi.listener.LogoutListener;
import oneapi.model.LoginRequest;
import oneapi.model.RequestData;
import oneapi.model.RequestData.Method;
import oneapi.model.common.AccountBalance;
import oneapi.model.common.CustomerProfile;
import oneapi.model.common.LoginResponse;
public class CustomerProfileClientImpl extends OneAPIBaseClientImpl implements CustomerProfileClient {
private static final String CUSTOMER_PROFILE_URL_BASE = "/customerProfile";
private List<LoginListener> loginListenersList = null;
private List<LogoutListener> logoutListenerList = null;
//*************************CustomerProfileClientImpl initialization***********************************************************************************************************************************************
public CustomerProfileClientImpl(Configuration configuration, LoginListener loginListner, LogoutListener logoutListener) {
super(configuration);
addLoginListener(loginListner);
addLogoutListener(logoutListener);
}
//*************************CustomerProfileClientImpl public***********************************************************************************************************************************************
@Override
public LoginResponse login() {
LoginRequest loginRequest = new LoginRequest(getConfiguration().getAuthentication().getUsername(), getConfiguration().getAuthentication().getPassword());
RequestData requestData = new RequestData(CUSTOMER_PROFILE_URL_BASE + "/login", Method.POST, "login", loginRequest, JSON_CONTENT_TYPE);
LoginResponse response = executeMethod(requestData, LoginResponse.class);
fireOnLogin(response);
return response;
}
@Override
public void logout() {
RequestData requestData = new RequestData(CUSTOMER_PROFILE_URL_BASE + "/logout", Method.POST);
executeMethod(requestData);
fireOnLogout();
}
@Override
public CustomerProfile getCustomerProfile() {
RequestData requestData = new RequestData(CUSTOMER_PROFILE_URL_BASE, Method.GET);
return executeMethod(requestData, CustomerProfile.class);
}
@Override
public CustomerProfile[] getCustomerProfiles() {
RequestData requestData = new RequestData(CUSTOMER_PROFILE_URL_BASE + "/list", Method.GET);
return executeMethod(requestData, CustomerProfile[].class);
}
@Override
public CustomerProfile getCustomerProfileByUserId(int id) {
RequestData requestData = new RequestData(CUSTOMER_PROFILE_URL_BASE + "/" + encodeURLParam(String.valueOf(id)), Method.GET);
return executeMethod(requestData, CustomerProfile.class);
}
@Override
public AccountBalance getAccountBalance()
{
RequestData requestData = new RequestData(CUSTOMER_PROFILE_URL_BASE + "/balance", Method.GET);
return executeMethod(requestData, AccountBalance.class);
}
//*************************CustomerProfileClientImpl private******************************************************************************************************************************************************
/**
* Add OneAPI Login listener
* @param listener - (new LoginListener)
*/
private void addLoginListener(LoginListener listener) {
if (listener == null) return;
if (this.loginListenersList == null) {
this.loginListenersList = new ArrayList<LoginListener>();
}
this.loginListenersList.add(listener);
}
/**
* Add OneAPI Logout listener
* @param listener - (new LogoutListener)
*/
private void addLogoutListener(LogoutListener listener) {
if (listener == null) return;
if (this.logoutListenerList == null) {
this.logoutListenerList = new ArrayList<LogoutListener>();
}
this.logoutListenerList.add(listener);
}
/**
* Fire on Login done
*/
private void fireOnLogin(LoginResponse response) {
if (loginListenersList != null) {
for (LoginListener listener : loginListenersList) {
listener.onLogin(response);
}
}
}
/**
* Fire on Logout done
*/
private void fireOnLogout() {
if (logoutListenerList != null) {
for (LogoutListener listener : logoutListenerList) {
listener.onLogout();
}
}
}
}