killbill-uncached
Changes
analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java 26(+13 -13)
analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java 2(+1 -1)
entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java 22(+10 -12)
entitlement/src/main/java/com/ning/billing/entitlement/api/test/DefaultEntitlementTestApi.java 16(+7 -9)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java 60(+30 -30)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundleData.java 8(+4 -4)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java 8(+4 -4)
entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java 41(+19 -22)
entitlement/src/main/java/com/ning/billing/entitlement/engine/core/DefaultApiEventProcessor.java 19(+10 -9)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java 325(+325 -0)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java 20(+10 -10)
entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java 5(+2 -3)
entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java 60(+30 -30)
entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java 5(+2 -3)
entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java 5(+2 -3)
entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java 5(+2 -3)
entitlement/src/test/java/com/ning/billing/entitlement/engine/core/MockApiEventProcessorMemory.java 18(+9 -9)
entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java 152(+76 -76)
Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
index 415a002..ba7a707 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
@@ -18,7 +18,7 @@ package com.ning.billing.analytics;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
-import com.ning.billing.entitlement.api.user.ISubscriptionTransition;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
public class AnalyticsListener
{
@@ -33,7 +33,7 @@ public class AnalyticsListener
}
@Subscribe
- public void handleSubscriptionTransitionChange(final ISubscriptionTransition event)
+ public void handleSubscriptionTransitionChange(final SubscriptionTransition event)
{
switch (event.getTransitionType()) {
case CREATE:
diff --git a/analytics/src/main/java/com/ning/billing/analytics/api/AnalyticsService.java b/analytics/src/main/java/com/ning/billing/analytics/api/AnalyticsService.java
index 35e123f..a08e3ab 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/api/AnalyticsService.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/api/AnalyticsService.java
@@ -19,7 +19,7 @@ package com.ning.billing.analytics.api;
import com.google.inject.Inject;
import com.ning.billing.analytics.AnalyticsListener;
import com.ning.billing.lifecycle.LifecycleHandlerType;
-import com.ning.billing.util.eventbus.IEventBus;
+import com.ning.billing.util.eventbus.EventBus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,10 +30,10 @@ public class AnalyticsService implements IAnalyticsService
private static final String ANALYTICS_SERVICE = "analytics-service";
private final AnalyticsListener listener;
- private final IEventBus eventBus;
+ private final EventBus eventBus;
@Inject
- public AnalyticsService(final AnalyticsListener listener, final IEventBus eventBus)
+ public AnalyticsService(final AnalyticsListener listener, final EventBus eventBus)
{
this.listener = listener;
this.eventBus = eventBus;
@@ -51,7 +51,7 @@ public class AnalyticsService implements IAnalyticsService
try {
eventBus.register(listener);
}
- catch (IEventBus.EventBusException e) {
+ catch (EventBus.EventBusException e) {
log.error("Unable to register to the EventBus!", e);
}
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
index 5602fe8..122e794 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscription.java
@@ -25,7 +25,7 @@ import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.IProduct;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.catalog.api.TimeUnit;
-import com.ning.billing.entitlement.api.user.ISubscription;
+import com.ning.billing.entitlement.api.user.Subscription;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,7 +34,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.UUID;
-import static com.ning.billing.entitlement.api.user.ISubscription.SubscriptionState;
+import static com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
/**
* Describe a subscription for Analytics purposes
@@ -89,7 +89,7 @@ public class BusinessSubscription
* @param subscription Subscription to use as a model
* @param currency Account currency
*/
- BusinessSubscription(final ISubscription subscription, final Currency currency)
+ BusinessSubscription(final Subscription subscription, final Currency currency)
{
this(subscription.getCurrentPriceList(), subscription.getCurrentPlan(), subscription.getCurrentPhase(), currency, subscription.getStartDate(), subscription.getState(), subscription.getId(), subscription.getBundleId());
}
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
index 865d8e7..36669e1 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
@@ -20,7 +20,7 @@ import com.ning.billing.catalog.api.IPlan;
import com.ning.billing.catalog.api.IProduct;
import com.ning.billing.catalog.api.ProductCategory;
-import static com.ning.billing.entitlement.api.user.ISubscription.SubscriptionState;
+import static com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
/**
* Describe an event associated with a transition between two BusinessSubscription
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
index fd57a06..e55bc8c 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
@@ -21,9 +21,9 @@ import com.ning.billing.account.api.IAccount;
import com.ning.billing.account.api.IAccountUserApi;
import com.ning.billing.analytics.dao.BusinessSubscriptionTransitionDao;
import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
-import com.ning.billing.entitlement.api.user.ISubscriptionBundle;
-import com.ning.billing.entitlement.api.user.ISubscriptionTransition;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,61 +35,61 @@ public class BusinessSubscriptionTransitionRecorder
private static final Logger log = LoggerFactory.getLogger(BusinessSubscriptionTransitionRecorder.class);
private final BusinessSubscriptionTransitionDao dao;
- private final IEntitlementUserApi entitlementApi;
+ private final EntitlementUserApi entitlementApi;
private final IAccountUserApi accountApi;
@Inject
- public BusinessSubscriptionTransitionRecorder(final BusinessSubscriptionTransitionDao dao, final IEntitlementUserApi entitlementApi, final IAccountUserApi accountApi)
+ public BusinessSubscriptionTransitionRecorder(final BusinessSubscriptionTransitionDao dao, final EntitlementUserApi entitlementApi, final IAccountUserApi accountApi)
{
this.dao = dao;
this.entitlementApi = entitlementApi;
this.accountApi = accountApi;
}
- public void subscriptionCreated(final ISubscriptionTransition created)
+ public void subscriptionCreated(final SubscriptionTransition created)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCreated(created.getNextPlan());
recordTransition(event, created);
}
- public void subscriptionCancelled(final ISubscriptionTransition cancelled)
+ public void subscriptionCancelled(final SubscriptionTransition cancelled)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(cancelled.getNextPlan());
recordTransition(event, cancelled);
}
- public void subscriptionChanged(final ISubscriptionTransition changed)
+ public void subscriptionChanged(final SubscriptionTransition changed)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionChanged(changed.getNextPlan());
recordTransition(event, changed);
}
- public void subscriptionPaused(final ISubscriptionTransition paused)
+ public void subscriptionPaused(final SubscriptionTransition paused)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionPaused(paused.getNextPlan());
recordTransition(event, paused);
}
- public void subscriptionResumed(final ISubscriptionTransition resumed)
+ public void subscriptionResumed(final SubscriptionTransition resumed)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionResumed(resumed.getNextPlan());
recordTransition(event, resumed);
}
- public void subscriptionPhaseChanged(final ISubscriptionTransition phaseChanged)
+ public void subscriptionPhaseChanged(final SubscriptionTransition phaseChanged)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionPhaseChanged(phaseChanged.getNextPlan(), phaseChanged.getNextState());
recordTransition(event, phaseChanged);
}
- public void recordTransition(final BusinessSubscriptionEvent event, final ISubscriptionTransition transition)
+ public void recordTransition(final BusinessSubscriptionEvent event, final SubscriptionTransition transition)
{
Currency currency = null;
String transitionKey = null;
String accountKey = null;
// Retrieve key and currency via the bundle
- final ISubscriptionBundle bundle = entitlementApi.getBundleFromId(transition.getBundleId());
+ final SubscriptionBundle bundle = entitlementApi.getBundleFromId(transition.getBundleId());
if (bundle != null) {
transitionKey = bundle.getKey();
diff --git a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
index fb5e641..a31d104 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/dao/BusinessSubscriptionTransitionMapper.java
@@ -30,7 +30,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
-import static com.ning.billing.entitlement.api.user.ISubscription.SubscriptionState;
+import static com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
public class BusinessSubscriptionTransitionMapper implements ResultSetMapper<BusinessSubscriptionTransition>
{
diff --git a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
index 827a183..4da4067 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
@@ -37,14 +37,14 @@ import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
-import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
-import com.ning.billing.entitlement.api.user.ISubscription;
-import com.ning.billing.entitlement.api.user.ISubscriptionBundle;
-import com.ning.billing.entitlement.api.user.ISubscriptionTransition;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.entitlement.api.user.SubscriptionTransition;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
+import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
+import com.ning.billing.entitlement.events.EntitlementEvent;
import com.ning.billing.entitlement.events.user.ApiEventType;
-import com.ning.billing.util.eventbus.IEventBus;
+import com.ning.billing.util.eventbus.EventBus;
import org.apache.commons.io.IOUtils;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
@@ -68,13 +68,13 @@ public class TestAnalyticsService
private IAccountUserApi accountApi;
@Inject
- private IEntitlementUserApi entitlementApi;
+ private EntitlementUserApi entitlementApi;
@Inject
private AnalyticsService service;
@Inject
- private IEventBus bus;
+ private EventBus bus;
@Inject
private BusinessSubscriptionTransitionDao dao;
@@ -82,7 +82,7 @@ public class TestAnalyticsService
@Inject
private MysqlTestingHelper helper;
- private ISubscriptionTransition transition;
+ private SubscriptionTransition transition;
private BusinessSubscriptionTransition expectedTransition;
@BeforeClass(alwaysRun = true)
@@ -101,7 +101,7 @@ public class TestAnalyticsService
// We need a bundle to retrieve the event key
final MockAccount account = new MockAccount(UUID.randomUUID(), ACCOUNT_KEY, Currency.USD);
final IAccount storedAccount = accountApi.createAccount(account);
- final ISubscriptionBundle bundle = entitlementApi.createBundleForAccount(storedAccount, KEY);
+ final SubscriptionBundle bundle = entitlementApi.createBundleForAccount(storedAccount, KEY);
// Verify we correctly initialized the account subsystem
Assert.assertNotNull(bundle);
@@ -115,11 +115,11 @@ public class TestAnalyticsService
final DateTime effectiveTransitionTime = new DateTime(DateTimeZone.UTC);
final DateTime requestedTransitionTime = new DateTime(DateTimeZone.UTC);
final String priceList = "something";
- transition = new SubscriptionTransition(
+ transition = new SubscriptionTransitionData(
UUID.randomUUID(),
subscriptionId,
bundle.getId(),
- IEntitlementEvent.EventType.API_USER,
+ EntitlementEvent.EventType.API_USER,
ApiEventType.CREATE,
requestedTransitionTime,
effectiveTransitionTime,
@@ -127,7 +127,7 @@ public class TestAnalyticsService
null,
null,
null,
- ISubscription.SubscriptionState.ACTIVE,
+ Subscription.SubscriptionState.ACTIVE,
plan,
phase,
priceList
@@ -138,7 +138,7 @@ public class TestAnalyticsService
requestedTransitionTime,
BusinessSubscriptionEvent.subscriptionCreated(plan),
null,
- new BusinessSubscription(priceList, plan, phase, null, effectiveTransitionTime, ISubscription.SubscriptionState.ACTIVE, subscriptionId, bundle.getId())
+ new BusinessSubscription(priceList, plan, phase, null, effectiveTransitionTime, Subscription.SubscriptionState.ACTIVE, subscriptionId, bundle.getId())
);
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
index 81c71c5..e78518d 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
@@ -32,7 +32,7 @@ import com.ning.billing.catalog.api.IProduct;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.dbi.MysqlTestingHelper;
-import com.ning.billing.entitlement.api.user.ISubscription;
+import com.ning.billing.entitlement.api.user.Subscription;
import org.apache.commons.io.IOUtils;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
@@ -79,8 +79,8 @@ public class TestAnalyticsDao
private void setupBusinessSubscriptionTransition()
{
- final BusinessSubscription prevSubscription = new BusinessSubscription(null, plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), ISubscription.SubscriptionState.ACTIVE, UUID.randomUUID(), UUID.randomUUID());
- final BusinessSubscription nextSubscription = new BusinessSubscription(null, plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), ISubscription.SubscriptionState.CANCELLED, UUID.randomUUID(), UUID.randomUUID());
+ final BusinessSubscription prevSubscription = new BusinessSubscription(null, plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), Subscription.SubscriptionState.ACTIVE, UUID.randomUUID(), UUID.randomUUID());
+ final BusinessSubscription nextSubscription = new BusinessSubscription(null, plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), Subscription.SubscriptionState.CANCELLED, UUID.randomUUID(), UUID.randomUUID());
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(plan);
final DateTime requestedTimestamp = new DateTime(DateTimeZone.UTC);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockIEntitlementUserApi.java b/analytics/src/test/java/com/ning/billing/analytics/MockIEntitlementUserApi.java
index 1aabb67..d121438 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockIEntitlementUserApi.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockIEntitlementUserApi.java
@@ -19,9 +19,9 @@ package com.ning.billing.analytics;
import com.ning.billing.account.api.IAccount;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
-import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
-import com.ning.billing.entitlement.api.user.ISubscription;
-import com.ning.billing.entitlement.api.user.ISubscriptionBundle;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import org.joda.time.DateTime;
import java.util.HashMap;
@@ -29,7 +29,7 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-public class MockIEntitlementUserApi implements IEntitlementUserApi
+public class MockIEntitlementUserApi implements EntitlementUserApi
{
private final Map<UUID, String> subscriptionBundles = new HashMap<UUID, String>();
@@ -39,14 +39,14 @@ public class MockIEntitlementUserApi implements IEntitlementUserApi
}
@Override
- public ISubscriptionBundle getBundleFromId(final UUID id)
+ public SubscriptionBundle getBundleFromId(final UUID id)
{
final String key = subscriptionBundles.get(id);
if (key == null) {
return null;
}
- return new ISubscriptionBundle()
+ return new SubscriptionBundle()
{
@Override
public UUID getAccountId()
@@ -71,53 +71,41 @@ public class MockIEntitlementUserApi implements IEntitlementUserApi
{
return key;
}
-
- @Override
- public void setPrivate(final String name, final String value)
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String getPrivate(final String name)
- {
- throw new UnsupportedOperationException();
- }
};
}
@Override
- public ISubscription getSubscriptionFromId(final UUID id)
+ public Subscription getSubscriptionFromId(final UUID id)
{
throw new UnsupportedOperationException();
}
@Override
- public List<ISubscriptionBundle> getBundlesForAccount(final UUID accountId)
+ public List<SubscriptionBundle> getBundlesForAccount(final UUID accountId)
{
throw new UnsupportedOperationException();
}
@Override
- public List<ISubscription> getSubscriptionsForBundle(final UUID bundleId)
+ public List<Subscription> getSubscriptionsForBundle(final UUID bundleId)
{
throw new UnsupportedOperationException();
}
@Override
- public ISubscriptionBundle createBundleForAccount(final IAccount account, final String bundleKey) throws EntitlementUserApiException
+ public SubscriptionBundle createBundleForAccount(final IAccount account, final String bundleKey) throws EntitlementUserApiException
{
throw new UnsupportedOperationException();
}
@Override
- public ISubscription createSubscription(final UUID bundleId, final String productName, final BillingPeriod term, final String planSet, final DateTime requestedDate) throws EntitlementUserApiException
+ public Subscription createSubscription(final UUID bundleId, final String productName, final BillingPeriod term, final String planSet, final DateTime requestedDate) throws EntitlementUserApiException
{
throw new UnsupportedOperationException();
}
@Override
- public List<ISubscription> getSubscriptionsForKey(String bundleKey) {
+ public List<Subscription> getSubscriptionsForKey(String bundleKey) {
throw new UnsupportedOperationException();
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
index a756447..447bad5 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockSubscription.java
@@ -20,13 +20,13 @@ import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.IPlan;
import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
-import com.ning.billing.entitlement.api.user.ISubscription;
+import com.ning.billing.entitlement.api.user.Subscription;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import java.util.UUID;
-public class MockSubscription implements ISubscription
+public class MockSubscription implements Subscription
{
private static final UUID ID = UUID.randomUUID();
private static final UUID BUNDLE_ID = UUID.randomUUID();
@@ -103,17 +103,6 @@ public class MockSubscription implements ISubscription
return phase;
}
- @Override
- public void setPrivate(final String name, final String value)
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String getPrivate(final String name)
- {
- throw new UnsupportedOperationException();
- }
@Override
public void uncancel() throws EntitlementUserApiException
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
index 86d32b1..48ee5c7 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
@@ -22,9 +22,9 @@ import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.IProduct;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.entitlement.api.user.ISubscription;
-import com.ning.billing.entitlement.api.user.SubscriptionTransition;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
+import com.ning.billing.entitlement.events.EntitlementEvent;
import com.ning.billing.entitlement.events.user.ApiEventType;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
@@ -63,7 +63,7 @@ public class TestAnalyticsListener
// Create a subscription
final DateTime effectiveTransitionTime = new DateTime(DateTimeZone.UTC);
final DateTime requestedTransitionTime = new DateTime(DateTimeZone.UTC);
- final SubscriptionTransition firstTransition = createFirstSubscriptionTransition(requestedTransitionTime, effectiveTransitionTime);
+ final SubscriptionTransitionData firstTransition = createFirstSubscriptionTransition(requestedTransitionTime, effectiveTransitionTime);
final BusinessSubscriptionTransition firstBST = createExpectedFirstBST(requestedTransitionTime, effectiveTransitionTime);
listener.handleSubscriptionTransitionChange(firstTransition);
Assert.assertEquals(dao.getTransitions(KEY).size(), 1);
@@ -72,7 +72,7 @@ public class TestAnalyticsListener
// Pause it
final DateTime effectivePauseTransitionTime = new DateTime(DateTimeZone.UTC);
final DateTime requestedPauseTransitionTime = new DateTime(DateTimeZone.UTC);
- final SubscriptionTransition pausedSubscriptionTransition = createPauseSubscriptionTransition(effectivePauseTransitionTime, requestedPauseTransitionTime, firstTransition.getNextState());
+ final SubscriptionTransitionData pausedSubscriptionTransition = createPauseSubscriptionTransition(effectivePauseTransitionTime, requestedPauseTransitionTime, firstTransition.getNextState());
final BusinessSubscriptionTransition pausedBST = createExpectedPausedBST(requestedPauseTransitionTime, effectivePauseTransitionTime, firstBST.getNextSubscription());
listener.handleSubscriptionTransitionChange(pausedSubscriptionTransition);
Assert.assertEquals(dao.getTransitions(KEY).size(), 2);
@@ -81,7 +81,7 @@ public class TestAnalyticsListener
// Un-Pause it
final DateTime effectiveResumeTransitionTime = new DateTime(DateTimeZone.UTC);
final DateTime requestedResumeTransitionTime = new DateTime(DateTimeZone.UTC);
- final SubscriptionTransition resumedSubscriptionTransition = createResumeSubscriptionTransition(requestedResumeTransitionTime, effectiveResumeTransitionTime, pausedSubscriptionTransition.getNextState());
+ final SubscriptionTransitionData resumedSubscriptionTransition = createResumeSubscriptionTransition(requestedResumeTransitionTime, effectiveResumeTransitionTime, pausedSubscriptionTransition.getNextState());
final BusinessSubscriptionTransition resumedBST = createExpectedResumedBST(requestedResumeTransitionTime, effectiveResumeTransitionTime, pausedBST.getNextSubscription());
listener.handleSubscriptionTransitionChange(resumedSubscriptionTransition);
Assert.assertEquals(dao.getTransitions(KEY).size(), 3);
@@ -99,28 +99,28 @@ public class TestAnalyticsListener
private BusinessSubscriptionTransition createExpectedFirstBST(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCreated(plan);
- final ISubscription.SubscriptionState subscriptionState = ISubscription.SubscriptionState.ACTIVE;
+ final Subscription.SubscriptionState subscriptionState = Subscription.SubscriptionState.ACTIVE;
return createExpectedBST(event, requestedTransitionTime, effectiveTransitionTime, null, subscriptionState);
}
private BusinessSubscriptionTransition createExpectedPausedBST(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final BusinessSubscription lastSubscription)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionPaused(plan);
- final ISubscription.SubscriptionState subscriptionState = ISubscription.SubscriptionState.PAUSED;
+ final Subscription.SubscriptionState subscriptionState = Subscription.SubscriptionState.PAUSED;
return createExpectedBST(event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, subscriptionState);
}
private BusinessSubscriptionTransition createExpectedResumedBST(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final BusinessSubscription lastSubscription)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionResumed(plan);
- final ISubscription.SubscriptionState nextState = ISubscription.SubscriptionState.ACTIVE;
+ final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.ACTIVE;
return createExpectedBST(event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, nextState);
}
private BusinessSubscriptionTransition createExpectedCancelledBST(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final BusinessSubscription lastSubscription)
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(plan);
- final ISubscription.SubscriptionState nextState = ISubscription.SubscriptionState.CANCELLED;
+ final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.CANCELLED;
return createExpectedBST(event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, nextState);
}
@@ -129,7 +129,7 @@ public class TestAnalyticsListener
final DateTime requestedTransitionTime,
final DateTime effectiveTransitionTime,
final BusinessSubscription previousSubscription,
- final ISubscription.SubscriptionState nextState
+ final Subscription.SubscriptionState nextState
)
{
return new BusinessSubscriptionTransition(
@@ -151,15 +151,15 @@ public class TestAnalyticsListener
);
}
- private SubscriptionTransition createFirstSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime)
+ private SubscriptionTransitionData createFirstSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime)
{
final ApiEventType eventType = ApiEventType.CREATE;
- final ISubscription.SubscriptionState nextState = ISubscription.SubscriptionState.ACTIVE;
- return new SubscriptionTransition(
+ final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.ACTIVE;
+ return new SubscriptionTransitionData(
UUID.randomUUID(),
subscriptionId,
bundleUUID,
- IEntitlementEvent.EventType.API_USER,
+ EntitlementEvent.EventType.API_USER,
eventType,
requestedTransitionTime,
effectiveTransitionTime,
@@ -174,40 +174,40 @@ public class TestAnalyticsListener
);
}
- private SubscriptionTransition createPauseSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final ISubscription.SubscriptionState previousState)
+ private SubscriptionTransitionData createPauseSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState)
{
final ApiEventType eventType = ApiEventType.PAUSE;
- final ISubscription.SubscriptionState nextState = ISubscription.SubscriptionState.PAUSED;
+ final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.PAUSED;
return createSubscriptionTransition(eventType, requestedTransitionTime, effectiveTransitionTime, previousState, nextState);
}
- private SubscriptionTransition createResumeSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final ISubscription.SubscriptionState previousState)
+ private SubscriptionTransitionData createResumeSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState)
{
final ApiEventType eventType = ApiEventType.RESUME;
- final ISubscription.SubscriptionState nextState = ISubscription.SubscriptionState.ACTIVE;
+ final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.ACTIVE;
return createSubscriptionTransition(eventType, requestedTransitionTime, effectiveTransitionTime, previousState, nextState);
}
- private SubscriptionTransition createCancelSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final ISubscription.SubscriptionState previousState)
+ private SubscriptionTransitionData createCancelSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState)
{
final ApiEventType eventType = ApiEventType.CANCEL;
- final ISubscription.SubscriptionState nextState = ISubscription.SubscriptionState.CANCELLED;
+ final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.CANCELLED;
return createSubscriptionTransition(eventType, requestedTransitionTime, effectiveTransitionTime, previousState, nextState);
}
- private SubscriptionTransition createSubscriptionTransition(
+ private SubscriptionTransitionData createSubscriptionTransition(
final ApiEventType eventType,
final DateTime requestedTransitionTime,
final DateTime effectiveTransitionTime,
- final ISubscription.SubscriptionState previousState,
- final ISubscription.SubscriptionState nextState
+ final Subscription.SubscriptionState previousState,
+ final Subscription.SubscriptionState nextState
)
{
- return new SubscriptionTransition(
+ return new SubscriptionTransitionData(
UUID.randomUUID(),
subscriptionId,
bundleUUID,
- IEntitlementEvent.EventType.API_USER,
+ EntitlementEvent.EventType.API_USER,
eventType,
requestedTransitionTime,
effectiveTransitionTime,
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
index aea2c99..64063d3 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscription.java
@@ -22,7 +22,7 @@ import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.IProduct;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.entitlement.api.user.ISubscription;
+import com.ning.billing.entitlement.api.user.Subscription;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -50,7 +50,7 @@ public class TestBusinessSubscription
private IProduct product;
private IPlan plan;
private IPlanPhase phase;
- private ISubscription isubscription;
+ private Subscription isubscription;
private BusinessSubscription subscription;
@BeforeMethod(alwaysRun = true)
@@ -59,7 +59,7 @@ public class TestBusinessSubscription
product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
plan = new MockPlan("platinum-monthly", product);
phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
- isubscription = new MockSubscription(ISubscription.SubscriptionState.ACTIVE, plan, phase);
+ isubscription = new MockSubscription(Subscription.SubscriptionState.ACTIVE, plan, phase);
subscription = new BusinessSubscription(isubscription, USD);
}
@@ -99,7 +99,7 @@ public class TestBusinessSubscription
Assert.assertEquals(subscription, subscription);
Assert.assertTrue(subscription.equals(subscription));
- final ISubscription otherIsubscription = new MockSubscription(ISubscription.SubscriptionState.CANCELLED, plan, phase);
+ final Subscription otherIsubscription = new MockSubscription(Subscription.SubscriptionState.CANCELLED, plan, phase);
Assert.assertTrue(!subscription.equals(new BusinessSubscription(otherIsubscription, USD)));
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
index dfae096..ba5ab6a 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
@@ -21,7 +21,7 @@ import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.IProduct;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.entitlement.api.user.ISubscription;
+import com.ning.billing.entitlement.api.user.Subscription;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -31,7 +31,7 @@ public class TestBusinessSubscriptionEvent
private IProduct product;
private IPlan plan;
private IPlanPhase phase;
- private ISubscription isubscription;
+ private Subscription isubscription;
@BeforeMethod(alwaysRun = true)
public void setUp() throws Exception
@@ -39,7 +39,7 @@ public class TestBusinessSubscriptionEvent
product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
plan = new MockPlan("platinum-monthly", product);
phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
- isubscription = new MockSubscription(ISubscription.SubscriptionState.ACTIVE, plan, phase);
+ isubscription = new MockSubscription(Subscription.SubscriptionState.ACTIVE, plan, phase);
}
@Test(groups = "fast")
@@ -100,7 +100,7 @@ public class TestBusinessSubscriptionEvent
Assert.assertEquals(event.getCategory(), product.getCategory());
Assert.assertEquals(event.toString(), "SYSTEM_CHANGE_BASE");
- isubscription = new MockSubscription(ISubscription.SubscriptionState.CANCELLED, plan, phase);
+ isubscription = new MockSubscription(Subscription.SubscriptionState.CANCELLED, plan, phase);
event = BusinessSubscriptionEvent.subscriptionPhaseChanged(isubscription.getCurrentPlan(), isubscription.getState());
// The subscription is cancelled, it's a system cancellation
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.SYSTEM_CANCEL);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
index 9cc4c72..322f77b 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
@@ -21,7 +21,7 @@ import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.IProduct;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.entitlement.api.user.ISubscription;
+import com.ning.billing.entitlement.api.user.Subscription;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.testng.Assert;
@@ -46,8 +46,8 @@ public class TestBusinessSubscriptionTransition
final IProduct product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
final IPlan plan = new MockPlan("platinum-monthly", product);
final IPlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
- final ISubscription prevISubscription = new MockSubscription(ISubscription.SubscriptionState.ACTIVE, plan, phase);
- final ISubscription nextISubscription = new MockSubscription(ISubscription.SubscriptionState.CANCELLED, plan, phase);
+ final Subscription prevISubscription = new MockSubscription(Subscription.SubscriptionState.ACTIVE, plan, phase);
+ final Subscription nextISubscription = new MockSubscription(Subscription.SubscriptionState.CANCELLED, plan, phase);
prevSubscription = new BusinessSubscription(prevISubscription, USD);
nextSubscription = new BusinessSubscription(nextISubscription, USD);
diff --git a/api/src/main/java/com/ning/billing/account/api/IAccountService.java b/api/src/main/java/com/ning/billing/account/api/IAccountService.java
index fa5a9fe..777c7c9 100644
--- a/api/src/main/java/com/ning/billing/account/api/IAccountService.java
+++ b/api/src/main/java/com/ning/billing/account/api/IAccountService.java
@@ -16,9 +16,9 @@
package com.ning.billing.account.api;
-import com.ning.billing.lifecycle.IService;
+import com.ning.billing.lifecycle.KillbillService;
-public interface IAccountService extends IService {
+public interface IAccountService extends KillbillService {
public IAccountUserApi getAccountUserApi();
}
diff --git a/api/src/main/java/com/ning/billing/analytics/api/IAnalyticsService.java b/api/src/main/java/com/ning/billing/analytics/api/IAnalyticsService.java
index 2a5d0c5..b817e64 100644
--- a/api/src/main/java/com/ning/billing/analytics/api/IAnalyticsService.java
+++ b/api/src/main/java/com/ning/billing/analytics/api/IAnalyticsService.java
@@ -16,7 +16,7 @@
package com.ning.billing.analytics.api;
-import com.ning.billing.lifecycle.IService;
+import com.ning.billing.lifecycle.KillbillService;
-public interface IAnalyticsService extends IService {
+public interface IAnalyticsService extends KillbillService {
}
diff --git a/api/src/main/java/com/ning/billing/catalog/api/ICatalogService.java b/api/src/main/java/com/ning/billing/catalog/api/ICatalogService.java
index 0b3b25b..3ab2bc9 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/ICatalogService.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/ICatalogService.java
@@ -16,9 +16,9 @@
package com.ning.billing.catalog.api;
-import com.ning.billing.lifecycle.IService;
+import com.ning.billing.lifecycle.KillbillService;
-public interface ICatalogService extends IService {
+public interface ICatalogService extends KillbillService {
public abstract ICatalog getCatalog();
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
new file mode 100644
index 0000000..32c77e5
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.billing;
+
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.catalog.api.IInternationalPrice;
+import org.joda.time.DateTime;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+public interface BillingEvent extends Comparable<BillingEvent> {
+
+ /**
+ *
+ * @return the billCycleDay as seen for that subscription at that time
+ *
+ * Note: The billCycleDay may come from the Account, or the bundle or the subscription itself
+ */
+ public int getBillCycleDay();
+
+ /**
+ *
+ * @return the id for the matching subscription
+ */
+ public UUID getSubscriptionId();
+
+ /**
+ *
+ * @return the date for when that event became effective
+ */
+ public DateTime getEffectiveDate();
+
+ /**
+ *
+ * @return the name of the plan phase
+ */
+ public String getPlanPhaseName();
+
+
+ /**
+ *
+ * @return the name of the plan
+ */
+ public String getPlanName();
+
+ /**
+ *
+ * @return the international price for the event
+ *
+ */
+ public IInternationalPrice getPrice();
+
+ /**
+ *
+ * @param currency the target currency for invoicing
+ * @return the price of the plan phase in the specified currency
+ */
+ public BigDecimal getPrice(Currency currency);
+
+ /**
+ *
+ * @return the billing period for the active phase
+ */
+ public BillingPeriod getBillingPeriod();
+
+ /**
+ *
+ * @return the billing mode for the current event
+ */
+ public BillingMode getBillingMode();
+
+ /**
+ *
+ * @return the description of the billing event
+ */
+ public String getDescription();
+}
diff --git a/api/src/main/java/com/ning/billing/invoice/api/BillingEventSet.java b/api/src/main/java/com/ning/billing/invoice/api/BillingEventSet.java
index c85f540..8e42a9e 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/BillingEventSet.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/BillingEventSet.java
@@ -16,12 +16,12 @@
package com.ning.billing.invoice.api;
-import com.ning.billing.entitlement.api.billing.IBillingEvent;
+import com.ning.billing.entitlement.api.billing.BillingEvent;
import java.util.ArrayList;
-public class BillingEventSet extends ArrayList<IBillingEvent> {
- public IBillingEvent getLast() {
+public class BillingEventSet extends ArrayList<BillingEvent> {
+ public BillingEvent getLast() {
if (this.size() == 0) {return null;}
return this.get(this.size() - 1);
diff --git a/api/src/main/java/com/ning/billing/invoice/api/DefaultBillingEvent.java b/api/src/main/java/com/ning/billing/invoice/api/DefaultBillingEvent.java
new file mode 100644
index 0000000..88d2ecb
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/invoice/api/DefaultBillingEvent.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.invoice.api;
+
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.CatalogApiException;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.catalog.api.IInternationalPrice;
+import com.ning.billing.entitlement.api.billing.BillingMode;
+import com.ning.billing.entitlement.api.billing.BillingEvent;
+import org.joda.time.DateTime;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+
+//
+// TODO that class should not be under API but invoice
+// (only interfaces in api, any implementation class goes in submodule)
+//
+public class DefaultBillingEvent implements BillingEvent {
+ private final UUID subscriptionId;
+ private final DateTime startDate;
+ private final String planName;
+ private final String planPhaseName;
+ private final IInternationalPrice price;
+ private final BillingPeriod billingPeriod;
+ private final int billCycleDay;
+ private final BillingMode billingMode;
+
+
+ public DefaultBillingEvent(UUID subscriptionId, DateTime startDate, String planName, String planPhaseName, IInternationalPrice price,
+ BillingPeriod billingPeriod, int billCycleDay, BillingMode billingMode) {
+ this.subscriptionId = subscriptionId;
+ this.startDate = startDate;
+ this.planName = planName;
+ this.planPhaseName = planPhaseName;
+ this.price = price;
+ this.billingPeriod = billingPeriod;
+ this.billCycleDay = billCycleDay;
+ this.billingMode = billingMode;
+ }
+
+ public DefaultBillingEvent(BillingEvent event, DateTime startDate) {
+ this.subscriptionId = event.getSubscriptionId();
+ this.startDate = startDate;
+ this.planName = event.getPlanName();
+ this.planPhaseName = event.getPlanPhaseName();
+ this.price = event.getPrice();
+ this.billingPeriod = event.getBillingPeriod();
+ this.billCycleDay = event.getBillCycleDay();
+ this.billingMode = event.getBillingMode();
+ }
+
+ @Override
+ public DateTime getEffectiveDate() {
+ return startDate;
+ }
+
+ @Override
+ public int getBillCycleDay() {
+ return billCycleDay;
+ }
+
+ @Override
+ public UUID getSubscriptionId() {
+ return subscriptionId;
+ }
+
+ @Override
+ public String getPlanName() {
+ return planName;
+ }
+
+ @Override
+ public String getPlanPhaseName() {
+ return planPhaseName;
+ }
+
+ @Override
+ public IInternationalPrice getPrice() {
+ return price;
+ }
+
+ // TODO handle exception correctly
+ @Override
+ public BigDecimal getPrice(Currency currency) {
+ try {
+ return price.getPrice(currency);
+ } catch (CatalogApiException e) {
+ e.printStackTrace();
+ return new BigDecimal(0);
+ }
+ }
+
+ @Override
+ public BillingPeriod getBillingPeriod() {
+ return billingPeriod;
+ }
+
+ @Override
+ public BillingMode getBillingMode() {
+ return billingMode;
+ }
+
+ @Override
+ public String getDescription() {
+ return planName + "(" + planPhaseName + ")";
+ }
+
+ @Override
+ public int compareTo(BillingEvent billingEvent) {
+ // strict date comparison here breaks SortedTree if multiple events occur on the same day
+ int compareSubscriptions = getSubscriptionId().compareTo(billingEvent.getSubscriptionId());
+
+ if (compareSubscriptions == 0) {
+ return getEffectiveDate().compareTo(billingEvent.getEffectiveDate());
+ } else {
+ return compareSubscriptions;
+ }
+ }
+}
\ No newline at end of file
diff --git a/api/src/main/java/com/ning/billing/util/eventbus/EventBus.java b/api/src/main/java/com/ning/billing/util/eventbus/EventBus.java
new file mode 100644
index 0000000..1985465
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/util/eventbus/EventBus.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.eventbus;
+
+import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
+import com.google.common.eventbus.Subscribe;
+
+
+/**
+ *
+ * EventBus API based on the guava EventBus API
+ *
+ * The API also provides an API to send events from within a transaction
+ * with the guarantee that the event will be delivered if and only if
+ * the transaction completes. If the implementation is not based on a
+ * DB, this API is behaves the same as the regular post() call.
+ *
+ */
+public interface EventBus {
+
+
+ public class EventBusException extends Exception {
+
+ private static final long serialVersionUID = 12355236L;
+
+ public EventBusException() {
+ super();
+ }
+ public EventBusException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public EventBusException(String message) {
+ super(message);
+ }
+ }
+
+ /**
+ * Start accepting events and dispatching them
+ *
+ */
+ public void start();
+
+ /**
+ * Stop accepting events and flush event queue before it returns.
+ *
+ */
+ public void stop();
+
+ /**
+ *
+ * Registers all handler methods on {@code object} to receive events.
+ * Handler methods need to be Annotated with {@link Subscribe}
+ *
+ * @param handlerInstance
+ *
+ * @throws EventBusException if bus not been started yet
+ */
+ public void register(Object handlerInstance) throws EventBusException;
+
+
+ /**
+ * Unregister the handler for a particular type of event
+ *
+ * @param handlerInstance
+ * @throws EventBusException
+ */
+ public void unregister(Object handlerInstance) throws EventBusException;
+
+
+ /**
+ * Post an event asynchronously
+ *
+ * @param event to be posted
+ *
+ * @throws EventBusException if bus not been started yet
+ */
+ public void post(EventBusNotification event) throws EventBusException;
+
+ /**
+ *
+ * Post an event from within a transaction.
+ * Guarantees that the event is persisted on disk from within the same transaction
+ *
+ *
+ * @param event to be posted
+ * @param dao a valid DAO object obtained through the DBI.onDemand() API.
+ *
+ * @throws EventBusException if bus not been started yet
+ */
+ public void postFromTransaction(EventBusNotification event, Transmogrifier dao) throws EventBusException;
+
+
+}
diff --git a/api/src/main/java/com/ning/billing/util/eventbus/IEventBusService.java b/api/src/main/java/com/ning/billing/util/eventbus/IEventBusService.java
index 71fa8a3..d517aba 100644
--- a/api/src/main/java/com/ning/billing/util/eventbus/IEventBusService.java
+++ b/api/src/main/java/com/ning/billing/util/eventbus/IEventBusService.java
@@ -16,9 +16,9 @@
package com.ning.billing.util.eventbus;
-import com.ning.billing.lifecycle.IService;
+import com.ning.billing.lifecycle.KillbillService;
-public interface IEventBusService extends IService {
+public interface IEventBusService extends KillbillService {
public IEventBus getEventBus();
}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/lifecycle/Lifecycle.java b/beatrix/src/main/java/com/ning/billing/beatrix/lifecycle/Lifecycle.java
index 97aa0be..253e693 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/lifecycle/Lifecycle.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/lifecycle/Lifecycle.java
@@ -35,7 +35,7 @@ import com.google.common.collect.Multimaps;
import com.google.common.collect.SetMultimap;
import com.google.inject.Inject;
import com.google.inject.Injector;
-import com.ning.billing.lifecycle.IService;
+import com.ning.billing.lifecycle.KillbillService;
import com.ning.billing.lifecycle.LifecycleHandlerType;
import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel.Sequence;
@@ -44,7 +44,7 @@ import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel.Sequence;
public class Lifecycle {
private final static Logger log = LoggerFactory.getLogger(Lifecycle.class);
- private final SetMultimap<LifecycleLevel, LifecycleHandler<? extends IService>> handlersByLevel;
+ private final SetMultimap<LifecycleLevel, LifecycleHandler<? extends KillbillService>> handlersByLevel;
private final ServiceFinder serviceFinder;
@@ -54,12 +54,12 @@ public class Lifecycle {
public Lifecycle(Injector injector) {
this.serviceFinder = new ServiceFinder(Lifecycle.class.getClassLoader());
- this.handlersByLevel = Multimaps.newSetMultimap(new ConcurrentHashMap<LifecycleLevel, Collection<LifecycleHandler<? extends IService>>>(),
+ this.handlersByLevel = Multimaps.newSetMultimap(new ConcurrentHashMap<LifecycleLevel, Collection<LifecycleHandler<? extends KillbillService>>>(),
- new Supplier<Set<LifecycleHandler<? extends IService>>>() {
+ new Supplier<Set<LifecycleHandler<? extends KillbillService>>>() {
@Override
- public Set<LifecycleHandler<? extends IService>> get() {
- return new CopyOnWriteArraySet<LifecycleHandler<? extends IService>>();
+ public Set<LifecycleHandler<? extends KillbillService>> get() {
+ return new CopyOnWriteArraySet<LifecycleHandler<? extends KillbillService>>();
}
});
this.injector = injector;
@@ -68,8 +68,8 @@ public class Lifecycle {
}
public void init() {
- Set<? extends IService> services = findServices();
- Iterator<? extends IService> it = services.iterator();
+ Set<? extends KillbillService> services = findServices();
+ Iterator<? extends KillbillService> it = services.iterator();
while (it.hasNext()) {
handlersByLevel.putAll(findAllHandlers(it.next()));
}
@@ -101,12 +101,12 @@ public class Lifecycle {
private void doFireStage(LifecycleLevel level) {
log.info("Killbill lifecycle firing stage {}", level);
- Set<LifecycleHandler<? extends IService>> handlers = handlersByLevel.get(level);
- for (LifecycleHandler<? extends IService> cur : handlers) {
+ Set<LifecycleHandler<? extends KillbillService>> handlers = handlersByLevel.get(level);
+ for (LifecycleHandler<? extends KillbillService> cur : handlers) {
try {
Method method = cur.getMethod();
- IService target = cur.getTarget();
+ KillbillService target = cur.getTarget();
log.info("Killbill lifecycle calling handler {} for service {}", cur.getMethod().getName(), target.getName());
method.invoke(target);
} catch (Exception e) {
@@ -117,14 +117,14 @@ public class Lifecycle {
}
- private Set<? extends IService> findServices() {
+ private Set<? extends KillbillService> findServices() {
- Set<IService> result = new HashSet<IService>();
- Set<Class<? extends IService>> services = serviceFinder.getServices();
- for (Class<? extends IService> cur : services) {
+ Set<KillbillService> result = new HashSet<KillbillService>();
+ Set<Class<? extends KillbillService>> services = serviceFinder.getServices();
+ for (Class<? extends KillbillService> cur : services) {
log.debug("Found service {}", cur.getName());
try {
- IService instance = injector.getInstance(cur);
+ KillbillService instance = injector.getInstance(cur);
log.debug("got instance {}", instance.getName());
result.add(instance);
} catch (Exception e) {
@@ -141,14 +141,14 @@ public class Lifecycle {
log.warn(msg, e);
}
- public Multimap<LifecycleLevel, LifecycleHandler<? extends IService>> findAllHandlers(IService service) {
- Multimap<LifecycleLevel, LifecycleHandler<? extends IService>> methodsInService = HashMultimap.create();
- Class<? extends IService> clazz = service.getClass();
+ public Multimap<LifecycleLevel, LifecycleHandler<? extends KillbillService>> findAllHandlers(KillbillService service) {
+ Multimap<LifecycleLevel, LifecycleHandler<? extends KillbillService>> methodsInService = HashMultimap.create();
+ Class<? extends KillbillService> clazz = service.getClass();
for (Method method : clazz.getMethods()) {
LifecycleHandlerType annotation = method.getAnnotation(LifecycleHandlerType.class);
if (annotation != null) {
LifecycleLevel level = annotation.value();
- LifecycleHandler<? extends IService> handler = new LifecycleHandler<IService>(service, method);
+ LifecycleHandler<? extends KillbillService> handler = new LifecycleHandler<KillbillService>(service, method);
methodsInService.put(level, handler);
}
}
diff --git a/beatrix/src/main/java/com/ning/billing/beatrix/lifecycle/ServiceFinder.java b/beatrix/src/main/java/com/ning/billing/beatrix/lifecycle/ServiceFinder.java
index 6916cf1..b5fca46 100644
--- a/beatrix/src/main/java/com/ning/billing/beatrix/lifecycle/ServiceFinder.java
+++ b/beatrix/src/main/java/com/ning/billing/beatrix/lifecycle/ServiceFinder.java
@@ -37,36 +37,36 @@ import java.util.jar.JarFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.ning.billing.lifecycle.IService;
+import com.ning.billing.lifecycle.KillbillService;
public class ServiceFinder {
private static final Logger log = LoggerFactory.getLogger(ServiceFinder.class);
private final ClassLoader loader;
- private final Set<Class<? extends IService>> servicesTypes;
+ private final Set<Class<? extends KillbillService>> servicesTypes;
public ServiceFinder(ClassLoader loader) {
this.loader = loader;
this.servicesTypes = initialize();
- Iterator<Class<? extends IService>> it = servicesTypes.iterator();
+ Iterator<Class<? extends KillbillService>> it = servicesTypes.iterator();
while (it.hasNext()) {
- Class<? extends IService> svc = it.next();
+ Class<? extends KillbillService> svc = it.next();
log.debug("Found IService classes {}", svc.getName());
}
}
- public Set<Class<? extends IService>> getServices() {
+ public Set<Class<? extends KillbillService>> getServices() {
return servicesTypes;
}
- private Set<Class<? extends IService>> initialize() {
+ private Set<Class<? extends KillbillService>> initialize() {
try {
final Set<String> packageFilter = new HashSet<String>();
packageFilter.add("com.ning.billing");
final String jarFilter = "killbill";
- return findClasses(loader, IService.class.getName().toString(), jarFilter, packageFilter);
+ return findClasses(loader, KillbillService.class.getName().toString(), jarFilter, packageFilter);
} catch (ClassNotFoundException nfe) {
throw new RuntimeException("Failed to initialize ClassFinder", nfe);
}
@@ -76,13 +76,13 @@ public class ServiceFinder {
* Code originally from Kris Dover <krisdover@hotmail.com> and adapted for my purpose.
*
*/
- private static Set<Class<? extends IService>> findClasses(ClassLoader classLoader,
+ private static Set<Class<? extends KillbillService>> findClasses(ClassLoader classLoader,
String interfaceFilter,
String jarFilter,
Set<String> packageFilter)
throws ClassNotFoundException {
- final Set<Class<? extends IService>> result = new HashSet<Class<? extends IService>>();
+ final Set<Class<? extends KillbillService>> result = new HashSet<Class<? extends KillbillService>>();
Object[] classPaths;
try {
@@ -165,7 +165,7 @@ public class ServiceFinder {
if (!interfaceFilter.equals(interfaceName) ) {
continue;
}
- result.add((Class<? extends IService>) theClass);
+ result.add((Class<? extends KillbillService>) theClass);
break;
}
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/lifecycle/TestLifecycle.java b/beatrix/src/test/java/com/ning/billing/beatrix/lifecycle/TestLifecycle.java
index b6cc153..a01220e 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/lifecycle/TestLifecycle.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/lifecycle/TestLifecycle.java
@@ -27,7 +27,7 @@ import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Stage;
-import com.ning.billing.lifecycle.IService;
+import com.ning.billing.lifecycle.KillbillService;
import com.ning.billing.lifecycle.LifecycleHandlerType;
import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
@@ -62,7 +62,7 @@ public class TestLifecycle {
}
}
- public static class Service1 extends ServiceBase implements IService {
+ public static class Service1 extends ServiceBase implements KillbillService {
@LifecycleHandlerType(LifecycleLevel.INIT_BUS)
public void initBus() {
@@ -88,7 +88,7 @@ public class TestLifecycle {
}
}
- public static class Service2 extends ServiceBase implements IService {
+ public static class Service2 extends ServiceBase implements KillbillService {
@LifecycleHandlerType(LifecycleLevel.LOAD_CATALOG)
public void loadCatalog() {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
index fb1d473..b07ec80 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
@@ -22,12 +22,12 @@ import com.ning.billing.catalog.api.ICatalog;
import com.ning.billing.catalog.api.ICatalogService;
import com.ning.billing.catalog.io.VersionedCatalogLoader;
import com.ning.billing.config.ICatalogConfig;
-import com.ning.billing.lifecycle.IService;
+import com.ning.billing.lifecycle.KillbillService;
import com.ning.billing.lifecycle.LifecycleHandlerType;
import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
import com.ning.billing.util.config.XMLLoader;
-public class CatalogService implements IService, Provider<ICatalog>, ICatalogService {
+public class CatalogService implements KillbillService, Provider<ICatalog>, ICatalogService {
private static final String CATALOG_SERVICE_NAME = "catalog-service";
diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/ICatalogLoader.java b/catalog/src/main/java/com/ning/billing/catalog/io/ICatalogLoader.java
index 6daa7b6..4d1f139 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/ICatalogLoader.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/ICatalogLoader.java
@@ -17,7 +17,7 @@
package com.ning.billing.catalog.io;
import com.ning.billing.catalog.VersionedCatalog;
-import com.ning.billing.lifecycle.IService.ServiceException;
+import com.ning.billing.lifecycle.KillbillService.ServiceException;
public interface ICatalogLoader {
diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java b/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
index 52f92ef..485ba80 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
@@ -26,8 +26,8 @@ import java.util.List;
import com.google.inject.Inject;
import com.ning.billing.catalog.Catalog;
import com.ning.billing.catalog.VersionedCatalog;
-import com.ning.billing.lifecycle.IService.ServiceException;
-import com.ning.billing.util.clock.IClock;
+import com.ning.billing.lifecycle.KillbillService.ServiceException;
+import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.config.UriAccessor;
import com.ning.billing.util.config.XMLLoader;
@@ -37,10 +37,10 @@ public class VersionedCatalogLoader implements ICatalogLoader {
private final String HREF_LOW_START = "href=\"";
private final String HREF_CAPS_START = "HREF=\"";
private final String HREF_SEARCH_END = "\"";
- private IClock clock;
+ private Clock clock;
@Inject
- public VersionedCatalogLoader(IClock clock) {
+ public VersionedCatalogLoader(Clock clock) {
this.clock = clock;
}
diff --git a/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java b/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
index 1b4703c..085b005 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
@@ -36,11 +36,11 @@ import com.google.common.io.Resources;
import com.ning.billing.catalog.Catalog;
import com.ning.billing.catalog.VersionedCatalog;
import com.ning.billing.catalog.api.InvalidConfigException;
-import com.ning.billing.lifecycle.IService.ServiceException;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.lifecycle.KillbillService.ServiceException;
+import com.ning.billing.util.clock.DefaultClock;
public class TestVersionedCatalogLoader {
- private final VersionedCatalogLoader loader = new VersionedCatalogLoader(new Clock());
+ private final VersionedCatalogLoader loader = new VersionedCatalogLoader(new DefaultClock());
@Test(enabled=true)
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestCatlogService.java b/catalog/src/test/java/com/ning/billing/catalog/TestCatlogService.java
index fa42ea3..050ff6c 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestCatlogService.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestCatlogService.java
@@ -22,8 +22,8 @@ import org.testng.annotations.Test;
import com.ning.billing.catalog.api.ICatalog;
import com.ning.billing.catalog.io.VersionedCatalogLoader;
import com.ning.billing.config.ICatalogConfig;
-import com.ning.billing.lifecycle.IService.ServiceException;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.lifecycle.KillbillService.ServiceException;
+import com.ning.billing.util.clock.DefaultClock;
public class TestCatlogService {
@@ -35,7 +35,7 @@ public class TestCatlogService {
return "file:src/test/resources/versionedCatalog";
}
- }, new VersionedCatalogLoader(new Clock()));
+ }, new VersionedCatalogLoader(new DefaultClock()));
service.loadCatalog();
Assert.assertNotNull(service.getCatalog());
Assert.assertEquals(service.getCatalog().getCalalogName(), "WeaponsHireSmall");
@@ -49,7 +49,7 @@ public class TestCatlogService {
return "file:src/test/resources/WeaponsHire.xml";
}
- }, new VersionedCatalogLoader(new Clock()));
+ }, new VersionedCatalogLoader(new DefaultClock()));
service.loadCatalog();
Assert.assertNotNull(service.getCatalog());
Assert.assertEquals(service.getCatalog().getCalalogName(), "Firearms");
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java b/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
index c6da79d..e6f9ed2 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
@@ -32,11 +32,11 @@ import org.xml.sax.SAXException;
import com.google.common.io.Resources;
import com.ning.billing.catalog.api.InvalidConfigException;
import com.ning.billing.catalog.io.VersionedCatalogLoader;
-import com.ning.billing.lifecycle.IService.ServiceException;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.lifecycle.KillbillService.ServiceException;
+import com.ning.billing.util.clock.DefaultClock;
public class TestVersionedCatalog {
- private final VersionedCatalogLoader loader = new VersionedCatalogLoader(new Clock());
+ private final VersionedCatalogLoader loader = new VersionedCatalogLoader(new DefaultClock());
@Test(enabled=true)
public void testAddCatalog() throws MalformedURLException, IOException, SAXException, InvalidConfigException, JAXBException, TransformerException, URISyntaxException, ServiceException {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
index 5ba7076..883594c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
@@ -33,11 +33,11 @@ import com.ning.billing.catalog.api.PlanAlignmentChange;
import com.ning.billing.catalog.api.PlanAlignmentCreate;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.PlanSpecifier;
-import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionData;
import com.ning.billing.entitlement.exceptions.EntitlementError;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.clock.DefaultClock;
-public class PlanAligner implements IPlanAligner {
+public class PlanAligner {
private final ICatalogService catalogService;
@@ -52,40 +52,35 @@ public class PlanAligner implements IPlanAligner {
NEXT
}
- @Override
- public TimedPhase getCurrentTimedPhaseOnCreate(Subscription subscription,
+ public TimedPhase getCurrentTimedPhaseOnCreate(SubscriptionData subscription,
IPlan plan, String priceList, DateTime effectiveDate) {
return getTimedPhaseOnCreate(subscription, plan, priceList, effectiveDate, WhichPhase.CURRENT);
}
- @Override
- public TimedPhase getNextTimedPhaseOnCreate(Subscription subscription,
+ public TimedPhase getNextTimedPhaseOnCreate(SubscriptionData subscription,
IPlan plan, String priceList, DateTime effectiveDate) {
return getTimedPhaseOnCreate(subscription, plan, priceList, effectiveDate, WhichPhase.NEXT);
}
- @Override
- public TimedPhase getCurrentTimedPhaseOnChange(Subscription subscription,
+ public TimedPhase getCurrentTimedPhaseOnChange(SubscriptionData subscription,
IPlan plan, String priceList, DateTime effectiveDate) {
return getTimedPhaseOnChange(subscription, plan, priceList, effectiveDate, WhichPhase.CURRENT);
}
- @Override
- public TimedPhase getNextTimedPhaseOnChange(Subscription subscription,
+ public TimedPhase getNextTimedPhaseOnChange(SubscriptionData subscription,
IPlan plan, String priceList, DateTime effectiveDate) {
return getTimedPhaseOnChange(subscription, plan, priceList, effectiveDate, WhichPhase.NEXT);
}
- @Override
- public TimedPhase getNextTimedPhase(Subscription subscription,
+ public TimedPhase getNextTimedPhase(SubscriptionData subscription,
IPlan plan, DateTime effectiveDate, DateTime planStartDate) {
List<TimedPhase> timedPhases = getPhaseAlignments(subscription, plan, effectiveDate, planStartDate);
return getTimedPhase(timedPhases, effectiveDate, WhichPhase.NEXT);
}
- private TimedPhase getTimedPhaseOnCreate(Subscription subscription,
+ private TimedPhase getTimedPhaseOnCreate(SubscriptionData subscription,
IPlan plan, String priceList, DateTime effectiveDate, WhichPhase which) {
ICatalog catalog = catalogService.getCatalog();
@@ -96,7 +91,7 @@ public class PlanAligner implements IPlanAligner {
priceList);
DateTime planStartDate = null;
-
+
//TODO fix exception handling
PlanAlignmentCreate alignement = null;
try {
@@ -105,7 +100,7 @@ public class PlanAligner implements IPlanAligner {
// TODO Auto-generated catch block
e.printStackTrace();
}
-
+
switch(alignement) {
case START_OF_SUBSCRIPTION:
planStartDate = subscription.getStartDate();
@@ -120,7 +115,7 @@ public class PlanAligner implements IPlanAligner {
return getTimedPhase(timedPhases, effectiveDate, which);
}
- private TimedPhase getTimedPhaseOnChange(Subscription subscription,
+ private TimedPhase getTimedPhaseOnChange(SubscriptionData subscription,
IPlan plan, String priceList, DateTime effectiveDate, WhichPhase which) {
ICatalog catalog = catalogService.getCatalog();
@@ -141,7 +136,7 @@ public class PlanAligner implements IPlanAligner {
priceList);
DateTime planStartDate = null;
-
+
//TODO Correctly handle exception
PlanAlignmentChange alignment = null;
try {
@@ -168,7 +163,7 @@ public class PlanAligner implements IPlanAligner {
return getTimedPhase(timedPhases, effectiveDate, which);
}
- private List<TimedPhase> getPhaseAlignments(Subscription subscription, IPlan plan,
+ private List<TimedPhase> getPhaseAlignments(SubscriptionData subscription, IPlan plan,
DateTime effectiveDate, DateTime planStartDate) {
// The plan can be null with the nasty endpoint from test API.
@@ -176,7 +171,7 @@ public class PlanAligner implements IPlanAligner {
return Collections.emptyList();
}
- List<TimedPhase> result = new LinkedList<IPlanAligner.TimedPhase>();
+ List<TimedPhase> result = new LinkedList<TimedPhase>();
DateTime curPhaseStart = planStartDate;
if (plan.getInitialPhases() == null) {
@@ -190,7 +185,7 @@ public class PlanAligner implements IPlanAligner {
result.add(new TimedPhase(cur, curPhaseStart));
IDuration curPhaseDuration = cur.getDuration();
- nextPhaseStart = Clock.addDuration(curPhaseStart, curPhaseDuration);
+ nextPhaseStart = DefaultClock.addDuration(curPhaseStart, curPhaseDuration);
if (nextPhaseStart == null) {
throw new EntitlementError(String.format("Unexpected non ending UNLIMITED phase for plan %s",
plan.getName()));
@@ -220,4 +215,7 @@ public class PlanAligner implements IPlanAligner {
throw new EntitlementError(String.format("Unepected %s TimedPhase", which));
}
}
+
+
+
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBuilder.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBuilder.java
index d14b754..dbc2a5e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBuilder.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBuilder.java
@@ -39,7 +39,7 @@ public class SubscriptionBuilder {
this.activeVersion = SubscriptionEvents.INITIAL_VERSION;
}
- public SubscriptionBuilder(Subscription original) {
+ public SubscriptionBuilder(SubscriptionData original) {
this.id = original.getId();
this.bundleId = original.getBundleId();
this.startDate = original.getStartDate();
@@ -65,7 +65,7 @@ public class SubscriptionBuilder {
public SubscriptionBuilder setBundleStartDate(DateTime bundleStartDate) {
this.bundleStartDate = bundleStartDate;
return this;
- }
+ }
public SubscriptionBuilder setActiveVersion(long activeVersion) {
this.activeVersion = activeVersion;
return this;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionEvents.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionEvents.java
index cefaf05..d69d4e2 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionEvents.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionEvents.java
@@ -19,36 +19,36 @@ package com.ning.billing.entitlement.api.user;
import java.util.LinkedList;
import java.util.UUID;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
+import com.ning.billing.entitlement.events.EntitlementEvent;
public class SubscriptionEvents {
public static final long INITIAL_VERSION = 1;
private final UUID subscriptionId;
- private final LinkedList<IEntitlementEvent> events;
+ private final LinkedList<EntitlementEvent> events;
private long activeVersion;
public SubscriptionEvents(UUID subscriptionId) {
super();
this.subscriptionId = subscriptionId;
- this.events = new LinkedList<IEntitlementEvent>();
+ this.events = new LinkedList<EntitlementEvent>();
this.activeVersion = INITIAL_VERSION;
}
- public void addEvent(IEntitlementEvent ev) {
+ public void addEvent(EntitlementEvent ev) {
events.add(ev);
}
- public LinkedList<IEntitlementEvent> getCurrentView() {
+ public LinkedList<EntitlementEvent> getCurrentView() {
return getViewForVersion(activeVersion);
}
- public LinkedList<IEntitlementEvent> getViewForVersion(final long version) {
+ public LinkedList<EntitlementEvent> getViewForVersion(final long version) {
- LinkedList<IEntitlementEvent> result = new LinkedList<IEntitlementEvent>();
- for (IEntitlementEvent cur : events) {
+ LinkedList<EntitlementEvent> result = new LinkedList<EntitlementEvent>();
+ for (EntitlementEvent cur : events) {
if (cur.getActiveVersion() == version) {
result.add(cur);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java
index 04daa21..52fa9a4 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/ApiEventProcessorBase.java
@@ -22,26 +22,23 @@ import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
-import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
-import org.skife.config.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.inject.Inject;
-import com.ning.billing.config.IEntitlementConfig;
-import com.ning.billing.entitlement.api.user.ISubscription;
-import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
-import com.ning.billing.util.clock.IClock;
+import com.ning.billing.config.EntitlementConfig;
+import com.ning.billing.entitlement.engine.dao.EntitlementDao;
+import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.util.clock.Clock;
-public abstract class ApiEventProcessorBase implements IApiEventProcessor {
+public abstract class ApiEventProcessorBase implements EventNotifier {
// Wait for max 60 sec when shutting down the EventProcessor
private final long STOP_WAIT_TIMEOUT_MS = 60000;
@@ -52,20 +49,20 @@ public abstract class ApiEventProcessorBase implements IApiEventProcessor {
protected final UUID apiProcessorId;
private static final String API_EVENT_THREAD_NAME = "ApiEventNotification";
- protected final static Logger log = LoggerFactory.getLogger(ApiEventProcessor.class);
+ protected final static Logger log = LoggerFactory.getLogger(DefaultApiEventProcessor.class);
- protected final IEntitlementDao dao;
- protected final IClock clock;
+ protected final EntitlementDao dao;
+ protected final Clock clock;
private Executor executor;
- private final IEntitlementConfig config;
- protected IEventListener listener;
+ private final EntitlementConfig config;
+ protected EventListener listener;
protected long nbProcessedEvents;
protected volatile boolean isProcessingEvents;
@Inject
- public ApiEventProcessorBase(IClock clock, IEntitlementDao dao, IEntitlementConfig config) {
+ public ApiEventProcessorBase(Clock clock, EntitlementDao dao, EntitlementConfig config) {
this.clock = clock;
this.dao = dao;
this.config = config;
@@ -78,7 +75,7 @@ public abstract class ApiEventProcessorBase implements IApiEventProcessor {
@Override
- public void startNotifications(final IEventListener listener) {
+ public void startNotifications(final EventListener listener) {
this.listener = listener;
this.isProcessingEvents = true;
@@ -206,9 +203,9 @@ public abstract class ApiEventProcessorBase implements IApiEventProcessor {
int curSequenceId = sequenceId.getAndIncrement();
//Get all current ready events
- List<IEntitlementEvent> claimedEvents = new LinkedList<IEntitlementEvent>();
+ List<EntitlementEvent> claimedEvents = new LinkedList<EntitlementEvent>();
do {
- List<IEntitlementEvent> tmpEvents = dao.getEventsReady(apiProcessorId, curSequenceId);
+ List<EntitlementEvent> tmpEvents = dao.getEventsReady(apiProcessorId, curSequenceId);
if (tmpEvents.size() == 0) {
break;
}
@@ -219,14 +216,14 @@ public abstract class ApiEventProcessorBase implements IApiEventProcessor {
}
// Filter for specific subscriptions if needed
- Collection<IEntitlementEvent> claimedEventsFiltered = null;
+ Collection<EntitlementEvent> claimedEventsFiltered = null;
if (subscriptionsIds.length == 0) {
claimedEventsFiltered = claimedEvents;
} else {
- claimedEventsFiltered = Collections2.filter(claimedEvents, new Predicate<IEntitlementEvent>() {
+ claimedEventsFiltered = Collections2.filter(claimedEvents, new Predicate<EntitlementEvent>() {
@Override
- public boolean apply(IEntitlementEvent input) {
+ public boolean apply(EntitlementEvent input) {
for (UUID cur : subscriptionsIds) {
if (cur.equals(input.getSubscriptionId())) {
return true;
@@ -242,7 +239,7 @@ public abstract class ApiEventProcessorBase implements IApiEventProcessor {
// If only one event is requested extract it
if (oneEventOnly) {
- List<IEntitlementEvent> oneEventList = new ArrayList<IEntitlementEvent>(1);
+ List<EntitlementEvent> oneEventList = new ArrayList<EntitlementEvent>(1);
oneEventList.add(claimedEventsFiltered.iterator().next());
claimedEventsFiltered = oneEventList;
}
@@ -257,5 +254,5 @@ public abstract class ApiEventProcessorBase implements IApiEventProcessor {
}
protected abstract boolean doProcessEvents(int sequenceId);
- protected abstract boolean doProcessEventsFromList(int sequenceId, Collection<IEntitlementEvent> events);
+ protected abstract boolean doProcessEventsFromList(int sequenceId, Collection<EntitlementEvent> events);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
index bf6f0ae..972e972 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
@@ -21,31 +21,31 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
-import com.ning.billing.config.IEntitlementConfig;
+import com.ning.billing.config.EntitlementConfig;
-import com.ning.billing.entitlement.alignment.IPlanAligner;
-import com.ning.billing.entitlement.alignment.IPlanAligner.TimedPhase;
-import com.ning.billing.entitlement.api.IEntitlementService;
+import com.ning.billing.entitlement.alignment.PlanAligner;
+import com.ning.billing.entitlement.alignment.TimedPhase;
+import com.ning.billing.entitlement.api.EntitlementService;
+import com.ning.billing.entitlement.api.billing.DefaultEntitlementBillingApi;
import com.ning.billing.entitlement.api.billing.EntitlementBillingApi;
-import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
+import com.ning.billing.entitlement.api.test.DefaultEntitlementTestApi;
import com.ning.billing.entitlement.api.test.EntitlementTestApi;
-import com.ning.billing.entitlement.api.test.IEntitlementTestApi;
+import com.ning.billing.entitlement.api.user.DefaultEntitlementUserApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
-import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
-import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
-import com.ning.billing.entitlement.events.IEntitlementEvent.EventType;
-import com.ning.billing.entitlement.events.phase.IPhaseEvent;
+import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.engine.dao.EntitlementDao;
+import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
import com.ning.billing.entitlement.events.phase.PhaseEvent;
+import com.ning.billing.entitlement.events.phase.PhaseEventData;
import com.ning.billing.entitlement.exceptions.EntitlementError;
import com.ning.billing.lifecycle.LifecycleHandlerType;
import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
-import com.ning.billing.util.clock.IClock;
-import com.ning.billing.util.eventbus.IEventBus;
-import com.ning.billing.util.eventbus.IEventBus.EventBusException;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.eventbus.EventBus;
+import com.ning.billing.util.eventbus.EventBus.EventBusException;
-public class Engine implements IEventListener, IEntitlementService {
+public class Engine implements EventListener, EntitlementService {
private static final String ENTITLEMENT_SERVICE_NAME = "entitlement-service";
@@ -55,21 +55,21 @@ public class Engine implements IEventListener, IEntitlementService {
private final static Logger log = LoggerFactory.getLogger(Engine.class);
- private final IClock clock;
- private final IEntitlementDao dao;
- private final IApiEventProcessor apiEventProcessor;
- private final IPlanAligner planAligner;
- private final IEntitlementUserApi userApi;
- private final IEntitlementBillingApi billingApi;
- private final IEntitlementTestApi testApi;
- private final IEventBus eventBus;
+ private final Clock clock;
+ private final EntitlementDao dao;
+ private final EventNotifier apiEventProcessor;
+ private final PlanAligner planAligner;
+ private final EntitlementUserApi userApi;
+ private final EntitlementBillingApi billingApi;
+ private final EntitlementTestApi testApi;
+ private final EventBus eventBus;
private boolean startedNotificationThread;
@Inject
- public Engine(IClock clock, IEntitlementDao dao, IApiEventProcessor apiEventProcessor,
- IPlanAligner planAligner, IEntitlementConfig config, EntitlementUserApi userApi,
- EntitlementBillingApi billingApi, EntitlementTestApi testApi, IEventBus eventBus) {
+ public Engine(Clock clock, EntitlementDao dao, EventNotifier apiEventProcessor,
+ PlanAligner planAligner, EntitlementConfig config, DefaultEntitlementUserApi userApi,
+ DefaultEntitlementBillingApi billingApi, DefaultEntitlementTestApi testApi, EventBus eventBus) {
super();
this.clock = clock;
this.dao = dao;
@@ -106,24 +106,24 @@ public class Engine implements IEventListener, IEntitlementService {
}
@Override
- public IEntitlementUserApi getUserApi() {
+ public EntitlementUserApi getUserApi() {
return userApi;
}
@Override
- public IEntitlementBillingApi getBillingApi() {
+ public EntitlementBillingApi getBillingApi() {
return billingApi;
}
@Override
- public IEntitlementTestApi getTestApi() {
+ public EntitlementTestApi getTestApi() {
return testApi;
}
@Override
- public void processEventReady(IEntitlementEvent event) {
- Subscription subscription = (Subscription) dao.getSubscriptionFromId(event.getSubscriptionId());
+ public void processEventReady(EntitlementEvent event) {
+ SubscriptionData subscription = (SubscriptionData) dao.getSubscriptionFromId(event.getSubscriptionId());
if (subscription == null) {
log.warn("Failed to retrieve subscription for id %s", event.getSubscriptionId());
return;
@@ -174,12 +174,12 @@ public class Engine implements IEventListener, IEntitlementService {
}
}
- private void insertNextPhaseEvent(Subscription subscription) {
+ private void insertNextPhaseEvent(SubscriptionData subscription) {
DateTime now = clock.getUTCNow();
TimedPhase nextTimedPhase = planAligner.getNextTimedPhase(subscription, subscription.getCurrentPlan(), now, subscription.getCurrentPlanStart());
- IPhaseEvent nextPhaseEvent = PhaseEvent.getNextPhaseEvent(nextTimedPhase, subscription, now);
+ PhaseEvent nextPhaseEvent = PhaseEventData.getNextPhaseEvent(nextTimedPhase, subscription, now);
if (nextPhaseEvent != null) {
dao.createNextPhaseEvent(subscription.getId(), nextPhaseEvent);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
index e312ccc..6bfccc3 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
@@ -16,310 +16,56 @@
package com.ning.billing.entitlement.engine.dao;
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
-import org.skife.jdbi.v2.DBI;
-import org.skife.jdbi.v2.Transaction;
-import org.skife.jdbi.v2.TransactionStatus;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.config.IEntitlementConfig;
-import com.ning.billing.entitlement.api.user.ISubscription;
-import com.ning.billing.entitlement.api.user.ISubscriptionBundle;
import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.entitlement.api.user.SubscriptionBuilder;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
-import com.ning.billing.entitlement.events.IEntitlementEvent.EventType;
-import com.ning.billing.entitlement.events.user.ApiEventType;
-import com.ning.billing.entitlement.events.user.IApiEvent;
-import com.ning.billing.entitlement.exceptions.EntitlementError;
-import com.ning.billing.util.Hostname;
-import com.ning.billing.util.clock.IClock;
-
-public class EntitlementDao implements IEntitlementDao {
-
- private final static Logger log = LoggerFactory.getLogger(EntitlementDao.class);
-
- private final IClock clock;
- private final ISubscriptionSqlDao subscriptionsDao;
- private final IBundleSqlDao bundlesDao;
- private final IEventSqlDao eventsDao;
- private final IEntitlementConfig config;
- private final String hostname;
-
- @Inject
- public EntitlementDao(DBI dbi, IClock clock, IEntitlementConfig config) {
- this.clock = clock;
- this.config = config;
- this.subscriptionsDao = dbi.onDemand(ISubscriptionSqlDao.class);
- this.eventsDao = dbi.onDemand(IEventSqlDao.class);
- this.bundlesDao = dbi.onDemand(IBundleSqlDao.class);
- this.hostname = Hostname.get();
- }
-
- @Override
- public List<ISubscriptionBundle> getSubscriptionBundleForAccount(
- UUID accountId) {
- return bundlesDao.getBundleFromAccount(accountId.toString());
- }
-
- @Override
- public ISubscriptionBundle getSubscriptionBundleFromId(UUID bundleId) {
- return bundlesDao.getBundleFromId(bundleId.toString());
- }
-
- @Override
- public ISubscriptionBundle createSubscriptionBundle(SubscriptionBundle bundle) {
- bundlesDao.insertBundle(bundle);
- return bundle;
- }
-
- @Override
- public ISubscription getSubscriptionFromId(UUID subscriptionId) {
- return subscriptionsDao.getSubscriptionFromId(subscriptionId.toString());
- }
-
- @Override
- public ISubscription getBaseSubscription(final UUID bundleId) {
-
- List<ISubscription> subscriptions = subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString());
- for (ISubscription cur : subscriptions) {
- if (((Subscription)cur).getCategory() == ProductCategory.BASE) {
- return cur;
- }
- }
- return null;
- }
-
- @Override
- public List<ISubscription> getSubscriptions(UUID bundleId) {
- return subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString());
- }
-
- @Override
- public List<ISubscription> getSubscriptionsForKey(String bundleKey) {
- ISubscriptionBundle bundle = bundlesDao.getBundleFromKey(bundleKey);
- if (bundle == null) {
- return Collections.emptyList();
- }
- return subscriptionsDao.getSubscriptionsFromBundleId(bundle.getId().toString());
- }
-
- @Override
- public void updateSubscription(Subscription subscription) {
- Date ctd = (subscription.getChargedThroughDate() != null) ? subscription.getChargedThroughDate().toDate() : null;
- Date ptd = (subscription.getPaidThroughDate() != null) ? subscription.getPaidThroughDate().toDate() : null;
- subscriptionsDao.updateSubscription(subscription.getId().toString(), subscription.getActiveVersion(), ctd, ptd);
- }
-
- @Override
- public void createNextPhaseEvent(final UUID subscriptionId, final IEntitlementEvent nextPhase) {
- eventsDao.inTransaction(new Transaction<Void, IEventSqlDao>() {
-
- @Override
- public Void inTransaction(IEventSqlDao dao,
- TransactionStatus status) throws Exception {
- cancelNextPhaseEventFromTransaction(subscriptionId, dao);
- dao.insertEvent(nextPhase);
- return null;
- }
- });
- }
-
-
- @Override
- public List<IEntitlementEvent> getEventsForSubscription(UUID subscriptionId) {
- List<IEntitlementEvent> events = eventsDao.getEventsForSubscription(subscriptionId.toString());
- return events;
- }
-
- @Override
- public List<IEntitlementEvent> getPendingEventsForSubscription(UUID subscriptionId) {
- Date now = clock.getUTCNow().toDate();
- List<IEntitlementEvent> results = eventsDao.getFutureActiveEventForSubscription(subscriptionId.toString(), now);
- return results;
- }
-
- @Override
- public List<IEntitlementEvent> getEventsReady(final UUID ownerId, final int sequenceId) {
-
- final Date now = clock.getUTCNow().toDate();
- final Date nextAvailable = clock.getUTCNow().plus(config.getDaoClaimTimeMs()).toDate();
-
- log.debug(String.format("EntitlementDao getEventsReady START effectiveNow = %s", now));
-
- List<IEntitlementEvent> events = eventsDao.inTransaction(new Transaction<List<IEntitlementEvent>, IEventSqlDao>() {
-
- @Override
- public List<IEntitlementEvent> inTransaction(IEventSqlDao dao,
- TransactionStatus status) throws Exception {
-
- List<IEntitlementEvent> claimedEvents = new ArrayList<IEntitlementEvent>();
- List<IEntitlementEvent> input = dao.getReadyEvents(now, config.getDaoMaxReadyEvents());
- for (IEntitlementEvent cur : input) {
- final boolean claimed = (dao.claimEvent(ownerId.toString(), nextAvailable, cur.getId().toString(), now) == 1);
- if (claimed) {
- claimedEvents.add(cur);
- dao.insertClaimedHistory(sequenceId, ownerId.toString(), hostname, now, cur.getId().toString());
- }
- }
- return claimedEvents;
- }
- });
-
- for (IEntitlementEvent cur : events) {
- log.debug(String.format("EntitlementDao %s [host %s] claimed events %s", ownerId, hostname, cur.getId()));
- if (cur.getOwner() != null && !cur.getOwner().equals(ownerId)) {
- log.warn(String.format("EventProcessor %s stealing event %s from %s", ownerId, cur, cur.getOwner()));
- }
- }
- return events;
- }
-
- @Override
- public void clearEventsReady(final UUID ownerId, final Collection<IEntitlementEvent> cleared) {
-
- log.debug(String.format("EntitlementDao clearEventsReady START cleared size = %d", cleared.size()));
+import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
+import com.ning.billing.entitlement.events.EntitlementEvent;
- eventsDao.inTransaction(new Transaction<Void, IEventSqlDao>() {
+public interface EntitlementDao {
- @Override
- public Void inTransaction(IEventSqlDao dao,
- TransactionStatus status) throws Exception {
- // STEPH Same here batch would nice
- for (IEntitlementEvent cur : cleared) {
- dao.clearEvent(cur.getId().toString(), ownerId.toString());
- log.debug(String.format("EntitlementDao %s [host %s] cleared events %s", ownerId, hostname, cur.getId()));
- }
- return null;
- }
- });
- }
- @Override
- public ISubscription createSubscription(final Subscription subscription,
- final List<IEntitlementEvent> initialEvents) {
+ // Bundle apis
+ public List<SubscriptionBundle> getSubscriptionBundleForAccount(UUID accountId);
- subscriptionsDao.inTransaction(new Transaction<Void, ISubscriptionSqlDao>() {
+ public SubscriptionBundle getSubscriptionBundleFromId(UUID bundleId);
- @Override
- public Void inTransaction(ISubscriptionSqlDao dao,
- TransactionStatus status) throws Exception {
+ public SubscriptionBundle createSubscriptionBundle(SubscriptionBundleData bundle);
- dao.insertSubscription(subscription);
- // STEPH batch as well
- IEventSqlDao eventsDaoFromSameTranscation = dao.become(IEventSqlDao.class);
- for (IEntitlementEvent cur : initialEvents) {
- eventsDaoFromSameTranscation.insertEvent(cur);
- }
- return null;
- }
- });
- return new Subscription(new SubscriptionBuilder(subscription), true);
- }
+ public Subscription getSubscriptionFromId(UUID subscriptionId);
- @Override
- public void cancelSubscription(final UUID subscriptionId, final IEntitlementEvent cancelEvent) {
- eventsDao.inTransaction(new Transaction<Void, IEventSqlDao>() {
- @Override
- public Void inTransaction(IEventSqlDao dao,
- TransactionStatus status) throws Exception {
- cancelNextChangeEventFromTransaction(subscriptionId, dao);
- cancelNextPhaseEventFromTransaction(subscriptionId, dao);
- dao.insertEvent(cancelEvent);
- return null;
- }
- });
- }
+ // Subscription retrieval
+ public Subscription getBaseSubscription(UUID bundleId);
- @Override
- public void uncancelSubscription(final UUID subscriptionId, final List<IEntitlementEvent> uncancelEvents) {
+ public List<Subscription> getSubscriptions(UUID bundleId);
- eventsDao.inTransaction(new Transaction<Void, IEventSqlDao>() {
+ public List<Subscription> getSubscriptionsForKey(String bundleKey);
- @Override
- public Void inTransaction(IEventSqlDao dao,
- TransactionStatus status) throws Exception {
+ // Update
+ public void updateSubscription(SubscriptionData subscription);
- UUID existingCancelId = null;
- Date now = clock.getUTCNow().toDate();
- List<IEntitlementEvent> events = dao.getFutureActiveEventForSubscription(subscriptionId.toString(), now);
+ // Event apis
+ public void createNextPhaseEvent(UUID subscriptionId, EntitlementEvent nextPhase);
- for (IEntitlementEvent cur : events) {
- if (cur.getType() == EventType.API_USER && ((IApiEvent) cur).getEventType() == ApiEventType.CANCEL) {
- if (existingCancelId != null) {
- throw new EntitlementError(String.format("Found multiple cancel active events for subscriptions %s", subscriptionId.toString()));
- }
- existingCancelId = cur.getId();
- }
- }
+ public List<EntitlementEvent> getEventsForSubscription(UUID subscriptionId);
- if (existingCancelId != null) {
- dao.unactiveEvent(existingCancelId.toString(), now);
- for (IEntitlementEvent cur : uncancelEvents) {
- dao.insertEvent(cur);
- }
- }
- return null;
- }
- });
- }
+ public List<EntitlementEvent> getPendingEventsForSubscription(UUID subscriptionId);
- @Override
- public void changePlan(final UUID subscriptionId, final List<IEntitlementEvent> changeEvents) {
- eventsDao.inTransaction(new Transaction<Void, IEventSqlDao>() {
- @Override
- public Void inTransaction(IEventSqlDao dao,
- TransactionStatus status) throws Exception {
- cancelNextChangeEventFromTransaction(subscriptionId, dao);
- cancelNextPhaseEventFromTransaction(subscriptionId, dao);
- for (IEntitlementEvent cur : changeEvents) {
- dao.insertEvent(cur);
- }
- return null;
- }
- });
- }
+ public List<EntitlementEvent> getEventsReady(UUID ownerId, int sequenceId);
- private void cancelNextPhaseEventFromTransaction(final UUID subscriptionId, final IEventSqlDao dao) {
- cancelFutureEventFromTransaction(subscriptionId, dao, EventType.PHASE, null);
- }
+ public void clearEventsReady(UUID ownerId, Collection<EntitlementEvent> cleared);
- private void cancelNextChangeEventFromTransaction(final UUID subscriptionId, final IEventSqlDao dao) {
- cancelFutureEventFromTransaction(subscriptionId, dao, EventType.API_USER, ApiEventType.CHANGE);
- }
+ // Subscription creation, cancellation, changePlan apis
+ public Subscription createSubscription(SubscriptionData subscription, List<EntitlementEvent> initialEvents);
- private void cancelFutureEventFromTransaction(final UUID subscriptionId, final IEventSqlDao dao, EventType type, ApiEventType apiType) {
+ public void cancelSubscription(UUID subscriptionId, EntitlementEvent cancelEvent);
- UUID futureEventId = null;
- Date now = clock.getUTCNow().toDate();
- List<IEntitlementEvent> events = dao.getFutureActiveEventForSubscription(subscriptionId.toString(), now);
- for (IEntitlementEvent cur : events) {
- if (cur.getType() == type &&
- (apiType == null || apiType == ((IApiEvent) cur).getEventType() )) {
- if (futureEventId != null) {
- throw new EntitlementError(
- String.format("Found multiple future events for type %s for subscriptions %s",
- type, subscriptionId.toString()));
- }
- futureEventId = cur.getId();
- }
- }
+ public void uncancelSubscription(UUID subscriptionId, List<EntitlementEvent> uncancelEvents);
- if (futureEventId != null) {
- dao.unactiveEvent(futureEventId.toString(), now);
- }
- }
+ public void changePlan(UUID subscriptionId, List<EntitlementEvent> changeEvents);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
new file mode 100644
index 0000000..88410a2
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
@@ -0,0 +1,325 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.engine.dao;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
+
+import org.skife.jdbi.v2.DBI;
+import org.skife.jdbi.v2.Transaction;
+import org.skife.jdbi.v2.TransactionStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.config.EntitlementConfig;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.api.user.SubscriptionBuilder;
+import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
+import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
+import com.ning.billing.entitlement.events.user.ApiEventType;
+import com.ning.billing.entitlement.events.user.ApiEvent;
+import com.ning.billing.entitlement.exceptions.EntitlementError;
+import com.ning.billing.util.Hostname;
+import com.ning.billing.util.clock.Clock;
+
+public class EntitlementSqlDao implements EntitlementDao {
+
+ private final static Logger log = LoggerFactory.getLogger(EntitlementSqlDao.class);
+
+ private final Clock clock;
+ private final SubscriptionSqlDao subscriptionsDao;
+ private final BundleSqlDao bundlesDao;
+ private final EventSqlDao eventsDao;
+ private final EntitlementConfig config;
+ private final String hostname;
+
+ @Inject
+ public EntitlementSqlDao(DBI dbi, Clock clock, EntitlementConfig config) {
+ this.clock = clock;
+ this.config = config;
+ this.subscriptionsDao = dbi.onDemand(SubscriptionSqlDao.class);
+ this.eventsDao = dbi.onDemand(EventSqlDao.class);
+ this.bundlesDao = dbi.onDemand(BundleSqlDao.class);
+ this.hostname = Hostname.get();
+ }
+
+ @Override
+ public List<SubscriptionBundle> getSubscriptionBundleForAccount(
+ UUID accountId) {
+ return bundlesDao.getBundleFromAccount(accountId.toString());
+ }
+
+ @Override
+ public SubscriptionBundle getSubscriptionBundleFromId(UUID bundleId) {
+ return bundlesDao.getBundleFromId(bundleId.toString());
+ }
+
+ @Override
+ public SubscriptionBundle createSubscriptionBundle(SubscriptionBundleData bundle) {
+ bundlesDao.insertBundle(bundle);
+ return bundle;
+ }
+
+ @Override
+ public Subscription getSubscriptionFromId(UUID subscriptionId) {
+ return subscriptionsDao.getSubscriptionFromId(subscriptionId.toString());
+ }
+
+ @Override
+ public Subscription getBaseSubscription(final UUID bundleId) {
+
+ List<Subscription> subscriptions = subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString());
+ for (Subscription cur : subscriptions) {
+ if (((SubscriptionData)cur).getCategory() == ProductCategory.BASE) {
+ return cur;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List<Subscription> getSubscriptions(UUID bundleId) {
+ return subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString());
+ }
+
+ @Override
+ public List<Subscription> getSubscriptionsForKey(String bundleKey) {
+ SubscriptionBundle bundle = bundlesDao.getBundleFromKey(bundleKey);
+ if (bundle == null) {
+ return Collections.emptyList();
+ }
+ return subscriptionsDao.getSubscriptionsFromBundleId(bundle.getId().toString());
+ }
+
+ @Override
+ public void updateSubscription(SubscriptionData subscription) {
+ Date ctd = (subscription.getChargedThroughDate() != null) ? subscription.getChargedThroughDate().toDate() : null;
+ Date ptd = (subscription.getPaidThroughDate() != null) ? subscription.getPaidThroughDate().toDate() : null;
+ subscriptionsDao.updateSubscription(subscription.getId().toString(), subscription.getActiveVersion(), ctd, ptd);
+ }
+
+ @Override
+ public void createNextPhaseEvent(final UUID subscriptionId, final EntitlementEvent nextPhase) {
+ eventsDao.inTransaction(new Transaction<Void, EventSqlDao>() {
+
+ @Override
+ public Void inTransaction(EventSqlDao dao,
+ TransactionStatus status) throws Exception {
+ cancelNextPhaseEventFromTransaction(subscriptionId, dao);
+ dao.insertEvent(nextPhase);
+ return null;
+ }
+ });
+ }
+
+
+ @Override
+ public List<EntitlementEvent> getEventsForSubscription(UUID subscriptionId) {
+ List<EntitlementEvent> events = eventsDao.getEventsForSubscription(subscriptionId.toString());
+ return events;
+ }
+
+ @Override
+ public List<EntitlementEvent> getPendingEventsForSubscription(UUID subscriptionId) {
+ Date now = clock.getUTCNow().toDate();
+ List<EntitlementEvent> results = eventsDao.getFutureActiveEventForSubscription(subscriptionId.toString(), now);
+ return results;
+ }
+
+ @Override
+ public List<EntitlementEvent> getEventsReady(final UUID ownerId, final int sequenceId) {
+
+ final Date now = clock.getUTCNow().toDate();
+ final Date nextAvailable = clock.getUTCNow().plus(config.getDaoClaimTimeMs()).toDate();
+
+ log.debug(String.format("EntitlementDao getEventsReady START effectiveNow = %s", now));
+
+ List<EntitlementEvent> events = eventsDao.inTransaction(new Transaction<List<EntitlementEvent>, EventSqlDao>() {
+
+ @Override
+ public List<EntitlementEvent> inTransaction(EventSqlDao dao,
+ TransactionStatus status) throws Exception {
+
+ List<EntitlementEvent> claimedEvents = new ArrayList<EntitlementEvent>();
+ List<EntitlementEvent> input = dao.getReadyEvents(now, config.getDaoMaxReadyEvents());
+ for (EntitlementEvent cur : input) {
+ final boolean claimed = (dao.claimEvent(ownerId.toString(), nextAvailable, cur.getId().toString(), now) == 1);
+ if (claimed) {
+ claimedEvents.add(cur);
+ dao.insertClaimedHistory(sequenceId, ownerId.toString(), hostname, now, cur.getId().toString());
+ }
+ }
+ return claimedEvents;
+ }
+ });
+
+ for (EntitlementEvent cur : events) {
+ log.debug(String.format("EntitlementDao %s [host %s] claimed events %s", ownerId, hostname, cur.getId()));
+ if (cur.getOwner() != null && !cur.getOwner().equals(ownerId)) {
+ log.warn(String.format("EventProcessor %s stealing event %s from %s", ownerId, cur, cur.getOwner()));
+ }
+ }
+ return events;
+ }
+
+ @Override
+ public void clearEventsReady(final UUID ownerId, final Collection<EntitlementEvent> cleared) {
+
+ log.debug(String.format("EntitlementDao clearEventsReady START cleared size = %d", cleared.size()));
+
+ eventsDao.inTransaction(new Transaction<Void, EventSqlDao>() {
+
+ @Override
+ public Void inTransaction(EventSqlDao dao,
+ TransactionStatus status) throws Exception {
+ // STEPH Same here batch would nice
+ for (EntitlementEvent cur : cleared) {
+ dao.clearEvent(cur.getId().toString(), ownerId.toString());
+ log.debug(String.format("EntitlementDao %s [host %s] cleared events %s", ownerId, hostname, cur.getId()));
+ }
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public Subscription createSubscription(final SubscriptionData subscription,
+ final List<EntitlementEvent> initialEvents) {
+
+ subscriptionsDao.inTransaction(new Transaction<Void, SubscriptionSqlDao>() {
+
+ @Override
+ public Void inTransaction(SubscriptionSqlDao dao,
+ TransactionStatus status) throws Exception {
+
+ dao.insertSubscription(subscription);
+ // STEPH batch as well
+ EventSqlDao eventsDaoFromSameTranscation = dao.become(EventSqlDao.class);
+ for (EntitlementEvent cur : initialEvents) {
+ eventsDaoFromSameTranscation.insertEvent(cur);
+ }
+ return null;
+ }
+ });
+ return new SubscriptionData(new SubscriptionBuilder(subscription), true);
+ }
+
+ @Override
+ public void cancelSubscription(final UUID subscriptionId, final EntitlementEvent cancelEvent) {
+
+ eventsDao.inTransaction(new Transaction<Void, EventSqlDao>() {
+ @Override
+ public Void inTransaction(EventSqlDao dao,
+ TransactionStatus status) throws Exception {
+ cancelNextChangeEventFromTransaction(subscriptionId, dao);
+ cancelNextPhaseEventFromTransaction(subscriptionId, dao);
+ dao.insertEvent(cancelEvent);
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public void uncancelSubscription(final UUID subscriptionId, final List<EntitlementEvent> uncancelEvents) {
+
+ eventsDao.inTransaction(new Transaction<Void, EventSqlDao>() {
+
+ @Override
+ public Void inTransaction(EventSqlDao dao,
+ TransactionStatus status) throws Exception {
+
+ UUID existingCancelId = null;
+ Date now = clock.getUTCNow().toDate();
+ List<EntitlementEvent> events = dao.getFutureActiveEventForSubscription(subscriptionId.toString(), now);
+
+ for (EntitlementEvent cur : events) {
+ if (cur.getType() == EventType.API_USER && ((ApiEvent) cur).getEventType() == ApiEventType.CANCEL) {
+ if (existingCancelId != null) {
+ throw new EntitlementError(String.format("Found multiple cancel active events for subscriptions %s", subscriptionId.toString()));
+ }
+ existingCancelId = cur.getId();
+ }
+ }
+
+ if (existingCancelId != null) {
+ dao.unactiveEvent(existingCancelId.toString(), now);
+ for (EntitlementEvent cur : uncancelEvents) {
+ dao.insertEvent(cur);
+ }
+ }
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public void changePlan(final UUID subscriptionId, final List<EntitlementEvent> changeEvents) {
+ eventsDao.inTransaction(new Transaction<Void, EventSqlDao>() {
+ @Override
+ public Void inTransaction(EventSqlDao dao,
+ TransactionStatus status) throws Exception {
+ cancelNextChangeEventFromTransaction(subscriptionId, dao);
+ cancelNextPhaseEventFromTransaction(subscriptionId, dao);
+ for (EntitlementEvent cur : changeEvents) {
+ dao.insertEvent(cur);
+ }
+ return null;
+ }
+ });
+ }
+
+ private void cancelNextPhaseEventFromTransaction(final UUID subscriptionId, final EventSqlDao dao) {
+ cancelFutureEventFromTransaction(subscriptionId, dao, EventType.PHASE, null);
+ }
+
+ private void cancelNextChangeEventFromTransaction(final UUID subscriptionId, final EventSqlDao dao) {
+ cancelFutureEventFromTransaction(subscriptionId, dao, EventType.API_USER, ApiEventType.CHANGE);
+ }
+
+ private void cancelFutureEventFromTransaction(final UUID subscriptionId, final EventSqlDao dao, EventType type, ApiEventType apiType) {
+
+ UUID futureEventId = null;
+ Date now = clock.getUTCNow().toDate();
+ List<EntitlementEvent> events = dao.getFutureActiveEventForSubscription(subscriptionId.toString(), now);
+ for (EntitlementEvent cur : events) {
+ if (cur.getType() == type &&
+ (apiType == null || apiType == ((ApiEvent) cur).getEventType() )) {
+ if (futureEventId != null) {
+ throw new EntitlementError(
+ String.format("Found multiple future events for type %s for subscriptions %s",
+ type, subscriptionId.toString()));
+ }
+ futureEventId = cur.getId();
+ }
+ }
+
+ if (futureEventId != null) {
+ dao.unactiveEvent(futureEventId.toString(), now);
+ }
+ }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBase.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBase.java
index 845455d..d2a8f61 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBase.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBase.java
@@ -21,11 +21,11 @@ import java.util.UUID;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.IPlan;
-import com.ning.billing.entitlement.events.IEventLifecycle.IEventLifecycleState;
-import com.ning.billing.entitlement.events.user.IApiEvent;
+import com.ning.billing.entitlement.events.EventLifecycle.EventLifecycleState;
+import com.ning.billing.entitlement.events.user.ApiEvent;
import com.ning.billing.entitlement.exceptions.EntitlementError;
-public abstract class EventBase implements IEntitlementEvent {
+public abstract class EventBase implements EntitlementEvent {
private final UUID uuid;
private final UUID subscriptionId;
@@ -38,7 +38,7 @@ public abstract class EventBase implements IEntitlementEvent {
private boolean isActive;
private UUID processingOwner;
private DateTime nextAvailableProcessingTime;
- private IEventLifecycleState processingState;
+ private EventLifecycleState processingState;
public EventBase(EventBaseBuilder builder) {
this.uuid = builder.getUuid();
@@ -57,14 +57,14 @@ public abstract class EventBase implements IEntitlementEvent {
public EventBase(UUID subscriptionId, DateTime requestedDate,
DateTime effectiveDate, DateTime processedDate,
long activeVersion, boolean isActive) {
- this(subscriptionId, requestedDate, effectiveDate, processedDate, activeVersion, isActive, null, null, IEventLifecycleState.AVAILABLE);
+ this(subscriptionId, requestedDate, effectiveDate, processedDate, activeVersion, isActive, null, null, EventLifecycleState.AVAILABLE);
}
private EventBase(UUID subscriptionId, DateTime requestedDate,
DateTime effectiveDate, DateTime processedDate,
long activeVersion, boolean isActive,
UUID processingOwner, DateTime nextAvailableProcessingTime,
- IEventLifecycleState processingState) {
+ EventLifecycleState processingState) {
this(UUID.randomUUID(), subscriptionId, requestedDate, effectiveDate, processedDate, activeVersion, isActive,
processingOwner, nextAvailableProcessingTime, processingState);
}
@@ -73,7 +73,7 @@ public abstract class EventBase implements IEntitlementEvent {
DateTime effectiveDate, DateTime processedDate,
long activeVersion, boolean isActive,
UUID processingOwner, DateTime nextAvailableProcessingTime,
- IEventLifecycleState processingState) {
+ EventLifecycleState processingState) {
this.uuid = id;
this.subscriptionId = subscriptionId;
this.requestedDate = requestedDate;
@@ -163,12 +163,12 @@ public abstract class EventBase implements IEntitlementEvent {
@Override
- public IEventLifecycleState getProcessingState() {
+ public EventLifecycleState getProcessingState() {
return processingState;
}
@Override
- public void setProcessingState(IEventLifecycleState processingState) {
+ public void setProcessingState(EventLifecycleState processingState) {
this.processingState = processingState;
}
@@ -207,7 +207,7 @@ public abstract class EventBase implements IEntitlementEvent {
// - If all that is not enough return consistent by random ordering based on UUID
//
@Override
- public int compareTo(IEntitlementEvent other) {
+ public int compareTo(EntitlementEvent other) {
if (other == null) {
throw new NullPointerException("IEvent is compared to a null instance");
}
@@ -227,7 +227,7 @@ public abstract class EventBase implements IEntitlementEvent {
} else if (getType() != other.getType()) {
return (getType() == EventType.PHASE) ? -1 : 1;
} else if (getType() == EventType.API_USER) {
- return ((IApiEvent) this).getEventType().compareTo(((IApiEvent) other).getEventType());
+ return ((ApiEvent) this).getEventType().compareTo(((ApiEvent) other).getEventType());
} else {
return uuid.compareTo(other.getId());
}
@@ -236,10 +236,10 @@ public abstract class EventBase implements IEntitlementEvent {
@Override
public boolean equals(Object other) {
- if (! (other instanceof IEntitlementEvent)) {
+ if (! (other instanceof EntitlementEvent)) {
return false;
}
- return (this.compareTo((IEntitlementEvent) other) == 0);
+ return (this.compareTo((EntitlementEvent) other) == 0);
}
@Override
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
index a66b101..e003e35 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
@@ -20,7 +20,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
-import com.ning.billing.entitlement.events.IEventLifecycle.IEventLifecycleState;
+import com.ning.billing.entitlement.events.EventLifecycle.EventLifecycleState;
@SuppressWarnings("unchecked")
public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
@@ -35,13 +35,13 @@ public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
private boolean isActive;
private UUID processingOwner;
private DateTime nextAvailableProcessingTime;
- private IEventLifecycleState processingState;
+ private EventLifecycleState processingState;
public EventBaseBuilder() {
this.uuid = UUID.randomUUID();
this.isActive = true;
- this.processingState = IEventLifecycleState.AVAILABLE;
+ this.processingState = EventLifecycleState.AVAILABLE;
}
public EventBaseBuilder(EventBaseBuilder<?> copy) {
@@ -103,7 +103,7 @@ public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
return (T) this;
}
- public T setProcessingState(IEventLifecycleState processingState) {
+ public T setProcessingState(EventLifecycleState processingState) {
this.processingState = processingState;
return (T) this;
}
@@ -144,7 +144,7 @@ public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
return nextAvailableProcessingTime;
}
- public IEventLifecycleState getProcessingState() {
+ public EventLifecycleState getProcessingState() {
return processingState;
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/phase/PhaseEvent.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/phase/PhaseEvent.java
index 7c2d228..8e9ab2c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/phase/PhaseEvent.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/phase/PhaseEvent.java
@@ -16,56 +16,9 @@
package com.ning.billing.entitlement.events.phase;
+import com.ning.billing.entitlement.events.EntitlementEvent;
-import org.joda.time.DateTime;
+public interface PhaseEvent extends EntitlementEvent {
-import com.ning.billing.entitlement.alignment.IPlanAligner.TimedPhase;
-import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.entitlement.events.EventBase;
-
-
-public class PhaseEvent extends EventBase implements IPhaseEvent {
-
- private final String phaseName;
-
- public PhaseEvent(PhaseEventBuilder builder) {
- super(builder);
- this.phaseName = builder.getPhaseName();
- }
-
- @Override
- public EventType getType() {
- return EventType.PHASE;
- }
-
- @Override
- public String getPhase() {
- return phaseName;
- }
-
- @Override
- public String toString() {
- return "PhaseEvent [getId()= " + getId()
- + ", phaseName=" + phaseName
- + ", getType()=" + getType()
- + ", getPhase()=" + getPhase()
- + ", getRequestedDate()=" + getRequestedDate()
- + ", getEffectiveDate()=" + getEffectiveDate()
- + ", getActiveVersion()=" + getActiveVersion()
- + ", getProcessedDate()=" + getProcessedDate()
- + ", getSubscriptionId()=" + getSubscriptionId()
- + ", isActive()=" + isActive() + "]\n";
- }
-
- public static final IPhaseEvent getNextPhaseEvent(TimedPhase nextTimedPhase, Subscription subscription, DateTime now) {
- return (nextTimedPhase == null) ?
- null :
- new PhaseEvent(new PhaseEventBuilder()
- .setSubscriptionId(subscription.getId())
- .setRequestedDate(now)
- .setEffectiveDate(nextTimedPhase.getStartPhase())
- .setProcessedDate(now)
- .setActiveVersion(subscription.getActiveVersion())
- .setPhaseName(nextTimedPhase.getPhase().getName()));
- }
+ public String getPhase();
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/phase/PhaseEventData.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/phase/PhaseEventData.java
new file mode 100644
index 0000000..873fb6d
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/phase/PhaseEventData.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.events.phase;
+
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.entitlement.alignment.TimedPhase;
+import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.events.EventBase;
+
+
+public class PhaseEventData extends EventBase implements PhaseEvent {
+
+ private final String phaseName;
+
+ public PhaseEventData(PhaseEventBuilder builder) {
+ super(builder);
+ this.phaseName = builder.getPhaseName();
+ }
+
+ @Override
+ public EventType getType() {
+ return EventType.PHASE;
+ }
+
+ @Override
+ public String getPhase() {
+ return phaseName;
+ }
+
+ @Override
+ public String toString() {
+ return "PhaseEvent [getId()= " + getId()
+ + ", phaseName=" + phaseName
+ + ", getType()=" + getType()
+ + ", getPhase()=" + getPhase()
+ + ", getRequestedDate()=" + getRequestedDate()
+ + ", getEffectiveDate()=" + getEffectiveDate()
+ + ", getActiveVersion()=" + getActiveVersion()
+ + ", getProcessedDate()=" + getProcessedDate()
+ + ", getSubscriptionId()=" + getSubscriptionId()
+ + ", isActive()=" + isActive() + "]\n";
+ }
+
+ public static final PhaseEvent getNextPhaseEvent(TimedPhase nextTimedPhase, SubscriptionData subscription, DateTime now) {
+ return (nextTimedPhase == null) ?
+ null :
+ new PhaseEventData(new PhaseEventBuilder()
+ .setSubscriptionId(subscription.getId())
+ .setRequestedDate(now)
+ .setEffectiveDate(nextTimedPhase.getStartPhase())
+ .setProcessedDate(now)
+ .setActiveVersion(subscription.getActiveVersion())
+ .setPhaseName(nextTimedPhase.getPhase().getName()));
+ }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/user/ApiEventBase.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/user/ApiEventBase.java
index e2be49c..d6f390e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/user/ApiEventBase.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/user/ApiEventBase.java
@@ -19,15 +19,9 @@ package com.ning.billing.entitlement.events.user;
import java.util.UUID;
import org.joda.time.DateTime;
-
-import com.ning.billing.catalog.api.IPlan;
-import com.ning.billing.entitlement.alignment.IPlanAligner;
-import com.ning.billing.entitlement.alignment.PlanAligner;
-import com.ning.billing.entitlement.engine.core.Engine;
import com.ning.billing.entitlement.events.EventBase;
-import com.ning.billing.entitlement.events.IEventLifecycle.IEventLifecycleState;
-public class ApiEventBase extends EventBase implements IApiEvent {
+public class ApiEventBase extends EventBase implements ApiEvent {
private final ApiEventType eventType;
// Only valid for CREATE/CHANGE
@@ -66,7 +60,7 @@ public class ApiEventBase extends EventBase implements IApiEvent {
public ApiEventBase(UUID id, UUID subscriptionId, DateTime processed, String eventPlan, String eventPhase,
String priceList, DateTime requestedDate, ApiEventType eventType, DateTime effectiveDate, long activeVersion,
- boolean isActive, UUID processingOwner, DateTime nextAvailableProcessingTime,IEventLifecycleState processingState) {
+ boolean isActive, UUID processingOwner, DateTime nextAvailableProcessingTime,EventLifecycleState processingState) {
super(id, subscriptionId, requestedDate, effectiveDate, processed, activeVersion, isActive, processingOwner, nextAvailableProcessingTime, processingState);
this.eventType = eventType;
this.eventPlan = eventPlan;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/user/ApiEventType.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/user/ApiEventType.java
index 3d66a5b..c28941e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/user/ApiEventType.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/user/ApiEventType.java
@@ -16,7 +16,7 @@
package com.ning.billing.entitlement.events.user;
-import com.ning.billing.entitlement.api.user.ISubscriptionTransition.SubscriptionTransitionType;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
public enum ApiEventType {
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 89b58c8..334de2d 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
@@ -19,23 +19,22 @@ package com.ning.billing.entitlement.glue;
import org.skife.config.ConfigurationObjectFactory;
import com.google.inject.AbstractModule;
-import com.ning.billing.config.IEntitlementConfig;
-import com.ning.billing.entitlement.alignment.IPlanAligner;
+import com.ning.billing.config.EntitlementConfig;
import com.ning.billing.entitlement.alignment.PlanAligner;
-import com.ning.billing.entitlement.api.IEntitlementService;
+import com.ning.billing.entitlement.api.EntitlementService;
+import com.ning.billing.entitlement.api.billing.DefaultEntitlementBillingApi;
import com.ning.billing.entitlement.api.billing.EntitlementBillingApi;
-import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
+import com.ning.billing.entitlement.api.test.DefaultEntitlementTestApi;
import com.ning.billing.entitlement.api.test.EntitlementTestApi;
-import com.ning.billing.entitlement.api.test.IEntitlementTestApi;
+import com.ning.billing.entitlement.api.user.DefaultEntitlementUserApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
-import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
-import com.ning.billing.entitlement.engine.core.ApiEventProcessor;
+import com.ning.billing.entitlement.engine.core.DefaultApiEventProcessor;
import com.ning.billing.entitlement.engine.core.Engine;
-import com.ning.billing.entitlement.engine.core.IApiEventProcessor;
+import com.ning.billing.entitlement.engine.core.EventNotifier;
+import com.ning.billing.entitlement.engine.dao.EntitlementSqlDao;
import com.ning.billing.entitlement.engine.dao.EntitlementDao;
-import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
+import com.ning.billing.util.clock.DefaultClock;
import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.clock.IClock;
@@ -43,29 +42,29 @@ public class EntitlementModule extends AbstractModule {
protected void installClock() {
- bind(IClock.class).to(Clock.class).asEagerSingleton();
+ bind(Clock.class).to(DefaultClock.class).asEagerSingleton();
}
protected void installConfig() {
- final IEntitlementConfig config = new ConfigurationObjectFactory(System.getProperties()).build(IEntitlementConfig.class);
- bind(IEntitlementConfig.class).toInstance(config);
+ final EntitlementConfig config = new ConfigurationObjectFactory(System.getProperties()).build(EntitlementConfig.class);
+ bind(EntitlementConfig.class).toInstance(config);
}
protected void installApiEventProcessor() {
- bind(IApiEventProcessor.class).to(ApiEventProcessor.class).asEagerSingleton();
+ bind(EventNotifier.class).to(DefaultApiEventProcessor.class).asEagerSingleton();
}
protected void installEntitlementDao() {
- bind(IEntitlementDao.class).to(EntitlementDao.class).asEagerSingleton();
+ bind(EntitlementDao.class).to(EntitlementSqlDao.class).asEagerSingleton();
}
protected void installEntitlementCore() {
- bind(IEntitlementService.class).to(Engine.class).asEagerSingleton();
+ bind(EntitlementService.class).to(Engine.class).asEagerSingleton();
bind(Engine.class).asEagerSingleton();
- bind(IPlanAligner.class).to(PlanAligner.class).asEagerSingleton();
- bind(IEntitlementTestApi.class).to(EntitlementTestApi.class).asEagerSingleton();
- bind(IEntitlementUserApi.class).to(EntitlementUserApi.class).asEagerSingleton();
- bind(IEntitlementBillingApi.class).to(EntitlementBillingApi.class).asEagerSingleton();
+ bind(PlanAligner.class).asEagerSingleton();
+ bind(EntitlementTestApi.class).to(DefaultEntitlementTestApi.class).asEagerSingleton();
+ bind(EntitlementUserApi.class).to(DefaultEntitlementUserApi.class).asEagerSingleton();
+ bind(EntitlementBillingApi.class).to(DefaultEntitlementBillingApi.class).asEagerSingleton();
}
protected void installInjectorMagic() {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/InjectorMagic.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/InjectorMagic.java
index 8e845da..5235419 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/InjectorMagic.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/InjectorMagic.java
@@ -20,9 +20,9 @@ import com.google.inject.Inject;
import com.google.inject.Injector;
import com.ning.billing.catalog.api.ICatalog;
import com.ning.billing.catalog.api.ICatalogService;
-import com.ning.billing.entitlement.alignment.IPlanAligner;
-import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
-import com.ning.billing.util.clock.IClock;
+import com.ning.billing.entitlement.alignment.PlanAligner;
+import com.ning.billing.entitlement.engine.dao.EntitlementDao;
+import com.ning.billing.util.clock.Clock;
//
// Allows to return Guice injected singleton in a non guice context
@@ -45,8 +45,8 @@ public class InjectorMagic {
}
- public static IClock getClock() {
- return InjectorMagic.get().getInstance(IClock.class);
+ public static Clock getClock() {
+ return InjectorMagic.get().getInstance(Clock.class);
}
public static ICatalog getCatlog() {
@@ -54,12 +54,12 @@ public class InjectorMagic {
return catalogService.getCatalog();
}
- public static IEntitlementDao getEntitlementDao() {
- return InjectorMagic.get().getInstance(IEntitlementDao.class);
+ public static EntitlementDao getEntitlementDao() {
+ return InjectorMagic.get().getInstance(EntitlementDao.class);
}
- public static IPlanAligner getPlanAligner() {
- return InjectorMagic.get().getInstance(IPlanAligner.class);
+ public static PlanAligner getPlanAligner() {
+ return InjectorMagic.get().getInstance(PlanAligner.class);
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/ApiTestListener.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/ApiTestListener.java
index 1ba79af..b14bf38 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/ApiTestListener.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/ApiTestListener.java
@@ -28,8 +28,8 @@ import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.google.common.eventbus.Subscribe;
-import com.ning.billing.entitlement.api.user.ISubscriptionTransition;
-import com.ning.billing.util.eventbus.IEventBus;
+import com.ning.billing.entitlement.api.user.SubscriptionTransition;
+import com.ning.billing.util.eventbus.EventBus;
public class ApiTestListener {
@@ -48,13 +48,13 @@ public class ApiTestListener {
PHASE
}
- public ApiTestListener(IEventBus eventBus) {
+ public ApiTestListener(EventBus eventBus) {
this.nextExpectedEvent = new Stack<NextEvent>();
this.completed = false;
}
@Subscribe
- public void handleEntitlementEvent(ISubscriptionTransition event) {
+ public void handleEntitlementEvent(SubscriptionTransition event) {
switch (event.getTransitionType()) {
case CREATE:
subscriptionCreated(event);
@@ -139,35 +139,35 @@ public class ApiTestListener {
}
- public void subscriptionCreated(ISubscriptionTransition created) {
+ public void subscriptionCreated(SubscriptionTransition created) {
log.debug("-> Got event CREATED");
assertEqualsNicely(NextEvent.CREATE);
notifyIfStackEmpty();
}
- public void subscriptionCancelled(ISubscriptionTransition cancelled) {
+ public void subscriptionCancelled(SubscriptionTransition cancelled) {
log.debug("-> Got event CANCEL");
assertEqualsNicely(NextEvent.CANCEL);
notifyIfStackEmpty();
}
- public void subscriptionChanged(ISubscriptionTransition changed) {
+ public void subscriptionChanged(SubscriptionTransition changed) {
log.debug("-> Got event CHANGE");
assertEqualsNicely(NextEvent.CHANGE);
notifyIfStackEmpty();
}
- public void subscriptionPaused(ISubscriptionTransition paused) {
+ public void subscriptionPaused(SubscriptionTransition paused) {
log.debug("-> Got event PAUSE");
assertEqualsNicely(NextEvent.PAUSE);
notifyIfStackEmpty();
}
- public void subscriptionResumed(ISubscriptionTransition resumed) {
+ public void subscriptionResumed(SubscriptionTransition resumed) {
log.debug("-> Got event RESUME");
assertEqualsNicely(NextEvent.RESUME);
notifyIfStackEmpty();
@@ -175,7 +175,7 @@ public class ApiTestListener {
public void subscriptionPhaseChanged(
- ISubscriptionTransition phaseChanged) {
+ SubscriptionTransition phaseChanged) {
log.debug("-> Got event PHASE");
assertEqualsNicely(NextEvent.PHASE);
notifyIfStackEmpty();
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 4ba28c3..477075b 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
@@ -20,24 +20,24 @@ import com.google.inject.Injector;
import com.ning.billing.account.api.IAccount;
import com.ning.billing.catalog.CatalogService;
import com.ning.billing.catalog.api.*;
-import com.ning.billing.config.IEntitlementConfig;
+import com.ning.billing.config.EntitlementConfig;
import com.ning.billing.entitlement.api.ApiTestListener;
import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
-import com.ning.billing.entitlement.api.IEntitlementService;
-import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
+import com.ning.billing.entitlement.api.EntitlementService;
+import com.ning.billing.entitlement.api.billing.EntitlementBillingApi;
import com.ning.billing.entitlement.engine.core.Engine;
-import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
-import com.ning.billing.entitlement.engine.dao.IEntitlementDaoMock;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
-import com.ning.billing.entitlement.events.phase.IPhaseEvent;
+import com.ning.billing.entitlement.engine.dao.EntitlementDao;
+import com.ning.billing.entitlement.engine.dao.MockEntitlementDao;
+import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.entitlement.events.phase.PhaseEvent;
import com.ning.billing.entitlement.events.user.ApiEventType;
-import com.ning.billing.entitlement.events.user.IApiEvent;
+import com.ning.billing.entitlement.events.user.ApiEvent;
import com.ning.billing.entitlement.glue.InjectorMagic;
-import com.ning.billing.lifecycle.IService.ServiceException;
+import com.ning.billing.lifecycle.KillbillService.ServiceException;
import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.clock.IClock;
+import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.eventbus.DefaultEventBusService;
import com.ning.billing.util.eventbus.EventBusService;
-import com.ning.billing.util.eventbus.IEventBusService;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,19 +63,19 @@ public abstract class TestUserApiBase {
protected static final long DAY_IN_MS = (24 * 3600 * 1000);
- protected IEntitlementService entitlementService;
- protected IEntitlementUserApi entitlementApi;
- protected IEntitlementBillingApi billingApi;
+ protected EntitlementService entitlementService;
+ protected EntitlementUserApi entitlementApi;
+ protected EntitlementBillingApi billingApi;
protected ICatalogService catalogService;
- protected IEntitlementConfig config;
- protected IEntitlementDao dao;
+ protected EntitlementConfig config;
+ protected EntitlementDao dao;
protected ClockMock clock;
- protected IEventBusService busService;
+ protected EventBusService busService;
protected IAccount account;
protected ICatalog catalog;
protected ApiTestListener testListener;
- protected ISubscriptionBundle bundle;
+ protected SubscriptionBundle bundle;
public static void loadSystemPropertiesFromClasspath( final String resource )
{
@@ -94,7 +94,7 @@ public abstract class TestUserApiBase {
try {
InjectorMagic.instance = null;
busService.getEventBus().register(testListener);
- ((EventBusService) busService).stopBus();
+ ((DefaultEventBusService) busService).stopBus();
} catch (Exception e) {
log.warn("Failed to tearDown test properly ", e);
}
@@ -107,16 +107,16 @@ public abstract class TestUserApiBase {
loadSystemPropertiesFromClasspath("/entitlement.properties");
final Injector g = getInjector();
- entitlementService = g.getInstance(IEntitlementService.class);
+ entitlementService = g.getInstance(EntitlementService.class);
catalogService = g.getInstance(ICatalogService.class);
- busService = g.getInstance(IEventBusService.class);
- config = g.getInstance(IEntitlementConfig.class);
- dao = g.getInstance(IEntitlementDao.class);
- clock = (ClockMock) g.getInstance(IClock.class);
+ busService = g.getInstance(EventBusService.class);
+ config = g.getInstance(EntitlementConfig.class);
+ dao = g.getInstance(EntitlementDao.class);
+ clock = (ClockMock) g.getInstance(Clock.class);
try {
((CatalogService) catalogService).loadCatalog();
- ((EventBusService) busService).startBus();
+ ((DefaultEventBusService) busService).startBus();
((Engine) entitlementService).initialize();
init();
} catch (EntitlementUserApiException e) {
@@ -151,7 +151,7 @@ public abstract class TestUserApiBase {
testListener.reset();
clock.resetDeltaFromReality();
- ((IEntitlementDaoMock) dao).reset();
+ ((MockEntitlementDao) dao).reset();
try {
busService.getEventBus().register(testListener);
bundle = entitlementApi.createBundleForAccount(account, "myDefaultBundle");
@@ -193,17 +193,17 @@ public abstract class TestUserApiBase {
}
}
- protected Subscription createSubscription(String productName, BillingPeriod term, String planSet) throws EntitlementUserApiException {
+ protected SubscriptionData createSubscription(String productName, BillingPeriod term, String planSet) throws EntitlementUserApiException {
testListener.pushExpectedEvent(NextEvent.CREATE);
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSet, clock.getUTCNow());
+ SubscriptionData subscription = (SubscriptionData) entitlementApi.createSubscription(bundle.getId(), productName, term, planSet, clock.getUTCNow());
assertNotNull(subscription);
assertTrue(testListener.isCompleted(5000));
return subscription;
}
- protected void checkNextPhaseChange(Subscription subscription, int expPendingEvents, DateTime expPhaseChange) {
+ protected void checkNextPhaseChange(SubscriptionData subscription, int expPendingEvents, DateTime expPhaseChange) {
- List<IEntitlementEvent> events = dao.getPendingEventsForSubscription(subscription.getId());
+ List<EntitlementEvent> events = dao.getPendingEventsForSubscription(subscription.getId());
assertNotNull(events);
printEvents(events);
assertEquals(events.size(), expPendingEvents);
@@ -211,13 +211,13 @@ public abstract class TestUserApiBase {
boolean foundPhase = false;
boolean foundChange = false;
- for (IEntitlementEvent cur : events) {
- if (cur instanceof IPhaseEvent) {
+ for (EntitlementEvent cur : events) {
+ if (cur instanceof PhaseEvent) {
assertEquals(foundPhase, false);
foundPhase = true;
assertEquals(cur.getEffectiveDate(), expPhaseChange);
- } else if (cur instanceof IApiEvent) {
- IApiEvent uEvent = (IApiEvent) cur;
+ } else if (cur instanceof ApiEvent) {
+ ApiEvent uEvent = (ApiEvent) cur;
assertEquals(ApiEventType.CHANGE, uEvent.getEventType());
assertEquals(foundChange, false);
foundChange = true;
@@ -327,14 +327,14 @@ public abstract class TestUserApiBase {
}
- protected void printEvents(List<IEntitlementEvent> events) {
- for (IEntitlementEvent cur : events) {
+ protected void printEvents(List<EntitlementEvent> events) {
+ for (EntitlementEvent cur : events) {
log.debug("Inspect event " + cur);
}
}
- protected void printSubscriptionTransitions(List<ISubscriptionTransition> transitions) {
- for (ISubscriptionTransition cur : transitions) {
+ protected void printSubscriptionTransitions(List<SubscriptionTransition> transitions) {
+ for (SubscriptionTransition cur : transitions) {
log.debug("Transition " + cur);
}
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancel.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancel.java
index 6a8dee2..c1c025d 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancel.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancel.java
@@ -33,7 +33,7 @@ import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.IPriceListSet;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.util.clock.DefaultClock;
public abstract class TestUserApiCancel extends TestUserApiBase {
@@ -50,7 +50,7 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
String planSet = IPriceListSet.DEFAULT_PRICELIST_NAME;
// CREATE
- Subscription subscription = createSubscription(prod, term, planSet);
+ SubscriptionData subscription = createSubscription(prod, term, planSet);
IPlanPhase currentPhase = subscription.getCurrentPhase();
assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
@@ -67,7 +67,7 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
testListener.isCompleted(1000);
- List<ISubscriptionTransition> allTransitions = subscription.getActiveTransitions();
+ List<SubscriptionTransition> allTransitions = subscription.getActiveTransitions();
printSubscriptionTransitions(allTransitions);
assertNull(currentPhase);
@@ -89,12 +89,12 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
String planSet = IPriceListSet.DEFAULT_PRICELIST_NAME;
// CREATE
- Subscription subscription = createSubscription(prod, term, planSet);
+ SubscriptionData subscription = createSubscription(prod, term, planSet);
IPlanPhase trialPhase = subscription.getCurrentPhase();
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
// NEXT PHASE
- DateTime expectedPhaseTrialChange = Clock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ DateTime expectedPhaseTrialChange = DefaultClock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
// MOVE TO NEXT PHASE
@@ -106,9 +106,9 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
// SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
IDuration ctd = getDurationMonth(1);
- DateTime newChargedThroughDate = Clock.addDuration(expectedPhaseTrialChange, ctd);
+ DateTime newChargedThroughDate = DefaultClock.addDuration(expectedPhaseTrialChange, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
testListener.pushExpectedEvent(NextEvent.CANCEL);
@@ -142,12 +142,12 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
String planSet = IPriceListSet.DEFAULT_PRICELIST_NAME;
// CREATE
- Subscription subscription = createSubscription(prod, term, planSet);
+ SubscriptionData subscription = createSubscription(prod, term, planSet);
IPlanPhase trialPhase = subscription.getCurrentPhase();
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
// NEXT PHASE
- DateTime expectedPhaseTrialChange = Clock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ DateTime expectedPhaseTrialChange = DefaultClock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
// MOVE TO NEXT PHASE
@@ -186,12 +186,12 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
String planSet = IPriceListSet.DEFAULT_PRICELIST_NAME;
// CREATE
- Subscription subscription = createSubscription(prod, term, planSet);
+ SubscriptionData subscription = createSubscription(prod, term, planSet);
IPlanPhase trialPhase = subscription.getCurrentPhase();
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
// NEXT PHASE
- DateTime expectedPhaseTrialChange = Clock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ DateTime expectedPhaseTrialChange = DefaultClock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
// MOVE TO NEXT PHASE
@@ -203,9 +203,9 @@ public abstract class TestUserApiCancel extends TestUserApiBase {
// SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
IDuration ctd = getDurationMonth(1);
- DateTime newChargedThroughDate = Clock.addDuration(expectedPhaseTrialChange, ctd);
+ DateTime newChargedThroughDate = DefaultClock.addDuration(expectedPhaseTrialChange, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
testListener.pushExpectedEvent(NextEvent.CANCEL);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
index 00c2bab..66cd35a 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
@@ -21,15 +21,14 @@ import org.testng.annotations.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
-import com.ning.billing.entitlement.glue.CatalogModuleMock;
-import com.ning.billing.entitlement.glue.EngineModuleMemoryMock;
+import com.ning.billing.entitlement.glue.MockEngineModuleMemory;
public class TestUserApiCancelMemory extends TestUserApiCancel {
@Override
protected Injector getInjector() {
- return Guice.createInjector(Stage.PRODUCTION, new EngineModuleMemoryMock(), new CatalogModuleMock());
+ return Guice.createInjector(Stage.PRODUCTION, new MockEngineModuleMemory());
}
@Test(enabled=true, groups={"fast"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelSql.java
index 58e8891..83d4d8e 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelSql.java
@@ -21,8 +21,7 @@ import org.testng.annotations.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
-import com.ning.billing.entitlement.glue.CatalogModuleMock;
-import com.ning.billing.entitlement.glue.EngineModuleSqlMock;
+import com.ning.billing.entitlement.glue.MockEngineModuleSql;
public class TestUserApiCancelSql extends TestUserApiCancel {
@@ -31,7 +30,7 @@ public class TestUserApiCancelSql extends TestUserApiCancel {
@Override
public Injector getInjector() {
- return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock(), new CatalogModuleMock());
+ return Guice.createInjector(Stage.DEVELOPMENT, new MockEngineModuleSql());
}
@Test(enabled= true, groups={"stress"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
index 83c8eef..4f4d454 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
@@ -35,15 +35,15 @@ import com.ning.billing.catalog.api.IPriceListSet;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
-import com.ning.billing.entitlement.events.user.IApiEvent;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.entitlement.events.user.ApiEvent;
+import com.ning.billing.util.clock.DefaultClock;
public abstract class TestUserApiChangePlan extends TestUserApiBase {
- private void checkChangePlan(Subscription subscription, String expProduct, ProductCategory expCategory,
+ private void checkChangePlan(SubscriptionData subscription, String expProduct, ProductCategory expCategory,
BillingPeriod expBillingPeriod, PhaseType expPhase) {
IPlan currentPlan = subscription.getCurrentPlan();
@@ -72,14 +72,14 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
try {
// CREATE
- Subscription subscription = createSubscription(fromProd, fromTerm, fromPlanSet);
+ SubscriptionData subscription = createSubscription(fromProd, fromTerm, fromPlanSet);
// MOVE TO NEXT PHASE
IPlanPhase currentPhase = subscription.getCurrentPhase();
testListener.pushExpectedEvent(NextEvent.PHASE);
clock.setDeltaFromReality(currentPhase.getDuration(), DAY_IN_MS);
DateTime futureNow = clock.getUTCNow();
- DateTime nextExpectedPhaseChange = Clock.addDuration(subscription.getStartDate(), currentPhase.getDuration());
+ DateTime nextExpectedPhaseChange = DefaultClock.addDuration(subscription.getStartDate(), currentPhase.getDuration());
assertTrue(futureNow.isAfter(nextExpectedPhaseChange));
assertTrue(testListener.isCompleted(3000));
@@ -109,9 +109,9 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
try {
// CREATE
- Subscription subscription = createSubscription(fromProd, fromTerm, fromPlanSet);
+ SubscriptionData subscription = createSubscription(fromProd, fromTerm, fromPlanSet);
IPlanPhase trialPhase = subscription.getCurrentPhase();
- DateTime expectedPhaseTrialChange = Clock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ DateTime expectedPhaseTrialChange = DefaultClock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
@@ -125,12 +125,12 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
// SET CTD
IDuration ctd = getDurationMonth(1);
- DateTime newChargedThroughDate = Clock.addDuration(expectedPhaseTrialChange, ctd);
+ DateTime newChargedThroughDate = DefaultClock.addDuration(expectedPhaseTrialChange, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
// RE READ SUBSCRIPTION + CHANGE PLAN
testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
subscription.changePlan(toProd, toTerm, toPlanSet, clock.getUTCNow());
assertFalse(testListener.isCompleted(2000));
testListener.reset();
@@ -140,12 +140,12 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.DISCOUNT);
// NEXT PHASE
- DateTime nextExpectedPhaseChange = Clock.addDuration(expectedPhaseTrialChange, currentPhase.getDuration());
+ DateTime nextExpectedPhaseChange = DefaultClock.addDuration(expectedPhaseTrialChange, currentPhase.getDuration());
checkNextPhaseChange(subscription, 2, nextExpectedPhaseChange);
// ALSO VERIFY PENDING CHANGE EVENT
- List<IEntitlementEvent> events = dao.getPendingEventsForSubscription(subscription.getId());
- assertTrue(events.get(0) instanceof IApiEvent);
+ List<EntitlementEvent> events = dao.getPendingEventsForSubscription(subscription.getId());
+ assertTrue(events.get(0) instanceof ApiEvent);
// MOVE TO EOT
@@ -153,7 +153,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
clock.addDeltaFromReality(ctd);
assertTrue(testListener.isCompleted(5000));
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
currentPhase = subscription.getCurrentPhase();
checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.DISCOUNT);
@@ -175,7 +175,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
try {
- Subscription subscription = createSubscription(fromProd, fromTerm, fromPlanSet);
+ SubscriptionData subscription = createSubscription(fromProd, fromTerm, fromPlanSet);
testListener.pushExpectedEvent(NextEvent.CHANGE);
@@ -189,7 +189,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
assertTrue(testListener.isCompleted(2000));
IPlanPhase currentPhase = subscription.getCurrentPhase();
- DateTime nextExpectedPhaseChange = Clock.addDuration(subscription.getStartDate(), currentPhase.getDuration());
+ DateTime nextExpectedPhaseChange = DefaultClock.addDuration(subscription.getStartDate(), currentPhase.getDuration());
checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
// NEXT PHASE
@@ -218,9 +218,9 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
DateTime currentTime = clock.getUTCNow();
- Subscription subscription = createSubscription(fromProd, fromTerm, fromPlanSet);
+ SubscriptionData subscription = createSubscription(fromProd, fromTerm, fromPlanSet);
IPlanPhase trialPhase = subscription.getCurrentPhase();
- DateTime expectedPhaseTrialChange = Clock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ DateTime expectedPhaseTrialChange = DefaultClock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
// MOVE TO NEXT PHASE
@@ -232,11 +232,11 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
// SET CTD
IDuration ctd = getDurationMonth(1);
- DateTime newChargedThroughDate = Clock.addDuration(expectedPhaseTrialChange, ctd);
+ DateTime newChargedThroughDate = DefaultClock.addDuration(expectedPhaseTrialChange, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
// RE READ SUBSCRIPTION + CHECK CURRENT PHASE
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
IPlanPhase currentPhase = subscription.getCurrentPhase();
assertNotNull(currentPhase);
assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
@@ -273,7 +273,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
currentTime = clock.getUTCNow();
assertFalse(testListener.isCompleted(2000));
- DateTime nextExpectedPhaseChange = Clock.addDuration(newChargedThroughDate, currentPhase.getDuration());
+ DateTime nextExpectedPhaseChange = DefaultClock.addDuration(newChargedThroughDate, currentPhase.getDuration());
checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
// MOVE TIME RIGHT AFTER NEXT EXPECTED PHASE CHANGE
@@ -289,7 +289,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
protected void testMultipleChangeLastIMMReal() {
try {
- Subscription subscription = createSubscription("Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
+ SubscriptionData subscription = createSubscription("Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
IPlanPhase trialPhase = subscription.getCurrentPhase();
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
@@ -302,11 +302,11 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
List<IDuration> durationList = new ArrayList<IDuration>();
durationList.add(trialPhase.getDuration());
//durationList.add(subscription.getCurrentPhase().getDuration());
- DateTime startDiscountPhase = Clock.addDuration(subscription.getStartDate(), durationList);
+ DateTime startDiscountPhase = DefaultClock.addDuration(subscription.getStartDate(), durationList);
IDuration ctd = getDurationMonth(1);
- DateTime newChargedThroughDate = Clock.addDuration(startDiscountPhase, ctd);
+ DateTime newChargedThroughDate = DefaultClock.addDuration(startDiscountPhase, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
// CHANGE EOT
testListener.pushExpectedEvent(NextEvent.CHANGE);
@@ -337,7 +337,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
try {
- Subscription subscription = createSubscription("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount");
+ SubscriptionData subscription = createSubscription("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount");
IPlanPhase trialPhase = subscription.getCurrentPhase();
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
@@ -348,11 +348,11 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
// SET CTD
List<IDuration> durationList = new ArrayList<IDuration>();
durationList.add(trialPhase.getDuration());
- DateTime startDiscountPhase = Clock.addDuration(subscription.getStartDate(), durationList);
+ DateTime startDiscountPhase = DefaultClock.addDuration(subscription.getStartDate(), durationList);
IDuration ctd = getDurationMonth(1);
- DateTime newChargedThroughDate = Clock.addDuration(startDiscountPhase, ctd);
+ DateTime newChargedThroughDate = DefaultClock.addDuration(startDiscountPhase, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
// CHANGE EOT
testListener.pushExpectedEvent(NextEvent.CHANGE);
@@ -398,7 +398,7 @@ public abstract class TestUserApiChangePlan extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.PHASE);
clock.addDeltaFromReality(currentPhase.getDuration());
assertTrue(testListener.isCompleted(3000));
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
currentPlan = subscription.getCurrentPlan();
assertNotNull(currentPlan);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
index 8847612..341b9b6 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
@@ -21,14 +21,13 @@ import org.testng.annotations.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
-import com.ning.billing.entitlement.glue.CatalogModuleMock;
-import com.ning.billing.entitlement.glue.EngineModuleMemoryMock;
+import com.ning.billing.entitlement.glue.MockEngineModuleMemory;
public class TestUserApiChangePlanMemory extends TestUserApiChangePlan {
@Override
protected Injector getInjector() {
- return Guice.createInjector(Stage.PRODUCTION, new EngineModuleMemoryMock(), new CatalogModuleMock());
+ return Guice.createInjector(Stage.PRODUCTION, new MockEngineModuleMemory());
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java
index 60d777d..2ccf83f 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanSql.java
@@ -21,8 +21,7 @@ import org.testng.annotations.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
-import com.ning.billing.entitlement.glue.CatalogModuleMock;
-import com.ning.billing.entitlement.glue.EngineModuleSqlMock;
+import com.ning.billing.entitlement.glue.MockEngineModuleSql;
public class TestUserApiChangePlanSql extends TestUserApiChangePlan {
@@ -30,7 +29,7 @@ public class TestUserApiChangePlanSql extends TestUserApiChangePlan {
@Override
public Injector getInjector() {
- return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock(), new CatalogModuleMock());
+ return Guice.createInjector(Stage.DEVELOPMENT, new MockEngineModuleSql());
}
@Test(enabled= true, groups={"stress"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
index b2c215c..7df1bad 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
@@ -32,9 +32,9 @@ import com.ning.billing.catalog.api.IPriceListSet;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
-import com.ning.billing.entitlement.events.IEntitlementEvent;
-import com.ning.billing.entitlement.events.phase.IPhaseEvent;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.entitlement.events.phase.PhaseEvent;
+import com.ning.billing.util.clock.DefaultClock;
public abstract class TestUserApiCreate extends TestUserApiBase {
@@ -56,7 +56,7 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CREATE);
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, requestedDate);
+ SubscriptionData subscription = (SubscriptionData) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, requestedDate);
assertNotNull(subscription);
assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
@@ -84,7 +84,7 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CREATE);
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
+ SubscriptionData subscription = (SubscriptionData) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
assertNotNull(subscription);
assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
@@ -105,19 +105,19 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
assertNotNull(currentPhase);
assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
- List<ISubscriptionTransition> transitions = subscription.getActiveTransitions();
+ List<SubscriptionTransition> transitions = subscription.getActiveTransitions();
assertNotNull(transitions);
assertEquals(transitions.size(), 1);
assertTrue(testListener.isCompleted(5000));
- List<IEntitlementEvent> events = dao.getPendingEventsForSubscription(subscription.getId());
+ List<EntitlementEvent> events = dao.getPendingEventsForSubscription(subscription.getId());
assertNotNull(events);
printEvents(events);
assertTrue(events.size() == 1);
- assertTrue(events.get(0) instanceof IPhaseEvent);
- DateTime nextPhaseChange = ((IPhaseEvent ) events.get(0)).getEffectiveDate();
- DateTime nextExpectedPhaseChange = Clock.addDuration(subscription.getStartDate(), currentPhase.getDuration());
+ assertTrue(events.get(0) instanceof PhaseEvent);
+ DateTime nextPhaseChange = ((PhaseEvent ) events.get(0)).getEffectiveDate();
+ DateTime nextExpectedPhaseChange = DefaultClock.addDuration(subscription.getStartDate(), currentPhase.getDuration());
assertEquals(nextPhaseChange, nextExpectedPhaseChange);
testListener.pushExpectedEvent(NextEvent.PHASE);
@@ -149,7 +149,7 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CREATE);
// CREATE SUBSCRIPTION
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
+ SubscriptionData subscription = (SubscriptionData) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
assertNotNull(subscription);
IPlanPhase currentPhase = subscription.getCurrentPhase();
@@ -173,7 +173,7 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
clock.addDeltaFromReality(currentPhase.getDuration());
assertTrue(testListener.isCompleted(2000));
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
curTime = clock.getUTCNow();
currentPhase = subscription.getCurrentPhase();
assertNotNull(currentPhase);
@@ -196,7 +196,7 @@ public abstract class TestUserApiCreate extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.CREATE);
- Subscription subscription = (Subscription) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
+ SubscriptionData subscription = (SubscriptionData) entitlementApi.createSubscription(bundle.getId(), productName, term, planSetName, clock.getUTCNow());
assertNotNull(subscription);
} catch (EntitlementUserApiException e) {
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
index 8c1fa63..73d0b5d 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
@@ -21,15 +21,14 @@ import org.testng.annotations.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
-import com.ning.billing.entitlement.glue.CatalogModuleMock;
-import com.ning.billing.entitlement.glue.EngineModuleMemoryMock;
+import com.ning.billing.entitlement.glue.MockEngineModuleMemory;
public class TestUserApiCreateMemory extends TestUserApiCreate {
@Override
protected Injector getInjector() {
- return Guice.createInjector(Stage.PRODUCTION, new EngineModuleMemoryMock(), new CatalogModuleMock());
+ return Guice.createInjector(Stage.PRODUCTION, new MockEngineModuleMemory());
}
@Test(enabled=true, groups={"fast"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateSql.java
index 77ee57d..deaa6bd 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateSql.java
@@ -21,14 +21,13 @@ import org.testng.annotations.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
-import com.ning.billing.entitlement.glue.CatalogModuleMock;
-import com.ning.billing.entitlement.glue.EngineModuleSqlMock;
+import com.ning.billing.entitlement.glue.MockEngineModuleSql;
public class TestUserApiCreateSql extends TestUserApiCreate {
@Override
protected Injector getInjector() {
- return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock(), new CatalogModuleMock());
+ return Guice.createInjector(Stage.DEVELOPMENT, new MockEngineModuleSql());
}
@Test(enabled=true, groups={"sql"})
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
index 90e7cde..cfa72cf 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiDemos.java
@@ -40,14 +40,14 @@ import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
-import com.ning.billing.entitlement.glue.EngineModuleSqlMock;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.entitlement.glue.MockEngineModuleSql;
+import com.ning.billing.util.clock.DefaultClock;
public class TestUserApiDemos extends TestUserApiBase {
@Override
protected Injector getInjector() {
- return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock());
+ return Guice.createInjector(Stage.DEVELOPMENT, new MockEngineModuleSql());
}
/**
@@ -72,7 +72,7 @@ public class TestUserApiDemos extends TestUserApiBase {
System.out.println("DEMO 1 START");
/* STEP 1. CREATE SUBSCRIPTION */
- Subscription subscription = createSubscription("Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
+ SubscriptionData subscription = createSubscription("Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
IPlanPhase trialPhase = subscription.getCurrentPhase();
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
@@ -95,12 +95,12 @@ public class TestUserApiDemos extends TestUserApiBase {
/* STEP 4. SET CTD AND CHANGE PLAN EOT */
List<IDuration> durationList = new ArrayList<IDuration>();
durationList.add(trialPhase.getDuration());
- DateTime startDiscountPhase = Clock.addDuration(subscription.getStartDate(), durationList);
+ DateTime startDiscountPhase = DefaultClock.addDuration(subscription.getStartDate(), durationList);
IDuration ctd = getDurationMonth(1);
- DateTime newChargedThroughDate = Clock.addDuration(startDiscountPhase, ctd);
+ DateTime newChargedThroughDate = DefaultClock.addDuration(startDiscountPhase, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
testListener.pushExpectedEvent(NextEvent.CHANGE);
subscription.changePlan("Shotgun", BillingPeriod.ANNUAL, "gunclubDiscount", clock.getUTCNow());
@@ -138,7 +138,7 @@ public class TestUserApiDemos extends TestUserApiBase {
testListener.pushExpectedEvent(NextEvent.PHASE);
clock.addDeltaFromReality(currentPhase.getDuration());
assertTrue(testListener.isCompleted(3000));
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
currentPlan = subscription.getCurrentPlan();
assertNotNull(currentPlan);
@@ -170,7 +170,7 @@ public class TestUserApiDemos extends TestUserApiBase {
System.out.println("");
System.out.println("******\t STEP " + stepMsg + " **************");
- Subscription subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscriptionId);
+ SubscriptionData subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscriptionId);
IPlan currentPlan = subscription.getCurrentPlan();
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiError.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiError.java
index 3d8b84f..3d06c83 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiError.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiError.java
@@ -35,8 +35,8 @@ import com.ning.billing.catalog.api.IDuration;
import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.IPriceListSet;
import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
-import com.ning.billing.entitlement.glue.EngineModuleMemoryMock;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.entitlement.glue.MockEngineModuleMemory;
+import com.ning.billing.util.clock.DefaultClock;
public class TestUserApiError extends TestUserApiBase {
@@ -53,7 +53,7 @@ public class TestUserApiError extends TestUserApiBase {
@Override
protected Injector getInjector() {
- return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleMemoryMock());
+ return Guice.createInjector(Stage.DEVELOPMENT, new MockEngineModuleMemory());
}
@Test(enabled=true)
@@ -109,7 +109,7 @@ public class TestUserApiError extends TestUserApiBase {
@Test(enabled=true)
public void testChangeSubscriptionNonActive() {
try {
- ISubscription subscription = createSubscription("Shotgun", BillingPeriod.ANNUAL, IPriceListSet.DEFAULT_PRICELIST_NAME);
+ Subscription subscription = createSubscription("Shotgun", BillingPeriod.ANNUAL, IPriceListSet.DEFAULT_PRICELIST_NAME);
testListener.pushExpectedEvent(NextEvent.CANCEL);
subscription.cancel(clock.getUTCNow(), false);
@@ -133,13 +133,13 @@ public class TestUserApiError extends TestUserApiBase {
@Test(enabled=true)
public void testChangeSubscriptionFutureCancelled() {
try {
- ISubscription subscription = createSubscription("Shotgun", BillingPeriod.MONTHLY, IPriceListSet.DEFAULT_PRICELIST_NAME);
+ Subscription subscription = createSubscription("Shotgun", BillingPeriod.MONTHLY, IPriceListSet.DEFAULT_PRICELIST_NAME);
// SET CTD TO CANCEL IN FUTURE
IPlanPhase trialPhase = subscription.getCurrentPhase();
- DateTime expectedPhaseTrialChange = Clock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ DateTime expectedPhaseTrialChange = DefaultClock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
IDuration ctd = getDurationMonth(1);
- DateTime newChargedThroughDate = Clock.addDuration(expectedPhaseTrialChange, ctd);
+ DateTime newChargedThroughDate = DefaultClock.addDuration(expectedPhaseTrialChange, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
subscription = entitlementApi.getSubscriptionFromId(subscription.getId());
@@ -168,7 +168,7 @@ public class TestUserApiError extends TestUserApiBase {
@Test(enabled=true)
public void testUncancelBadState() {
try {
- ISubscription subscription = createSubscription("Shotgun", BillingPeriod.MONTHLY, IPriceListSet.DEFAULT_PRICELIST_NAME);
+ Subscription subscription = createSubscription("Shotgun", BillingPeriod.MONTHLY, IPriceListSet.DEFAULT_PRICELIST_NAME);
try {
subscription.uncancel();
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiScenarios.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiScenarios.java
index 78e7cb3..c991f7d 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiScenarios.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiScenarios.java
@@ -32,14 +32,14 @@ import com.ning.billing.catalog.api.IDuration;
import com.ning.billing.catalog.api.IPlanPhase;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
-import com.ning.billing.entitlement.glue.EngineModuleSqlMock;
-import com.ning.billing.util.clock.Clock;
+import com.ning.billing.entitlement.glue.MockEngineModuleSql;
+import com.ning.billing.util.clock.DefaultClock;
public class TestUserApiScenarios extends TestUserApiBase {
@Override
protected Injector getInjector() {
- return Guice.createInjector(Stage.DEVELOPMENT, new EngineModuleSqlMock());
+ return Guice.createInjector(Stage.DEVELOPMENT, new MockEngineModuleSql());
}
@Test(enabled=true)
@@ -48,7 +48,7 @@ public class TestUserApiScenarios extends TestUserApiBase {
log.info("Starting testChangeIMMCancelUncancelChangeEOT");
try {
- Subscription subscription = createSubscription("Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
+ SubscriptionData subscription = createSubscription("Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
IPlanPhase trialPhase = subscription.getCurrentPhase();
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
@@ -63,10 +63,10 @@ public class TestUserApiScenarios extends TestUserApiBase {
// SET CTD
IDuration ctd = getDurationMonth(1);
- DateTime expectedPhaseTrialChange = Clock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
- DateTime newChargedThroughDate = Clock.addDuration(expectedPhaseTrialChange, ctd);
+ DateTime expectedPhaseTrialChange = DefaultClock.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ DateTime newChargedThroughDate = DefaultClock.addDuration(expectedPhaseTrialChange, ctd);
billingApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate);
- subscription = (Subscription) entitlementApi.getSubscriptionFromId(subscription.getId());
+ subscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(subscription.getId());
// CANCEL EOT
testListener.pushExpectedEvent(NextEvent.CANCEL);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
index 730c22b..2dc32ce 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/model/DefaultInvoiceGenerator.java
@@ -19,7 +19,7 @@ package com.ning.billing.invoice.model;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.entitlement.api.billing.BillingMode;
-import com.ning.billing.entitlement.api.billing.IBillingEvent;
+import com.ning.billing.entitlement.api.billing.BillingEvent;
import com.ning.billing.invoice.api.BillingEventSet;
import org.joda.time.DateTime;
@@ -91,8 +91,8 @@ public class DefaultInvoiceGenerator implements IInvoiceGenerator {
// for each event, process it either as a terminated event (if there's a subsequent event)
// ...or as a non-terminated event (if no subsequent event exists)
for (int i = 0; i < (events.size() - 1); i++) {
- IBillingEvent thisEvent = events.get(i);
- IBillingEvent nextEvent = events.get(i + 1);
+ BillingEvent thisEvent = events.get(i);
+ BillingEvent nextEvent = events.get(i + 1);
if (thisEvent.getSubscriptionId() == nextEvent.getSubscriptionId()) {
processEvents(invoiceId, thisEvent, nextEvent, items, targetDate, targetCurrency);
@@ -109,7 +109,7 @@ public class DefaultInvoiceGenerator implements IInvoiceGenerator {
return items;
}
- private void processEvent(UUID invoiceId, IBillingEvent event, List<InvoiceItem> items, DateTime targetDate, Currency targetCurrency) {
+ private void processEvent(UUID invoiceId, BillingEvent event, List<InvoiceItem> items, DateTime targetDate, Currency targetCurrency) {
BigDecimal rate = event.getPrice(targetCurrency);
BigDecimal invoiceItemAmount = calculateInvoiceItemAmount(event, targetDate, rate);
IBillingMode billingMode = getBillingMode(event.getBillingMode());
@@ -118,7 +118,7 @@ public class DefaultInvoiceGenerator implements IInvoiceGenerator {
addInvoiceItem(invoiceId, items, event, billThroughDate, invoiceItemAmount, rate, targetCurrency);
}
- private void processEvents(UUID invoiceId, IBillingEvent firstEvent, IBillingEvent secondEvent, List<InvoiceItem> items, DateTime targetDate, Currency targetCurrency) {
+ private void processEvents(UUID invoiceId, BillingEvent firstEvent, BillingEvent secondEvent, List<InvoiceItem> items, DateTime targetDate, Currency targetCurrency) {
BigDecimal rate = firstEvent.getPrice(targetCurrency);
BigDecimal invoiceItemAmount = calculateInvoiceItemAmount(firstEvent, secondEvent, targetDate, rate);
IBillingMode billingMode = getBillingMode(firstEvent.getBillingMode());
@@ -127,14 +127,14 @@ public class DefaultInvoiceGenerator implements IInvoiceGenerator {
addInvoiceItem(invoiceId, items, firstEvent, billThroughDate, invoiceItemAmount, rate, targetCurrency);
}
- private void addInvoiceItem(UUID invoiceId, List<InvoiceItem> items, IBillingEvent event, DateTime billThroughDate, BigDecimal amount, BigDecimal rate, Currency currency) {
+ private void addInvoiceItem(UUID invoiceId, List<InvoiceItem> items, BillingEvent event, DateTime billThroughDate, BigDecimal amount, BigDecimal rate, Currency currency) {
if (!(amount.compareTo(BigDecimal.ZERO) == 0)) {
InvoiceItem item = new InvoiceItem(invoiceId, event.getSubscriptionId(), event.getEffectiveDate(), billThroughDate, event.getDescription(), amount, rate, currency);
items.add(item);
}
}
- private BigDecimal calculateInvoiceItemAmount(IBillingEvent event, DateTime targetDate, BigDecimal rate){
+ private BigDecimal calculateInvoiceItemAmount(BillingEvent event, DateTime targetDate, BigDecimal rate){
IBillingMode billingMode = getBillingMode(event.getBillingMode());
DateTime startDate = event.getEffectiveDate();
int billingCycleDay = event.getBillCycleDay();
@@ -150,7 +150,7 @@ public class DefaultInvoiceGenerator implements IInvoiceGenerator {
}
}
- private BigDecimal calculateInvoiceItemAmount(IBillingEvent firstEvent, IBillingEvent secondEvent, DateTime targetDate, BigDecimal rate) {
+ private BigDecimal calculateInvoiceItemAmount(BillingEvent firstEvent, BillingEvent secondEvent, DateTime targetDate, BigDecimal rate) {
IBillingMode billingMode = getBillingMode(firstEvent.getBillingMode());
DateTime startDate = firstEvent.getEffectiveDate();
int billingCycleDay = firstEvent.getBillCycleDay();
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
index 01a533c..45f6e74 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
@@ -19,8 +19,8 @@ package com.ning.billing.invoice.tests;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.entitlement.api.billing.BillingMode;
-import com.ning.billing.entitlement.api.billing.IBillingEvent;
-import com.ning.billing.invoice.api.BillingEvent;
+import com.ning.billing.entitlement.api.billing.BillingEvent;
+import com.ning.billing.invoice.api.DefaultBillingEvent;
import com.ning.billing.invoice.api.BillingEventSet;
import com.ning.billing.invoice.model.*;
import org.joda.time.DateTime;
@@ -67,7 +67,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
DateTime startDate = buildDateTime(2011, 9, 1);
String planName = "World Domination";
String phaseName = "Build Space Laser";
- IBillingEvent event = new BillingEvent(subscriptionId, startDate, planName, phaseName,
+ BillingEvent event = new DefaultBillingEvent(subscriptionId, startDate, planName, phaseName,
new InternationalPriceMock(TEN), BillingPeriod.MONTHLY,
1, BillingMode.IN_ADVANCE);
@@ -93,7 +93,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
String planName = "World Domination";
String phaseName = "Build Space Laser";
BigDecimal rate = TEN;
- IBillingEvent event = new BillingEvent(subscriptionId, startDate, planName, phaseName,
+ BillingEvent event = new DefaultBillingEvent(subscriptionId, startDate, planName, phaseName,
new InternationalPriceMock(rate), BillingPeriod.MONTHLY,
15, BillingMode.IN_ADVANCE);
@@ -118,13 +118,13 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
public void testTwoMonthlySubscriptionsWithAlignedBillingDates() {
BillingEventSet events = new BillingEventSet();
- IBillingEvent event1 = new BillingEvent(UUID.randomUUID(), buildDateTime(2011, 9, 1),
+ BillingEvent event1 = new DefaultBillingEvent(UUID.randomUUID(), buildDateTime(2011, 9, 1),
"World Domination", "Build Space Laser",
new InternationalPriceMock(FIVE), BillingPeriod.MONTHLY,
1, BillingMode.IN_ADVANCE);
events.add(event1);
- IBillingEvent event2 = new BillingEvent(UUID.randomUUID(), buildDateTime(2011, 10, 1),
+ BillingEvent event2 = new DefaultBillingEvent(UUID.randomUUID(), buildDateTime(2011, 10, 1),
"Groceries", "Pick Up Milk",
new InternationalPriceMock(TEN), BillingPeriod.MONTHLY,
1, BillingMode.IN_ADVANCE);
@@ -145,13 +145,13 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
BillingEventSet events = new BillingEventSet();
UUID subscriptionId = UUID.randomUUID();
- IBillingEvent event1 = new BillingEvent(subscriptionId, buildDateTime(2011, 9, 1),
+ BillingEvent event1 = new DefaultBillingEvent(subscriptionId, buildDateTime(2011, 9, 1),
"World Domination", "Build Space Laser",
new InternationalPriceMock(FIVE), BillingPeriod.MONTHLY,
1, BillingMode.IN_ADVANCE);
events.add(event1);
- IBillingEvent event2 = new BillingEvent(subscriptionId, buildDateTime(2011, 10, 15),
+ BillingEvent event2 = new DefaultBillingEvent(subscriptionId, buildDateTime(2011, 10, 15),
"World Domination", "Incinerate James Bond",
new InternationalPriceMock(TEN), BillingPeriod.MONTHLY,
15, BillingMode.IN_ADVANCE);
@@ -183,19 +183,19 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
BillingEventSet events = new BillingEventSet();
UUID subscriptionId = UUID.randomUUID();
- IBillingEvent event1 = new BillingEvent(subscriptionId, buildDateTime(2011, 9, 1),
+ BillingEvent event1 = new DefaultBillingEvent(subscriptionId, buildDateTime(2011, 9, 1),
"World Domination", "Build Space Laser",
new InternationalPriceMock(FIVE), BillingPeriod.MONTHLY,
1, BillingMode.IN_ADVANCE);
events.add(event1);
- IBillingEvent event2 = new BillingEvent(subscriptionId, buildDateTime(2011, 10, 1),
+ BillingEvent event2 = new DefaultBillingEvent(subscriptionId, buildDateTime(2011, 10, 1),
"World Domination", "Incinerate James Bond",
new InternationalPriceMock(TEN), BillingPeriod.MONTHLY,
1, BillingMode.IN_ADVANCE);
events.add(event2);
- IBillingEvent event3 = new BillingEvent(subscriptionId, buildDateTime(2011, 11, 1),
+ BillingEvent event3 = new DefaultBillingEvent(subscriptionId, buildDateTime(2011, 11, 1),
"World Domination", "Cackle Gleefully",
new InternationalPriceMock(THIRTY), BillingPeriod.MONTHLY,
1, BillingMode.IN_ADVANCE);
@@ -219,7 +219,7 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
DateTime startDate = buildDateTime(2011, 9, 1);
BigDecimal rate = FIVE;
- IBillingEvent event1 = new BillingEvent(subscriptionId, startDate,
+ BillingEvent event1 = new DefaultBillingEvent(subscriptionId, startDate,
"World Domination", "Build Space Laser",
new InternationalPriceMock(rate), BillingPeriod.MONTHLY,
1, BillingMode.IN_ADVANCE);
@@ -391,17 +391,17 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
testInvoiceGeneration(events, invoiceItems, buildDateTime(2011, 10, 10), 1, expectedAmount);
}
- private BillingEvent createBillingEvent(UUID subscriptionId, DateTime startDate, String planName, String planPhaseName,
+ private DefaultBillingEvent createBillingEvent(UUID subscriptionId, DateTime startDate, String planName, String planPhaseName,
BigDecimal rate, int billCycleDay) {
- return new BillingEvent(subscriptionId, startDate, planName, planPhaseName,
+ return new DefaultBillingEvent(subscriptionId, startDate, planName, planPhaseName,
new InternationalPriceMock(rate), BillingPeriod.MONTHLY,
billCycleDay, BillingMode.IN_ADVANCE);
}
- private BillingEvent createAnnualBillingEvent(UUID subscriptionId, DateTime startDate, String planName, String planPhaseName,
+ private DefaultBillingEvent createAnnualBillingEvent(UUID subscriptionId, DateTime startDate, String planName, String planPhaseName,
BigDecimal rate, int billCycleDay) {
- return new BillingEvent(subscriptionId, startDate, planName, planPhaseName,
+ return new DefaultBillingEvent(subscriptionId, startDate, planName, planPhaseName,
new InternationalPriceMock(rate), BillingPeriod.ANNUAL,
billCycleDay, BillingMode.IN_ADVANCE);
diff --git a/util/src/main/java/com/ning/billing/util/clock/Clock.java b/util/src/main/java/com/ning/billing/util/clock/Clock.java
index a60b393..b41a36d 100644
--- a/util/src/main/java/com/ning/billing/util/clock/Clock.java
+++ b/util/src/main/java/com/ning/billing/util/clock/Clock.java
@@ -16,59 +16,15 @@
package com.ning.billing.util.clock;
-import java.util.ArrayList;
-import java.util.List;
-
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
-import com.ning.billing.catalog.api.IDuration;
-
-public class Clock implements IClock {
-
- @Override
- public DateTime getNow(DateTimeZone tz) {
- DateTime result = new DateTime(tz);
- return truncateMs(result);
- }
-
- @Override
- public DateTime getUTCNow() {
- return getNow(DateTimeZone.UTC);
- }
-
-
- public static DateTime truncateMs(DateTime input) {
- return input.minus(input.getMillisOfSecond());
- }
-
- public static DateTime addDuration(DateTime input, List<IDuration> durations) {
+public interface Clock {
- DateTime result = input;
- for (IDuration cur : durations) {
- switch (cur.getUnit()) {
- case DAYS:
- result = result.plusDays(cur.getNumber());
- break;
+ public DateTime getNow(DateTimeZone tz);
- case MONTHS:
- result = result.plusMonths(cur.getNumber());
- break;
+ public DateTime getUTCNow();
- case YEARS:
- result = result.plusYears(cur.getNumber());
- break;
- case UNLIMITED:
- default:
- throw new RuntimeException("Trying to move to unlimited time period");
- }
- }
- return result;
- }
- public static DateTime addDuration(DateTime input, IDuration duration) {
- List<IDuration> list = new ArrayList<IDuration>();
- list.add(duration);
- return addDuration(input, list);
- }
+ //public DateTime addDuration(DateTime input, IDuration duration);
}
diff --git a/util/src/main/java/com/ning/billing/util/clock/DefaultClock.java b/util/src/main/java/com/ning/billing/util/clock/DefaultClock.java
new file mode 100644
index 0000000..1397d41
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/clock/DefaultClock.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.clock;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
+import com.ning.billing.catalog.api.IDuration;
+
+public class DefaultClock implements Clock {
+
+ @Override
+ public DateTime getNow(DateTimeZone tz) {
+ DateTime result = new DateTime(tz);
+ return truncateMs(result);
+ }
+
+ @Override
+ public DateTime getUTCNow() {
+ return getNow(DateTimeZone.UTC);
+ }
+
+
+ public static DateTime truncateMs(DateTime input) {
+ return input.minus(input.getMillisOfSecond());
+ }
+
+ public static DateTime addDuration(DateTime input, List<IDuration> durations) {
+
+ DateTime result = input;
+ for (IDuration cur : durations) {
+ switch (cur.getUnit()) {
+ case DAYS:
+ result = result.plusDays(cur.getNumber());
+ break;
+
+ case MONTHS:
+ result = result.plusMonths(cur.getNumber());
+ break;
+
+ case YEARS:
+ result = result.plusYears(cur.getNumber());
+ break;
+ case UNLIMITED:
+ default:
+ throw new RuntimeException("Trying to move to unlimited time period");
+ }
+ }
+ return result;
+ }
+
+ public static DateTime addDuration(DateTime input, IDuration duration) {
+ List<IDuration> list = new ArrayList<IDuration>();
+ list.add(duration);
+ return addDuration(input, list);
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/eventbus/MemoryEventBus.java b/util/src/main/java/com/ning/billing/util/eventbus/MemoryEventBus.java
index 7cc0453..d7f876d 100644
--- a/util/src/main/java/com/ning/billing/util/eventbus/MemoryEventBus.java
+++ b/util/src/main/java/com/ning/billing/util/eventbus/MemoryEventBus.java
@@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory;
import com.google.common.eventbus.AsyncEventBus;
-public class MemoryEventBus implements IEventBus {
+public class MemoryEventBus implements EventBus {
// STEPH config ?
private final static int MAX_EVENT_THREADS = 1;
@@ -93,13 +93,13 @@ public class MemoryEventBus implements IEventBus {
}
@Override
- public void post(IEventBusType event) throws EventBusException {
+ public void post(EventBusNotification event) throws EventBusException {
checkInitialized("post");
delegate.post(event);
}
@Override
- public void postFromTransaction(IEventBusType event, Transmogrifier dao) throws EventBusException {
+ public void postFromTransaction(EventBusNotification event, Transmogrifier dao) throws EventBusException {
checkInitialized("postFromTransaction");
delegate.post(event);
}
diff --git a/util/src/main/java/com/ning/billing/util/glue/EventBusModule.java b/util/src/main/java/com/ning/billing/util/glue/EventBusModule.java
index e6e995a..078c331 100644
--- a/util/src/main/java/com/ning/billing/util/glue/EventBusModule.java
+++ b/util/src/main/java/com/ning/billing/util/glue/EventBusModule.java
@@ -17,17 +17,17 @@
package com.ning.billing.util.glue;
import com.google.inject.AbstractModule;
+import com.ning.billing.util.eventbus.DefaultEventBusService;
+import com.ning.billing.util.eventbus.EventBus;
import com.ning.billing.util.eventbus.EventBusService;
-import com.ning.billing.util.eventbus.IEventBus;
-import com.ning.billing.util.eventbus.IEventBusService;
import com.ning.billing.util.eventbus.MemoryEventBus;
public class EventBusModule extends AbstractModule {
@Override
protected void configure() {
- bind(IEventBusService.class).to(EventBusService.class);
- bind(IEventBus.class).to(MemoryEventBus.class).asEagerSingleton();
+ bind(EventBusService.class).to(DefaultEventBusService.class);
+ bind(EventBus.class).to(MemoryEventBus.class).asEagerSingleton();
}
diff --git a/util/src/test/java/com/ning/billing/util/clock/ClockMock.java b/util/src/test/java/com/ning/billing/util/clock/ClockMock.java
index eb7216e..c6ee715 100644
--- a/util/src/test/java/com/ning/billing/util/clock/ClockMock.java
+++ b/util/src/test/java/com/ning/billing/util/clock/ClockMock.java
@@ -25,7 +25,7 @@ import org.joda.time.DateTimeZone;
import com.ning.billing.catalog.api.IDuration;
// STEPH should really be in tests but not accessible from other sub modules
-public class ClockMock extends Clock {
+public class ClockMock extends DefaultClock {
private enum DeltaType {
DELTA_NONE,
diff --git a/util/src/test/java/com/ning/billing/util/eventbus/TestEventBus.java b/util/src/test/java/com/ning/billing/util/eventbus/TestEventBus.java
index e4e41df..1a24e41 100644
--- a/util/src/test/java/com/ning/billing/util/eventbus/TestEventBus.java
+++ b/util/src/test/java/com/ning/billing/util/eventbus/TestEventBus.java
@@ -29,7 +29,7 @@ public class TestEventBus {
private static final Logger log = LoggerFactory.getLogger(TestEventBus.class);
- private IEventBus eventBus;
+ private EventBus eventBus;
@BeforeClass
@@ -43,7 +43,7 @@ public class TestEventBus {
eventBus.stop();
}
- public static final class MyEvent implements IEventBusType {
+ public static final class MyEvent implements EventBusNotification {
String name;
Long value;