diff --git a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java
index 864d7f9..85e4b88 100644
--- a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java
+++ b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java
@@ -112,8 +112,13 @@ public class BlockingCalculator {
final List<BlockingState> aggregateSubscriptionBlockingEvents = getAggregateBlockingEventsPerSubscription(subscription.getEndDate(), subscriptionBlockingEvents, bundleBlockingEvents, accountBlockingEvents);
final List<DisabledDuration> accountBlockingDurations = createBlockingDurations(aggregateSubscriptionBlockingEvents);
- billingEventsToAdd.addAll(createNewEvents(accountBlockingDurations, billingEvents, subscription, context));
- billingEventsToRemove.addAll(eventsToRemove(accountBlockingDurations, billingEvents, subscription));
+ final SortedSet<BillingEvent> subscriptionBillingEvents = filter(billingEvents, subscription);
+
+ final SortedSet<BillingEvent> newEvents = createNewEvents(accountBlockingDurations, subscriptionBillingEvents, context);
+ billingEventsToAdd.addAll(newEvents);
+
+ final SortedSet<BillingEvent> removedEvents = eventsToRemove(accountBlockingDurations, subscriptionBillingEvents);
+ billingEventsToRemove.addAll(removedEvents);
}
}
@@ -161,12 +166,11 @@ public class BlockingCalculator {
}
protected SortedSet<BillingEvent> eventsToRemove(final List<DisabledDuration> disabledDuration,
- final SortedSet<BillingEvent> billingEvents, final SubscriptionBase subscription) {
+ final SortedSet<BillingEvent> subscriptionBillingEvents) {
final SortedSet<BillingEvent> result = new TreeSet<BillingEvent>();
- final SortedSet<BillingEvent> filteredBillingEvents = filter(billingEvents, subscription);
for (final DisabledDuration duration : disabledDuration) {
- for (final BillingEvent event : filteredBillingEvents) {
+ for (final BillingEvent event : subscriptionBillingEvents) {
if (duration.getEnd() == null || event.getEffectiveDate().isBefore(duration.getEnd())) {
if (!event.getEffectiveDate().isBefore(duration.getStart())) { //between the pair
result.add(event);
@@ -179,16 +183,16 @@ public class BlockingCalculator {
return result;
}
- protected SortedSet<BillingEvent> createNewEvents(final List<DisabledDuration> disabledDuration, final SortedSet<BillingEvent> billingEvents, final SubscriptionBase subscription, final InternalTenantContext context) throws CatalogApiException {
+ protected SortedSet<BillingEvent> createNewEvents(final List<DisabledDuration> disabledDuration, final SortedSet<BillingEvent> subscriptionBillingEvents, final InternalTenantContext context) throws CatalogApiException {
final SortedSet<BillingEvent> result = new TreeSet<BillingEvent>();
final Catalog catalog = catalogService.getFullCatalog(true, true, context);
for (final DisabledDuration duration : disabledDuration) {
// The first one before the blocked duration
- final BillingEvent precedingInitialEvent = precedingBillingEventForSubscription(duration.getStart(), billingEvents, subscription);
+ final BillingEvent precedingInitialEvent = precedingBillingEventForSubscription(duration.getStart(), subscriptionBillingEvents);
// The last one during of before the duration
- final BillingEvent precedingFinalEvent = precedingBillingEventForSubscription(duration.getEnd(), billingEvents, subscription);
+ final BillingEvent precedingFinalEvent = precedingBillingEventForSubscription(duration.getEnd(), subscriptionBillingEvents);
if (precedingInitialEvent != null) { // there is a preceding billing event
result.add(createNewDisableEvent(duration.getStart(), precedingInitialEvent, catalog));
@@ -203,23 +207,23 @@ public class BlockingCalculator {
return result;
}
- protected BillingEvent precedingBillingEventForSubscription(final DateTime disabledDurationStart, final SortedSet<BillingEvent> billingEvents, final SubscriptionBase subscription) {
- if (disabledDurationStart == null) { //second of a pair can be null if there's no re-enabling
+ protected BillingEvent precedingBillingEventForSubscription(final DateTime disabledDurationStart, final SortedSet<BillingEvent> subscriptionBillingEvents) {
+ if (disabledDurationStart == null) {
return null;
}
- final SortedSet<BillingEvent> filteredBillingEvents = filter(billingEvents, subscription);
- BillingEvent result = filteredBillingEvents.first();
+ BillingEvent result = subscriptionBillingEvents.first();
+ // Use case where we first Block and the create the subscription for instance
+ // (disabledDurationStart could be before start subscription or align right at the same exact time)
if (!disabledDurationStart.isAfter(result.getEffectiveDate())) {
- //This case can happen, for example, if we have an add on and the bundle goes into disabled before the add on is created
return null;
}
- for (final BillingEvent event : filteredBillingEvents) {
- if (!event.getEffectiveDate().isBefore(disabledDurationStart)) { // found it its the previous event
+ for (final BillingEvent event : subscriptionBillingEvents) {
+ if (!event.getEffectiveDate().isBefore(disabledDurationStart)) {
return result;
- } else { // still looking
+ } else {
result = event;
}
}
@@ -318,7 +322,7 @@ public class BlockingCalculator {
svcBlockingStateNesting.addBlockingState(e);
}
- Iterable<DisabledDuration> unorderedDisabledDuration = Iterables.concat(Iterables.transform(svcBlockedNesting.values(), new Function<BlockingStateNesting, List<DisabledDuration>>() {
+ final Iterable<DisabledDuration> unorderedDisabledDuration = Iterables.concat(Iterables.transform(svcBlockedNesting.values(), new Function<BlockingStateNesting, List<DisabledDuration>>() {
@Override
public List<DisabledDuration> apply(final BlockingStateNesting input) {
return input.build();
diff --git a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java
index a62fe1a..a480afa 100644
--- a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java
+++ b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java
@@ -159,7 +159,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
disabledDuration.add(new DisabledDuration(now, null));
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 0);
}
@@ -178,7 +178,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
billingEvents.add(e1);
billingEvents.add(e2);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -196,7 +196,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
final BillingEvent e1 = createRealEvent(now.plusDays(1), subscription1);
billingEvents.add(e1);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 1);
assertEquals(results.first(), e1);
@@ -214,7 +214,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
final BillingEvent e1 = createRealEvent(now, subscription1);
billingEvents.add(e1);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 1);
assertEquals(results.first(), e1);
@@ -232,7 +232,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
final BillingEvent e1 = createRealEvent(now.minusDays(1), subscription1);
billingEvents.add(e1);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 0);
}
@@ -251,7 +251,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
billingEvents.add(e1);
billingEvents.add(e2);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -273,7 +273,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
billingEvents.add(e2);
billingEvents.add(e3);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -291,7 +291,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
final BillingEvent e2 = createRealEvent(now.plusDays(1), subscription1);
billingEvents.add(e2);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -312,7 +312,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
billingEvents.add(e2);
billingEvents.add(e3);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -332,7 +332,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
billingEvents.add(e3);
- final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents);
assertEquals(results.size(), 0);
}
@@ -348,7 +348,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
disabledDuration.add(new DisabledDuration(now, null));
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 1);
assertEquals(results.first().getEffectiveDate(), now);
@@ -370,7 +370,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 1);
assertEquals(results.first().getEffectiveDate(), now);
@@ -391,7 +391,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
disabledDuration.add(new DisabledDuration(now, null));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 0);
}
@@ -407,7 +407,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
disabledDuration.add(new DisabledDuration(now, null));
billingEvents.add(createRealEvent(now, subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 0);
}
@@ -423,7 +423,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
disabledDuration.add(new DisabledDuration(now, now.plusDays(2)));
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 2);
@@ -449,7 +449,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 2);
assertEquals(results.first().getEffectiveDate(), now);
@@ -475,7 +475,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
billingEvents.add(createRealEvent(now.plusDays(3), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 2);
assertEquals(results.first().getEffectiveDate(), now);
@@ -499,7 +499,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
disabledDuration.add(new DisabledDuration(now, now.plusDays(2)));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 1);
assertEquals(results.last().getEffectiveDate(), now.plusDays(2));
@@ -518,7 +518,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
disabledDuration.add(new DisabledDuration(now, now.plusDays(2)));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 1);
assertEquals(results.last().getEffectiveDate(), now.plusDays(2));
@@ -537,7 +537,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
disabledDuration.add(new DisabledDuration(now, now.plusDays(2)));
billingEvents.add(createRealEvent(now.plusDays(3), subscription1));
- final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, subscription1, internalCallContext);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, internalCallContext);
assertEquals(results.size(), 0);
}
@@ -553,10 +553,10 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
events.add(createRealEvent(now.minusDays(5), subscription1));
events.add(createRealEvent(now.minusDays(1), subscription1));
- final BillingEvent minus11 = blockingCalculator.precedingBillingEventForSubscription(now.minusDays(11), events, subscription1);
+ final BillingEvent minus11 = blockingCalculator.precedingBillingEventForSubscription(now.minusDays(11), events);
assertNull(minus11);
- final BillingEvent minus5andAHalf = blockingCalculator.precedingBillingEventForSubscription(now.minusDays(5).minusHours(12), events, subscription1);
+ final BillingEvent minus5andAHalf = blockingCalculator.precedingBillingEventForSubscription(now.minusDays(5).minusHours(12), events);
assertNotNull(minus5andAHalf);
assertEquals(minus5andAHalf.getEffectiveDate(), now.minusDays(6));