killbill-uncached

Add entitlement APIs to be able to also retrieve previous subscription

8/20/2012 6:51:38 PM

Details

diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java b/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
index 4eaadff..9c280fe 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
@@ -79,6 +79,14 @@ public interface Subscription extends Entity, Blockable {
 
     public PlanPhase getCurrentPhase();
 
+    public String getLastActiveProductName();
+
+    public String getLastActivePriceListName();
+
+    public String getLastActiveCategoryName();
+
+    public String getLastActiveBillingPeriod();
+
     public DateTime getChargedThroughDate();
 
     public DateTime getPaidThroughDate();
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
index fe7d666..cb234a7 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
@@ -243,6 +243,46 @@ public class SubscriptionData extends EntityBase implements Subscription {
         return new DefaultEffectiveSubscriptionEvent(data, alignStartDate);
     }
 
+    @Override
+    public String getLastActiveProductName() {
+        if (getState() == SubscriptionState.CANCELLED) {
+            final SubscriptionTransitionData data = getPreviousTransitionData();
+            return data.getPreviousPlan().getName();
+        } else {
+            return getCurrentPlan().getName();
+        }
+    }
+
+    @Override
+    public String getLastActivePriceListName() {
+        if (getState() == SubscriptionState.CANCELLED) {
+            final SubscriptionTransitionData data = getPreviousTransitionData();
+            return data.getPreviousPriceList().getName();
+        } else {
+            return getCurrentPriceList().getName();
+        }
+    }
+
+    @Override
+    public String getLastActiveCategoryName() {
+        if (getState() == SubscriptionState.CANCELLED) {
+            final SubscriptionTransitionData data = getPreviousTransitionData();
+            return data.getPreviousPlan().getProduct().getCategory().name();
+        } else {
+            return getCurrentPlan().getProduct().getCategory().name();
+        }
+    }
+
+    @Override
+    public String getLastActiveBillingPeriod() {
+        if (getState() == SubscriptionState.CANCELLED) {
+            final SubscriptionTransitionData data = getPreviousTransitionData();
+            return data.getPreviousPlan().getBillingPeriod().name();
+        } else {
+            return getCurrentPlan().getBillingPeriod().name();
+        }
+    }
+
     protected SubscriptionTransitionData getPreviousTransitionData() {
         if (transitions == null) {
             return null;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
index d7df43b..291eec4 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
@@ -22,6 +22,7 @@ import javax.annotation.Nullable;
 
 import org.joda.time.DateTime;
 
+import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.util.audit.AuditLog;
 
@@ -67,10 +68,10 @@ public class SubscriptionJsonNoEvents extends SubscriptionJsonSimple {
         this(data.getId().toString(),
              data.getBundleId().toString(),
              data.getStartDate(),
-             data.getCurrentPlan() != null ? data.getCurrentPlan().getProduct().getName() : null,
-             data.getCurrentPlan() != null ? data.getCurrentPlan().getProduct().getCategory().toString() : null,
-             data.getCurrentPlan() != null ? data.getCurrentPlan().getBillingPeriod().toString() : null,
-             data.getCurrentPriceList() != null ? data.getCurrentPriceList().getName() : null,
+             data.getLastActiveProductName(),
+             data.getLastActiveCategoryName(),
+             data.getLastActiveBillingPeriod(),
+             data.getLastActivePriceListName(),
              data.getChargedThroughDate(),
              data.getEndDate() != null ? data.getEndDate() : data.getFutureEndDate(),
              toAuditLogJson(auditLogs));
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
index 81429b4..6ab3239 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
@@ -117,8 +117,8 @@ public class BundleResource extends JaxRsResourceBase {
         if (bundle == null) {
             return Response.status(Status.NO_CONTENT).build();
         }
-        final List<Subscription> bundles = entitlementApi.getSubscriptionsForBundle(uuid);
-        final Collection<SubscriptionJsonNoEvents> result = Collections2.transform(bundles, new Function<Subscription, SubscriptionJsonNoEvents>() {
+        final List<Subscription> subscriptions = entitlementApi.getSubscriptionsForBundle(uuid);
+        final Collection<SubscriptionJsonNoEvents> result = Collections2.transform(subscriptions, new Function<Subscription, SubscriptionJsonNoEvents>() {
             @Override
             public SubscriptionJsonNoEvents apply(final Subscription input) {
                 return new SubscriptionJsonNoEvents(input, null);
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
index 41a9015..ddc67e8 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscription.java
@@ -181,6 +181,26 @@ public class BlockingSubscription implements Subscription {
         return blockingState;
     }
 
+    @Override
+    public String getLastActiveProductName() {
+        return subscription.getLastActiveProductName();
+    }
+
+    @Override
+    public String getLastActivePriceListName() {
+        return subscription.getLastActivePriceListName();
+    }
+
+    @Override
+    public String getLastActiveCategoryName() {
+        return subscription.getLastActiveCategoryName();
+    }
+
+    @Override
+    public String getLastActiveBillingPeriod() {
+        return subscription.getLastActiveBillingPeriod();
+    }
+
     public Subscription getDelegateSubscription() {
         return subscription;
     }
diff --git a/util/src/test/java/com/ning/billing/mock/MockSubscription.java b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
index 57775aa..fee4237 100644
--- a/util/src/test/java/com/ning/billing/mock/MockSubscription.java
+++ b/util/src/test/java/com/ning/billing/mock/MockSubscription.java
@@ -186,4 +186,28 @@ public class MockSubscription implements Subscription {
     public SubscriptionSourceType getSourceType() {
         return null;
     }
+
+    @Override
+    public String getLastActiveProductName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public String getLastActivePriceListName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public String getLastActiveCategoryName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public String getLastActiveBillingPeriod() {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }