killbill-aplcache

Changes

subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventMigrateBilling.java 23(+0 -23)

subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventMigrateSubscription.java 24(+0 -24)

Details

diff --git a/api/src/main/java/org/killbill/billing/subscription/api/SubscriptionBaseTransitionType.java b/api/src/main/java/org/killbill/billing/subscription/api/SubscriptionBaseTransitionType.java
index 11318ce..e1309c4 100644
--- a/api/src/main/java/org/killbill/billing/subscription/api/SubscriptionBaseTransitionType.java
+++ b/api/src/main/java/org/killbill/billing/subscription/api/SubscriptionBaseTransitionType.java
@@ -21,18 +21,10 @@ package org.killbill.billing.subscription.api;
  */
 public enum SubscriptionBaseTransitionType {
     /**
-     * Occurs when a {@code SubscriptionBase} got migrated to mark the start of the subscription
-     */
-    MIGRATE_ENTITLEMENT,
-    /**
      * Occurs when a a user created a {@code SubscriptionBase} (not migrated)
      */
     CREATE,
     /**
-     * Occurs when a {@code SubscriptionBase} got migrated to mark the start of the billing
-     */
-    MIGRATE_BILLING,
-    /**
      * Occurs when a {@code SubscriptionBase} got transferred to mark the start of the subscription
      */
     TRANSFER,
diff --git a/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java b/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
index 3d7a90f..c3301c5 100644
--- a/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
+++ b/beatrix/src/main/java/org/killbill/billing/beatrix/extbus/BeatrixListener.java
@@ -138,8 +138,7 @@ public class BeatrixListener {
                 objectId = realEventST.getSubscriptionId();
                 if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.CREATE ||
                     realEventST.getTransitionType() == SubscriptionBaseTransitionType.RE_CREATE ||
-                    realEventST.getTransitionType() == SubscriptionBaseTransitionType.TRANSFER ||
-                    realEventST.getTransitionType() == SubscriptionBaseTransitionType.MIGRATE_ENTITLEMENT) {
+                    realEventST.getTransitionType() == SubscriptionBaseTransitionType.TRANSFER) {
                     eventBusType = ExtBusEventType.SUBSCRIPTION_CREATION;
                 } else if (realEventST.getTransitionType() == SubscriptionBaseTransitionType.CANCEL) {
                     eventBusType = ExtBusEventType.SUBSCRIPTION_CANCEL;
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/SubscriptionEventOrdering.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/SubscriptionEventOrdering.java
index c0f311c..66112b2 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/SubscriptionEventOrdering.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/SubscriptionEventOrdering.java
@@ -95,10 +95,6 @@ public class SubscriptionEventOrdering extends EntitlementOrderingBase {
                 return ImmutableList.<SubscriptionEventType>of(SubscriptionEventType.START_ENTITLEMENT, SubscriptionEventType.START_BILLING);
             case TRANSFER:
                 return ImmutableList.<SubscriptionEventType>of(SubscriptionEventType.START_ENTITLEMENT, SubscriptionEventType.START_BILLING);
-            case MIGRATE_ENTITLEMENT:
-                return ImmutableList.<SubscriptionEventType>of(SubscriptionEventType.START_ENTITLEMENT);
-            case MIGRATE_BILLING:
-                return ImmutableList.<SubscriptionEventType>of(SubscriptionEventType.START_BILLING);
             case CHANGE:
                 return ImmutableList.<SubscriptionEventType>of(SubscriptionEventType.CHANGE);
             case CANCEL:
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/InvoiceListener.java b/invoice/src/main/java/org/killbill/billing/invoice/InvoiceListener.java
index 5afae0a..03dcf5f 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/InvoiceListener.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/InvoiceListener.java
@@ -72,8 +72,7 @@ public class InvoiceListener {
             //  Skip future uncancel event
             //  Skip events which are marked as not being the last one
             if (event.getTransitionType() == SubscriptionBaseTransitionType.UNCANCEL ||
-                event.getTransitionType() == SubscriptionBaseTransitionType.MIGRATE_ENTITLEMENT
-                || event.getRemainingEventsForUserOperation() > 0) {
+                event.getRemainingEventsForUserOperation() > 0) {
                 return;
             }
             final InternalCallContext context = internalCallContextFactory.createInternalCallContext(event.getSearchKey2(), event.getSearchKey1(), "SubscriptionBaseTransition", CallOrigin.INTERNAL, UserType.SYSTEM, event.getUserToken());
diff --git a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
index b9fb50c..ede4a6d 100644
--- a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
+++ b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
@@ -188,7 +188,6 @@ public class DefaultInternalBillingApi implements BillingInternalApi {
             final List<EffectiveSubscriptionInternalEvent> billingTransitions = subscriptionApi.getBillingTransitions(subscription, context);
             if (billingTransitions.isEmpty() ||
                 (billingTransitions.get(0).getTransitionType() != SubscriptionBaseTransitionType.CREATE &&
-                 billingTransitions.get(0).getTransitionType() != SubscriptionBaseTransitionType.MIGRATE_BILLING &&
                  billingTransitions.get(0).getTransitionType() != SubscriptionBaseTransitionType.TRANSFER)) {
                 log.warn("Skipping billing events for subscription " + subscription.getId() + ": Does not start with a valid CREATE transition");
                 skipSubscriptionsSet.add(subscription.getId());
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/alignment/PlanAligner.java b/subscription/src/main/java/org/killbill/billing/subscription/alignment/PlanAligner.java
index fe4e369..8f0c329 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/alignment/PlanAligner.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/alignment/PlanAligner.java
@@ -151,7 +151,6 @@ public class PlanAligner extends BaseAligner {
 
             switch (lastPlanTransition.getTransitionType()) {
                 // If we never had any Plan change, borrow the logic for createPlan alignment
-                case MIGRATE_ENTITLEMENT:
                 case CREATE:
                 case RE_CREATE:
                 case TRANSFER:
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java b/subscription/src/main/java/org/killbill/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java
index 2a81343..2f39caa 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/api/transfer/DefaultSubscriptionBaseTransferApi.java
@@ -105,7 +105,6 @@ public class DefaultSubscriptionBaseTransferApi extends SubscriptionApiBase impl
 
         switch (existingEvent.getSubscriptionTransitionType()) {
             case TRANSFER:
-            case MIGRATE_ENTITLEMENT:
             case RE_CREATE:
             case CREATE:
                 newEvent = new ApiEventTransfer(apiBuilder);
@@ -121,12 +120,6 @@ public class DefaultSubscriptionBaseTransferApi extends SubscriptionApiBase impl
                            PhaseEventData.createNextPhaseEvent(subscription.getId(), subscription.getActiveVersion(), currentPhase.getName(), effectiveDate);
                 break;
 
-            // Ignore these events except if it's the first event for the new subscription
-            case MIGRATE_BILLING:
-                if (firstEvent) {
-                    newEvent = new ApiEventTransfer(apiBuilder);
-                }
-                break;
             case CANCEL:
                 break;
 
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/api/user/DefaultSubscriptionBase.java b/subscription/src/main/java/org/killbill/billing/subscription/api/user/DefaultSubscriptionBase.java
index d1a805b..53f5892 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/api/user/DefaultSubscriptionBase.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/api/user/DefaultSubscriptionBase.java
@@ -149,7 +149,6 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         if (pendingTransition != null &&
             (pendingTransition.getTransitionType().equals(SubscriptionBaseTransitionType.CREATE) ||
              pendingTransition.getTransitionType().equals(SubscriptionBaseTransitionType.TRANSFER) ||
-             pendingTransition.getTransitionType().equals(SubscriptionBaseTransitionType.MIGRATE_BILLING) ||
              pendingTransition.getTransitionType().equals(SubscriptionBaseTransitionType.RE_CREATE))) {
             return EntitlementState.PENDING;
         }
@@ -164,9 +163,6 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         }
         final SubscriptionBaseTransitionData initialTransition = (SubscriptionBaseTransitionData) transitions.get(0);
         switch (initialTransition.getApiEventType()) {
-            case MIGRATE_BILLING:
-            case MIGRATE_ENTITLEMENT:
-                return EntitlementSourceType.MIGRATED;
             case TRANSFER:
                 return EntitlementSourceType.TRANSFERRED;
             default:
@@ -459,14 +455,13 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         final SubscriptionBaseTransitionDataIterator it = new SubscriptionBaseTransitionDataIterator(
                 clock, transitions, Order.ASC_FROM_PAST, Kind.BILLING,
                 Visibility.ALL, TimeLimit.ALL);
-        // Remove anything prior to first CREATE or MIGRATE_BILLING
+        // Remove anything prior to first CREATE
         boolean foundInitialEvent = false;
         while (it.hasNext()) {
             final SubscriptionBaseTransitionData curTransition = (SubscriptionBaseTransitionData) it.next();
             if (!foundInitialEvent) {
                 foundInitialEvent = curTransition.getEventType() == EventType.API_USER &&
                                     (curTransition.getApiEventType() == ApiEventType.CREATE ||
-                                     curTransition.getApiEventType() == ApiEventType.MIGRATE_BILLING ||
                                      curTransition.getApiEventType() == ApiEventType.TRANSFER);
             }
             if (foundInitialEvent) {
@@ -493,8 +488,7 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
             if (cur.getTransitionType() == SubscriptionBaseTransitionType.CREATE
                 || cur.getTransitionType() == SubscriptionBaseTransitionType.RE_CREATE
                 || cur.getTransitionType() == SubscriptionBaseTransitionType.TRANSFER
-                || cur.getTransitionType() == SubscriptionBaseTransitionType.CHANGE
-                || cur.getTransitionType() == SubscriptionBaseTransitionType.MIGRATE_ENTITLEMENT) {
+                || cur.getTransitionType() == SubscriptionBaseTransitionType.CHANGE) {
                 return cur;
             }
         }
@@ -545,8 +539,7 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
                 || cur.getTransitionType() == SubscriptionBaseTransitionType.TRANSFER
                 || cur.getTransitionType() == SubscriptionBaseTransitionType.CREATE
                 || cur.getTransitionType() == SubscriptionBaseTransitionType.RE_CREATE
-                || cur.getTransitionType() == SubscriptionBaseTransitionType.CHANGE
-                || cur.getTransitionType() == SubscriptionBaseTransitionType.MIGRATE_ENTITLEMENT) {
+                || cur.getTransitionType() == SubscriptionBaseTransitionType.CHANGE) {
                 return cur.getEffectiveTransitionTime();
             }
         }
@@ -606,8 +599,6 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
 
                     switch (apiEventType) {
                         case TRANSFER:
-                        case MIGRATE_BILLING:
-                        case MIGRATE_ENTITLEMENT:
                         case CREATE:
                         case RE_CREATE:
                             prevEventId = null;
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/api/user/SubscriptionBaseTransitionDataIterator.java b/subscription/src/main/java/org/killbill/billing/subscription/api/user/SubscriptionBaseTransitionDataIterator.java
index 881e24f..b6402d3 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/api/user/SubscriptionBaseTransitionDataIterator.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/api/user/SubscriptionBaseTransitionDataIterator.java
@@ -81,10 +81,6 @@ public class SubscriptionBaseTransitionDataIterator implements Iterator<Subscrip
         if (visibility == Visibility.FROM_DISK_ONLY && ! ((SubscriptionBaseTransitionData) input).isFromDisk()) {
             return true;
         }
-        if ((kind == Kind.SUBSCRIPTION && shouldSkipForSubscriptionEvents((SubscriptionBaseTransitionData) input)) ||
-            (kind == Kind.BILLING && shouldSkipForBillingEvents((SubscriptionBaseTransitionData) input))) {
-            return true;
-        }
         if ((timeLimit == TimeLimit.FUTURE_ONLY && !input.getEffectiveTransitionTime().isAfter(clock.getUTCNow())) ||
                 ((timeLimit == TimeLimit.PAST_OR_PRESENT_ONLY && input.getEffectiveTransitionTime().isAfter(clock.getUTCNow())))) {
             return true;
@@ -92,17 +88,6 @@ public class SubscriptionBaseTransitionDataIterator implements Iterator<Subscrip
         return false;
     }
 
-    private boolean shouldSkipForSubscriptionEvents(final SubscriptionBaseTransitionData input) {
-        // SubscriptionBase system knows about all events except for MIGRATE_BILLING
-        return (input.getTransitionType() == SubscriptionBaseTransitionType.MIGRATE_BILLING);
-    }
-
-    private boolean shouldSkipForBillingEvents(final SubscriptionBaseTransitionData input) {
-        // Junction system knows about all events except for MIGRATE_ENTITLEMENT
-        return input.getTransitionType() == SubscriptionBaseTransitionType.MIGRATE_ENTITLEMENT;
-    }
-
-
     @Override
     public SubscriptionBaseTransition next() {
         return next;
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/engine/dao/DefaultSubscriptionDao.java b/subscription/src/main/java/org/killbill/billing/subscription/engine/dao/DefaultSubscriptionDao.java
index 053af0d..53da798 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/engine/dao/DefaultSubscriptionDao.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/engine/dao/DefaultSubscriptionDao.java
@@ -72,10 +72,8 @@ import org.killbill.billing.subscription.events.user.ApiEvent;
 import org.killbill.billing.subscription.events.user.ApiEventBuilder;
 import org.killbill.billing.subscription.events.user.ApiEventCancel;
 import org.killbill.billing.subscription.events.user.ApiEventChange;
-import org.killbill.billing.subscription.events.user.ApiEventMigrateBilling;
 import org.killbill.billing.subscription.events.user.ApiEventType;
 import org.killbill.billing.subscription.exceptions.SubscriptionBaseError;
-import org.killbill.billing.util.UUIDs;
 import org.killbill.billing.util.cache.CacheControllerDispatcher;
 import org.killbill.billing.util.callcontext.InternalCallContextFactory;
 import org.killbill.billing.util.dao.NonEntityDao;
@@ -642,13 +640,9 @@ public class DefaultSubscriptionDao extends EntityDaoBase<SubscriptionBundleMode
                 final SubscriptionEventSqlDao transactional = entitySqlDaoWrapperFactory.become(SubscriptionEventSqlDao.class);
                 final UUID subscriptionId = subscription.getId();
 
-                final List<SubscriptionBaseEvent> changeEventsTweakedWithMigrateBilling = reinsertFutureMigrateBillingEventOnChangeFromTransaction(subscriptionId,
-                                                                                                                                                   changeEvents,
-                                                                                                                                                   entitySqlDaoWrapperFactory,
-                                                                                                                                                   context);
                 cancelFutureEventsFromTransaction(subscriptionId, changeEvents.get(0).getEffectiveDate(), entitySqlDaoWrapperFactory, context);
 
-                for (final SubscriptionBaseEvent cur : changeEventsTweakedWithMigrateBilling) {
+                for (final SubscriptionBaseEvent cur : changeEvents) {
                     transactional.create(new SubscriptionEventModelDao(cur), context);
 
                     final boolean isBusEvent = cur.getEffectiveDate().compareTo(clock.getUTCNow()) <= 0 && (cur.getType() == EventType.API_USER);
@@ -656,7 +650,7 @@ public class DefaultSubscriptionDao extends EntityDaoBase<SubscriptionBundleMode
                 }
 
                 // Notify the Bus of the latest requested change
-                final SubscriptionBaseEvent finalEvent = changeEventsTweakedWithMigrateBilling.get(changeEvents.size() - 1);
+                final SubscriptionBaseEvent finalEvent = changeEvents.get(changeEvents.size() - 1);
                 notifyBusOfRequestedChange(entitySqlDaoWrapperFactory, subscription, finalEvent, SubscriptionBaseTransitionType.CHANGE, context);
 
                 // Cancel associated add-ons
@@ -667,92 +661,7 @@ public class DefaultSubscriptionDao extends EntityDaoBase<SubscriptionBundleMode
         });
     }
 
-    //
-    // This piece of code has been isolated in its own method in order to allow for migrated subscriptions to have their plan to changed prior
-    // to MIGRATE_BILLING; the effect will be to reflect the change from an subscription point of view while ignoring the change until we hit
-    // the begining of the billing, that is when we hit the MIGRATE_BILLING event. If we had a clear separation between subscription and
-    // billing that would not be needed.
-    //
-    // If there is a change of plan prior to a future MIGRATE_BILLING, we want to modify the existing MIGRATE_BILLING so it reflects
-    // the new plan, phase, pricelist; Invoice will only see the MIGRATE_BILLING as things prior to that will be ignored, so we need to make sure
-    // that event reflects the correct subscription information.
-    //
-    //
-    final List<SubscriptionBaseEvent> reinsertFutureMigrateBillingEventOnChangeFromTransaction(final UUID subscriptionId, final List<SubscriptionBaseEvent> changeEvents, final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory, final InternalCallContext context) {
-        final SubscriptionEventModelDao migrateBillingEvent = findFutureEventFromTransaction(subscriptionId, entitySqlDaoWrapperFactory, EventType.API_USER, ApiEventType.MIGRATE_BILLING, context);
-        if (migrateBillingEvent == null) {
-            // No future migrate billing : returns same list
-            return changeEvents;
-        }
-
-        String prevPlan = null;
-        String prevPhase = null;
-        String prevPriceList = null;
-        String curPlan = null;
-        String curPhase = null;
-        String curPriceList = null;
-        for (SubscriptionBaseEvent cur : changeEvents) {
-            switch (cur.getType()) {
-                case API_USER:
-                    final ApiEvent apiEvent = (ApiEvent) cur;
-                    curPlan = apiEvent.getEventPlan();
-                    curPhase = apiEvent.getEventPlanPhase();
-                    curPriceList = apiEvent.getPriceList();
-                    break;
-
-                case PHASE:
-                    final PhaseEvent phaseEvent = (PhaseEvent) cur;
-                    curPhase = phaseEvent.getPhase();
-                    break;
-
-                default:
-                    throw new SubscriptionBaseError("Unknown event type " + cur.getType());
-            }
-
-            if (cur.getEffectiveDate().compareTo(migrateBillingEvent.getEffectiveDate()) > 0) {
-                if (cur.getType() == EventType.API_USER && ((ApiEvent) cur).getApiEventType() == ApiEventType.CHANGE) {
-                    // This is an EOT change that is occurring after the MigrateBilling : returns same list
-                    return changeEvents;
-                }
-                // We found the first event after the migrate billing
-                break;
-            }
-            prevPlan = curPlan;
-            prevPhase = curPhase;
-            prevPriceList = curPriceList;
-        }
 
-        if (prevPlan != null) {
-            // Create the new MIGRATE_BILLING with same effectiveDate but new plan information
-            final DateTime now = clock.getUTCNow();
-            final ApiEventBuilder builder = new ApiEventBuilder()
-                    .setActive(true)
-                    .setApiEventType(ApiEventType.MIGRATE_BILLING)
-                    .setFromDisk(true)
-                    .setTotalOrdering(migrateBillingEvent.getTotalOrdering())
-                    .setUuid(UUIDs.randomUUID())
-                    .setSubscriptionId(migrateBillingEvent.getSubscriptionId())
-                    .setCreatedDate(now)
-                    .setUpdatedDate(now)
-                    .setEffectiveDate(migrateBillingEvent.getEffectiveDate())
-                    .setActiveVersion(migrateBillingEvent.getCurrentVersion())
-                    .setEventPlan(prevPlan)
-                    .setEventPlanPhase(prevPhase)
-                    .setEventPriceList(prevPriceList);
-
-            final SubscriptionBaseEvent newMigrateBillingEvent = new ApiEventMigrateBilling(builder);
-            changeEvents.add(newMigrateBillingEvent);
-
-            Collections.sort(changeEvents, new Comparator<SubscriptionBaseEvent>() {
-                @Override
-                public int compare(final SubscriptionBaseEvent o1, final SubscriptionBaseEvent o2) {
-                    return o1.getEffectiveDate().compareTo(o2.getEffectiveDate());
-                }
-            });
-        }
-
-        return changeEvents;
-    }
 
     private List<SubscriptionBaseEvent> filterSubscriptionBaseEvents(final List<SubscriptionEventModelDao> models) {
         final Collection<SubscriptionEventModelDao> filteredModels = Collections2.filter(models, new Predicate<SubscriptionEventModelDao>() {
@@ -1006,7 +915,7 @@ public class DefaultSubscriptionDao extends EntityDaoBase<SubscriptionBundleMode
                     cancelSubscriptionFromTransaction(cancel.getSubscription(), cancel.getCancelEvent(), entitySqlDaoWrapperFactory, fromContext, 0);
                 }
 
-                migrateBundleDataFromTransaction(bundleTransferData, transactional, entitySqlDaoWrapperFactory, toContext);
+                transferBundleDataFromTransaction(bundleTransferData, transactional, entitySqlDaoWrapperFactory, toContext);
                 return null;
             }
         });
@@ -1108,8 +1017,8 @@ public class DefaultSubscriptionDao extends EntityDaoBase<SubscriptionBundleMode
         }
     }
 
-    private void migrateBundleDataFromTransaction(final BundleTransferData bundleTransferData, final SubscriptionEventSqlDao transactional,
-                                                  final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory, final InternalCallContext context) throws EntityPersistenceException {
+    private void transferBundleDataFromTransaction(final BundleTransferData bundleTransferData, final SubscriptionEventSqlDao transactional,
+                                                   final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory, final InternalCallContext context) throws EntityPersistenceException {
 
         final SubscriptionSqlDao transSubDao = entitySqlDaoWrapperFactory.become(SubscriptionSqlDao.class);
         final BundleSqlDao transBundleDao = entitySqlDaoWrapperFactory.become(BundleSqlDao.class);
@@ -1135,7 +1044,7 @@ public class DefaultSubscriptionDao extends EntityDaoBase<SubscriptionBundleMode
 
             // Notify the Bus of the latest requested change
             final SubscriptionBaseEvent finalEvent = curSubscription.getInitialEvents().get(curSubscription.getInitialEvents().size() - 1);
-            notifyBusOfRequestedChange(entitySqlDaoWrapperFactory, subData, finalEvent, SubscriptionBaseTransitionType.MIGRATE_BILLING, context);
+            notifyBusOfRequestedChange(entitySqlDaoWrapperFactory, subData, finalEvent, SubscriptionBaseTransitionType.TRANSFER, context);
         }
 
         transBundleDao.create(new SubscriptionBundleModelDao(bundleData), context);
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/engine/dao/model/SubscriptionEventModelDao.java b/subscription/src/main/java/org/killbill/billing/subscription/engine/dao/model/SubscriptionEventModelDao.java
index dfb42e4..32d5faf 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/engine/dao/model/SubscriptionEventModelDao.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/engine/dao/model/SubscriptionEventModelDao.java
@@ -25,18 +25,9 @@ import org.killbill.billing.subscription.events.SubscriptionBaseEvent.EventType;
 import org.killbill.billing.subscription.events.EventBaseBuilder;
 import org.killbill.billing.subscription.events.phase.PhaseEvent;
 import org.killbill.billing.subscription.events.phase.PhaseEventBuilder;
-import org.killbill.billing.subscription.events.phase.PhaseEventData;
 import org.killbill.billing.subscription.events.user.ApiEvent;
 import org.killbill.billing.subscription.events.user.ApiEventBuilder;
-import org.killbill.billing.subscription.events.user.ApiEventCancel;
-import org.killbill.billing.subscription.events.user.ApiEventChange;
-import org.killbill.billing.subscription.events.user.ApiEventCreate;
-import org.killbill.billing.subscription.events.user.ApiEventMigrateBilling;
-import org.killbill.billing.subscription.events.user.ApiEventMigrateSubscription;
-import org.killbill.billing.subscription.events.user.ApiEventReCreate;
-import org.killbill.billing.subscription.events.user.ApiEventTransfer;
 import org.killbill.billing.subscription.events.user.ApiEventType;
-import org.killbill.billing.subscription.events.user.ApiEventUncancel;
 import org.killbill.billing.subscription.exceptions.SubscriptionBaseError;
 import org.killbill.billing.util.dao.TableName;
 import org.killbill.billing.util.entity.dao.EntityModelDao;
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventBuilder.java b/subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventBuilder.java
index 18cedb6..2a52361 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventBuilder.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventBuilder.java
@@ -94,10 +94,6 @@ public class ApiEventBuilder extends EventBaseBuilder<ApiEventBuilder> {
             result = new ApiEventCreate(this);
         } else if (apiEventType == ApiEventType.RE_CREATE) {
             result = new ApiEventReCreate(this);
-        } else if (apiEventType == ApiEventType.MIGRATE_ENTITLEMENT) {
-            result = new ApiEventMigrateSubscription(this);
-        } else if (apiEventType == ApiEventType.MIGRATE_BILLING) {
-            result = new ApiEventMigrateBilling(this);
         } else if (apiEventType == ApiEventType.TRANSFER) {
             result = new ApiEventTransfer(this);
         } else if (apiEventType == ApiEventType.CHANGE) {
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventType.java b/subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventType.java
index 4006a7a..d4f7ec3 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventType.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/events/user/ApiEventType.java
@@ -20,24 +20,12 @@ import org.killbill.billing.subscription.api.SubscriptionBaseTransitionType;
 
 
 public enum ApiEventType {
-    MIGRATE_ENTITLEMENT {
-        @Override
-        public SubscriptionBaseTransitionType getSubscriptionTransitionType() {
-            return SubscriptionBaseTransitionType.MIGRATE_ENTITLEMENT;
-        }
-    },
     CREATE {
         @Override
         public SubscriptionBaseTransitionType getSubscriptionTransitionType() {
             return SubscriptionBaseTransitionType.CREATE;
         }
     },
-    MIGRATE_BILLING {
-        @Override
-        public SubscriptionBaseTransitionType getSubscriptionTransitionType() {
-            return SubscriptionBaseTransitionType.MIGRATE_BILLING;
-        }
-    },
     TRANSFER {
         @Override
         public SubscriptionBaseTransitionType getSubscriptionTransitionType() {
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java b/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
index 0a9ae88..2a377af 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
@@ -104,71 +104,6 @@ public class TestDefaultSubscriptionTransferApi extends SubscriptionTestSuiteNoD
         Assert.assertEquals(((ApiEventTransfer) events.get(0)).getApiEventType(), ApiEventType.TRANSFER);
     }
 
-    @Test(groups = "fast")
-    public void testEventsAfterTransferForMigratedBundle1() throws Exception {
-        // MIGRATE_ENTITLEMENT then MIGRATE_BILLING (both in the past)
-        final DateTime transferDate = clock.getUTCNow();
-        final DateTime migrateSubscriptionEventEffectiveDate = transferDate.minusDays(10);
-        final DateTime migrateBillingEventEffectiveDate = migrateSubscriptionEventEffectiveDate.plusDays(1);
-        final List<SubscriptionBaseEvent> events = transferBundle(migrateSubscriptionEventEffectiveDate, migrateBillingEventEffectiveDate, transferDate);
-
-        Assert.assertEquals(events.size(), 1);
-        Assert.assertEquals(events.get(0).getType(), EventType.API_USER);
-        Assert.assertEquals(events.get(0).getEffectiveDate(), transferDate);
-        Assert.assertEquals(((ApiEventTransfer) events.get(0)).getApiEventType(), ApiEventType.TRANSFER);
-    }
-
-    @Test(groups = "fast")
-    public void testEventsAfterTransferForMigratedBundle2() throws Exception {
-        // MIGRATE_ENTITLEMENT and MIGRATE_BILLING at the same time (both in the past)
-        final DateTime transferDate = clock.getUTCNow();
-        final DateTime migrateSubscriptionEventEffectiveDate = transferDate.minusDays(10);
-        final DateTime migrateBillingEventEffectiveDate = migrateSubscriptionEventEffectiveDate;
-        final List<SubscriptionBaseEvent> events = transferBundle(migrateSubscriptionEventEffectiveDate, migrateBillingEventEffectiveDate, transferDate);
-
-        Assert.assertEquals(events.size(), 1);
-        Assert.assertEquals(events.get(0).getType(), EventType.API_USER);
-        Assert.assertEquals(events.get(0).getEffectiveDate(), transferDate);
-        Assert.assertEquals(((ApiEventTransfer) events.get(0)).getApiEventType(), ApiEventType.TRANSFER);
-    }
-
-    @Test(groups = "fast")
-    public void testEventsAfterTransferForMigratedBundle3() throws Exception {
-        // MIGRATE_ENTITLEMENT then MIGRATE_BILLING (the latter in the future)
-        final DateTime transferDate = clock.getUTCNow();
-        final DateTime migrateSubscriptionEventEffectiveDate = transferDate.minusDays(10);
-        final DateTime migrateBillingEventEffectiveDate = migrateSubscriptionEventEffectiveDate.plusDays(20);
-        final List<SubscriptionBaseEvent> events = transferBundle(migrateSubscriptionEventEffectiveDate, migrateBillingEventEffectiveDate, transferDate);
-
-        Assert.assertEquals(events.size(), 1);
-        Assert.assertEquals(events.get(0).getType(), EventType.API_USER);
-        Assert.assertEquals(events.get(0).getEffectiveDate(), transferDate);
-        Assert.assertEquals(((ApiEventTransfer) events.get(0)).getApiEventType(), ApiEventType.TRANSFER);
-    }
-
-    @Test(groups = "fast")
-    public void testEventsAfterTransferForMigratedBundle4() throws Exception {
-        // MIGRATE_ENTITLEMENT then MIGRATE_BILLING (both in the future)
-        final DateTime transferDate = clock.getUTCNow();
-        final DateTime migrateSubscriptionEventEffectiveDate = transferDate.plusDays(10);
-        final DateTime migrateBillingEventEffectiveDate = migrateSubscriptionEventEffectiveDate.plusDays(20);
-        final List<SubscriptionBaseEvent> events = transferBundle(migrateSubscriptionEventEffectiveDate, migrateBillingEventEffectiveDate, transferDate);
-
-        Assert.assertEquals(events.size(), 1);
-        Assert.assertEquals(events.get(0).getType(), EventType.API_USER);
-        Assert.assertEquals(events.get(0).getEffectiveDate(), migrateSubscriptionEventEffectiveDate);
-        Assert.assertEquals(((ApiEventTransfer) events.get(0)).getApiEventType(), ApiEventType.TRANSFER);
-    }
-
-    private List<SubscriptionBaseEvent> transferBundle(final DateTime migrateSubscriptionEventEffectiveDate, final DateTime migrateBillingEventEffectiveDate,
-                                                       final DateTime transferDate) throws SubscriptionBaseTransferApiException {
-        final ImmutableList<ExistingEvent> existingEvents = createMigrateEvents(migrateSubscriptionEventEffectiveDate, migrateBillingEventEffectiveDate);
-        final SubscriptionBuilder subscriptionBuilder = new SubscriptionBuilder();
-        final DefaultSubscriptionBase subscription = new DefaultSubscriptionBase(subscriptionBuilder);
-
-        return transferApi.toEvents(existingEvents, subscription, transferDate, internalCallContext);
-    }
-
     private ExistingEvent createEvent(final DateTime eventEffectiveDate, final SubscriptionBaseTransitionType subscriptionTransitionType) {
         return new ExistingEvent() {
             @Override
@@ -205,73 +140,4 @@ public class TestDefaultSubscriptionTransferApi extends SubscriptionTestSuiteNoD
         };
     }
 
-    private ImmutableList<ExistingEvent> createMigrateEvents(final DateTime migrateSubscriptionEventEffectiveDate, final DateTime migrateBillingEventEffectiveDate) {
-        final ExistingEvent migrateEntitlementEvent = new ExistingEvent() {
-            @Override
-            public DateTime getEffectiveDate() {
-                return migrateSubscriptionEventEffectiveDate;
-            }
-
-            @Override
-            public String getPlanName() {
-                return "BicycleTrialEvergreen1USD";
-            }
-
-            @Override
-            public String getPlanPhaseName() {
-                return "BicycleTrialEvergreen1USD-trial";
-            }
-
-            @Override
-            public UUID getEventId() {
-                return UUID.randomUUID();
-            }
-
-            @Override
-            public PlanPhaseSpecifier getPlanPhaseSpecifier() {
-                return new PlanPhaseSpecifier("BicycleTrialEvergreen1USD", ProductCategory.BASE, BillingPeriod.NO_BILLING_PERIOD,
-                                              PriceListSet.DEFAULT_PRICELIST_NAME, PhaseType.FIXEDTERM);
-            }
-
-            @Override
-            public SubscriptionBaseTransitionType getSubscriptionTransitionType() {
-                return SubscriptionBaseTransitionType.MIGRATE_ENTITLEMENT;
-            }
-        };
-
-        final ExistingEvent migrateBillingEvent = new ExistingEvent() {
-
-            @Override
-            public DateTime getEffectiveDate() {
-                return migrateBillingEventEffectiveDate;
-            }
-
-            @Override
-            public String getPlanName() {
-                return migrateEntitlementEvent.getPlanName();
-            }
-
-            @Override
-            public String getPlanPhaseName() {
-                return migrateEntitlementEvent.getPlanPhaseName();
-            }
-
-            @Override
-            public UUID getEventId() {
-                return UUID.randomUUID();
-            }
-
-            @Override
-            public PlanPhaseSpecifier getPlanPhaseSpecifier() {
-                return migrateEntitlementEvent.getPlanPhaseSpecifier();
-            }
-
-            @Override
-            public SubscriptionBaseTransitionType getSubscriptionTransitionType() {
-                return SubscriptionBaseTransitionType.MIGRATE_BILLING;
-            }
-        };
-
-        return ImmutableList.<ExistingEvent>of(migrateEntitlementEvent, migrateBillingEvent);
-    }
 }
diff --git a/util/src/test/java/org/killbill/billing/api/TestApiListener.java b/util/src/test/java/org/killbill/billing/api/TestApiListener.java
index b4aa841..7bab6d5 100644
--- a/util/src/test/java/org/killbill/billing/api/TestApiListener.java
+++ b/util/src/test/java/org/killbill/billing/api/TestApiListener.java
@@ -100,8 +100,6 @@ public class TestApiListener {
     }
 
     public enum NextEvent {
-        MIGRATE_ENTITLEMENT,
-        MIGRATE_BILLING,
         BROADCAST_SERVICE,
         CREATE,
         TRANSFER,
@@ -157,14 +155,6 @@ public class TestApiListener {
                 assertEqualsNicely(NextEvent.TRANSFER);
                 notifyIfStackEmpty();
                 break;
-            case MIGRATE_ENTITLEMENT:
-                assertEqualsNicely(NextEvent.MIGRATE_ENTITLEMENT);
-                notifyIfStackEmpty();
-                break;
-            case MIGRATE_BILLING:
-                assertEqualsNicely(NextEvent.MIGRATE_BILLING);
-                notifyIfStackEmpty();
-                break;
             case CREATE:
                 assertEqualsNicely(NextEvent.CREATE);
                 notifyIfStackEmpty();