killbill-uncached
Changes
entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java 10(+9 -1)
entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java 2(+1 -1)
Details
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java
index 66613d3..4290f73 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/MigrationPlanAligner.java
@@ -181,7 +181,8 @@ public class MigrationPlanAligner {
if (input.length != 2) {
return false;
}
- return isSamePlan(input[0].getPlanPhaseSpecifer(), input[1].getPlanPhaseSpecifer());
+ return (isSamePlan(input[0].getPlanPhaseSpecifer(), input[1].getPlanPhaseSpecifer()) &&
+ !isSamePhase(input[0].getPlanPhaseSpecifer(), input[1].getPlanPhaseSpecifer()));
}
private boolean isPlanChangeMigratedSubscription(EntitlementSubscriptionMigrationCase [] input) {
@@ -198,4 +199,11 @@ public class MigrationPlanAligner {
}
return false;
}
+
+ private boolean isSamePhase(PlanPhaseSpecifier plan0, PlanPhaseSpecifier plan1) {
+ if (plan0.getPhaseType() == plan1.getPhaseType()) {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java
index aa16ac7..d8a0100 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java
@@ -80,7 +80,7 @@ public class DefaultEntitlementMigrationApi implements EntitlementMigrationApi {
public void migrate(EntitlementAccountMigration toBeMigrated)
throws EntitlementMigrationApiException {
AccountMigrationData accountMigrationData = createAccountMigrationData(toBeMigrated);
- dao.migrate(accountMigrationData);
+ dao.migrate(toBeMigrated.getAccountKey(), accountMigrationData);
}
@Override
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
index 4998379..92be3e7 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
@@ -72,7 +72,7 @@ public interface EntitlementDao {
public void changePlan(UUID subscriptionId, List<EntitlementEvent> changeEvents);
- public void migrate(AccountMigrationData data);
+ public void migrate(UUID acountId, AccountMigrationData data);
public void undoMigration(UUID accountId);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
index aa31964..b88f4ef 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
@@ -349,7 +349,7 @@ public class EntitlementSqlDao implements EntitlementDao {
}
@Override
- public void migrate(final AccountMigrationData accountData) {
+ public void migrate(final UUID accountId, final AccountMigrationData accountData) {
eventsDao.inTransaction(new Transaction<Void, EventSqlDao>() {
@@ -360,6 +360,9 @@ public class EntitlementSqlDao implements EntitlementDao {
SubscriptionSqlDao transSubDao = transEventDao.become(SubscriptionSqlDao.class);
BundleSqlDao transBundleDao = transEventDao.become(BundleSqlDao.class);
+ // First get rid of any data from account
+ undoMigrationFromTransaction(accountId, transEventDao, transBundleDao, transSubDao);
+
for (BundleMigrationData curBundle : accountData.getData()) {
SubscriptionBundleData bundleData = curBundle.getData();
for (SubscriptionMigrationData curSubscription : curBundle.getSubscriptions()) {
@@ -387,18 +390,21 @@ public class EntitlementSqlDao implements EntitlementDao {
SubscriptionSqlDao transSubDao = transEventDao.become(SubscriptionSqlDao.class);
BundleSqlDao transBundleDao = transEventDao.become(BundleSqlDao.class);
-
- final List<SubscriptionBundle> bundles = transBundleDao.getBundleFromAccount(accountId.toString());
- for (SubscriptionBundle curBundle : bundles) {
- List<Subscription> subscriptions = transSubDao.getSubscriptionsFromBundleId(curBundle.getId().toString());
- for (Subscription cur : subscriptions) {
- eventsDao.removeEvents(cur.getId().toString());
- transSubDao.removeSubscription(cur.getId().toString());
- }
- transBundleDao.removeBundle(curBundle.getId().toString());
- }
+ undoMigrationFromTransaction(accountId, transEventDao, transBundleDao, transSubDao);
return null;
}
});
}
+
+ private void undoMigrationFromTransaction(final UUID accountId, EventSqlDao transEventDao, BundleSqlDao transBundleDao, SubscriptionSqlDao transSubDao) {
+ final List<SubscriptionBundle> bundles = transBundleDao.getBundleFromAccount(accountId.toString());
+ for (SubscriptionBundle curBundle : bundles) {
+ List<Subscription> subscriptions = transSubDao.getSubscriptionsFromBundleId(curBundle.getId().toString());
+ for (Subscription cur : subscriptions) {
+ eventsDao.removeEvents(cur.getId().toString());
+ transSubDao.removeSubscription(cur.getId().toString());
+ }
+ transBundleDao.removeBundle(curBundle.getId().toString());
+ }
+ }
}
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 4c2ee17..e14c91d 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
@@ -365,8 +365,11 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
@Override
- public void migrate(final AccountMigrationData accountData) {
+ public void migrate(final UUID accountId, final AccountMigrationData accountData) {
synchronized(events) {
+
+ undoMigration(accountId);
+
for (BundleMigrationData curBundle : accountData.getData()) {
SubscriptionBundleData bundleData = curBundle.getData();
for (SubscriptionMigrationData curSubscription : curBundle.getSubscriptions()) {