001package com.gigya.android.sdk.interruption.link;
002
003import com.gigya.android.sdk.GigyaCallback;
004import com.gigya.android.sdk.GigyaLogger;
005import com.gigya.android.sdk.GigyaLoginCallback;
006import com.gigya.android.sdk.account.models.GigyaAccount;
007import com.gigya.android.sdk.api.GigyaApiResponse;
008import com.gigya.android.sdk.api.IBusinessApiService;
009import com.gigya.android.sdk.interruption.Resolver;
010import com.gigya.android.sdk.interruption.link.models.ConflictingAccounts;
011import com.gigya.android.sdk.network.GigyaError;
012
013import java.util.HashMap;
014import java.util.Map;
015
016public class LinkAccountsResolver<A extends GigyaAccount> extends Resolver<A> implements ILinkAccountsResolver {
017
018    private static final String LOG_TAG = "GigyaLinkAccountsResolver";
019
020    private ConflictingAccounts _conflictingAccounts;
021
022    public LinkAccountsResolver(GigyaLoginCallback<A> loginCallback,
023                                GigyaApiResponse interruption,
024                                IBusinessApiService<A> businessApiService) {
025        super(loginCallback, interruption, businessApiService);
026    }
027
028
029    @Override
030    public ConflictingAccounts getConflictingAccounts() {
031        return _conflictingAccounts;
032    }
033
034
035    @Override
036    public void requestConflictingAccounts() {
037        GigyaLogger.debug(LOG_TAG, "init: sending fetching conflicting accounts");
038        // Get conflicting accounts.
039        _businessApiService.getConflictingAccounts(getRegToken(), new GigyaCallback<GigyaApiResponse>() {
040            @Override
041            public void onSuccess(GigyaApiResponse response) {
042                if (response.getErrorCode() == 0) {
043                    _conflictingAccounts = response.getField("conflictingAccount", ConflictingAccounts.class);
044                    if (_conflictingAccounts == null) {
045                        _loginCallback.onError(GigyaError.generalError());
046                    } else {
047                        _loginCallback.onConflictingAccounts(_interruption, LinkAccountsResolver.this);
048                    }
049                } else {
050                    _loginCallback.onError(GigyaError.fromResponse(response));
051                }
052            }
053
054            @Override
055            public void onError(GigyaError error) {
056                _loginCallback.onError(error);
057            }
058        });
059    }
060
061    @Override
062    public void linkToSite(String loginID, String password) {
063        GigyaLogger.debug(LOG_TAG, "linkToSite: with loginID = " + loginID);
064        final Map<String, Object> params = new HashMap<>();
065        params.put("loginID", loginID);
066        params.put("password", password);
067        params.put("loginMode", "link");
068        params.put("regToken", getRegToken());
069        _businessApiService.login(params, _loginCallback);
070    }
071
072    @Override
073    public void linkToSocial(String providerName) {
074        GigyaLogger.debug(LOG_TAG, "linkToSocial: with provider" + providerName);
075        final Map<String, Object> params = new HashMap<>();
076        params.put("loginMode", "link");
077        params.put("regToken", getRegToken());
078        _businessApiService.login(providerName, params, _loginCallback);
079
080    }
081}