killbill-memoizeit
Changes
entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java 30(+17 -13)
Details
diff --git a/api/src/main/java/org/killbill/billing/callcontext/InternalCallContext.java b/api/src/main/java/org/killbill/billing/callcontext/InternalCallContext.java
index ea11dcf..5370614 100644
--- a/api/src/main/java/org/killbill/billing/callcontext/InternalCallContext.java
+++ b/api/src/main/java/org/killbill/billing/callcontext/InternalCallContext.java
@@ -22,6 +22,7 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.CallOrigin;
import org.killbill.billing.util.callcontext.UserType;
@@ -52,7 +53,7 @@ public class InternalCallContext extends InternalTenantContext {
this.contextUserType = userType;
this.reasonCode = reasonCode;
this.comments = comment;
- this.createdDate = createdDate;
+ this.createdDate = new DateTime(createdDate, DateTimeZone.UTC);
this.updatedDate = updatedDate;
}
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java b/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
index 03b8ba9..192d301 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
@@ -27,9 +27,9 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
-
import org.killbill.billing.account.api.Account;
import org.killbill.billing.callcontext.InternalTenantContext;
+import org.killbill.billing.catalog.api.Plan;
import org.killbill.billing.catalog.api.Product;
import org.killbill.billing.catalog.api.ProductCategory;
import org.killbill.billing.entitlement.EntitlementService;
@@ -331,18 +331,22 @@ public class DefaultEventsStream implements EventsStream {
new Predicate<SubscriptionBase>() {
@Override
public boolean apply(final SubscriptionBase subscription) {
- return ProductCategory.ADD_ON.equals(subscription.getCategory()) &&
- // Check the entitlement for that add-on hasn't been cancelled yet
- getEntitlementCancellationEvent(subscription.getId()) == null &&
- (
- // Base subscription cancelled
- baseTransitionTriggerNextProduct == null ||
- (
- // Change plan - check which add-ons to cancel
- includedAddonsForProduct.contains(subscription.getLastActivePlan().getProduct().getName()) ||
- !availableAddonsForProduct.contains(subscription.getLastActivePlan().getProduct().getName())
- )
- );
+ final Plan lastActivePlan = subscription.getLastActivePlan();
+ final boolean result = ProductCategory.ADD_ON.equals(subscription.getCategory()) &&
+ // Check the subscription started, if not we don't want it, and that way we avoid doing NPE a few lines below.
+ lastActivePlan != null &&
+ // Check the entitlement for that add-on hasn't been cancelled yet
+ getEntitlementCancellationEvent(subscription.getId()) == null &&
+ (
+ // Base subscription cancelled
+ baseTransitionTriggerNextProduct == null ||
+ (
+ // Change plan - check which add-ons to cancel
+ includedAddonsForProduct.contains(lastActivePlan.getProduct().getName()) ||
+ !availableAddonsForProduct.contains(subscription.getLastActivePlan().getProduct().getName())
+ )
+ );
+ return result;
}
});
diff --git a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
index daa9a47..9b4d9a2 100644
--- a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
+++ b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
@@ -144,6 +144,12 @@ public class DefaultInternalBillingApi implements BillingInternalApi {
boolean updatedAccountBCD = false;
for (final SubscriptionBase subscription : subscriptions) {
+
+ // The subscription did not even start, so there is nothing to do yet, we can skip and avoid some NPE down the line when calculating the BCD
+ if (subscription.getState() == null) {
+ continue;
+ }
+
for (final EffectiveSubscriptionInternalEvent transition : subscriptionApi.getBillingTransitions(subscription, context)) {
try {
final int bcdLocal = bcdCalculator.calculateBcd(bundle, subscription, transition, account, context);
diff --git a/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java b/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
index ef042d0..5cb3915 100644
--- a/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
+++ b/util/src/main/java/org/killbill/billing/util/config/PaymentConfig.java
@@ -56,7 +56,7 @@ public interface PaymentConfig extends KillbillConfig {
public int getPluginFailureRetryMaxAttempts();
@Config("org.killbill.payment.plugin.timeout")
- @Default("90s")
+ @Default("5s")
@Description("Timeout for each payment attempt")
public TimeSpan getPaymentPluginTimeout();