killbill-memoizeit

Merge branch 'integration' of github.com:ning/killbill

3/9/2012 5:49:56 PM

Details

diff --git a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
index 21ac60f..6340560 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/billing/BillingEvent.java
@@ -107,6 +107,6 @@ public interface BillingEvent extends Comparable<BillingEvent> {
 	/**
 	 * @return a unique long indicating the ordering on which events got inserted on disk-- used for sorting only
 	 */
-	public long getTotalOrdering();
+	public Long getTotalOrdering();
 
 }
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/MockModule.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/MockModule.java
index 0cb1b01..cacbf01 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/MockModule.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/MockModule.java
@@ -98,7 +98,7 @@ public class MockModule extends AbstractModule {
     }
 
     private static void loadSystemPropertiesFromClasspath(final String resource) {
-        final URL url = TestBasic.class.getResource(resource);
+        final URL url = TestIntegration.class.getResource(resource);
         assertNotNull(url);
         try {
             System.getProperties().load( url.openStream() );
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBusHandler.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBusHandler.java
index f915509..01c3f52 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBusHandler.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBusHandler.java
@@ -20,6 +20,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Stack;
 
+import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -66,6 +67,7 @@ public class TestBusHandler {
             notifyIfStackEmpty();
             break;
         case CREATE:
+        case RE_CREATE:
             assertEqualsNicely(NextEvent.CREATE);
             notifyIfStackEmpty();
 
@@ -131,10 +133,21 @@ public class TestBusHandler {
             if (completed) {
                 return completed;
             }
-            try {
-                wait(timeout);
-            } catch (Exception ignore) {
-            }
+            long waitTimeMs = timeout;
+            do {
+                try {
+                    DateTime before = new DateTime();
+                    wait(waitTimeMs);
+                    if (completed) {
+                        return completed;
+                    }
+                    DateTime after = new DateTime();
+                    waitTimeMs -= after.getMillis() - before.getMillis();
+                } catch (Exception ignore) {
+                    log.error("isCompleted got interrupted ", ignore);
+                    return false;
+                }
+            } while (waitTimeMs > 0 && !completed);
         }
         if (!completed) {
             Joiner joiner = Joiner.on(" ");
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
index 3d40c71..0c6f82a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultBillingEvent.java
@@ -43,7 +43,7 @@ public class DefaultBillingEvent implements BillingEvent {
     final private BillingModeType billingModeType;
     final private BillingPeriod billingPeriod;
     final private SubscriptionTransitionType type;
-    final private long totalOrdering;
+    final private Long totalOrdering;
 
     public DefaultBillingEvent(SubscriptionTransition transition, Subscription subscription, int billCycleDay, Currency currency) throws CatalogApiException {
         this.billCycleDay = billCycleDay;
@@ -97,11 +97,7 @@ public class DefaultBillingEvent implements BillingEvent {
     		 if (! getEffectiveDate().equals(e1.getEffectiveDate())) { // Secondly order by date
                  return getEffectiveDate().compareTo(e1.getEffectiveDate());
     		 } else { // dates and subscriptions are the same
-    			 if (!getTransitionType().equals(e1.getTransitionType())) { // Finally compare by transition type
-    				 return getTransitionType().ordinal() - e1.getTransitionType().ordinal();
-    			 } else {
-    				 return hashCode() - e1.hashCode();
-    			 }
+    			 return getTotalOrdering().compareTo(e1.getTotalOrdering());
     		 }
     	 }
     }
@@ -167,7 +163,7 @@ public class DefaultBillingEvent implements BillingEvent {
     }
 
     @Override
-    public long getTotalOrdering() {
+    public Long getTotalOrdering() {
         return totalOrdering;
     }
 
@@ -195,11 +191,12 @@ public class DefaultBillingEvent implements BillingEvent {
         } catch (Exception e) {
             sb.append("null");
         }
-
         sb.append(", ");
 
         sb.append("currency = ").append(currency.toString()).append(", ");
         sb.append("billingPeriod = ").append(billingPeriod.toString());
+        sb.append(", ");
+        sb.append("totalOrdering = ").append(getTotalOrdering().toString());
         sb.append("}");
 
         return sb.toString();
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java
index 72cc142..9899990 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionApiService.java
@@ -35,6 +35,7 @@ import org.joda.time.DateTime;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 public class SubscriptionApiService {
 
@@ -98,7 +99,8 @@ public class SubscriptionApiService {
 
         try {
             TimedPhase [] curAndNextPhases = planAligner.getCurrentAndNextTimedPhaseOnCreate(subscription, plan, initialPhase, realPriceList, requestedDate, effectiveDate);
-            ApiEventCreate creationEvent = new ApiEventCreate(new ApiEventBuilder()
+
+            ApiEventBuilder createBuilder = new ApiEventBuilder()
             .setSubscriptionId(subscription.getId())
             .setEventPlan(plan.getName())
             .setEventPlanPhase(curAndNextPhases[0].getPhase().getName())
@@ -107,7 +109,8 @@ public class SubscriptionApiService {
             .setProcessedDate(processedDate)
             .setEffectiveDate(effectiveDate)
             .setRequestedDate(requestedDate)
-            .setFromDisk(true));
+            .setFromDisk(true);
+            ApiEvent creationEvent = (reCreate) ? new ApiEventReCreate(createBuilder) : new ApiEventCreate(createBuilder);
 
             TimedPhase nextTimedPhase = curAndNextPhases[1];
             PhaseEvent nextPhaseEvent = (nextTimedPhase != null) ?
@@ -123,7 +126,7 @@ public class SubscriptionApiService {
             } else {
                 dao.createSubscription(subscription, events);
             }
-            subscription.rebuildTransitions(events, catalogService.getFullCatalog());
+            subscription.rebuildTransitions(dao.getEventsForSubscription(subscription.getId()), catalogService.getFullCatalog());
         } catch (CatalogApiException e) {
             throw new EntitlementUserApiException(e);
         }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
index e74ea69..aa07385 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
@@ -48,6 +48,7 @@ public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
 
         this.activeVersion = copy.activeVersion;
         this.isActive = copy.isActive;
+        this.totalOrdering = copy.totalOrdering;
     }
 
     public T setTotalOrdering(long totalOrdering) {