killbill-memoizeit

junction: switch from SortedSet to List for blocking states Let

8/24/2012 3:58:14 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusRecorder.java
index 8ec98d4..06141c8 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusRecorder.java
@@ -92,7 +92,7 @@ public class BusinessOverdueStatusRecorder {
                 log.info("Started rebuilding overdue statuses for bundle id {}", bundleId);
                 transactional.deleteOverdueStatusesForBundle(bundleId.toString());
 
-                final SortedSet<BlockingState> blockingHistory = blockingApi.getBlockingHistory(bundleId);
+                final List<BlockingState> blockingHistory = blockingApi.getBlockingHistory(bundleId);
                 if (blockingHistory != null && blockingHistory.size() > 0) {
                     final List<BlockingState> overdueStates = ImmutableList.<BlockingState>copyOf(blockingHistory);
                     final List<BlockingState> overdueStatesReversed = Lists.reverse(overdueStates);
diff --git a/api/src/main/java/com/ning/billing/junction/api/BlockingApi.java b/api/src/main/java/com/ning/billing/junction/api/BlockingApi.java
index d6a1de6..ee1fe5b 100644
--- a/api/src/main/java/com/ning/billing/junction/api/BlockingApi.java
+++ b/api/src/main/java/com/ning/billing/junction/api/BlockingApi.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.junction.api;
 
+import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
@@ -27,9 +28,9 @@ public interface BlockingApi {
 
     public BlockingState getBlockingStateFor(UUID overdueableId);
 
-    public SortedSet<BlockingState> getBlockingHistory(Blockable overdueable);
+    public List<BlockingState> getBlockingHistory(Blockable overdueable);
 
-    public SortedSet<BlockingState> getBlockingHistory(UUID overdueableId);
+    public List<BlockingState> getBlockingHistory(UUID overdueableId);
 
     public <T extends Blockable> void setBlockingState(BlockingState state);
 
diff --git a/junction/src/main/java/com/ning/billing/junction/api/blocking/DefaultBlockingApi.java b/junction/src/main/java/com/ning/billing/junction/api/blocking/DefaultBlockingApi.java
index 0c74ffd..3635d26 100644
--- a/junction/src/main/java/com/ning/billing/junction/api/blocking/DefaultBlockingApi.java
+++ b/junction/src/main/java/com/ning/billing/junction/api/blocking/DefaultBlockingApi.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.junction.api.blocking;
 
+import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
@@ -53,12 +54,12 @@ public class DefaultBlockingApi implements BlockingApi {
     }
 
     @Override
-    public SortedSet<BlockingState> getBlockingHistory(final Blockable overdueable) {
+    public List<BlockingState> getBlockingHistory(final Blockable overdueable) {
         return dao.getBlockingHistoryFor(overdueable);
     }
 
     @Override
-    public SortedSet<BlockingState> getBlockingHistory(final UUID overdueableId) {
+    public List<BlockingState> getBlockingHistory(final UUID overdueableId) {
         return dao.getBlockingHistoryFor(overdueableId);
     }
 
diff --git a/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateDao.java b/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateDao.java
index b9f8510..530a1a2 100644
--- a/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateDao.java
+++ b/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateDao.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.junction.dao;
 
+import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
@@ -30,9 +31,9 @@ public interface BlockingStateDao {
 
     public BlockingState getBlockingStateFor(UUID blockableId);
 
-    public SortedSet<BlockingState> getBlockingHistoryFor(Blockable blockable);
+    public List<BlockingState> getBlockingHistoryFor(Blockable blockable);
 
-    public SortedSet<BlockingState> getBlockingHistoryFor(UUID blockableId);
+    public List<BlockingState> getBlockingHistoryFor(UUID blockableId);
 
     //Write
     <T extends Blockable> void setBlockingState(BlockingState state, Clock clock);
diff --git a/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateSqlDao.java b/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateSqlDao.java
index 6383b9d..3231d6b 100644
--- a/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateSqlDao.java
+++ b/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateSqlDao.java
@@ -18,6 +18,7 @@ package com.ning.billing.junction.dao;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
@@ -68,12 +69,12 @@ public interface BlockingStateSqlDao extends BlockingStateDao, CloseMe, Transmog
     @Override
     @SqlQuery
     @Mapper(BlockingHistorySqlMapper.class)
-    public abstract SortedSet<BlockingState> getBlockingHistoryFor(@Bind(binder = BlockableBinder.class) Blockable blockable);
+    public abstract List<BlockingState> getBlockingHistoryFor(@Bind(binder = BlockableBinder.class) Blockable blockable);
 
     @Override
     @SqlQuery
     @Mapper(BlockingHistorySqlMapper.class)
-    public abstract SortedSet<BlockingState> getBlockingHistoryFor(@Bind(binder = UUIDBinder.class) UUID blockableId);
+    public abstract List<BlockingState> getBlockingHistoryFor(@Bind(binder = UUIDBinder.class) UUID blockableId);
 
 
     public class BlockingHistorySqlMapper extends MapperBase implements ResultSetMapper<BlockingState> {
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BlockingCalculator.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BlockingCalculator.java
index af3d412..4cd70e1 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BlockingCalculator.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BlockingCalculator.java
@@ -93,7 +93,7 @@ public class BlockingCalculator {
         final SortedSet<BillingEvent> billingEventsToRemove = new TreeSet<BillingEvent>();
 
         for (final UUID bundleId : bundleMap.keySet()) {
-            final SortedSet<BlockingState> blockingEvents = blockingApi.getBlockingHistory(bundleId);
+            final List<BlockingState> blockingEvents = blockingApi.getBlockingHistory(bundleId);
             blockingEvents.addAll(blockingApi.getBlockingHistory(account.getId()));
             final List<DisabledDuration> blockingDurations = createBlockingDurations(blockingEvents);
 
@@ -253,7 +253,7 @@ public class BlockingCalculator {
     }
 
 
-    protected List<DisabledDuration> createBlockingDurations(final SortedSet<BlockingState> overdueBundleEvents) {
+    protected List<DisabledDuration> createBlockingDurations(final List<BlockingState> overdueBundleEvents) {
         final List<DisabledDuration> result = new ArrayList<BlockingCalculator.DisabledDuration>();
         BlockingState first = null;
 
diff --git a/junction/src/main/resources/com/ning/billing/junction/dao/BlockingStateSqlDao.sql.stg b/junction/src/main/resources/com/ning/billing/junction/dao/BlockingStateSqlDao.sql.stg
index 0bd6686..78e62d6 100644
--- a/junction/src/main/resources/com/ning/billing/junction/dao/BlockingStateSqlDao.sql.stg
+++ b/junction/src/main/resources/com/ning/billing/junction/dao/BlockingStateSqlDao.sql.stg
@@ -11,8 +11,8 @@ getBlockingStateFor() ::= <<
       , block_billing
       , created_date   
     from blocking_states
-    where id = :id 
-    order by created_date desc
+    where id = :id
+    order by created_date desc, record_id desc
     limit 1
     ;
 >>
@@ -29,7 +29,7 @@ getBlockingHistoryFor() ::= <<
       , created_date   
     from blocking_states
     where id = :id 
-    order by created_date asc
+    order by created_date desc, record_id desc
     ;
 >>
 
@@ -53,4 +53,4 @@ setBlockingState() ::= <<
       , :block_billing   
       , :created_date 
     );
->>
\ No newline at end of file
+>>
diff --git a/junction/src/test/java/com/ning/billing/junction/api/blocking/TestBlockingApi.java b/junction/src/test/java/com/ning/billing/junction/api/blocking/TestBlockingApi.java
index de56229..378fe68 100644
--- a/junction/src/test/java/com/ning/billing/junction/api/blocking/TestBlockingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/api/blocking/TestBlockingApi.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.junction.api.blocking;
 
+import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
@@ -96,15 +97,15 @@ public class TestBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
         final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
         Mockito.when(bundle.getId()).thenReturn(uuid);
 
-        final SortedSet<BlockingState> history1 = api.getBlockingHistory(bundle);
-        final SortedSet<BlockingState> history2 = api.getBlockingHistory(bundle.getId());
+        final List<BlockingState> history1 = api.getBlockingHistory(bundle);
+        final List<BlockingState> history2 = api.getBlockingHistory(bundle.getId());
 
         Assert.assertEquals(history1.size(), 2);
-        Assert.assertEquals(history1.first().getStateName(), overdueStateName);
-        Assert.assertEquals(history1.last().getStateName(), overdueStateName2);
+        Assert.assertEquals(history1.get(0).getStateName(), overdueStateName);
+        Assert.assertEquals(history1.get(1).getStateName(), overdueStateName2);
 
         Assert.assertEquals(history2.size(), 2);
-        Assert.assertEquals(history2.first().getStateName(), overdueStateName);
-        Assert.assertEquals(history2.last().getStateName(), overdueStateName2);
+        Assert.assertEquals(history2.get(0).getStateName(), overdueStateName);
+        Assert.assertEquals(history2.get(1).getStateName(), overdueStateName2);
     }
 }
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 9959583..d1c5ff7 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
@@ -16,6 +16,7 @@
 
 package com.ning.billing.junction.blocking;
 
+import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
@@ -71,12 +72,12 @@ public class TestBlockingChecker extends JunctionTestSuite {
         }
 
         @Override
-        public SortedSet<BlockingState> getBlockingHistoryFor(final Blockable overdueable) {
+        public List<BlockingState> getBlockingHistoryFor(final Blockable overdueable) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public SortedSet<BlockingState> getBlockingHistoryFor(final UUID overdueableId) {
+        public List<BlockingState> getBlockingHistoryFor(final UUID overdueableId) {
             throw new UnsupportedOperationException();
         }
 
diff --git a/junction/src/test/java/com/ning/billing/junction/dao/TestBlockingDao.java b/junction/src/test/java/com/ning/billing/junction/dao/TestBlockingDao.java
index 17c7f18..55d7e5a 100644
--- a/junction/src/test/java/com/ning/billing/junction/dao/TestBlockingDao.java
+++ b/junction/src/test/java/com/ning/billing/junction/dao/TestBlockingDao.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.junction.dao;
 
+import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
@@ -87,15 +88,15 @@ public class TestBlockingDao extends JunctionTestSuiteWithEmbeddedDB {
         final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
         Mockito.when(bundle.getId()).thenReturn(uuid);
 
-        final SortedSet<BlockingState> history1 = dao.getBlockingHistoryFor(bundle);
-        final SortedSet<BlockingState> history2 = dao.getBlockingHistoryFor(bundle.getId());
+        final List<BlockingState> history1 = dao.getBlockingHistoryFor(bundle);
+        final List<BlockingState> history2 = dao.getBlockingHistoryFor(bundle.getId());
 
         Assert.assertEquals(history1.size(), 2);
-        Assert.assertEquals(history1.first().getStateName(), overdueStateName);
-        Assert.assertEquals(history1.last().getStateName(), overdueStateName2);
+        Assert.assertEquals(history1.get(0).getStateName(), overdueStateName);
+        Assert.assertEquals(history1.get(1).getStateName(), overdueStateName2);
 
         Assert.assertEquals(history2.size(), 2);
-        Assert.assertEquals(history2.first().getStateName(), overdueStateName);
-        Assert.assertEquals(history2.last().getStateName(), overdueStateName2);
+        Assert.assertEquals(history2.get(0).getStateName(), overdueStateName);
+        Assert.assertEquals(history2.get(1).getStateName(), overdueStateName2);
     }
 }
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
index ef9f1b4..1fe5c0b 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
@@ -366,7 +366,7 @@ public class TestBillingApi extends JunctionTestSuite {
 
         ((MockCatalog) catalogService.getFullCatalog()).setBillingAlignment(BillingAlignment.ACCOUNT);
 
-        final SortedSet<BlockingState> blockingStates = new TreeSet<BlockingState>();
+        final List<BlockingState> blockingStates = new ArrayList<BlockingState>();
         blockingStates.add(new DefaultBlockingState(bunId, DISABLED_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1)));
         blockingStates.add(new DefaultBlockingState(bunId, CLEAR_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2)));
 
@@ -386,16 +386,16 @@ public class TestBillingApi extends JunctionTestSuite {
             }
 
             @Override
-            public SortedSet<BlockingState> getBlockingHistory(final UUID overdueableId) {
+            public List<BlockingState> getBlockingHistory(final UUID overdueableId) {
                 if (overdueableId == bunId) {
                     return blockingStates;
                 }
-                return new TreeSet<BlockingState>();
+                return new ArrayList<BlockingState>();
             }
 
             @Override
-            public SortedSet<BlockingState> getBlockingHistory(final Blockable overdueable) {
-                return new TreeSet<BlockingState>();
+            public List<BlockingState> getBlockingHistory(final Blockable overdueable) {
+                return new ArrayList<BlockingState>();
             }
         });
 
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
index e6dd137..91c478f 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
@@ -135,7 +135,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
         billingEvents.add(C);
         billingEvents.add(D);
 
-        final SortedSet<BlockingState> blockingStates = new TreeSet<BlockingState>();
+        final List<BlockingState> blockingStates = new ArrayList<BlockingState>();
         blockingStates.add(new DefaultBlockingState(bundleId1, DISABLED_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now));
         blockingStates.add(new DefaultBlockingState(bundleId1, CLEAR_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2)));
 
@@ -647,12 +647,12 @@ public class TestBlockingCalculator extends JunctionTestSuite {
 
     @Test
     public void testCreateDisablePairs() {
-        SortedSet<BlockingState> blockingEvents;
+        List<BlockingState> blockingEvents;
         final UUID ovdId = UUID.randomUUID();
         final DateTime now = clock.getUTCNow();
 
         //simple events open clear -> disabled
-        blockingEvents = new TreeSet<BlockingState>();
+        blockingEvents = new ArrayList<BlockingState>();
         blockingEvents.add(new DefaultBlockingState(ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now));
         blockingEvents.add(new DefaultBlockingState(ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1)));
 
@@ -663,7 +663,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
         assertNull(pairs.get(0).getEnd());
 
         //simple events closed clear -> disabled
-        blockingEvents = new TreeSet<BlockingState>();
+        blockingEvents = new ArrayList<BlockingState>();
         blockingEvents.add(new DefaultBlockingState(ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now));
         blockingEvents.add(new DefaultBlockingState(ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1)));
         blockingEvents.add(new DefaultBlockingState(ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2)));
@@ -676,7 +676,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
         assertEquals(pairs.get(0).getEnd(), now.plusDays(2));
 
         //simple BUNDLE events closed clear -> disabled
-        blockingEvents = new TreeSet<BlockingState>();
+        blockingEvents = new ArrayList<BlockingState>();
         blockingEvents.add(new DefaultBlockingState(ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now));
         blockingEvents.add(new DefaultBlockingState(ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1)));
         blockingEvents.add(new DefaultBlockingState(ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2)));
@@ -689,7 +689,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
         assertEquals(pairs.get(0).getEnd(), now.plusDays(2));
 
         //two or more disableds in a row
-        blockingEvents = new TreeSet<BlockingState>();
+        blockingEvents = new ArrayList<BlockingState>();
         blockingEvents.add(new DefaultBlockingState(ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now));
         blockingEvents.add(new DefaultBlockingState(ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1)));
         blockingEvents.add(new DefaultBlockingState(ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(2)));
@@ -702,7 +702,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
         assertNotNull(pairs.get(0).getEnd());
         assertEquals(pairs.get(0).getEnd(), now.plusDays(3));
 
-        blockingEvents = new TreeSet<BlockingState>();
+        blockingEvents = new ArrayList<BlockingState>();
         blockingEvents.add(new DefaultBlockingState(ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now));
         blockingEvents.add(new DefaultBlockingState(ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1)));
         blockingEvents.add(new DefaultBlockingState(ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(2)));
diff --git a/overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java b/overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java
index a309949..1f49c9d 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.overdue.applicator;
 
+import java.util.List;
 import java.util.SortedSet;
 import java.util.UUID;
 
@@ -89,12 +90,12 @@ public class ApplicatorMockJunctionModule extends MockJunctionModule {
         }
 
         @Override
-        public SortedSet<BlockingState> getBlockingHistory(final Blockable overdueable) {
+        public List<BlockingState> getBlockingHistory(final Blockable overdueable) {
             throw new UnsupportedOperationException();
         }
 
         @Override
-        public SortedSet<BlockingState> getBlockingHistory(final UUID overdueableId) {
+        public List<BlockingState> getBlockingHistory(final UUID overdueableId) {
             throw new UnsupportedOperationException();
         }