Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1615 invoice part 5 #1693

Merged
Expand Up @@ -58,7 +58,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

// FIXME-1615 : EventBus - Back to this later. AllowConcurrentEvents is easy. Subscribe? I believe I missed some conversation about that.
// FIXME-1615 : eventbus - See https://github.com/killbill/killbill/issues/1615#issuecomment-1128229812
import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;

Expand Down
Expand Up @@ -33,7 +33,6 @@
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.billing.util.callcontext.UserType;
import org.killbill.billing.util.optimizer.BusDispatcherOptimizer;
import org.killbill.billing.util.optimizer.BusOptimizer;
import org.killbill.billing.util.tag.ControlTagType;
import org.killbill.clock.Clock;
import org.killbill.notificationq.api.NotificationQueueService;
Expand All @@ -45,7 +44,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

// FIXME-1615 : EventBus - Back to this later. AllowConcurrentEvents is easy. Subscribe? I believe I missed some conversation about that.
// FIXME-1615 : eventbus - See https://github.com/killbill/killbill/issues/1615#issuecomment-1128229812
import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;

Expand Down
Expand Up @@ -18,6 +18,8 @@

package org.killbill.billing.invoice.api;

import javax.inject.Inject;

import org.killbill.billing.invoice.notification.ParentInvoiceCommitmentNotifier;
import org.killbill.billing.util.optimizer.BusOptimizer;
import org.killbill.bus.api.PersistentBus;
Expand All @@ -29,8 +31,6 @@
import org.killbill.notificationq.api.NotificationQueueService.NoSuchNotificationQueue;
import org.killbill.notificationq.api.NotificationQueueService.NotificationQueueAlreadyExists;

import com.google.inject.Inject;

public class DefaultInvoiceService implements InvoiceService {

private final NextBillingDateNotifier dateNotifier;
Expand Down
Expand Up @@ -33,7 +33,6 @@
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import java.util.function.Function;
import java.util.stream.Collectors;

import javax.annotation.Nullable;
Expand Down
Expand Up @@ -16,13 +16,13 @@

package org.killbill.billing.invoice.glue;

import javax.inject.Inject;
import javax.inject.Provider;

import org.killbill.billing.invoice.plugin.api.InvoicePluginApi;
import org.killbill.billing.invoice.provider.DefaultInvoiceProviderPluginRegistry;
import org.killbill.billing.osgi.api.OSGIServiceRegistration;

import com.google.inject.Inject;
import com.google.inject.Provider;

public class DefaultInvoiceProviderPluginRegistryProvider implements Provider<OSGIServiceRegistration<InvoicePluginApi>> {

@Inject
Expand Down
Expand Up @@ -21,6 +21,8 @@

import java.util.UUID;

import javax.inject.Inject;

import org.joda.time.DateTime;
import org.killbill.billing.invoice.InvoiceListener;
import org.killbill.billing.platform.api.KillbillService.KILLBILL_SERVICES;
Expand All @@ -36,8 +38,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.Inject;

public class DefaultNextBillingDateNotifier extends RetryableService implements NextBillingDateNotifier {

public static final String NEXT_BILLING_DATE_NOTIFIER_QUEUE = "next-billing-date-queue";
Expand Down
Expand Up @@ -21,6 +21,8 @@

import java.util.UUID;

import javax.inject.Inject;

import org.joda.time.DateTime;
import org.killbill.billing.invoice.InvoiceListener;
import org.killbill.billing.invoice.api.DefaultInvoiceService;
Expand All @@ -36,8 +38,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.Inject;

public class ParentInvoiceCommitmentNotifier implements NextBillingDateNotifier {

private static final Logger log = LoggerFactory.getLogger(ParentInvoiceCommitmentNotifier.class);
Expand Down
Expand Up @@ -21,10 +21,11 @@
import java.util.Iterator;
import java.util.UUID;

import javax.inject.Inject;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.killbill.billing.callcontext.InternalCallContext;
import org.killbill.billing.invoice.api.DefaultInvoiceService;
import org.killbill.billing.platform.api.KillbillService.KILLBILL_SERVICES;
import org.killbill.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
import org.killbill.notificationq.api.NotificationEventWithMetadata;
Expand All @@ -34,8 +35,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.Inject;

public class ParentInvoiceCommitmentPoster {

private static final Logger log = LoggerFactory.getLogger(ParentInvoiceCommitmentPoster.class);
Expand Down
Expand Up @@ -20,14 +20,14 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import javax.inject.Inject;

import org.killbill.billing.invoice.plugin.api.InvoicePluginApi;
import org.killbill.billing.osgi.api.OSGIServiceDescriptor;
import org.killbill.billing.osgi.api.OSGIServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.Inject;

public class DefaultInvoiceProviderPluginRegistry implements OSGIServiceRegistration<InvoicePluginApi> {

private final static Logger log = LoggerFactory.getLogger(DefaultInvoiceProviderPluginRegistry.class);
Expand Down
Expand Up @@ -16,13 +16,13 @@

package org.killbill.billing.invoice.provider;

import javax.inject.Inject;
import javax.inject.Provider;

import org.killbill.billing.invoice.plugin.api.InvoicePluginApi;
import org.killbill.billing.osgi.api.OSGIServiceDescriptor;
import org.killbill.billing.osgi.api.OSGIServiceRegistration;

import com.google.inject.Inject;
import com.google.inject.Provider;

public class NoOpInvoiceProviderPluginProvider implements Provider<DefaultNoOpInvoiceProviderPlugin> {

private final String instanceName;
Expand Down
Expand Up @@ -18,6 +18,8 @@

package org.killbill.billing.invoice;

import javax.inject.Inject;

import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
import org.killbill.billing.account.api.AccountInternalApi;
import org.killbill.billing.account.api.AccountUserApi;
Expand Down Expand Up @@ -49,7 +51,6 @@
import org.testng.annotations.BeforeMethod;

import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;

public abstract class InvoiceTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
Expand Down
Expand Up @@ -21,6 +21,7 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
Expand All @@ -29,6 +30,7 @@
import java.util.UUID;

import javax.annotation.Nullable;
import javax.inject.Inject;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
Expand All @@ -41,7 +43,6 @@
import org.killbill.billing.invoice.api.Invoice;
import org.killbill.billing.invoice.api.InvoiceApiException;
import org.killbill.billing.invoice.api.InvoiceStatus;
import org.killbill.billing.invoice.api.user.DefaultInvoiceCreationEvent;
import org.killbill.billing.junction.BillingEventSet;
import org.killbill.billing.util.api.AuditLevel;
import org.killbill.billing.util.audit.AuditLogWithHistory;
Expand All @@ -50,18 +51,14 @@
import org.killbill.billing.util.entity.dao.MockEntityDaoBase;
import org.killbill.bus.api.PersistentBus;

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.inject.Inject;

public class MockInvoiceDao extends MockEntityDaoBase<InvoiceModelDao, Invoice, InvoiceApiException> implements InvoiceDao {

private final PersistentBus eventBus;
private final Object monitor = new Object();
private final Map<UUID, InvoiceModelDao> invoices = new LinkedHashMap<UUID, InvoiceModelDao>();
private final Map<UUID, InvoiceItemModelDao> items = new LinkedHashMap<UUID, InvoiceItemModelDao>();
private final Map<UUID, InvoicePaymentModelDao> payments = new LinkedHashMap<UUID, InvoicePaymentModelDao>();
private final BiMap<UUID, Long> accountRecordIds = HashBiMap.create();
private final Map<UUID, InvoiceModelDao> invoices = new LinkedHashMap<>();
private final Map<UUID, InvoiceItemModelDao> items = new LinkedHashMap<>();
private final Map<UUID, InvoicePaymentModelDao> payments = new LinkedHashMap<>();
private final Map<UUID, Long> accountRecordIds = new HashMap<>();

@Inject
public MockInvoiceDao(final PersistentBus eventBus) {
Expand Down Expand Up @@ -99,16 +96,22 @@ public List<InvoiceItemModelDao> createInvoices(final Iterable<InvoiceModelDao>
final boolean returnCreatedInvoiceItems,
final InternalCallContext context) {
synchronized (monitor) {
final List<InvoiceItemModelDao> createdItems = new LinkedList<InvoiceItemModelDao>();
final List<InvoiceItemModelDao> createdItems = new LinkedList<>();
for (final InvoiceModelDao invoice : invoiceModelDaos) {
createdItems.addAll(storeInvoice(invoice, context));
}
return createdItems;
}
}

private UUID getAccountIdByRecordId(final Long accountRecordId) {
return accountRecordIds.entrySet().stream()
.filter(entry -> accountRecordId.equals(entry.getValue()))
.findFirst().get().getKey();
}

private Collection<InvoiceItemModelDao> storeInvoice(final InvoiceModelDao invoice, final InternalCallContext context) {
final Collection<InvoiceItemModelDao> createdItems = new LinkedList<InvoiceItemModelDao>();
final Collection<InvoiceItemModelDao> createdItems = new LinkedList<>();

invoices.put(invoice.getId(), invoice);
for (final InvoiceItemModelDao invoiceItemModelDao : invoice.getInvoiceItems()) {
Expand Down Expand Up @@ -165,7 +168,7 @@ public List<InvoiceModelDao> getInvoicesByAccount(final Boolean includeVoidedInv
final List<InvoiceModelDao> result = new ArrayList<InvoiceModelDao>();

synchronized (monitor) {
final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
final UUID accountId = getAccountIdByRecordId(context.getAccountRecordId());
for (final InvoiceModelDao invoice : invoices.values()) {
if (accountId.equals(invoice.getAccountId()) && !invoice.isMigrated()) {
result.add(invoice);
Expand All @@ -177,9 +180,9 @@ public List<InvoiceModelDao> getInvoicesByAccount(final Boolean includeVoidedInv

@Override
public List<InvoiceModelDao> getInvoicesByAccount(final Boolean includeVoidedInvoices, final LocalDate fromDate, final LocalDate upToDate, final InternalTenantContext context) {
final List<InvoiceModelDao> invoicesForAccount = new ArrayList<InvoiceModelDao>();
final List<InvoiceModelDao> invoicesForAccount = new ArrayList<>();
synchronized (monitor) {
final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
final UUID accountId = getAccountIdByRecordId(context.getAccountRecordId());
for (final InvoiceModelDao invoice : getAll(context)) {
if (accountId.equals(invoice.getAccountId()) && !invoice.getTargetDate().isBefore(fromDate) && !invoice.isMigrated() &&
(includeVoidedInvoices ? true : !InvoiceStatus.VOID.equals(invoice.getStatus()))) {
Expand All @@ -193,7 +196,7 @@ public List<InvoiceModelDao> getInvoicesByAccount(final Boolean includeVoidedInv

@Override
public List<InvoiceModelDao> getInvoicesBySubscription(final UUID subscriptionId, final InternalTenantContext context) {
final List<InvoiceModelDao> result = new ArrayList<InvoiceModelDao>();
final List<InvoiceModelDao> result = new ArrayList<>();

synchronized (monitor) {
for (final InvoiceModelDao invoice : invoices.values()) {
Expand All @@ -210,7 +213,7 @@ public List<InvoiceModelDao> getInvoicesBySubscription(final UUID subscriptionId

@Override
public Pagination<InvoiceModelDao> searchInvoices(final String searchKey, final Long offset, final Long limit, final InternalTenantContext context) {
final List<InvoiceModelDao> results = new LinkedList<InvoiceModelDao>();
final List<InvoiceModelDao> results = new LinkedList<>();
int maxNbRecords = 0;
for (final InvoiceModelDao invoice : getAll(context)) {
maxNbRecords++;
Expand All @@ -222,7 +225,7 @@ public Pagination<InvoiceModelDao> searchInvoices(final String searchKey, final
}
}

return DefaultPagination.<InvoiceModelDao>build(offset, limit, maxNbRecords, results);
return DefaultPagination.build(offset, limit, maxNbRecords, results);
}

@Override
Expand All @@ -243,7 +246,7 @@ public UUID getInvoiceIdByPaymentId(final UUID paymentId, final InternalTenantCo

@Override
public List<InvoicePaymentModelDao> getInvoicePaymentsByPaymentId(final UUID paymentId, final InternalTenantContext context) {
final List<InvoicePaymentModelDao> result = new LinkedList<InvoicePaymentModelDao>();
final List<InvoicePaymentModelDao> result = new LinkedList<>();
synchronized (monitor) {
for (final InvoicePaymentModelDao payment : payments.values()) {
if (paymentId.equals(payment.getPaymentId())) {
Expand All @@ -256,7 +259,7 @@ public List<InvoicePaymentModelDao> getInvoicePaymentsByPaymentId(final UUID pay

@Override
public List<InvoicePaymentModelDao> getInvoicePaymentsByInvoice(final UUID invoiceId, final InternalTenantContext context) {
final List<InvoicePaymentModelDao> result = new LinkedList<InvoicePaymentModelDao>();
final List<InvoicePaymentModelDao> result = new LinkedList<>();
synchronized (monitor) {
for (final InvoicePaymentModelDao payment : payments.values()) {
if (invoiceId.equals(payment.getInvoiceId())) {
Expand All @@ -276,7 +279,7 @@ public List<InvoicePaymentModelDao> getInvoicePaymentsByAccount(final InternalTe

final List<InvoicePaymentModelDao> invoicesForAccount = new ArrayList<InvoicePaymentModelDao>();
synchronized (monitor) {
final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
final UUID accountId = getAccountIdByRecordId(context.getAccountRecordId());
for (final InvoicePaymentModelDao payment : payments.values()) {
}
}
Expand Down Expand Up @@ -320,7 +323,7 @@ public BigDecimal getAccountBalance(final UUID accountId, final InternalTenantCo

@Override
public List<InvoiceModelDao> getUnpaidInvoicesByAccountId(final UUID accountId, final LocalDate startDate, final LocalDate upToDate, final InternalTenantContext context) {
final List<InvoiceModelDao> unpaidInvoices = new ArrayList<InvoiceModelDao>();
final List<InvoiceModelDao> unpaidInvoices = new ArrayList<>();

for (final InvoiceModelDao invoice : getAll(context)) {
if (accountId.equals(invoice.getAccountId()) && (InvoiceModelDaoHelper.getRawBalanceForRegularInvoice(invoice).compareTo(BigDecimal.ZERO) > 0) && !invoice.isMigrated()) {
Expand All @@ -333,10 +336,10 @@ public List<InvoiceModelDao> getUnpaidInvoicesByAccountId(final UUID accountId,

@Override
public List<InvoiceModelDao> getAllInvoicesByAccount(final Boolean includeVoidedInvoices, final InternalTenantContext context) {
final List<InvoiceModelDao> result = new ArrayList<InvoiceModelDao>();
final List<InvoiceModelDao> result = new ArrayList<>();

synchronized (monitor) {
final UUID accountId = accountRecordIds.inverse().get(context.getAccountRecordId());
final UUID accountId = getAccountIdByRecordId(context.getAccountRecordId());
for (final InvoiceModelDao invoice : invoices.values()) {
if (accountId.equals(invoice.getAccountId()) && (includeVoidedInvoices ? true : !InvoiceStatus.VOID.equals(invoice.getStatus()))) {
result.add(invoice);
Expand Down