killbill-uncached

Details

diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscription.java b/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscription.java
index d0bcb44..4795655 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscription.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscription.java
@@ -65,6 +65,4 @@ public interface ISubscription extends IPrivateFields {
 
     public IPlanPhase getCurrentPhase();
 
-    public IAccount getAccount();
-
 }
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscriptionTransition.java b/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscriptionTransition.java
index 74fdf3f..d4e1a5a 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscriptionTransition.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/ISubscriptionTransition.java
@@ -26,9 +26,14 @@ import com.ning.billing.entitlement.api.user.ISubscription.SubscriptionState;
 
 public interface ISubscriptionTransition {
 
+
+    UUID getBundleId();
+
     UUID getSubscriptionId();
 
-    DateTime getTransitionTime();
+    DateTime getRequestedTransitionTime();
+
+    DateTime getEffectiveTransitionTime();
 
     SubscriptionState getPreviousState();
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
index 86e5089..5777cba 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
@@ -32,7 +32,7 @@ import com.ning.billing.entitlement.engine.core.Engine;
 import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
 import com.ning.billing.util.clock.IClock;
 
-public class BillingApi implements IBillingApi {
+public class BillingApi implements IEntitlementBillingApi {
 
     private final Engine engine;
     private final IClock clock;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
index ebb180e..6e07f7c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/Subscription.java
@@ -207,11 +207,6 @@ public class Subscription extends PrivateFields  implements ISubscription {
 
 
     @Override
-    public IAccount getAccount() {
-        return null;
-    }
-
-    @Override
     public void cancel() throws EntitlementUserApiException  {
 
         SubscriptionState currentState = getState();
@@ -325,7 +320,7 @@ public class Subscription extends PrivateFields  implements ISubscription {
         }
         ISubscriptionTransition latestSubscription = null;
         for (ISubscriptionTransition cur : transitions) {
-            if (cur.getTransitionTime().isAfter(clock.getUTCNow())) {
+            if (cur.getEffectiveTransitionTime().isAfter(clock.getUTCNow())) {
                 break;
             }
             latestSubscription = cur;
@@ -362,17 +357,17 @@ public class Subscription extends PrivateFields  implements ISubscription {
         Iterator<SubscriptionTransition> it = ((LinkedList<SubscriptionTransition>) transitions).descendingIterator();
         while (it.hasNext()) {
             SubscriptionTransition cur = it.next();
-            if (cur.getTransitionTime().isAfter(clock.getUTCNow())) {
+            if (cur.getEffectiveTransitionTime().isAfter(clock.getUTCNow())) {
                 // Skip future events
                 continue;
             }
             if (cur.getEventType() == EventType.API_USER &&
                     cur.getApiEventType() == ApiEventType.CHANGE) {
-                return cur.getTransitionTime();
+                return cur.getEffectiveTransitionTime();
             }
         }
         // CREATE event
-        return transitions.get(0).getTransitionTime();
+        return transitions.get(0).getEffectiveTransitionTime();
     }
 
     public List<ISubscriptionTransition> getActiveTransitions() {
@@ -382,7 +377,7 @@ public class Subscription extends PrivateFields  implements ISubscription {
 
         List<ISubscriptionTransition> activeTransitions = new ArrayList<ISubscriptionTransition>();
         for (ISubscriptionTransition cur : transitions) {
-            if (cur.getTransitionTime().isAfter(clock.getUTCNow())) {
+            if (cur.getEffectiveTransitionTime().isAfter(clock.getUTCNow())) {
                 activeTransitions.add(cur);
             }
         }
@@ -395,7 +390,7 @@ public class Subscription extends PrivateFields  implements ISubscription {
         }
 
         for (SubscriptionTransition cur : transitions) {
-            if (cur.getTransitionTime().isBefore(clock.getUTCNow()) ||
+            if (cur.getEffectiveTransitionTime().isBefore(clock.getUTCNow()) ||
                     cur.getEventType() == EventType.PHASE ||
                         cur.getApiEventType() != ApiEventType.CANCEL) {
                 continue;
@@ -412,7 +407,7 @@ public class Subscription extends PrivateFields  implements ISubscription {
         }
 
         for (SubscriptionTransition cur : transitions) {
-            if (cur.getTransitionTime().isBefore(clock.getUTCNow()) ||
+            if (cur.getEffectiveTransitionTime().isBefore(clock.getUTCNow()) ||
                     cur.getEventType() == EventType.PHASE ||
                     cur.getApiEventType() != ApiEventType.CHANGE) {
                 continue;
@@ -451,16 +446,16 @@ public class Subscription extends PrivateFields  implements ISubscription {
         Iterator<SubscriptionTransition> it = ((LinkedList<SubscriptionTransition>) transitions).descendingIterator();
         while (it.hasNext()) {
             SubscriptionTransition cur = it.next();
-            if (cur.getTransitionTime().isAfter(clock.getUTCNow())) {
+            if (cur.getEffectiveTransitionTime().isAfter(clock.getUTCNow())) {
                 // Skip future events
                 continue;
             }
             if (cur.getEventType() == EventType.PHASE) {
-                return cur.getTransitionTime();
+                return cur.getEffectiveTransitionTime();
             }
         }
         // CREATE event
-        return transitions.get(0).getTransitionTime();
+        return transitions.get(0).getEffectiveTransitionTime();
     }
 
     private void rebuildTransitions() {
@@ -542,7 +537,8 @@ public class Subscription extends PrivateFields  implements ISubscription {
             IPlanPhase nextPhase = catalog.getPhaseFromName(nextPhaseName);
 
             SubscriptionTransition transition =
-                new SubscriptionTransition(id, cur.getType(), apiEventType, cur.getEffectiveDate(),
+                new SubscriptionTransition(id, bundleId, cur.getType(), apiEventType,
+                        cur.getRequestedDate(), cur.getEffectiveDate(),
                         previousState, previousPlan, previousPhase, previousPriceList,
                         nextState, nextPlan, nextPhase, nextPriceList);
             transitions.add(transition);
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
index c71c65e..63f42f6 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
@@ -30,9 +30,11 @@ public class SubscriptionTransition implements ISubscriptionTransition {
 
 
     private final UUID subscriptionId;
+    private final UUID bundleId;
     private final EventType eventType;
     private final ApiEventType apiEventType;
-    private final DateTime transitionTime;
+    private final DateTime requestedTransitionTime;
+    private final DateTime effectiveTransitionTime;
     private final SubscriptionState previousState;
     private final String previousPriceList;
     private final IPlan previousPlan;
@@ -42,15 +44,17 @@ public class SubscriptionTransition implements ISubscriptionTransition {
     private final IPlan nextPlan;
     private final IPlanPhase nextPhase;
 
-    public SubscriptionTransition(UUID subscriptionId, EventType eventType,
-            ApiEventType apiEventType, DateTime transitionTime,
+    public SubscriptionTransition(UUID subscriptionId, UUID bundleId, EventType eventType,
+            ApiEventType apiEventType, DateTime requestedTransitionTime, DateTime effectiveTransitionTime,
             SubscriptionState previousState, IPlan previousPlan, IPlanPhase previousPhase, String previousPriceList,
             SubscriptionState nextState, IPlan nextPlan, IPlanPhase nextPhase, String nextPriceList) {
         super();
         this.subscriptionId = subscriptionId;
+        this.bundleId = bundleId;
         this.eventType = eventType;
         this.apiEventType = apiEventType;
-        this.transitionTime = transitionTime;
+        this.requestedTransitionTime = requestedTransitionTime;
+        this.effectiveTransitionTime = effectiveTransitionTime;
         this.previousState = previousState;
         this.previousPriceList = previousPriceList;
         this.previousPlan = previousPlan;
@@ -67,10 +71,11 @@ public class SubscriptionTransition implements ISubscriptionTransition {
     }
 
     @Override
-    public DateTime getTransitionTime() {
-        return transitionTime;
+    public UUID getBundleId() {
+        return bundleId;
     }
 
+
     @Override
     public SubscriptionState getPreviousState() {
         return previousState;
@@ -121,10 +126,22 @@ public class SubscriptionTransition implements ISubscriptionTransition {
     }
 
     @Override
+    public DateTime getRequestedTransitionTime() {
+        return requestedTransitionTime;
+    }
+
+    @Override
+    public DateTime getEffectiveTransitionTime() {
+        return effectiveTransitionTime;
+    }
+
+
+    @Override
     public String toString() {
         return "SubscriptionTransition [subscriptionId=" + subscriptionId
                 + ", eventType=" + eventType + ", apiEventType="
-                + apiEventType + ", transitionTime=" + transitionTime
+                + apiEventType + ", requestedTransitionTime=" + requestedTransitionTime
+                + ", effectiveTransitionTime=" + effectiveTransitionTime
                 + ", previousState=" + previousState + ", previousPlan="
                 + ((previousPlan != null) ? previousPlan.getName()  : null)
                 + ", previousPhase=" + ((previousPhase != null) ? previousPhase.getName() : null)
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
index a8fc388..ec20630 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
@@ -24,9 +24,9 @@ import com.ning.billing.catalog.api.ICatalogUserApi;
 import com.ning.billing.entitlement.alignment.IPlanAligner;
 import com.ning.billing.entitlement.alignment.PlanAligner;
 import com.ning.billing.entitlement.api.billing.BillingApi;
-import com.ning.billing.entitlement.api.billing.IBillingApi;
-import com.ning.billing.entitlement.api.user.IUserApi;
-import com.ning.billing.entitlement.api.user.UserApi;
+import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
+import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.engine.core.ApiEventProcessor;
 import com.ning.billing.entitlement.engine.core.Engine;
 import com.ning.billing.entitlement.engine.core.IApiEventProcessor;
@@ -70,11 +70,11 @@ public class EntitlementModule extends AbstractModule {
     }
 
     protected void installUserApi() {
-        bind(IUserApi.class).to(UserApi.class).asEagerSingleton();
+        bind(IEntitlementUserApi.class).to(EntitlementUserApi.class).asEagerSingleton();
     }
 
     protected void installBillingApi() {
-        bind(IBillingApi.class).to(BillingApi.class).asEagerSingleton();
+        bind(IEntitlementBillingApi.class).to(BillingApi.class).asEagerSingleton();
     }
 
 
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
index bc4adc5..a31140d 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
@@ -47,7 +47,7 @@ import com.ning.billing.catalog.api.IDuration;
 import com.ning.billing.catalog.api.TimeUnit;
 import com.ning.billing.entitlement.api.ApiTestListener;
 import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
-import com.ning.billing.entitlement.api.billing.IBillingApi;
+import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
 import com.ning.billing.entitlement.engine.core.Engine;
 import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
 import com.ning.billing.entitlement.engine.dao.IEntitlementDaoMock;
@@ -66,8 +66,8 @@ public abstract class TestUserApiBase {
     protected static final long DAY_IN_MS = (24 * 3600 * 1000);
 
     protected Engine engine;
-    protected IUserApi entitlementApi;
-    protected IBillingApi billingApi;
+    protected IEntitlementUserApi entitlementApi;
+    protected IEntitlementBillingApi billingApi;
     protected ICatalogUserApi catalogApi;
     protected IEntitlementConfig config;
     protected IEntitlementDao dao;
@@ -106,9 +106,9 @@ public abstract class TestUserApiBase {
         final Injector g = getInjector();
 
         engine = g.getInstance(Engine.class);
-        entitlementApi = g.getInstance(IUserApi.class);
+        entitlementApi = g.getInstance(IEntitlementUserApi.class);
         catalogApi = g.getInstance(ICatalogUserApi.class);
-        billingApi = g.getInstance(IBillingApi.class);
+        billingApi = g.getInstance(IEntitlementBillingApi.class);
         config = g.getInstance(IEntitlementConfig.class);
         dao = g.getInstance(IEntitlementDao.class);
         clock = (ClockMock) g.getInstance(IClock.class);