killbill-aplcache

#199: Modify EntitlementContext to pass a list of List<EntitlementSpecifier>

11/5/2015 2:06:37 PM

Details

diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithEntilementPlugin.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithEntilementPlugin.java
index 1b7ccbc..2003ef2 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithEntilementPlugin.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithEntilementPlugin.java
@@ -34,6 +34,8 @@ import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
 import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
 import org.killbill.billing.catalog.api.ProductCategory;
 import org.killbill.billing.entitlement.api.DefaultEntitlement;
+import org.killbill.billing.entitlement.api.DefaultEntitlementSpecifier;
+import org.killbill.billing.entitlement.api.EntitlementSpecifier;
 import org.killbill.billing.entitlement.plugin.api.EntitlementContext;
 import org.killbill.billing.entitlement.plugin.api.EntitlementPluginApi;
 import org.killbill.billing.entitlement.plugin.api.EntitlementPluginApiException;
@@ -138,6 +140,10 @@ public class TestWithEntilementPlugin extends TestIntegrationBase {
         @Override
         public PriorEntitlementResult priorCall(final EntitlementContext entitlementContext, final Iterable<PluginProperty> properties) throws EntitlementPluginApiException {
             if (planPhasePriceOverride != null) {
+                final EntitlementSpecifier entitlementSpecifier = new DefaultEntitlementSpecifier(null, planPhasePriceOverride);
+                final List<EntitlementSpecifier> entitlementSpecifiers = new ArrayList<EntitlementSpecifier>();
+                entitlementSpecifiers.add(entitlementSpecifier);
+
                 return new PriorEntitlementResult() {
                     @Override
                     public boolean isAborted() {
@@ -145,18 +151,13 @@ public class TestWithEntilementPlugin extends TestIntegrationBase {
                     }
 
                     @Override
-                    public PlanPhaseSpecifier getAdjustedPlanPhaseSpecifier() {
-                        return null;
-                    }
-
-                    @Override
                     public LocalDate getAdjustedEffectiveDate() {
                         return null;
                     }
 
                     @Override
-                    public List<PlanPhasePriceOverride> getAdjustedPlanPhasePriceOverride() {
-                        return planPhasePriceOverride;
+                    public List<EntitlementSpecifier> getAdjustedEntitlementSpecifiers() {
+                        return entitlementSpecifiers;
                     }
 
                     @Override
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlement.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlement.java
index 59d7909..9ff10b3 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlement.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlement.java
@@ -21,7 +21,6 @@ import java.util.Collection;
 import java.util.List;
 import java.util.UUID;
 
-import org.apache.shiro.SecurityUtils;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.joda.time.LocalDate;
@@ -372,7 +371,6 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
                                                                                getAccountId(),
                                                                                null,
                                                                                getBundleId(),
-                                                                               null,
                                                                                getExternalKey(),
                                                                                null,
                                                                                localCancelDate,
@@ -439,7 +437,6 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
                                                                                getAccountId(),
                                                                                null,
                                                                                getBundleId(),
-                                                                               null,
                                                                                getExternalKey(),
                                                                                null,
                                                                                null,
@@ -488,7 +485,6 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
                                                                                getAccountId(),
                                                                                null,
                                                                                getBundleId(),
-                                                                               null,
                                                                                getExternalKey(),
                                                                                null,
                                                                                localDate,
@@ -537,7 +533,6 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
                                                                                getAccountId(),
                                                                                null,
                                                                                getBundleId(),
-                                                                               null,
                                                                                getExternalKey(),
                                                                                null,
                                                                                localDate,
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
index ec2c2fa..e8983c2 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
@@ -16,6 +16,7 @@
 
 package org.killbill.billing.entitlement.api;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
@@ -118,13 +119,15 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements 
     @Override
     public Entitlement createBaseEntitlement(final UUID accountId, final PlanPhaseSpecifier planPhaseSpecifier, final String externalKey, final List<PlanPhasePriceOverride> overrides, final LocalDate effectiveDate, final Iterable<PluginProperty> properties, final CallContext callContext) throws EntitlementApiException {
 
+        EntitlementSpecifier entitlementSpecifier = new DefaultEntitlementSpecifier(planPhaseSpecifier, overrides);
+        final List<EntitlementSpecifier> entitlementSpecifierList = new ArrayList<EntitlementSpecifier>();
+        entitlementSpecifierList.add(entitlementSpecifier);
         final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SUBSCRIPTION,
                                                                                accountId,
                                                                                null,
                                                                                null,
-                                                                               planPhaseSpecifier,
                                                                                externalKey,
-                                                                               overrides,
+                                                                               entitlementSpecifierList,
                                                                                effectiveDate,
                                                                                properties,
                                                                                callContext);
@@ -143,7 +146,8 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements 
 
                     final DateTime referenceTime = clock.getUTCNow();
                     final DateTime requestedDate = dateHelper.fromLocalDateAndReferenceTime(updatedPluginContext.getEffectiveDate(), referenceTime, contextWithValidAccountRecordId);
-                    final SubscriptionBase subscription = subscriptionBaseInternalApi.createSubscription(bundle.getId(), updatedPluginContext.getPlanPhaseSpecifier(), updatedPluginContext.getPlanPhasePriceOverride(), requestedDate, contextWithValidAccountRecordId);
+                    final EntitlementSpecifier specifier = getFirstEntitlementSpecifier(updatedPluginContext.getEntitlementSpecifiers());
+                    final SubscriptionBase subscription = subscriptionBaseInternalApi.createSubscription(bundle.getId(), specifier.getPlanPhaseSpecifier(), specifier.getOverrides(), requestedDate, contextWithValidAccountRecordId);
 
                     return new DefaultEntitlement(subscription.getId(), eventsStreamBuilder, entitlementApi, pluginExecution,
                                                   blockingStateDao, subscriptionBaseInternalApi, checker, notificationQueueService,
@@ -156,12 +160,19 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements 
         return pluginExecution.executeWithPlugin(createBaseEntitlementWithPlugin, pluginContext);
     }
 
+    private EntitlementSpecifier getFirstEntitlementSpecifier(final List<EntitlementSpecifier> entitlementSpecifiers) throws SubscriptionBaseApiException {
+        if ((entitlementSpecifiers == null) || entitlementSpecifiers.isEmpty()) {
+            throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_INVALID_ENTITLEMENT_SPECIFIER);
+        }
+        return entitlementSpecifiers.get(0);
+    }
+
     @Override
-    public Entitlement createBaseEntitlementWithAddOns(final UUID accountId, final String externalKey, final Iterable<EntitlementSpecifier> entitlementSpecifier,
+    public Entitlement createBaseEntitlementWithAddOns(final UUID accountId, final String externalKey, final Iterable<EntitlementSpecifier> entitlementSpecifiers,
                                                        final LocalDate effectiveDate, final Iterable<PluginProperty> properties, final CallContext callContext)
             throws EntitlementApiException {
 
-        final EntitlementSpecifier baseSpecifier = Iterables.tryFind(entitlementSpecifier, new Predicate<EntitlementSpecifier>() {
+        final EntitlementSpecifier baseSpecifier = Iterables.tryFind(entitlementSpecifiers, new Predicate<EntitlementSpecifier>() {
             @Override
             public boolean apply(final EntitlementSpecifier specifier) {
                 return specifier.getPlanPhaseSpecifier() != null && ProductCategory.BASE.equals(specifier.getPlanPhaseSpecifier().getProductCategory());
@@ -172,13 +183,15 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements 
             throw new EntitlementApiException(new IllegalArgumentException(), ErrorCode.SUB_CREATE_NO_BP.getCode(), "Missing Base Subscription.");
         }
 
-        final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SUBSCRIPTION,
+        final List<EntitlementSpecifier> entitlementSpecifierList = new ArrayList<EntitlementSpecifier>();
+        Iterables.addAll(entitlementSpecifierList, entitlementSpecifiers);
+
+        final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SUBSCRIPTIONS_WITH_AO,
                                                                                accountId,
                                                                                null,
                                                                                null,
-                                                                               baseSpecifier.getPlanPhaseSpecifier(),
                                                                                externalKey,
-                                                                               baseSpecifier.getOverrides(),
+                                                                               entitlementSpecifierList,
                                                                                effectiveDate,
                                                                                properties,
                                                                                callContext);
@@ -197,7 +210,7 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements 
 
                     final DateTime referenceTime = clock.getUTCNow();
                     final DateTime requestedDate = dateHelper.fromLocalDateAndReferenceTime(updatedPluginContext.getEffectiveDate(), referenceTime, contextWithValidAccountRecordId);
-                    final SubscriptionBase subscription = subscriptionBaseInternalApi.createBaseSubscriptionWithAddOns(bundle.getId(), entitlementSpecifier, requestedDate, contextWithValidAccountRecordId);
+                    final SubscriptionBase subscription = subscriptionBaseInternalApi.createBaseSubscriptionWithAddOns(bundle.getId(), entitlementSpecifiers, requestedDate, contextWithValidAccountRecordId);
 
                     return new DefaultEntitlement(subscription.getId(), eventsStreamBuilder, entitlementApi, pluginExecution,
                                                   blockingStateDao, subscriptionBaseInternalApi, checker, notificationQueueService,
@@ -216,13 +229,15 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements 
     @Override
     public Entitlement addEntitlement(final UUID bundleId, final PlanPhaseSpecifier planPhaseSpecifier, final List<PlanPhasePriceOverride> overrides, final LocalDate effectiveDate, final Iterable<PluginProperty> properties, final CallContext callContext) throws EntitlementApiException {
 
+        EntitlementSpecifier entitlementSpecifier = new DefaultEntitlementSpecifier(planPhaseSpecifier, overrides);
+        final List<EntitlementSpecifier> entitlementSpecifierList = new ArrayList<EntitlementSpecifier>();
+        entitlementSpecifierList.add(entitlementSpecifier);
         final EntitlementContext pluginContext = new DefaultEntitlementContext(OperationType.CREATE_SUBSCRIPTION,
                                                                                null,
                                                                                null,
                                                                                bundleId,
-                                                                               planPhaseSpecifier,
                                                                                null,
-                                                                               overrides,
+                                                                               entitlementSpecifierList,
                                                                                effectiveDate,
                                                                                properties,
                                                                                callContext);
@@ -246,7 +261,8 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements 
 
                 try {
                     final InternalCallContext context = internalCallContextFactory.createInternalCallContext(callContext);
-                    final SubscriptionBase subscription = subscriptionBaseInternalApi.createSubscription(bundleId, updatedPluginContext.getPlanPhaseSpecifier(), updatedPluginContext.getPlanPhasePriceOverride(), requestedDate, context);
+                    final EntitlementSpecifier specifier = getFirstEntitlementSpecifier(updatedPluginContext.getEntitlementSpecifiers());
+                    final SubscriptionBase subscription = subscriptionBaseInternalApi.createSubscription(bundleId, specifier.getPlanPhaseSpecifier(), specifier.getOverrides(), requestedDate, context);
 
                     return new DefaultEntitlement(subscription.getId(), eventsStreamBuilder, entitlementApi, pluginExecution,
                                                   blockingStateDao, subscriptionBaseInternalApi, checker, notificationQueueService,
@@ -371,9 +387,8 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements 
                                                                                sourceAccountId,
                                                                                destAccountId,
                                                                                null,
-                                                                               null,
                                                                                externalKey,
-                                                                               null,
+                                                                               new ArrayList<EntitlementSpecifier>(),
                                                                                effectiveDate,
                                                                                properties,
                                                                                context);
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementContext.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementContext.java
index 47ada7b..79da30c 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementContext.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementContext.java
@@ -24,8 +24,6 @@ import javax.annotation.Nullable;
 
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
-import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
-import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
 import org.killbill.billing.entitlement.plugin.api.EntitlementContext;
 import org.killbill.billing.entitlement.plugin.api.OperationType;
 import org.killbill.billing.entitlement.plugin.api.PriorEntitlementResult;
@@ -41,9 +39,8 @@ public class DefaultEntitlementContext implements EntitlementContext {
     private final UUID accountId;
     private final UUID destinationAccountId;
     private final UUID bundleId;
-    private final PlanPhaseSpecifier spec;
     private final String externalKey;
-    private final List<PlanPhasePriceOverride> planPhasePriceOverrides;
+    private final List<EntitlementSpecifier> entitlementSpecifiers;
     private final LocalDate effectiveDate;
     private final Iterable<PluginProperty> pluginProperties;
     private final UUID userToken;
@@ -63,9 +60,8 @@ public class DefaultEntitlementContext implements EntitlementContext {
              prev.getAccountId(),
              prev.getDestinationAccountId(),
              prev.getBundleId(),
-             pluginResult != null && pluginResult.getAdjustedPlanPhaseSpecifier() != null ? pluginResult.getAdjustedPlanPhaseSpecifier() : prev.getPlanPhaseSpecifier(),
              prev.getExternalKey(),
-             pluginResult != null && pluginResult.getAdjustedPlanPhasePriceOverride() != null ? pluginResult.getAdjustedPlanPhasePriceOverride() : prev.getPlanPhasePriceOverride(),
+             pluginResult != null && pluginResult.getAdjustedEntitlementSpecifiers() != null ? pluginResult.getAdjustedEntitlementSpecifiers() : prev.getEntitlementSpecifiers(),
              pluginResult != null && pluginResult.getAdjustedEffectiveDate() != null ? pluginResult.getAdjustedEffectiveDate() : prev.getEffectiveDate(),
              pluginResult != null && pluginResult.getAdjustedPluginProperties() != null ? pluginResult.getAdjustedPluginProperties() : prev.getPluginProperties(),
              prev);
@@ -75,13 +71,12 @@ public class DefaultEntitlementContext implements EntitlementContext {
                                      final UUID accountId,
                                      final UUID destinationAccountId,
                                      final UUID bundleId,
-                                     final PlanPhaseSpecifier spec,
                                      final String externalKey,
-                                     final List<PlanPhasePriceOverride> planPhasePriceOverrides,
+                                     final List<EntitlementSpecifier> entitlementSpecifiers,
                                      final LocalDate effectiveDate,
                                      final Iterable<PluginProperty> pluginProperties,
                                      final CallContext callContext) {
-        this(operationType, accountId, destinationAccountId, bundleId, spec, externalKey, planPhasePriceOverrides, effectiveDate, pluginProperties,
+        this(operationType, accountId, destinationAccountId, bundleId, externalKey, entitlementSpecifiers, effectiveDate, pluginProperties,
              callContext.getUserToken(), callContext.getUserName(), callContext.getCallOrigin(), callContext.getUserType(), callContext.getReasonCode(),
              callContext.getComments(), callContext.getCreatedDate(), callContext.getUpdatedDate(), callContext.getTenantId());
     }
@@ -91,9 +86,8 @@ public class DefaultEntitlementContext implements EntitlementContext {
                                      final UUID accountId,
                                      final UUID destinationAccountId,
                                      final UUID bundleId,
-                                     final PlanPhaseSpecifier spec,
                                      final String externalKey,
-                                     final List<PlanPhasePriceOverride> planPhasePriceOverrides,
+                                     final List<EntitlementSpecifier> entitlementSpecifiers,
                                      final LocalDate effectiveDate,
                                      final Iterable<PluginProperty> pluginProperties,
                                      final UUID userToken,
@@ -109,9 +103,8 @@ public class DefaultEntitlementContext implements EntitlementContext {
         this.accountId = accountId;
         this.destinationAccountId = destinationAccountId;
         this.bundleId = bundleId;
-        this.spec = spec;
         this.externalKey = externalKey;
-        this.planPhasePriceOverrides = planPhasePriceOverrides;
+        this.entitlementSpecifiers = entitlementSpecifiers;
         this.effectiveDate = effectiveDate;
         this.pluginProperties = pluginProperties;
         this.userToken = userToken;
@@ -146,18 +139,13 @@ public class DefaultEntitlementContext implements EntitlementContext {
     }
 
     @Override
-    public PlanPhaseSpecifier getPlanPhaseSpecifier() {
-        return spec;
-    }
-
-    @Override
     public String getExternalKey() {
         return externalKey;
     }
 
     @Override
-    public List<PlanPhasePriceOverride> getPlanPhasePriceOverride() {
-        return planPhasePriceOverrides;
+    public List<EntitlementSpecifier> getEntitlementSpecifiers() {
+        return entitlementSpecifiers;
     }
 
     @Override
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementApiBase.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementApiBase.java
index e092b73..9651c95 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementApiBase.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementApiBase.java
@@ -157,7 +157,6 @@ public class DefaultEntitlementApiBase {
                                                                                bundleId,
                                                                                null,
                                                                                null,
-                                                                               null,
                                                                                localEffectiveDate,
                                                                                properties,
                                                                                internalCallContextFactory.createCallContext(internalCallContext));
@@ -216,7 +215,6 @@ public class DefaultEntitlementApiBase {
                                                                                bundleId,
                                                                                null,
                                                                                null,
-                                                                               null,
                                                                                localEffectiveDate,
                                                                                properties,
                                                                                internalCallContextFactory.createCallContext(internalCallContext));