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);