DefaultPaymentApi.java

41 lines | 1.496 kB Blame History Raw Download
package com.ning.billing.payment.api;

import java.util.UUID;

import javax.annotation.Nullable;

import com.google.inject.Inject;
import com.ning.billing.account.api.IAccount;
import com.ning.billing.account.api.IAccountUserApi;
import com.ning.billing.payment.RequestProcessor;
import com.ning.billing.payment.provider.PaymentProviderPlugin;
import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;

public class DefaultPaymentApi implements PaymentApi {
    private final PaymentProviderPluginRegistry pluginRegistry;
    private final IAccountUserApi accountUserApi;

    @Inject
    public DefaultPaymentApi(PaymentProviderPluginRegistry pluginRegistry, IAccountUserApi accountUserApi) {
        this.pluginRegistry = pluginRegistry;
        this.accountUserApi = accountUserApi;
    }

    @Override
    public Either<PaymentError, PaymentMethodInfo> getPaymentMethodInfo(@Nullable String accountId, String paymentMethodId) {
        final String paymentProviderName;

        if (accountId == null) {
            // TODO: backwards compatible mode: get provider name from config
            paymentProviderName = null;
        }
        else {
            final IAccount account = accountUserApi.getAccountFromId(UUID.fromString(accountId));
            paymentProviderName = account.getFieldValue(RequestProcessor.PAYMENT_PROVIDER_KEY);
        }
        final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);

        return plugin.getPaymentMethodInfo(paymentMethodId);
    }
}