killbill-aplcache
Changes
analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java 2(+1 -1)
entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java 10(+5 -5)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundleData.java 16(+8 -8)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java 269(+187 -82)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java 92(+12 -80)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java 185(+185 -0)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java 63(+63 -0)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java 102(+102 -0)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java 31(+7 -24)
entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg 69(+36 -33)
entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.sql.stg 100(+46 -54)
entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg 72(+32 -40)
entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java 7(+3 -4)
Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java b/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
index 8449b6f..b954117 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/api/user/DefaultAnalyticsUserApi.java
@@ -135,8 +135,8 @@ public class DefaultAnalyticsUserApi implements AnalyticsUserApi {
final Collection<BusinessSubscriptionTransition> businessSubscriptionTransitions = new ArrayList<BusinessSubscriptionTransition>();
final Collection<BusinessOverdueStatus> businessOverdueStatuses = new ArrayList<BusinessOverdueStatus>();
for (final SubscriptionBundle bundle : bundles) {
- businessSubscriptionTransitions.addAll(getTransitionsForBundle(bundle.getKey(), context));
- businessOverdueStatuses.addAll(getOverdueStatusesForBundle(bundle.getKey(), context));
+ businessSubscriptionTransitions.addAll(getTransitionsForBundle(bundle.getExternalKey(), context));
+ businessOverdueStatuses.addAll(getOverdueStatusesForBundle(bundle.getExternalKey(), context));
}
// Find all invoices for that account
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceDao.java
index 2f09a66..b04a9d1 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessInvoiceDao.java
@@ -186,7 +186,7 @@ public class BusinessInvoiceDao {
if (invoiceItem.getBundleId() != null) {
try {
final SubscriptionBundle bundle = entitlementApi.getBundleFromId(invoiceItem.getBundleId(), context);
- externalKey = bundle.getKey();
+ externalKey = bundle.getExternalKey();
} catch (EntitlementUserApiException e) {
log.warn("Ignoring subscription fields for invoice item {} for bundle {} (bundle does not exist)",
invoiceItem.getId().toString(),
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java
index b0b30fd..82f0459 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java
@@ -89,7 +89,7 @@ public class BusinessOverdueStatusDao {
}
final String accountKey = account.getExternalKey();
- final String externalKey = bundle.getKey();
+ final String externalKey = bundle.getExternalKey();
overdueStatusSqlDao.inTransaction(new Transaction<Void, BusinessOverdueStatusSqlDao>() {
@Override
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionDao.java
index c8ebb65..0ae3076 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionDao.java
@@ -110,7 +110,7 @@ public class BusinessSubscriptionTransitionDao {
final BusinessSubscriptionTransitionModelDao transition = new BusinessSubscriptionTransitionModelDao(
event.getTotalOrdering(),
bundleId,
- bundle.getKey(),
+ bundle.getExternalKey(),
bundle.getAccountId(),
account.getExternalKey(),
subscription.getId(),
@@ -130,7 +130,7 @@ public class BusinessSubscriptionTransitionDao {
final BusinessSubscriptionTransitionModelDao systemCancelTransition = new BusinessSubscriptionTransitionModelDao(
event.getTotalOrdering(),
bundleId,
- bundle.getKey(),
+ bundle.getExternalKey(),
bundle.getAccountId(),
account.getExternalKey(),
subscription.getId(),
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
index dd83f5b..78fe387 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessTagDao.java
@@ -128,7 +128,7 @@ public class BusinessTagDao {
* Note: we store tags associated to bundles, not to subscriptions.
*/
final String accountKey = account.getExternalKey();
- final String externalKey = bundle.getKey();
+ final String externalKey = bundle.getExternalKey();
subscriptionTransitionTagSqlDao.addTag(accountKey, bundleId.toString(), externalKey, name, context);
}
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 265631d..7a243cc 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
@@ -177,7 +177,7 @@ public class TestAnalyticsService extends AnalyticsTestSuiteWithEmbeddedDB {
// Verify we correctly initialized the account subsystem
Assert.assertNotNull(bundle);
- Assert.assertEquals(bundle.getKey(), BUNDLE_EXTERNAL_KEY);
+ Assert.assertEquals(bundle.getExternalKey(), BUNDLE_EXTERNAL_KEY);
// Create a subscription transition event
final UUID subscriptionId = UUID.randomUUID();
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java
index 05e27ec..73b2443 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransitionRecorder.java
@@ -60,7 +60,7 @@ public class TestBusinessSubscriptionTransitionRecorder extends AnalyticsTestSui
final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
Mockito.when(bundle.getId()).thenReturn(bundleId);
Mockito.when(bundle.getAccountId()).thenReturn(accountId);
- Mockito.when(bundle.getKey()).thenReturn(externalKey.toString());
+ Mockito.when(bundle.getExternalKey()).thenReturn(externalKey.toString());
final EntitlementInternalApi entitlementApi = Mockito.mock(EntitlementInternalApi.class);
Mockito.when(entitlementApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(bundle);
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundle.java b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundle.java
index 479dbf5..2e4504d 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundle.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundle.java
@@ -25,7 +25,7 @@ import com.ning.billing.util.entity.Entity;
public interface SubscriptionBundle extends Blockable, Entity {
public UUID getAccountId();
- public String getKey();
+ public String getExternalKey();
public OverdueState<SubscriptionBundle> getOverdueState();
}
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
index 328ab3f..195c12c 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestAnalytics.java
@@ -228,7 +228,7 @@ public class TestAnalytics extends TestIntegrationBase {
Assert.assertNull(analyticsUserApi.getAccountByKey(account.getExternalKey(), callContext).getLastPaymentStatus());
// Verify the initial overdue status
- Assert.assertEquals(analyticsUserApi.getOverdueStatusesForBundle(bundle.getKey(), callContext).size(), 0);
+ Assert.assertEquals(analyticsUserApi.getOverdueStatusesForBundle(bundle.getExternalKey(), callContext).size(), 0);
// Move after trial
busHandler.pushExpectedEvents(TestApiListener.NextEvent.PHASE, TestApiListener.NextEvent.INVOICE, TestApiListener.NextEvent.PAYMENT_ERROR);
@@ -260,7 +260,7 @@ public class TestAnalytics extends TestIntegrationBase {
invoicePaymentsForAccount.get(0).getAmount());
// Verify overdue status - we should still be in clear state
- Assert.assertEquals(analyticsUserApi.getOverdueStatusesForBundle(bundle.getKey(), callContext).size(), 0);
+ Assert.assertEquals(analyticsUserApi.getOverdueStatusesForBundle(bundle.getExternalKey(), callContext).size(), 0);
clock.addDays(15); // DAY 45 - 15 days after invoice
assertTrue(busHandler.isCompleted(DELAY));
@@ -269,7 +269,7 @@ public class TestAnalytics extends TestIntegrationBase {
verifyBSTWithTrialAndEvergreenPhases(account, bundle, subscription);
// Verify overdue status - we should still be in clear state
- Assert.assertEquals(analyticsUserApi.getOverdueStatusesForBundle(bundle.getKey(), callContext).size(), 0);
+ Assert.assertEquals(analyticsUserApi.getOverdueStatusesForBundle(bundle.getExternalKey(), callContext).size(), 0);
busHandler.pushExpectedEvents(TestApiListener.NextEvent.INVOICE, TestApiListener.NextEvent.PAYMENT_ERROR);
clock.addDays(20); // DAY 65 - 35 days after invoice
@@ -277,7 +277,7 @@ public class TestAnalytics extends TestIntegrationBase {
waitALittle();
// Verify overdue status - we should be in OD1
- final List<BusinessOverdueStatus> od1Bundle = analyticsUserApi.getOverdueStatusesForBundle(bundle.getKey(), callContext);
+ final List<BusinessOverdueStatus> od1Bundle = analyticsUserApi.getOverdueStatusesForBundle(bundle.getExternalKey(), callContext);
Assert.assertEquals(od1Bundle.size(), 1);
Assert.assertEquals(od1Bundle.get(0).getStatus(), "OD1");
Assert.assertEquals(od1Bundle.get(0).getId(), bundle.getId());
@@ -287,7 +287,7 @@ public class TestAnalytics extends TestIntegrationBase {
assertTrue(busHandler.isCompleted(DELAY));
waitALittle();
// Verify overdue status - we should still be in OD1
- final List<BusinessOverdueStatus> stillOd1Bundle = analyticsUserApi.getOverdueStatusesForBundle(bundle.getKey(), callContext);
+ final List<BusinessOverdueStatus> stillOd1Bundle = analyticsUserApi.getOverdueStatusesForBundle(bundle.getExternalKey(), callContext);
Assert.assertEquals(stillOd1Bundle.size(), 1);
Assert.assertEquals(stillOd1Bundle.get(0).getStatus(), "OD1");
Assert.assertEquals(stillOd1Bundle.get(0).getId(), bundle.getId());
@@ -297,7 +297,7 @@ public class TestAnalytics extends TestIntegrationBase {
assertTrue(busHandler.isCompleted(DELAY));
waitALittle();
// Verify overdue status - we should be in OD2
- final List<BusinessOverdueStatus> od2Bundle = analyticsUserApi.getOverdueStatusesForBundle(bundle.getKey(), callContext);
+ final List<BusinessOverdueStatus> od2Bundle = analyticsUserApi.getOverdueStatusesForBundle(bundle.getExternalKey(), callContext);
Assert.assertEquals(od2Bundle.size(), 2);
Assert.assertEquals(od2Bundle.get(0).getStatus(), "OD1");
Assert.assertEquals(od2Bundle.get(1).getStatus(), "OD2");
@@ -312,7 +312,7 @@ public class TestAnalytics extends TestIntegrationBase {
assertTrue(busHandler.isCompleted(DELAY));
waitALittle();
// Verify overdue status - we should be in OD3
- final List<BusinessOverdueStatus> od3Bundle = analyticsUserApi.getOverdueStatusesForBundle(bundle.getKey(), callContext);
+ final List<BusinessOverdueStatus> od3Bundle = analyticsUserApi.getOverdueStatusesForBundle(bundle.getExternalKey(), callContext);
Assert.assertEquals(od3Bundle.size(), 3);
Assert.assertEquals(od3Bundle.get(0).getStatus(), "OD1");
Assert.assertEquals(od3Bundle.get(1).getStatus(), "OD2");
@@ -422,7 +422,7 @@ public class TestAnalytics extends TestIntegrationBase {
waitALittle();
// Verify BST is still empty since no subscription has been added yet
- Assert.assertEquals(analyticsUserApi.getTransitionsForBundle(bundle.getKey(), callContext).size(), 0);
+ Assert.assertEquals(analyticsUserApi.getTransitionsForBundle(bundle.getExternalKey(), callContext).size(), 0);
// The account should still not have any invoice
Assert.assertEquals(analyticsUserApi.getInvoicesForAccount(account.getExternalKey(), callContext).size(), 0);
@@ -468,7 +468,7 @@ public class TestAnalytics extends TestIntegrationBase {
Assert.assertEquals(invoiceItem.getBillingPeriod(), subscription.getCurrentPhase().getBillingPeriod().toString());
Assert.assertEquals(invoiceItem.getCurrency(), account.getCurrency());
Assert.assertEquals(invoiceItem.getEndDate(), invoiceItem.getStartDate().plusDays(30));
- Assert.assertEquals(invoiceItem.getExternalKey(), bundle.getKey());
+ Assert.assertEquals(invoiceItem.getExternalKey(), bundle.getExternalKey());
Assert.assertEquals(invoiceItem.getInvoiceId(), invoice.getInvoiceId());
Assert.assertEquals(invoiceItem.getItemType(), "FIXED");
Assert.assertEquals(invoiceItem.getPhase(), subscription.getCurrentPhase().getPhaseType().toString());
@@ -484,7 +484,7 @@ public class TestAnalytics extends TestIntegrationBase {
private void verifyBSTWithTrialAndEvergreenPhases(final Account account, final SubscriptionBundle bundle, final Subscription subscription) throws CatalogApiException {
// BST should have two transitions
- final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getKey(), callContext);
+ final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getExternalKey(), callContext);
Assert.assertEquals(transitions.size(), 2);
verifyTrialAndEvergreenPhases(account, bundle, subscription);
@@ -492,7 +492,7 @@ public class TestAnalytics extends TestIntegrationBase {
private void verifyBSTWithTrialAndEvergreenPhasesAndCancellation(final Account account, final SubscriptionBundle bundle, final Subscription subscription) throws CatalogApiException {
// BST should have three transitions
- final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getKey(), callContext);
+ final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getExternalKey(), callContext);
Assert.assertEquals(transitions.size(), 3);
verifyTrialAndEvergreenPhases(account, bundle, subscription);
@@ -501,7 +501,7 @@ public class TestAnalytics extends TestIntegrationBase {
private void verifyBSTWithTrialAndEvergreenPhasesAndCancellationAndSystemCancellation(final Account account, final SubscriptionBundle bundle, final Subscription subscription) throws CatalogApiException {
// BST should have four transitions
- final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getKey(), callContext);
+ final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getExternalKey(), callContext);
Assert.assertEquals(transitions.size(), 4);
verifyTrialAndEvergreenPhases(account, bundle, subscription);
@@ -511,12 +511,12 @@ public class TestAnalytics extends TestIntegrationBase {
private void verifyTrialAndEvergreenPhases(final Account account, final SubscriptionBundle bundle, final Subscription subscription) throws CatalogApiException {
final Product currentProduct = subscriptionPlan.getProduct();
- final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getKey(), callContext);
+ final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getExternalKey(), callContext);
// Check the first transition (into trial phase)
final BusinessSubscriptionTransition initialTransition = transitions.get(0);
Assert.assertEquals(initialTransition.getBundleId(), bundle.getId());
- Assert.assertEquals(initialTransition.getExternalKey(), bundle.getKey());
+ Assert.assertEquals(initialTransition.getExternalKey(), bundle.getExternalKey());
Assert.assertEquals(initialTransition.getAccountId(), account.getId());
Assert.assertEquals(initialTransition.getAccountKey(), account.getExternalKey());
Assert.assertEquals(initialTransition.getSubscriptionId(), subscription.getId());
@@ -541,7 +541,7 @@ public class TestAnalytics extends TestIntegrationBase {
// Check the second transition (from trial to evergreen)
final BusinessSubscriptionTransition futureTransition = transitions.get(1);
- Assert.assertEquals(futureTransition.getExternalKey(), bundle.getKey());
+ Assert.assertEquals(futureTransition.getExternalKey(), bundle.getExternalKey());
Assert.assertEquals(futureTransition.getAccountKey(), account.getExternalKey());
Assert.assertEquals(futureTransition.getCategory(), currentProduct.getCategory().toString());
Assert.assertEquals(futureTransition.getEventType(), BusinessSubscriptionEvent.EventType.SYSTEM_CHANGE.toString());
@@ -564,10 +564,10 @@ public class TestAnalytics extends TestIntegrationBase {
private void verifyCancellationTransition(final Account account, final SubscriptionBundle bundle) throws CatalogApiException {
final Product currentProduct = subscriptionPlan.getProduct();
- final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getKey(), callContext);
+ final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getExternalKey(), callContext);
final BusinessSubscriptionTransition cancellationRequest = transitions.get(2);
- Assert.assertEquals(cancellationRequest.getExternalKey(), bundle.getKey());
+ Assert.assertEquals(cancellationRequest.getExternalKey(), bundle.getExternalKey());
Assert.assertEquals(cancellationRequest.getAccountKey(), account.getExternalKey());
Assert.assertEquals(cancellationRequest.getCategory(), currentProduct.getCategory().toString());
Assert.assertEquals(cancellationRequest.getEventType(), BusinessSubscriptionEvent.EventType.CANCEL.toString());
@@ -576,10 +576,10 @@ public class TestAnalytics extends TestIntegrationBase {
}
private void verifySystemCancellationTransition(final Account account, final SubscriptionBundle bundle) throws CatalogApiException {
- final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getKey(), callContext);
+ final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getExternalKey(), callContext);
final BusinessSubscriptionTransition systemCancellation = transitions.get(3);
- Assert.assertEquals(systemCancellation.getExternalKey(), bundle.getKey());
+ Assert.assertEquals(systemCancellation.getExternalKey(), bundle.getExternalKey());
Assert.assertEquals(systemCancellation.getAccountKey(), account.getExternalKey());
Assert.assertEquals(systemCancellation.getCategory(), ProductCategory.BASE.toString());
Assert.assertEquals(systemCancellation.getEventType(), BusinessSubscriptionEvent.EventType.SYSTEM_CANCEL.toString());
@@ -597,12 +597,12 @@ public class TestAnalytics extends TestIntegrationBase {
waitALittle();
// BST should have three transitions (a ADD_BASE, CHANGE_BASE and SYSTEM_CHANGE_BASE)
- final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getKey(), callContext);
+ final List<BusinessSubscriptionTransition> transitions = analyticsUserApi.getTransitionsForBundle(bundle.getExternalKey(), callContext);
Assert.assertEquals(transitions.size(), 3);
final BusinessSubscriptionTransition previousTransition = transitions.get(0);
final BusinessSubscriptionTransition transition = transitions.get(1);
Assert.assertEquals(transition.getBundleId(), bundle.getId());
- Assert.assertEquals(transition.getExternalKey(), bundle.getKey());
+ Assert.assertEquals(transition.getExternalKey(), bundle.getExternalKey());
Assert.assertEquals(transition.getAccountId(), account.getId());
Assert.assertEquals(transition.getAccountKey(), account.getExternalKey());
Assert.assertEquals(transition.getSubscriptionId(), subscription.getId());
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
index 4e0d044..f61d2a6 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
@@ -79,7 +79,7 @@ public class DefaultEntitlementTimelineApi implements EntitlementTimelineApi {
@Override
public BundleTimeline getBundleTimeline(final SubscriptionBundle bundle, final TenantContext context)
throws EntitlementRepairException {
- return getBundleTimelineInternal(bundle, bundle.getKey(), context);
+ return getBundleTimelineInternal(bundle, bundle.getExternalKey(), context);
}
@Override
@@ -105,9 +105,9 @@ public class DefaultEntitlementTimelineApi implements EntitlementTimelineApi {
if (subscriptions.size() == 0) {
throw new EntitlementRepairException(ErrorCode.ENT_REPAIR_NO_ACTIVE_SUBSCRIPTIONS, bundle.getId());
}
- final String viewId = getViewId(((SubscriptionBundleData) bundle).getLastSysUpdateTime(), subscriptions);
+ final String viewId = getViewId(((SubscriptionBundleData) bundle).getLastSysUpdateDate(), subscriptions);
final List<SubscriptionTimeline> repairs = createGetSubscriptionRepairList(subscriptions, Collections.<SubscriptionTimeline>emptyList());
- return createGetBundleRepair(bundle.getId(), bundle.getKey(), viewId, repairs);
+ return createGetBundleRepair(bundle.getId(), bundle.getExternalKey(), viewId, repairs);
} catch (CatalogApiException e) {
throw new EntitlementRepairException(e);
}
@@ -128,7 +128,7 @@ public class DefaultEntitlementTimelineApi implements EntitlementTimelineApi {
throw new EntitlementRepairException(ErrorCode.ENT_REPAIR_NO_ACTIVE_SUBSCRIPTIONS, input.getId());
}
- final String viewId = getViewId(((SubscriptionBundleData) bundle).getLastSysUpdateTime(), subscriptions);
+ final String viewId = getViewId(((SubscriptionBundleData) bundle).getLastSysUpdateDate(), subscriptions);
if (!viewId.equals(input.getViewId())) {
throw new EntitlementRepairException(ErrorCode.ENT_REPAIR_VIEW_CHANGED, input.getId(), input.getViewId(), viewId);
}
@@ -232,7 +232,7 @@ public class DefaultEntitlementTimelineApi implements EntitlementTimelineApi {
baseSubscriptionRepair.addFutureAddonCancellation(addOnSubscriptionInRepair, context);
final List<SubscriptionTimeline> repairs = createGetSubscriptionRepairList(subscriptions, convertDataRepair(inRepair));
- return createGetBundleRepair(input.getId(), bundle.getKey(), input.getViewId(), repairs);
+ return createGetBundleRepair(input.getId(), bundle.getExternalKey(), input.getViewId(), repairs);
} else {
dao.repair(bundle.getAccountId(), input.getId(), inRepair, internalCallContextFactory.createInternalCallContext(bundle.getAccountId(), context));
return getBundleTimeline(input.getId(), context);
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundleData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundleData.java
index 8e0630a..7197b33 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundleData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionBundleData.java
@@ -30,7 +30,7 @@ public class SubscriptionBundleData extends EntityBase implements SubscriptionBu
private final String key;
private final UUID accountId;
- private final DateTime lastSysTimeUpdate;
+ private final DateTime lastSysUpdateDate;
private final OverdueState<SubscriptionBundle> overdueState;
public SubscriptionBundleData(final String name, final UUID accountId, final DateTime startDate) {
@@ -46,12 +46,12 @@ public class SubscriptionBundleData extends EntityBase implements SubscriptionBu
super(id, null, null);
this.key = key;
this.accountId = accountId;
- this.lastSysTimeUpdate = lastSysUpdate;
+ this.lastSysUpdateDate = lastSysUpdate;
this.overdueState = overdueState;
}
@Override
- public String getKey() {
+ public String getExternalKey() {
return key;
}
@@ -60,8 +60,8 @@ public class SubscriptionBundleData extends EntityBase implements SubscriptionBu
return accountId;
}
- public DateTime getLastSysUpdateTime() {
- return lastSysTimeUpdate;
+ public DateTime getLastSysUpdateDate() {
+ return lastSysUpdateDate;
}
@Override
@@ -81,7 +81,7 @@ public class SubscriptionBundleData extends EntityBase implements SubscriptionBu
sb.append("{accountId=").append(accountId);
sb.append(", id=").append(id);
sb.append(", key='").append(key).append('\'');
- sb.append(", lastSysTimeUpdate=").append(lastSysTimeUpdate);
+ sb.append(", lastSysUpdateDate=").append(lastSysUpdateDate);
sb.append(", overdueState=").append(overdueState);
sb.append('}');
return sb.toString();
@@ -107,7 +107,7 @@ public class SubscriptionBundleData extends EntityBase implements SubscriptionBu
if (key != null ? !key.equals(that.key) : that.key != null) {
return false;
}
- if (lastSysTimeUpdate != null ? !lastSysTimeUpdate.equals(that.lastSysTimeUpdate) : that.lastSysTimeUpdate != null) {
+ if (lastSysUpdateDate != null ? !lastSysUpdateDate.equals(that.lastSysUpdateDate) : that.lastSysUpdateDate != null) {
return false;
}
if (overdueState != null ? !overdueState.equals(that.overdueState) : that.overdueState != null) {
@@ -122,7 +122,7 @@ public class SubscriptionBundleData extends EntityBase implements SubscriptionBu
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (key != null ? key.hashCode() : 0);
result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
- result = 31 * result + (lastSysTimeUpdate != null ? lastSysTimeUpdate.hashCode() : 0);
+ result = 31 * result + (lastSysUpdateDate != null ? lastSysUpdateDate.hashCode() : 0);
result = 31 * result + (overdueState != null ? overdueState.hashCode() : 0);
return result;
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
index ec04732..0bef958 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
@@ -28,10 +28,10 @@ import java.util.Map;
import java.util.UUID;
import javax.annotation.Nullable;
+import javax.inject.Inject;
import org.joda.time.DateTime;
import org.skife.jdbi.v2.IDBI;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,6 +55,9 @@ import com.ning.billing.entitlement.api.user.SubscriptionData;
import com.ning.billing.entitlement.engine.addon.AddonUtils;
import com.ning.billing.entitlement.engine.core.Engine;
import com.ning.billing.entitlement.engine.core.EntitlementNotificationKey;
+import com.ning.billing.entitlement.engine.dao.model.EntitlementEventModelDao;
+import com.ning.billing.entitlement.engine.dao.model.SubscriptionBundleModelDao;
+import com.ning.billing.entitlement.engine.dao.model.SubscriptionModelDao;
import com.ning.billing.entitlement.events.EntitlementEvent;
import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
import com.ning.billing.entitlement.events.user.ApiEvent;
@@ -63,12 +66,10 @@ import com.ning.billing.entitlement.events.user.ApiEventCancel;
import com.ning.billing.entitlement.events.user.ApiEventChange;
import com.ning.billing.entitlement.events.user.ApiEventType;
import com.ning.billing.entitlement.exceptions.EntitlementError;
-import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.EntityAudit;
-import com.ning.billing.util.dao.TableName;
+import com.ning.billing.util.entity.EntityPersistenceException;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionWrapper;
import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionalJdbiWrapper;
@@ -81,18 +82,17 @@ import com.ning.billing.util.notificationq.NotificationQueueService.NoSuchNotifi
import com.ning.billing.util.svcsapi.bus.InternalBus;
import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
+import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
-import com.google.inject.Inject;
+import com.google.common.collect.ImmutableList;
+
public class AuditedEntitlementDao implements EntitlementDao {
private static final Logger log = LoggerFactory.getLogger(AuditedEntitlementDao.class);
private final Clock clock;
- private final SubscriptionSqlDao subscriptionsDao;
- private final BundleSqlDao bundlesDao;
- private final EntitlementEventSqlDao eventsDao;
private final EntitySqlDaoTransactionalJdbiWrapper transactionalSqlDao;
private final NotificationQueueService notificationQueueService;
private final AddonUtils addonUtils;
@@ -102,9 +102,6 @@ public class AuditedEntitlementDao implements EntitlementDao {
public AuditedEntitlementDao(final IDBI dbi, final Clock clock, final AddonUtils addonUtils,
final NotificationQueueService notificationQueueService, final InternalBus eventBus, final CatalogService catalogService) {
this.clock = clock;
- this.subscriptionsDao = dbi.onDemand(SubscriptionSqlDao.class);
- this.eventsDao = dbi.onDemand(EntitlementEventSqlDao.class);
- this.bundlesDao = dbi.onDemand(BundleSqlDao.class);
this.transactionalSqlDao = new EntitySqlDaoTransactionalJdbiWrapper(dbi);
this.notificationQueueService = notificationQueueService;
this.addonUtils = addonUtils;
@@ -113,31 +110,66 @@ public class AuditedEntitlementDao implements EntitlementDao {
@Override
public SubscriptionBundle getSubscriptionBundleFromAccountAndKey(final UUID accountId, final String bundleKey, final InternalTenantContext context) {
- return bundlesDao.getBundleFromAccountAndKey(accountId.toString(), bundleKey, context);
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<SubscriptionBundle>() {
+ @Override
+ public SubscriptionBundle inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final SubscriptionBundleModelDao bundle = entitySqlDaoWrapperFactory.become(BundleSqlDao.class).getBundleFromAccountAndKey(accountId.toString(), bundleKey, context);
+ return SubscriptionBundleModelDao.toSubscriptionbundle(bundle);
+ }
+ });
}
@Override
public List<SubscriptionBundle> getSubscriptionBundleForAccount(final UUID accountId, final InternalTenantContext context) {
- return bundlesDao.getBundleFromAccount(accountId.toString(), context);
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<SubscriptionBundle>>() {
+ @Override
+ public List<SubscriptionBundle> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final List<SubscriptionBundleModelDao> models = entitySqlDaoWrapperFactory.become(BundleSqlDao.class).getBundleFromAccount(accountId.toString(), context);
+ return ImmutableList.<SubscriptionBundle>copyOf(Collections2.transform(models, new Function<SubscriptionBundleModelDao, SubscriptionBundle>() {
+ @Override
+ public SubscriptionBundle apply(@Nullable final SubscriptionBundleModelDao input) {
+ return SubscriptionBundleModelDao.toSubscriptionbundle(input);
+ }
+ }));
+ }
+ });
}
@Override
public SubscriptionBundle getSubscriptionBundleFromId(final UUID bundleId, final InternalTenantContext context) {
- return bundlesDao.getBundleFromId(bundleId.toString(), context);
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<SubscriptionBundle>() {
+ @Override
+ public SubscriptionBundle inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final SubscriptionBundleModelDao model = entitySqlDaoWrapperFactory.become(BundleSqlDao.class).getById(bundleId.toString(), context);
+ return SubscriptionBundleModelDao.toSubscriptionbundle(model);
+ }
+ });
}
@Override
public List<SubscriptionBundle> getSubscriptionBundlesForKey(final String bundleKey, final InternalTenantContext context) {
- return bundlesDao.getBundlesForKey(bundleKey, context);
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<SubscriptionBundle>>() {
+ @Override
+ public List<SubscriptionBundle> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final List<SubscriptionBundleModelDao> models = entitySqlDaoWrapperFactory.become(BundleSqlDao.class).getBundlesForKey(bundleKey, context);
+ return ImmutableList.<SubscriptionBundle>copyOf( Collections2.transform(models, new Function<SubscriptionBundleModelDao, SubscriptionBundle>() {
+ @Override
+ public SubscriptionBundle apply(@Nullable final SubscriptionBundleModelDao input) {
+ return SubscriptionBundleModelDao.toSubscriptionbundle(input);
+ }
+ }));
+ }
+ });
}
@Override
public SubscriptionBundle createSubscriptionBundle(final SubscriptionBundleData bundle, final InternalCallContext context) {
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<SubscriptionBundle>() {
@Override
- public SubscriptionBundle inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) {
- final BundleSqlDao bundlesDao = entitySqlDaoWrapperFactory.become(BundleSqlDao.class);
- bundlesDao.insertBundle(bundle, context);
+ public SubscriptionBundle inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws EntityPersistenceException {
+
+ final SubscriptionBundleModelDao model = new SubscriptionBundleModelDao(bundle);
+ entitySqlDaoWrapperFactory.become(BundleSqlDao.class).create(model, context);
return bundle;
}
});
@@ -145,25 +177,30 @@ public class AuditedEntitlementDao implements EntitlementDao {
@Override
public UUID getAccountIdFromSubscriptionId(final UUID subscriptionId, final InternalTenantContext context) {
- final Subscription subscription = subscriptionsDao.getSubscriptionFromId(subscriptionId.toString(), context);
- if (subscription == null) {
- log.error(String.format(ErrorCode.ENT_INVALID_SUBSCRIPTION_ID.getFormat(), subscriptionId.toString()));
- return null;
- }
- final UUID bundleId = subscription.getBundleId();
- if (bundleId == null) {
- log.error(String.format(ErrorCode.ENT_GET_NO_BUNDLE_FOR_SUBSCRIPTION.getFormat(), subscriptionId.toString()));
- return null;
- }
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<UUID>() {
+ @Override
+ public UUID inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final SubscriptionModelDao subscriptionModel = entitySqlDaoWrapperFactory.become(SubscriptionSqlDao.class).getById(subscriptionId.toString(), context);
+ if (subscriptionModel == null) {
+ log.error(String.format(ErrorCode.ENT_INVALID_SUBSCRIPTION_ID.getFormat(), subscriptionId.toString()));
+ return null;
+ }
- final SubscriptionBundle bundle = bundlesDao.getBundleFromId(bundleId.toString(), context);
- if (bundle == null) {
- log.error(String.format(ErrorCode.ENT_GET_INVALID_BUNDLE_ID.getFormat(), bundleId.toString()));
- return null;
- }
+ final UUID bundleId = subscriptionModel.getBundleId();
+ if (bundleId == null) {
+ log.error(String.format(ErrorCode.ENT_GET_NO_BUNDLE_FOR_SUBSCRIPTION.getFormat(), subscriptionId.toString()));
+ return null;
+ }
- return bundle.getAccountId();
+ final SubscriptionBundleModelDao bundleModel = entitySqlDaoWrapperFactory.become(BundleSqlDao.class).getById(bundleId.toString(), context);
+ if (bundleModel == null) {
+ log.error(String.format(ErrorCode.ENT_GET_INVALID_BUNDLE_ID.getFormat(), bundleId.toString()));
+ return null;
+ }
+ return bundleModel.getAccountId();
+ }
+ });
}
@Override
@@ -173,23 +210,55 @@ public class AuditedEntitlementDao implements EntitlementDao {
@Override
public Subscription getSubscriptionFromId(final SubscriptionFactory factory, final UUID subscriptionId, final InternalTenantContext context) {
- return buildSubscription(factory, subscriptionsDao.getSubscriptionFromId(subscriptionId.toString(), context), context);
+ return buildSubscription(factory, getSubscriptionFromId(subscriptionId, context), context);
+ }
+
+ private Subscription getSubscriptionFromId(final UUID subscriptionId, final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Subscription>() {
+ @Override
+ public Subscription inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final SubscriptionModelDao model = entitySqlDaoWrapperFactory.become(SubscriptionSqlDao.class).getById(subscriptionId.toString(), context);
+ return SubscriptionModelDao.toSubscription(model);
+ }
+ });
}
+
@Override
public List<Subscription> getSubscriptions(final SubscriptionFactory factory, final UUID bundleId, final InternalTenantContext context) {
- return buildBundleSubscriptions(bundleId, factory, subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString(), context), context);
+ return buildBundleSubscriptions(bundleId, factory, getSubscriptionFromBundleId(bundleId, context), context);
}
+ private List<Subscription> getSubscriptionFromBundleId(final UUID bundleId, final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<Subscription>>() {
+ @Override
+ public List<Subscription> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final List<SubscriptionModelDao> models = entitySqlDaoWrapperFactory.become(SubscriptionSqlDao.class).getSubscriptionsFromBundleId(bundleId.toString(), context);
+ return ImmutableList.<Subscription>copyOf( Collections2.transform(models, new Function<SubscriptionModelDao, Subscription>() {
+ @Override
+ public Subscription apply(@Nullable final SubscriptionModelDao input) {
+ return SubscriptionModelDao.toSubscription(input);
+ }
+ }));
+ }
+ });
+ }
+
+
+
@Override
public List<Subscription> getSubscriptionsForAccountAndKey(final SubscriptionFactory factory, final UUID accountId,
final String bundleKey, final InternalTenantContext context) {
- final SubscriptionBundle bundle = bundlesDao.getBundleFromAccountAndKey(accountId.toString(), bundleKey, context);
- if (bundle == null) {
- return Collections.emptyList();
- }
-
- return getSubscriptions(factory, bundle.getId(), context);
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<Subscription>>() {
+ @Override
+ public List<Subscription> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final SubscriptionBundleModelDao bundleModel = entitySqlDaoWrapperFactory.become(BundleSqlDao.class).getBundleFromAccountAndKey(accountId.toString(), bundleKey, context);
+ if (bundleModel == null) {
+ return Collections.emptyList();
+ }
+ return getSubscriptions(factory, bundleModel.getId(), context);
+ }
+ });
}
@Override
@@ -218,7 +287,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
final EntitlementEventSqlDao transactional = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class);
final UUID subscriptionId = subscription.getId();
cancelNextPhaseEventFromTransaction(subscriptionId, entitySqlDaoWrapperFactory, context);
- transactional.insertEvent(nextPhase, context);
+ transactional.create(new EntitlementEventModelDao(nextPhase), context);
recordFutureNotificationFromTransaction(entitySqlDaoWrapperFactory,
nextPhase.getEffectiveDate(),
new EntitlementNotificationKey(nextPhase.getId()),
@@ -234,12 +303,30 @@ public class AuditedEntitlementDao implements EntitlementDao {
@Override
public EntitlementEvent getEventById(final UUID eventId, final InternalTenantContext context) {
- return eventsDao.getEventById(eventId.toString(), context);
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<EntitlementEvent>() {
+ @Override
+ public EntitlementEvent inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ EntitlementEventModelDao model = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class).getById(eventId.toString(), context);
+ return EntitlementEventModelDao.toEntitlementEvent(model);
+ }
+ });
}
@Override
public List<EntitlementEvent> getEventsForSubscription(final UUID subscriptionId, final InternalTenantContext context) {
- return eventsDao.getEventsForSubscription(subscriptionId.toString(), context);
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<EntitlementEvent>>() {
+ @Override
+ public List<EntitlementEvent> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final List<EntitlementEventModelDao> models = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class).getEventsForSubscription(subscriptionId.toString(), context);
+
+ return ImmutableList.<EntitlementEvent>copyOf( Collections2.transform(models, new Function<EntitlementEventModelDao, EntitlementEvent>() {
+ @Override
+ public EntitlementEvent apply(@Nullable final EntitlementEventModelDao input) {
+ return EntitlementEventModelDao.toEntitlementEvent(input);
+ }
+ }));
+ }
+ });
}
@Override
@@ -249,18 +336,23 @@ public class AuditedEntitlementDao implements EntitlementDao {
public Map<UUID, List<EntitlementEvent>> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final SubscriptionSqlDao transactional = entitySqlDaoWrapperFactory.become(SubscriptionSqlDao.class);
- final List<Subscription> subscriptions = transactional.getSubscriptionsFromBundleId(bundleId.toString(), context);
- if (subscriptions.size() == 0) {
+ final List<SubscriptionModelDao> subscriptionModels = transactional.getSubscriptionsFromBundleId(bundleId.toString(), context);
+ if (subscriptionModels.size() == 0) {
return Collections.emptyMap();
}
final EntitlementEventSqlDao eventsDaoFromSameTransaction = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class);
final Map<UUID, List<EntitlementEvent>> result = new HashMap<UUID, List<EntitlementEvent>>();
- for (final Subscription cur : subscriptions) {
- final List<EntitlementEvent> events = eventsDaoFromSameTransaction.getEventsForSubscription(cur.getId().toString(), context);
+ for (final SubscriptionModelDao cur : subscriptionModels) {
+ final List<EntitlementEventModelDao> eventModels = eventsDaoFromSameTransaction.getEventsForSubscription(cur.getId().toString(), context);
+ final List<EntitlementEvent> events = ImmutableList.<EntitlementEvent>copyOf(Collections2.transform(eventModels, new Function<EntitlementEventModelDao, EntitlementEvent>() {
+ @Override
+ public EntitlementEvent apply(@Nullable final EntitlementEventModelDao input) {
+ return EntitlementEventModelDao.toEntitlementEvent(input);
+ }
+ }));
result.put(cur.getId(), events);
}
-
return result;
}
});
@@ -269,7 +361,20 @@ public class AuditedEntitlementDao implements EntitlementDao {
@Override
public List<EntitlementEvent> getPendingEventsForSubscription(final UUID subscriptionId, final InternalTenantContext context) {
final Date now = clock.getUTCNow().toDate();
- return eventsDao.getFutureActiveEventForSubscription(subscriptionId.toString(), now, context);
+
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<EntitlementEvent>>() {
+ @Override
+ public List<EntitlementEvent> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final List<EntitlementEventModelDao> eventModels = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class).getFutureActiveEventForSubscription(subscriptionId.toString(), now, context);
+ final List<EntitlementEvent> events = ImmutableList.<EntitlementEvent>copyOf(Collections2.transform(eventModels, new Function<EntitlementEventModelDao, EntitlementEvent>() {
+ @Override
+ public EntitlementEvent apply(@Nullable final EntitlementEventModelDao input) {
+ return EntitlementEventModelDao.toEntitlementEvent(input);
+ }
+ }));
+ return events;
+ }
+ });
}
@Override
@@ -278,11 +383,11 @@ public class AuditedEntitlementDao implements EntitlementDao {
@Override
public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final SubscriptionSqlDao transactional = entitySqlDaoWrapperFactory.become(SubscriptionSqlDao.class);
- transactional.insertSubscription(subscription, context);
+ transactional.create(new SubscriptionModelDao(subscription), context);
final EntitlementEventSqlDao eventsDaoFromSameTransaction = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class);
for (final EntitlementEvent cur : initialEvents) {
- eventsDaoFromSameTransaction.insertEvent(cur, context);
+ eventsDaoFromSameTransaction.create(new EntitlementEventModelDao(cur), context);
recordFutureNotificationFromTransaction(entitySqlDaoWrapperFactory,
cur.getEffectiveDate(),
new EntitlementNotificationKey(cur.getId()),
@@ -305,7 +410,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
final EntitlementEventSqlDao transactional = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class);
for (final EntitlementEvent cur : recreateEvents) {
- transactional.insertEvent(cur, context);
+ transactional.create(new EntitlementEventModelDao(cur), context);
recordFutureNotificationFromTransaction(entitySqlDaoWrapperFactory,
cur.getEffectiveDate(),
new EntitlementNotificationKey(cur.getId()),
@@ -340,12 +445,12 @@ public class AuditedEntitlementDao implements EntitlementDao {
final EntitlementEventSqlDao transactional = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class);
final UUID subscriptionId = subscription.getId();
- EntitlementEvent cancelledEvent = null;
+ EntitlementEventModelDao cancelledEvent = null;
final Date now = clock.getUTCNow().toDate();
- final List<EntitlementEvent> events = transactional.getFutureActiveEventForSubscription(subscriptionId.toString(), now, context);
+ final List<EntitlementEventModelDao> eventModels = transactional.getFutureActiveEventForSubscription(subscriptionId.toString(), now, context);
- for (final EntitlementEvent cur : events) {
- if (cur.getType() == EventType.API_USER && ((ApiEvent) cur).getEventType() == ApiEventType.CANCEL) {
+ for (final EntitlementEventModelDao cur : eventModels) {
+ if (cur.getUserType() == ApiEventType.CANCEL) {
if (cancelledEvent != null) {
throw new EntitlementError(String.format("Found multiple cancel active events for subscriptions %s", subscriptionId.toString()));
}
@@ -357,7 +462,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
final String cancelledEventId = cancelledEvent.getId().toString();
transactional.unactiveEvent(cancelledEventId, context);
for (final EntitlementEvent cur : uncancelEvents) {
- transactional.insertEvent(cur, context);
+ transactional.create(new EntitlementEventModelDao(cur), context);
recordFutureNotificationFromTransaction(entitySqlDaoWrapperFactory,
cur.getEffectiveDate(),
new EntitlementNotificationKey(cur.getId()),
@@ -384,7 +489,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
cancelFutureEventsFromTransaction(subscriptionId, entitySqlDaoWrapperFactory, context);
for (final EntitlementEvent cur : changeEvents) {
- transactional.insertEvent(cur, context);
+ transactional.create(new EntitlementEventModelDao(cur), context);
recordFutureNotificationFromTransaction(entitySqlDaoWrapperFactory,
cur.getEffectiveDate(),
new EntitlementNotificationKey(cur.getId()),
@@ -400,10 +505,11 @@ public class AuditedEntitlementDao implements EntitlementDao {
});
}
- private void cancelSubscriptionFromTransaction(final SubscriptionData subscription, final EntitlementEvent cancelEvent, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context, final int seqId) {
+ private void cancelSubscriptionFromTransaction(final SubscriptionData subscription, final EntitlementEvent cancelEvent, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context, final int seqId)
+ throws EntityPersistenceException {
final UUID subscriptionId = subscription.getId();
cancelFutureEventsFromTransaction(subscriptionId, entitySqlDaoWrapperFactory, context);
- entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class).insertEvent(cancelEvent, context);
+ entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class).create(new EntitlementEventModelDao(cancelEvent), context);
recordFutureNotificationFromTransaction(entitySqlDaoWrapperFactory,
cancelEvent.getEffectiveDate(),
new EntitlementNotificationKey(cancelEvent.getId(), seqId),
@@ -419,20 +525,20 @@ public class AuditedEntitlementDao implements EntitlementDao {
private void cancelFutureEventsFromTransaction(final UUID subscriptionId, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context) {
final Date now = clock.getUTCNow().toDate();
- final List<EntitlementEvent> events = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class).getFutureActiveEventForSubscription(subscriptionId.toString(), now, context);
- for (final EntitlementEvent cur : events) {
+ final List<EntitlementEventModelDao> eventModels = entitySqlDaoWrapperFactory.become(EntitlementEventSqlDao.class).getFutureActiveEventForSubscription(subscriptionId.toString(), now, context);
+ for (final EntitlementEventModelDao cur : eventModels) {
unactivateEventFromTransaction(cur, entitySqlDaoWrapperFactory, context);
}
}
private void cancelFutureEventFromTransaction(final UUID subscriptionId, final EntitySqlDaoWrapperFactory<EntitySqlDao> dao, final EventType type,
@Nullable final ApiEventType apiType, final InternalCallContext context) {
- EntitlementEvent futureEvent = null;
+ EntitlementEventModelDao futureEvent = null;
final Date now = clock.getUTCNow().toDate();
- final List<EntitlementEvent> events = dao.become(EntitlementEventSqlDao.class).getFutureActiveEventForSubscription(subscriptionId.toString(), now, context);
- for (final EntitlementEvent cur : events) {
- if (cur.getType() == type &&
- (apiType == null || apiType == ((ApiEvent) cur).getEventType())) {
+ final List<EntitlementEventModelDao> eventModels = dao.become(EntitlementEventSqlDao.class).getFutureActiveEventForSubscription(subscriptionId.toString(), now, context);
+ for (final EntitlementEventModelDao cur : eventModels) {
+ if (cur.getEventType() == type &&
+ (apiType == null || apiType == cur.getUserType())) {
if (futureEvent != null) {
throw new EntitlementError(String.format("Found multiple future events for type %s for subscriptions %s",
type, subscriptionId.toString()));
@@ -443,7 +549,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
unactivateEventFromTransaction(futureEvent, dao, context);
}
- private void unactivateEventFromTransaction(final EntitlementEvent event, final EntitySqlDaoWrapperFactory<EntitySqlDao> dao, final InternalCallContext context) {
+ private void unactivateEventFromTransaction(final EntitlementEventModelDao event, final EntitySqlDaoWrapperFactory<EntitySqlDao> dao, final InternalCallContext context) {
if (event != null) {
final String eventId = event.getId().toString();
dao.become(EntitlementEventSqlDao.class).unactiveEvent(eventId, context);
@@ -500,7 +606,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
EntitlementEvent futureBaseEvent = null;
final List<Subscription> result = new ArrayList<Subscription>(input.size());
for (final Subscription cur : input) {
- final List<EntitlementEvent> events = eventsDao.getEventsForSubscription(cur.getId().toString(), context);
+ final List<EntitlementEvent> events = getEventsForSubscription(cur.getId(), context);
Subscription reloaded = factory.createSubscription(new SubscriptionBuilder((SubscriptionData) cur), events);
switch (cur.getCategory()) {
@@ -581,7 +687,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
transEventDao.updateVersion(event.getId().toString(), event.getActiveVersion(), context);
}
for (final EntitlementEvent event : cur.getNewEvents()) {
- transEventDao.insertEvent(event, context);
+ transEventDao.create(new EntitlementEventModelDao(event), context);
if (event.getEffectiveDate().isAfter(clock.getUTCNow())) {
recordFutureNotificationFromTransaction(entitySqlDaoWrapperFactory,
event.getEffectiveDate(),
@@ -594,7 +700,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
try {
// Note: we don't send a requested change event here, but a repair event
final RepairEntitlementInternalEvent busEvent = new DefaultRepairEntitlementEvent(context.getUserToken(), accountId, bundleId, clock.getUTCNow(),
- context.getAccountRecordId(), context.getTenantRecordId());
+ context.getAccountRecordId(), context.getTenantRecordId());
eventBus.postFromTransaction(busEvent, entitySqlDaoWrapperFactory, context);
} catch (EventBusException e) {
log.warn("Failed to post repair entitlement event for bundle " + bundleId, e);
@@ -626,13 +732,12 @@ public class AuditedEntitlementDao implements EntitlementDao {
}
private Subscription getBaseSubscription(final SubscriptionFactory factory, final UUID bundleId, final boolean rebuildSubscription, final InternalTenantContext context) {
- final List<Subscription> subscriptions = subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString(), context);
+ final List<Subscription> subscriptions = getSubscriptionFromBundleId(bundleId, context);
for (final Subscription cur : subscriptions) {
if (cur.getCategory() == ProductCategory.BASE) {
return rebuildSubscription ? buildSubscription(factory, cur, context) : cur;
}
}
-
return null;
}
@@ -659,35 +764,35 @@ public class AuditedEntitlementDao implements EntitlementDao {
}
private void migrateBundleDataFromTransaction(final BundleMigrationData bundleTransferData, final EntitlementEventSqlDao transactional,
- final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context) {
+ final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context) throws EntityPersistenceException {
final SubscriptionSqlDao transSubDao = entitySqlDaoWrapperFactory.become(SubscriptionSqlDao.class);
final BundleSqlDao transBundleDao = entitySqlDaoWrapperFactory.become(BundleSqlDao.class);
final SubscriptionBundleData bundleData = bundleTransferData.getData();
- final SubscriptionBundle existingBundle = transBundleDao.getBundleFromAccountAndKey(bundleData.getAccountId().toString(), bundleData.getKey(), context);
- if (existingBundle != null) {
- log.error(String.format("Attempted to create a bundle for account %s and key %s that already existed, skip...", bundleData.getAccountId().toString(), bundleData.getKey()));
+ final SubscriptionBundleModelDao existingBundleModel = transBundleDao.getBundleFromAccountAndKey(bundleData.getAccountId().toString(), bundleData.getExternalKey(), context);
+ if (existingBundleModel != null) {
+ log.error(String.format("Attempted to create a bundle for account %s and key %s that already existed, skip...", bundleData.getAccountId().toString(), bundleData.getExternalKey()));
return;
}
for (final SubscriptionMigrationData curSubscription : bundleTransferData.getSubscriptions()) {
final SubscriptionData subData = curSubscription.getData();
for (final EntitlementEvent curEvent : curSubscription.getInitialEvents()) {
- transactional.insertEvent(curEvent, context);
+ transactional.create(new EntitlementEventModelDao(curEvent), context);
recordFutureNotificationFromTransaction(entitySqlDaoWrapperFactory,
curEvent.getEffectiveDate(),
new EntitlementNotificationKey(curEvent.getId()),
context);
}
- transSubDao.insertSubscription(subData, context);
+ transSubDao.create(new SubscriptionModelDao(subData), context);
// Notify the Bus of the latest requested change
final EntitlementEvent finalEvent = curSubscription.getInitialEvents().get(curSubscription.getInitialEvents().size() - 1);
notifyBusOfRequestedChange(entitySqlDaoWrapperFactory, subData, finalEvent, context);
}
- transBundleDao.insertBundle(bundleData, context);
+ transBundleDao.create(new SubscriptionBundleModelDao(bundleData), context);
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
index 65671d4..d487ba4 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
@@ -33,6 +33,7 @@ import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
+import com.ning.billing.entitlement.engine.dao.model.SubscriptionBundleModelDao;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
@@ -43,12 +44,8 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(BundleSqlDao.ISubscriptionBundleSqlMapper.class)
-public interface BundleSqlDao extends EntitySqlDao<SubscriptionBundle> {
+public interface BundleSqlDao extends EntitySqlDao<SubscriptionBundleModelDao> {
- @SqlUpdate
- @Audited(ChangeType.INSERT)
- public void insertBundle(@BindBean SubscriptionBundleData bundle,
- @BindBean final InternalCallContext context);
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -57,32 +54,30 @@ public interface BundleSqlDao extends EntitySqlDao<SubscriptionBundle> {
@BindBean final InternalCallContext context);
@SqlQuery
- public SubscriptionBundle getBundleFromId(@Bind("id") String id,
- @BindBean final InternalTenantContext context);
-
- @SqlQuery
- public SubscriptionBundle getBundleFromAccountAndKey(@Bind("accountId") String accountId,
+ public SubscriptionBundleModelDao getBundleFromAccountAndKey(@Bind("accountId") String accountId,
@Bind("externalKey") String externalKey,
@BindBean final InternalTenantContext context);
@SqlQuery
- public List<SubscriptionBundle> getBundleFromAccount(@Bind("accountId") String accountId,
+ public List<SubscriptionBundleModelDao> getBundleFromAccount(@Bind("accountId") String accountId,
@BindBean final InternalTenantContext context);
@SqlQuery
- public List<SubscriptionBundle> getBundlesForKey(@Bind("externalKey") String externalKey,
+ public List<SubscriptionBundleModelDao> getBundlesForKey(@Bind("externalKey") String externalKey,
@BindBean final InternalTenantContext context);
- public static class ISubscriptionBundleSqlMapper extends MapperBase implements ResultSetMapper<SubscriptionBundle> {
+ public static class ISubscriptionBundleSqlMapper extends MapperBase implements ResultSetMapper<SubscriptionBundleModelDao> {
@Override
- public SubscriptionBundle map(final int arg, final ResultSet r, final StatementContext ctx) throws SQLException {
+ public SubscriptionBundleModelDao map(final int arg, final ResultSet r, final StatementContext ctx) throws SQLException {
final UUID id = UUID.fromString(r.getString("id"));
final String key = r.getString("external_key");
final UUID accountId = UUID.fromString(r.getString("account_id"));
final DateTime lastSysUpdateDate = getDateTime(r, "last_sys_update_date");
- return new SubscriptionBundleData(id, key, accountId, lastSysUpdateDate);
+ final DateTime createdDate = getDateTime(r, "created_date");
+ final DateTime updatedDate = getDateTime(r, "updated_date");
+ return new SubscriptionBundleModelDao(id, key, accountId, lastSysUpdateDate, createdDate, updatedDate);
}
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java
index 8a45d11..2e21dcf 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java
@@ -32,22 +32,9 @@ import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.entitlement.engine.dao.EntitlementEventSqlDao.EventSqlMapper;
-import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.entitlement.engine.dao.model.EntitlementEventModelDao;
import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
-import com.ning.billing.entitlement.events.EventBaseBuilder;
-import com.ning.billing.entitlement.events.phase.PhaseEventBuilder;
-import com.ning.billing.entitlement.events.phase.PhaseEventData;
-import com.ning.billing.entitlement.events.user.ApiEventBuilder;
-import com.ning.billing.entitlement.events.user.ApiEventCancel;
-import com.ning.billing.entitlement.events.user.ApiEventChange;
-import com.ning.billing.entitlement.events.user.ApiEventCreate;
-import com.ning.billing.entitlement.events.user.ApiEventMigrateBilling;
-import com.ning.billing.entitlement.events.user.ApiEventMigrateEntitlement;
-import com.ning.billing.entitlement.events.user.ApiEventReCreate;
-import com.ning.billing.entitlement.events.user.ApiEventTransfer;
import com.ning.billing.entitlement.events.user.ApiEventType;
-import com.ning.billing.entitlement.events.user.ApiEventUncancel;
-import com.ning.billing.entitlement.exceptions.EntitlementError;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
@@ -58,16 +45,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(EventSqlMapper.class)
-public interface EntitlementEventSqlDao extends EntitySqlDao<EntitlementEvent> {
-
- @SqlQuery
- public EntitlementEvent getEventById(@Bind("id") String id,
- @BindBean final InternalTenantContext context);
-
- @SqlUpdate
- @Audited(ChangeType.INSERT)
- public void insertEvent(@BindBean final EntitlementEvent evt,
- @BindBean final InternalCallContext context);
+public interface EntitlementEventSqlDao extends EntitySqlDao<EntitlementEventModelDao> {
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -86,19 +64,19 @@ public interface EntitlementEventSqlDao extends EntitySqlDao<EntitlementEvent> {
@BindBean final InternalCallContext context);
@SqlQuery
- public List<EntitlementEvent> getFutureActiveEventForSubscription(@Bind("subscriptionId") String subscriptionId,
- @Bind("now") Date now,
- @BindBean final InternalTenantContext context);
+ public List<EntitlementEventModelDao> getFutureActiveEventForSubscription(@Bind("subscriptionId") String subscriptionId,
+ @Bind("now") Date now,
+ @BindBean final InternalTenantContext context);
@SqlQuery
- public List<EntitlementEvent> getEventsForSubscription(@Bind("subscriptionId") String subscriptionId,
- @BindBean final InternalTenantContext context);
+ public List<EntitlementEventModelDao> getEventsForSubscription(@Bind("subscriptionId") String subscriptionId,
+ @BindBean final InternalTenantContext context);
- public static class EventSqlMapper extends MapperBase implements ResultSetMapper<EntitlementEvent> {
+ public static class EventSqlMapper extends MapperBase implements ResultSetMapper<EntitlementEventModelDao> {
@Override
- public EntitlementEvent map(final int index, final ResultSet r, final StatementContext ctx)
+ public EntitlementEventModelDao map(final int index, final ResultSet r, final StatementContext ctx)
throws SQLException {
final long totalOrdering = r.getLong("record_id");
@@ -117,55 +95,9 @@ public interface EntitlementEventSqlDao extends EntitySqlDao<EntitlementEvent> {
final boolean isActive = r.getBoolean("is_active");
final UUID userToken = r.getString("user_token") != null ? UUID.fromString(r.getString("user_token")) : null;
- final EventBaseBuilder<?> base = ((eventType == EventType.PHASE) ?
- new PhaseEventBuilder() :
- new ApiEventBuilder())
- .setTotalOrdering(totalOrdering)
- .setUuid(id)
- .setSubscriptionId(subscriptionId)
- .setCreatedDate(createdDate)
- .setUpdatedDate(updatedDate)
- .setRequestedDate(requestedDate)
- .setEffectiveDate(effectiveDate)
- .setProcessedDate(createdDate)
- .setActiveVersion(currentVersion)
- .setActive(isActive);
-
- EntitlementEvent result = null;
- if (eventType == EventType.PHASE) {
- result = new PhaseEventData(new PhaseEventBuilder(base).setPhaseName(phaseName));
- } else if (eventType == EventType.API_USER) {
- final ApiEventBuilder builder = new ApiEventBuilder(base)
- .setEventPlan(planName)
- .setEventPlanPhase(phaseName)
- .setEventPriceList(priceListName)
- .setEventType(userType)
- .setUserToken(userToken)
- .setFromDisk(true);
-
- if (userType == ApiEventType.CREATE) {
- result = new ApiEventCreate(builder);
- } else if (userType == ApiEventType.RE_CREATE) {
- result = new ApiEventReCreate(builder);
- } else if (userType == ApiEventType.MIGRATE_ENTITLEMENT) {
- result = new ApiEventMigrateEntitlement(builder);
- } else if (userType == ApiEventType.MIGRATE_BILLING) {
- result = new ApiEventMigrateBilling(builder);
- } else if (userType == ApiEventType.TRANSFER) {
- result = new ApiEventTransfer(builder);
- } else if (userType == ApiEventType.CHANGE) {
- result = new ApiEventChange(builder);
- } else if (userType == ApiEventType.CANCEL) {
- result = new ApiEventCancel(builder);
- } else if (userType == ApiEventType.RE_CREATE) {
- result = new ApiEventReCreate(builder);
- } else if (userType == ApiEventType.UNCANCEL) {
- result = new ApiEventUncancel(builder);
- }
- } else {
- throw new EntitlementError(String.format("Can't deserialize event %s", eventType));
- }
- return result;
+ return new EntitlementEventModelDao(id, totalOrdering, eventType, userType, requestedDate, effectiveDate, subscriptionId,
+ planName, phaseName, priceListName, currentVersion, isActive, createdDate, updatedDate);
+
}
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java
new file mode 100644
index 0000000..7972c84
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright 2010-2012 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.model;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.events.EntitlementEvent;
+import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
+import com.ning.billing.entitlement.events.EventBaseBuilder;
+import com.ning.billing.entitlement.events.phase.PhaseEventBuilder;
+import com.ning.billing.entitlement.events.phase.PhaseEventData;
+import com.ning.billing.entitlement.events.user.ApiEvent;
+import com.ning.billing.entitlement.events.user.ApiEventBuilder;
+import com.ning.billing.entitlement.events.user.ApiEventCancel;
+import com.ning.billing.entitlement.events.user.ApiEventChange;
+import com.ning.billing.entitlement.events.user.ApiEventCreate;
+import com.ning.billing.entitlement.events.user.ApiEventMigrateBilling;
+import com.ning.billing.entitlement.events.user.ApiEventMigrateEntitlement;
+import com.ning.billing.entitlement.events.user.ApiEventReCreate;
+import com.ning.billing.entitlement.events.user.ApiEventTransfer;
+import com.ning.billing.entitlement.events.user.ApiEventType;
+import com.ning.billing.entitlement.events.user.ApiEventUncancel;
+import com.ning.billing.entitlement.exceptions.EntitlementError;
+import com.ning.billing.util.entity.EntityBase;
+
+public class EntitlementEventModelDao extends EntityBase {
+
+ private final long totalOrdering;
+ private final EventType eventType;
+ private final ApiEventType userType;
+ private final DateTime requestedDate;
+ private final DateTime effectiveDate;
+ private final UUID subscriptionId;
+ private final String planName;
+ private final String phaseName;
+ private final String priceListName;
+ private final long currentVersion;
+ private final boolean isActive;
+
+ public EntitlementEventModelDao(final UUID id, final long totalOrdering, final EventType eventType, final ApiEventType userType,
+ final DateTime requestedDate, final DateTime effectiveDate, final UUID subscriptionId,
+ final String planName, final String phaseName, final String priceListName, final long currentVersion,
+ final boolean active, final DateTime createDate, final DateTime updateDate) {
+ super(id, createDate, updateDate);
+ this.totalOrdering = totalOrdering;
+ this.eventType = eventType;
+ this.userType = userType;
+ this.requestedDate = requestedDate;
+ this.effectiveDate = effectiveDate;
+ this.subscriptionId = subscriptionId;
+ this.planName = planName;
+ this.phaseName = phaseName;
+ this.priceListName = priceListName;
+ this.currentVersion = currentVersion;
+ this.isActive = active;
+ }
+
+ public EntitlementEventModelDao(final EntitlementEvent src) {
+ super(src.getId(), src.getCreatedDate(), src.getUpdatedDate());
+ this.totalOrdering = src.getTotalOrdering();
+ this.eventType = src.getType();
+ this.userType = eventType == EventType.API_USER ? ((ApiEvent) src).getEventType() : null;
+ this.requestedDate = src.getRequestedDate();
+ this.effectiveDate = src.getEffectiveDate();
+ this.subscriptionId = src.getSubscriptionId();
+ this.planName = eventType == EventType.API_USER ? ((ApiEvent) src).getEventPlan() : null;
+ this.phaseName = eventType == EventType.API_USER ? ((ApiEvent) src).getEventPlanPhase() : null;
+ this.priceListName = eventType == EventType.API_USER ? ((ApiEvent) src).getPriceList() : null;
+ this.currentVersion = src.getActiveVersion();
+ this.isActive = src.isActive();
+ }
+
+ public long getTotalOrdering() {
+ return totalOrdering;
+ }
+
+ public EventType getEventType() {
+ return eventType;
+ }
+
+ public ApiEventType getUserType() {
+ return userType;
+ }
+
+ public DateTime getRequestedDate() {
+ return requestedDate;
+ }
+
+ public DateTime getEffectiveDate() {
+ return effectiveDate;
+ }
+
+ public UUID getSubscriptionId() {
+ return subscriptionId;
+ }
+
+ public String getPlanName() {
+ return planName;
+ }
+
+ public String getPhaseName() {
+ return phaseName;
+ }
+
+ public String getPriceListName() {
+ return priceListName;
+ }
+
+ public long getCurrentVersion() {
+ return currentVersion;
+ }
+
+ public boolean isActive() {
+ return isActive;
+ }
+
+ public static EntitlementEvent toEntitlementEvent(EntitlementEventModelDao src) {
+
+ final EventBaseBuilder<?> base = ((src.getEventType() == EventType.PHASE) ?
+ new PhaseEventBuilder() :
+ new ApiEventBuilder())
+ .setTotalOrdering(src.getTotalOrdering())
+ .setUuid(src.getId())
+ .setSubscriptionId(src.getSubscriptionId())
+ .setCreatedDate(src.getCreatedDate())
+ .setUpdatedDate(src.getUpdatedDate())
+ .setRequestedDate(src.getRequestedDate())
+ .setEffectiveDate(src.getEffectiveDate())
+ .setProcessedDate(src.getCreatedDate())
+ .setActiveVersion(src.getCurrentVersion())
+ .setActive(src.isActive());
+
+ EntitlementEvent result = null;
+ if (src.getEventType() == EventType.PHASE) {
+ result = new PhaseEventData(new PhaseEventBuilder(base).setPhaseName(src.getPhaseName()));
+ } else if (src.getEventType() == EventType.API_USER) {
+ final ApiEventBuilder builder = new ApiEventBuilder(base)
+ .setEventPlan(src.getPlanName())
+ .setEventPlanPhase(src.getPhaseName())
+ .setEventPriceList(src.getPriceListName())
+ .setEventType(src.getUserType())
+ .setFromDisk(true);
+
+ if (src.getUserType() == ApiEventType.CREATE) {
+ result = new ApiEventCreate(builder);
+ } else if (src.getUserType() == ApiEventType.RE_CREATE) {
+ result = new ApiEventReCreate(builder);
+ } else if (src.getUserType() == ApiEventType.MIGRATE_ENTITLEMENT) {
+ result = new ApiEventMigrateEntitlement(builder);
+ } else if (src.getUserType() == ApiEventType.MIGRATE_BILLING) {
+ result = new ApiEventMigrateBilling(builder);
+ } else if (src.getUserType() == ApiEventType.TRANSFER) {
+ result = new ApiEventTransfer(builder);
+ } else if (src.getUserType() == ApiEventType.CHANGE) {
+ result = new ApiEventChange(builder);
+ } else if (src.getUserType() == ApiEventType.CANCEL) {
+ result = new ApiEventCancel(builder);
+ } else if (src.getUserType() == ApiEventType.RE_CREATE) {
+ result = new ApiEventReCreate(builder);
+ } else if (src.getUserType() == ApiEventType.UNCANCEL) {
+ result = new ApiEventUncancel(builder);
+ }
+ } else {
+ throw new EntitlementError(String.format("Can't figure out event %s", src.getEventType()));
+ }
+ return result;
+ }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java
new file mode 100644
index 0000000..1f470f2
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010-2012 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.model;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
+import com.ning.billing.util.entity.EntityBase;
+
+public class SubscriptionBundleModelDao extends EntityBase {
+
+ private final String key;
+ private final UUID accountId;
+ private final DateTime lastSysUpdateDate;
+
+ public SubscriptionBundleModelDao(final UUID id, final String key, final UUID accountId, final DateTime lastSysUpdateDate, final DateTime createdDate, final DateTime updateDate) {
+ super(id, createdDate, updateDate);
+ this.key = key;
+ this.accountId = accountId;
+ this.lastSysUpdateDate = lastSysUpdateDate;
+ }
+
+
+ public SubscriptionBundleModelDao(SubscriptionBundleData input) {
+ this(input.getId(), input.getExternalKey(), input.getAccountId(), input.getLastSysUpdateDate(), input.getCreatedDate(), input.getUpdatedDate());
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public UUID getAccountId() {
+ return accountId;
+ }
+
+ public DateTime getLastSysUpdateDate() {
+ return lastSysUpdateDate;
+ }
+
+ public static SubscriptionBundle toSubscriptionbundle(SubscriptionBundleModelDao src) {
+ if (src == null) {
+ return null;
+ }
+ return new SubscriptionBundleData(src.getId(), src.getKey(), src.getAccountId(), src.getLastSysUpdateDate());
+ }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java
new file mode 100644
index 0000000..d58021f
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2010-2012 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.model;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory.SubscriptionBuilder;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.util.entity.EntityBase;
+
+public class SubscriptionModelDao extends EntityBase {
+
+ private final UUID bundleId;
+ private final ProductCategory category;
+ private final DateTime startDate;
+ private final DateTime bundleStartDate;
+ private final long activeVersion;
+ private final DateTime chargedThroughDate;
+ private final DateTime paidThroughDate;
+
+ public SubscriptionModelDao(final UUID id, final UUID bundleId, final ProductCategory category, final DateTime startDate, final DateTime bundleStartDate,
+ final long activeVersion, final DateTime chargedThroughDate, final DateTime paidThroughDate, final DateTime createdDate, final DateTime updateDate) {
+ super(id, createdDate, updateDate);
+ this.bundleId = bundleId;
+ this.category = category;
+ this.startDate = startDate;
+ this.bundleStartDate = bundleStartDate;
+ this.activeVersion = activeVersion;
+ this.chargedThroughDate = chargedThroughDate;
+ this.paidThroughDate = paidThroughDate;
+ }
+
+ public SubscriptionModelDao(final SubscriptionData src) {
+ this(src.getId(), src.getBundleId(), src.getCategory(), src.getAlignStartDate(), src.getBundleStartDate(), src.getActiveVersion(),
+ src.getChargedThroughDate(), src.getPaidThroughDate(), src.getCreatedDate(), src.getUpdatedDate());
+ }
+
+ public UUID getBundleId() {
+ return bundleId;
+ }
+
+ public ProductCategory getCategory() {
+ return category;
+ }
+
+ public DateTime getStartDate() {
+ return startDate;
+ }
+
+ public DateTime getBundleStartDate() {
+ return bundleStartDate;
+ }
+
+ public long getActiveVersion() {
+ return activeVersion;
+ }
+
+ public DateTime getChargedThroughDate() {
+ return chargedThroughDate;
+ }
+
+ public DateTime getPaidThroughDate() {
+ return paidThroughDate;
+ }
+
+ public static Subscription toSubscription(SubscriptionModelDao src) {
+ if (src == null) {
+ return null;
+ }
+ return new SubscriptionData(new SubscriptionBuilder()
+ .setId(src.getId())
+ .setBundleId(src.getBundleId())
+ .setCategory(src.getCategory())
+ .setCreatedDate(src.getCreatedDate())
+ .setUpdatedDate(src.getUpdatedDate())
+ .setBundleStartDate(src.getBundleStartDate())
+ .setAlignStartDate(src.getStartDate())
+ .setActiveVersion(src.getActiveVersion())
+ .setChargedThroughDate(src.getChargedThroughDate())
+ .setPaidThroughDate(src.getPaidThroughDate())
+ .setCreatedDate(src.getCreatedDate())
+ .setUpdatedDate(src.getUpdatedDate()));
+ }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
index e7545eb..aa6793e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
@@ -38,6 +38,7 @@ import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory.Subscrip
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.SubscriptionData;
import com.ning.billing.entitlement.engine.dao.SubscriptionSqlDao.SubscriptionMapper;
+import com.ning.billing.entitlement.engine.dao.model.SubscriptionModelDao;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
@@ -50,19 +51,10 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(SubscriptionMapper.class)
-public interface SubscriptionSqlDao extends EntitySqlDao<Subscription> {
-
- @SqlUpdate
- @Audited(ChangeType.INSERT)
- public void insertSubscription(@BindBean SubscriptionData sub,
- @BindBean final InternalCallContext context);
+public interface SubscriptionSqlDao extends EntitySqlDao<SubscriptionModelDao> {
@SqlQuery
- public Subscription getSubscriptionFromId(@Bind("id") String id,
- @BindBean final InternalTenantContext context);
-
- @SqlQuery
- public List<Subscription> getSubscriptionsFromBundleId(@Bind("bundleId") String bundleId,
+ public List<SubscriptionModelDao> getSubscriptionsFromBundleId(@Bind("bundleId") String bundleId,
@BindBean final InternalTenantContext context);
@SqlUpdate
@@ -83,10 +75,10 @@ public interface SubscriptionSqlDao extends EntitySqlDao<Subscription> {
@BindBean final InternalCallContext context);
- public static class SubscriptionMapper extends MapperBase implements ResultSetMapper<Subscription> {
+ public static class SubscriptionMapper extends MapperBase implements ResultSetMapper<SubscriptionModelDao> {
@Override
- public SubscriptionData map(final int arg0, final ResultSet r, final StatementContext ctx)
+ public SubscriptionModelDao map(final int arg0, final ResultSet r, final StatementContext ctx)
throws SQLException {
final UUID id = UUID.fromString(r.getString("id"));
final UUID bundleId = UUID.fromString(r.getString("bundle_id"));
@@ -98,17 +90,8 @@ public interface SubscriptionSqlDao extends EntitySqlDao<Subscription> {
final long activeVersion = r.getLong("active_version");
final DateTime createdDate = getDateTime(r, "created_date");
final DateTime updatedDate = getDateTime(r, "updated_date");
- return new SubscriptionData(new SubscriptionBuilder()
- .setId(id)
- .setBundleId(bundleId)
- .setCategory(category)
- .setCreatedDate(createdDate)
- .setUpdatedDate(updatedDate)
- .setBundleStartDate(bundleStartDate)
- .setAlignStartDate(startDate)
- .setActiveVersion(activeVersion)
- .setChargedThroughDate(ctd)
- .setPaidThroughDate(ptd));
+ return new SubscriptionModelDao(id, bundleId, category, startDate, bundleStartDate, activeVersion, ctd, ptd, createdDate, updatedDate);
+
}
}
}
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/ddl.sql b/entitlement/src/main/resources/com/ning/billing/entitlement/ddl.sql
index ee822a9..913c472 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/ddl.sql
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/ddl.sql
@@ -58,6 +58,10 @@ CREATE TABLE bundles (
external_key varchar(64) NOT NULL,
account_id char(36) NOT NULL,
last_sys_update_date datetime,
+ created_by varchar(50) NOT NULL,
+ created_date datetime NOT NULL,
+ updated_by varchar(50) NOT NULL,
+ updated_date datetime NOT NULL,
account_record_id int(11) unsigned default null,
tenant_record_id int(11) unsigned default null,
PRIMARY KEY(record_id)
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg
index 2ac9ebc..6c0d371 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/BundleSqlDao.sql.stg
@@ -1,58 +1,61 @@
group BundleSqlDao: EntitySqlDao;
+tableName() ::= "bundles"
+
+
tableFields(prefix) ::= <<
<prefix>external_key
, <prefix>account_id
, <prefix>last_sys_update_date
+, <prefix>created_by
+, <prefix>created_date
+, <prefix>updated_by
+, <prefix>updated_date
>>
tableValues() ::= <<
:externalKey
, :accountId
, :lastSysUpdateDate
+, :createdBy
+, :createdDate
+, :updatedBy
+, :updatedDate
>>
updateBundleLastSysTime() ::= <<
- update bundles
- set
- last_sys_update_date = :lastSysUpdateDate
- where id = :id
- <AND_CHECK_TENANT()>
- ;
->>
-
-getBundleFromId() ::= <<
- select <fields()>
- from bundles
- where
- id = :id
- <AND_CHECK_TENANT()>
- ;
+update <tableName()>
+set
+last_sys_update_date = :lastSysUpdateDate
+where id = :id
+<AND_CHECK_TENANT()>
+;
>>
getBundlesForKey() ::= <<
- select <fields()>
- from bundles
- where
- external_key = :externalKey
- <AND_CHECK_TENANT()>
- ;
+select <allTableFields()>
+from bundles
+where
+external_key = :externalKey
+<AND_CHECK_TENANT()>
+;
>>
getBundleFromAccountAndKey() ::= <<
- select <fields()>
- from bundles
- where
- external_key = :externalKey AND account_id = :accountId
- <AND_CHECK_TENANT()>
- ;
+select <allTableFields()>
+from bundles
+where
+external_key = :externalKey
+and account_id = :accountId
+<AND_CHECK_TENANT()>
+;
>>
getBundleFromAccount() ::= <<
- select <fields()>
- from bundles
- where
- account_id = :accountId
- <AND_CHECK_TENANT()>
- ;
+select <allTableFields()>
+from bundles
+where
+account_id = :accountId
+<AND_CHECK_TENANT()>
+;
>>
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.sql.stg b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.sql.stg
index 20b3721..9fd5b30 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.sql.stg
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.sql.stg
@@ -1,5 +1,6 @@
group EventSqlDao: EntitySqlDao;
+tableName() ::= "subscription_events"
tableFields(prefix) ::= <<
<prefix> event_type
@@ -37,73 +38,64 @@ tableValues() ::= <<
, :updated_date
>>
-getEventById() ::= <<
- select record_id, <fields()>
- from subscription_events
- where
- id = :id
- <AND_CHECK_TENANT()>
- ;
->>
-
updateVersion() ::= <<
- update subscription_events
- set
- current_version = :currentVersion
- where
- id = :id
- <AND_CHECK_TENANT()>
- ;
+update <tableName()>
+set
+current_version = :currentVersion
+where
+id = :id
+<AND_CHECK_TENANT()>
+;
>>
unactiveEvent() ::= <<
- update subscription_events
- set
- is_active = 0
- , updated_by = :userName
- , updated_date = :updatedDate
- where
- id = :id
- <AND_CHECK_TENANT()>
- ;
+update <tableName()>
+set
+is_active = 0
+, updated_by = :userName
+, updated_date = :updatedDate
+where
+id = :id
+<AND_CHECK_TENANT()>
+;
>>
reactiveEvent() ::= <<
- update subscription_events
- set
- is_active = 1
- , updated_by = :userName
- , updated_date = :updatedDate
- where
- event_id = :eventId
- <AND_CHECK_TENANT()>
- ;
+update <tableName()>
+set
+is_active = 1
+, updated_by = :userName
+, updated_date = :updatedDate
+where
+event_id = :eventId
+<AND_CHECK_TENANT()>
+;
>>
getFutureActiveEventForSubscription() ::= <<
- select record_id, <fields()>
- from subscription_events
- where
- subscription_id = :subscriptionId
- and is_active = 1
- and effective_date > :now
- <AND_CHECK_TENANT()>
- order by
- effective_date asc
- , record_id asc
- ;
+select <allTableFields()>
+from <tableName()>
+where
+subscription_id = :subscriptionId
+and is_active = 1
+and effective_date > :now
+<AND_CHECK_TENANT()>
+order by
+effective_date asc
+, record_id asc
+;
>>
getEventsForSubscription() ::= <<
- select record_id, <fields()>
- from subscription_events
- where
- subscription_id = :subscriptionId
- <AND_CHECK_TENANT()>
- order by
- effective_date asc
- , record_id asc
- ;
+select <allTableFields()>
+from <tableName()>
+where
+subscription_id = :subscriptionId
+<AND_CHECK_TENANT()>
+order by
+effective_date asc
+, record_id asc
+;
>>
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg
index 58022e9..8455c9d 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg
@@ -1,5 +1,6 @@
group SubscriptionSqlDao: EntitySqlDao;
+tableName() ::= "subscriptions"
tableFields(prefix) ::= <<
<prefix>bundle_id
@@ -31,53 +32,44 @@ tableValues() ::= <<
getSubscriptionsFromBundleId() ::= <<
- select
- id
- , bundle_id
- , category
- , start_date
- , bundle_start_date
- , active_version
- , charged_through_date
- , paid_through_date
- , created_date
- , updated_date
- from subscriptions
- where bundle_id = :bundleId
- <AND_CHECK_TENANT()>
- ;
+select
+<allTableFields()>
+from <tableName()>
+where bundle_id = :bundleId
+<AND_CHECK_TENANT()>
+;
>>
updateChargedThroughDate() ::= <<
- update subscriptions
- set
- charged_through_date = :chargedThroughDate
- , updated_by = :userName
- , updated_date = :updatedDate
- where id = :id
- <AND_CHECK_TENANT()>
- ;
+update <tableName()>
+set
+charged_through_date = :chargedThroughDate
+, updated_by = :userName
+, updated_date = :updatedDate
+where id = :id
+<AND_CHECK_TENANT()>
+;
>>
updateActiveVersion() ::= <<
- update subscriptions
- set
- active_version = :activeVersion
- , updated_by = :userName
- , updated_date = :updatedDate
- where id = :id
- ;
+update <tableName()>
+set
+active_version = :activeVersion
+, updated_by = :userName
+, updated_date = :updatedDate
+where id = :id
+;
>>
updateForRepair() ::= <<
- update subscriptions
- set
- active_version = :activeVersion
- , start_date = :startDate
- , bundle_start_date = :bundleStartDate
- , updated_by = :userName
- , updated_date = :updatedDate
- where id = :id
- <AND_CHECK_TENANT()>
- ;
+update <tableName()>
+set
+active_version = :activeVersion
+, start_date = :startDate
+, bundle_start_date = :bundleStartDate
+, updated_by = :userName
+, updated_date = :updatedDate
+where id = :id
+<AND_CHECK_TENANT()>
+;
>>
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
index f36d904..ec61b63 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
@@ -104,7 +104,7 @@ public class TestTransfer extends TestApiBase {
testListener.pushExpectedEvent(NextEvent.TRANSFER);
testListener.pushExpectedEvent(NextEvent.CANCEL);
- transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getKey(), transferRequestedDate, false, true, callContext);
+ transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, true, callContext);
assertTrue(testListener.isCompleted(3000));
final Subscription oldBaseSubscription = entitlementApi.getBaseSubscription(bundle.getId(), callContext);
@@ -142,7 +142,7 @@ public class TestTransfer extends TestApiBase {
testListener.pushExpectedEvent(NextEvent.TRANSFER);
testListener.pushExpectedEvent(NextEvent.CANCEL);
- transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getKey(), transferRequestedDate, false, false, callContext);
+ transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, false, callContext);
assertTrue(testListener.isCompleted(3000));
final DateTime afterTransferDate = clock.getUTCNow();
@@ -153,7 +153,7 @@ public class TestTransfer extends TestApiBase {
assertTrue(oldBaseSubscription.getEndDate().compareTo(transferRequestedDate) == 0);
// CHECK NEW BUNDLE EXIST, WITH ONE SUBSCRIPTION STARTING ON TRANSFER_DATE
- final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getKey(), callContext);
+ final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getExternalKey(), callContext);
final List<Subscription> subscriptions = entitlementApi.getSubscriptionsForBundle(newBundle.getId(), callContext);
assertEquals(subscriptions.size(), 1);
@@ -193,7 +193,7 @@ public class TestTransfer extends TestApiBase {
testListener.pushExpectedEvent(NextEvent.TRANSFER);
final DateTime transferRequestedDate = clock.getUTCNow();
- transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getKey(), transferRequestedDate, false, false, callContext);
+ transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, false, callContext);
assertTrue(testListener.isCompleted(3000));
// CHECK OLD BASE IS CANCEL AT THE TRANSFER DATE
@@ -202,7 +202,7 @@ public class TestTransfer extends TestApiBase {
assertTrue(oldBaseSubscription.getFutureEndDate().compareTo(ctd) == 0);
// CHECK NEW BUNDLE EXIST, WITH ONE SUBSCRIPTION STARTING ON TRANSFER_DATE
- final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getKey(), callContext);
+ final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getExternalKey(), callContext);
final List<Subscription> subscriptions = entitlementApi.getSubscriptionsForBundle(newBundle.getId(), callContext);
assertEquals(subscriptions.size(), 1);
@@ -241,7 +241,7 @@ public class TestTransfer extends TestApiBase {
final DateTime transferRequestedDate = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.TRANSFER);
testListener.pushExpectedEvent(NextEvent.CANCEL);
- transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getKey(), transferRequestedDate, false, false, callContext);
+ transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, false, callContext);
assertTrue(testListener.isCompleted(3000));
final DateTime afterTransferDate = clock.getUTCNow();
@@ -252,7 +252,7 @@ public class TestTransfer extends TestApiBase {
assertTrue(oldBaseSubscription.getEndDate().compareTo(transferRequestedDate) == 0);
// CHECK NEW BUNDLE EXIST, WITH ONE SUBSCRIPTION STARTING ON TRANSFER_DATE
- final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getKey(), callContext);
+ final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getExternalKey(), callContext);
final List<Subscription> subscriptions = entitlementApi.getSubscriptionsForBundle(newBundle.getId(), callContext);
assertEquals(subscriptions.size(), 1);
@@ -292,7 +292,7 @@ public class TestTransfer extends TestApiBase {
final DateTime transferRequestedDate = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.TRANSFER);
- transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getKey(), transferRequestedDate, false, false, callContext);
+ transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, false, callContext);
assertTrue(testListener.isCompleted(3000));
// CHECK OLD BASE IS CANCEL AT THE TRANSFER DATE
@@ -301,7 +301,7 @@ public class TestTransfer extends TestApiBase {
assertTrue(oldBaseSubscription.getFutureEndDate().compareTo(ctd) == 0);
// CHECK NEW BUNDLE EXIST, WITH ONE SUBSCRIPTION STARTING ON TRANSFER_DATE
- final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getKey(), callContext);
+ final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getExternalKey(), callContext);
final List<Subscription> subscriptions = entitlementApi.getSubscriptionsForBundle(newBundle.getId(), callContext);
assertEquals(subscriptions.size(), 1);
@@ -387,11 +387,11 @@ public class TestTransfer extends TestApiBase {
final DateTime transferRequestedDate = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.TRANSFER);
- transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getKey(), transferRequestedDate, true, false, callContext);
+ transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, true, false, callContext);
assertTrue(testListener.isCompleted(3000));
// RETRIEVE NEW BUNDLE AND CHECK SUBSCRIPTIONS
- final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getKey(), callContext);
+ final SubscriptionBundle newBundle = entitlementApi.getBundleForAccountAndKey(newAccountId, bundle.getExternalKey(), callContext);
final List<Subscription> subscriptions = entitlementApi.getSubscriptionsForBundle(newBundle.getId(), callContext);
assertEquals(subscriptions.size(), 3);
boolean foundBP = false;
@@ -432,7 +432,7 @@ public class TestTransfer extends TestApiBase {
final UUID finalNewAccountId = UUID.randomUUID();
final DateTime newTransferRequestedDate = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.TRANSFER);
- transferApi.transferBundle(newBundle.getAccountId(), finalNewAccountId, newBundle.getKey(), newTransferRequestedDate, true, false, callContext);
+ transferApi.transferBundle(newBundle.getAccountId(), finalNewAccountId, newBundle.getExternalKey(), newTransferRequestedDate, true, false, callContext);
assertTrue(testListener.isCompleted(3000));
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
index 2acd5d5..453d64d 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
@@ -27,7 +27,6 @@ import java.util.TreeSet;
import java.util.UUID;
import org.joda.time.DateTime;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -108,7 +107,7 @@ public class MockEntitlementDaoMemory implements EntitlementDao {
public List<SubscriptionBundle> getSubscriptionBundlesForKey(final String bundleKey, final InternalTenantContext context) {
final List<SubscriptionBundle> results = new ArrayList<SubscriptionBundle>();
for (final SubscriptionBundle cur : bundles) {
- if (cur.getKey().equals(bundleKey)) {
+ if (cur.getExternalKey().equals(bundleKey)) {
results.add(cur);
}
}
@@ -128,7 +127,7 @@ public class MockEntitlementDaoMemory implements EntitlementDao {
@Override
public SubscriptionBundle getSubscriptionBundleFromAccountAndKey(final UUID accountId, final String bundleKey, final InternalTenantContext context) {
for (final SubscriptionBundle cur : bundles) {
- if (cur.getKey().equals(bundleKey) && cur.getAccountId().equals(accountId)) {
+ if (cur.getExternalKey().equals(bundleKey) && cur.getAccountId().equals(accountId)) {
return cur;
}
}
@@ -160,7 +159,7 @@ public class MockEntitlementDaoMemory implements EntitlementDao {
public List<Subscription> getSubscriptionsForAccountAndKey(final SubscriptionFactory factory, final UUID accountId, final String bundleKey, final InternalTenantContext context) {
for (final SubscriptionBundle cur : bundles) {
- if (cur.getKey().equals(bundleKey) && cur.getAccountId().equals(bundleKey)) {
+ if (cur.getExternalKey().equals(bundleKey) && cur.getAccountId().equals(bundleKey)) {
return getSubscriptions(factory, cur.getId(), context);
}
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
index ded56fe..b9a75a9 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
@@ -44,7 +44,7 @@ public class BundleJsonNoSubscriptions extends BundleJsonSimple {
}
public BundleJsonNoSubscriptions(final SubscriptionBundle bundle) {
- super(bundle.getId().toString(), bundle.getKey(), null);
+ super(bundle.getId().toString(), bundle.getExternalKey(), null);
this.accountId = bundle.getAccountId().toString();
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
index 4c3de42..9549904 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/BundleResource.java
@@ -195,7 +195,7 @@ public class BundleResource extends JaxRsResourceBase {
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
final SubscriptionBundle bundle = entitlementApi.getBundleFromId(UUID.fromString(id), callContext);
final DateTime inputDate = (requestedDate != null) ? DATE_TIME_FORMATTER.parseDateTime(requestedDate) : null;
- final SubscriptionBundle newBundle = transferApi.transferBundle(bundle.getAccountId(), UUID.fromString(json.getAccountId()), bundle.getKey(), inputDate, transferAddOn,
+ final SubscriptionBundle newBundle = transferApi.transferBundle(bundle.getAccountId(), UUID.fromString(json.getAccountId()), bundle.getExternalKey(), inputDate, transferAddOn,
cancelImmediatley, callContext);
return uriBuilder.buildResponse(BundleResource.class, "getBundle", newBundle.getId(), uriInfo.getBaseUri().toString());
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java
index d87274a..3702e5b 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java
@@ -52,7 +52,7 @@ public class TestBundleJsonNoSubscriptions extends JaxrsTestSuite {
final String externalKey = UUID.randomUUID().toString();
final UUID accountId = UUID.randomUUID();
Mockito.when(bundle.getId()).thenReturn(bundleId);
- Mockito.when(bundle.getKey()).thenReturn(externalKey);
+ Mockito.when(bundle.getExternalKey()).thenReturn(externalKey);
Mockito.when(bundle.getAccountId()).thenReturn(accountId);
final BundleJsonNoSubscriptions bundleJsonNoSubscriptions = new BundleJsonNoSubscriptions(bundle);
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscriptionBundle.java b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscriptionBundle.java
index b852ac8..c69407e 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscriptionBundle.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/api/BlockingSubscriptionBundle.java
@@ -60,8 +60,8 @@ public class BlockingSubscriptionBundle implements SubscriptionBundle {
}
@Override
- public String getKey() {
- return subscriptionBundle.getKey();
+ public String getExternalKey() {
+ return subscriptionBundle.getExternalKey();
}
@Override
diff --git a/junction/src/test/java/com/ning/billing/junction/blocking/TestBlockingChecker.java b/junction/src/test/java/com/ning/billing/junction/blocking/TestBlockingChecker.java
index f3b2856..7607964 100644
--- a/junction/src/test/java/com/ning/billing/junction/blocking/TestBlockingChecker.java
+++ b/junction/src/test/java/com/ning/billing/junction/blocking/TestBlockingChecker.java
@@ -106,7 +106,7 @@ public class TestBlockingChecker extends JunctionTestSuite {
Mockito.when(bundle.getAccountId()).thenReturn(accountId);
final UUID bundleId = UUID.randomUUID();
Mockito.when(bundle.getId()).thenReturn(bundleId);
- Mockito.when(bundle.getKey()).thenReturn("key");
+ Mockito.when(bundle.getExternalKey()).thenReturn("key");
subscription = Mockito.mock(Subscription.class);
Mockito.when(subscription.getId()).thenReturn(UUID.randomUUID());
diff --git a/util/src/test/java/com/ning/billing/mock/api/MockEntitlementUserApi.java b/util/src/test/java/com/ning/billing/mock/api/MockEntitlementUserApi.java
index 8a9a6dc..e95dfaa 100644
--- a/util/src/test/java/com/ning/billing/mock/api/MockEntitlementUserApi.java
+++ b/util/src/test/java/com/ning/billing/mock/api/MockEntitlementUserApi.java
@@ -74,7 +74,7 @@ public class MockEntitlementUserApi implements EntitlementUserApi {
}
@Override
- public String getKey() {
+ public String getExternalKey() {
return key;
}