killbill-memoizeit

Details

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 a74e847..076843f 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessOverdueStatusDao.java
@@ -35,6 +35,7 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.junction.api.Blockable;
 import com.ning.billing.junction.api.BlockingState;
+import com.ning.billing.junction.api.JunctionApi;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
@@ -51,16 +52,16 @@ public class BusinessOverdueStatusDao {
 
     private final AccountInternalApi accountApi;
     private final EntitlementInternalApi entitlementApi;
-    private final BlockingInternalApi blockingApi;
+    private final JunctionApi junctionApi;
 
     @Inject
     public BusinessOverdueStatusDao(final BusinessOverdueStatusSqlDao overdueStatusSqlDao, final AccountInternalApi accountApi,
-                                    final EntitlementInternalApi entitlementApi, final BlockingInternalApi blockingApi) {
+                                    final EntitlementInternalApi entitlementApi, final JunctionApi junctionApi) {
 
         this.overdueStatusSqlDao = overdueStatusSqlDao;
         this.accountApi = accountApi;
         this.entitlementApi = entitlementApi;
-        this.blockingApi = blockingApi;
+        this.junctionApi = junctionApi;
     }
 
     public void overdueStatusChanged(final Blockable.Type objectType, final UUID objectId, final InternalCallContext context) {
@@ -96,7 +97,7 @@ public class BusinessOverdueStatusDao {
             public Void inTransaction(final BusinessOverdueStatusSqlDao transactional, final TransactionStatus status) throws Exception {
                 log.info("Started rebuilding overdue statuses for bundle id {}", bundleId);
                 transactional.deleteOverdueStatusesForBundle(bundleId.toString(), context);
-                final List<BlockingState> blockingHistory = blockingApi.getBlockingHistory(bundleId, context);
+                final List<BlockingState> blockingHistory = junctionApi.getBlockingHistory(bundleId, context.toTenantContext());
                 if (blockingHistory != null && blockingHistory.size() > 0) {
                     final List<BlockingState> overdueStates = ImmutableList.<BlockingState>copyOf(blockingHistory);
                     final List<BlockingState> overdueStatesReversed = Lists.reverse(overdueStates);
diff --git a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuiteWithEmbeddedDB.java b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuiteWithEmbeddedDB.java
index 0f70b21..3629261 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuiteWithEmbeddedDB.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/AnalyticsTestSuiteWithEmbeddedDB.java
@@ -44,6 +44,7 @@ import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.junction.api.JunctionApi;
 import com.ning.billing.payment.dao.PaymentDao;
 import com.ning.billing.util.glue.RealImplementation;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
@@ -123,6 +124,8 @@ public abstract class AnalyticsTestSuiteWithEmbeddedDB extends GuicyKillbillTest
     protected BusinessSubscriptionTransitionSqlDao subscriptionTransitionSqlDao;
     @Inject
     protected BusinessTagDao tagDao;
+    @Inject
+    protected JunctionApi junctionApi;
 
     @BeforeClass(groups = "slow")
     protected void beforeClass() throws Exception {
diff --git a/api/src/main/java/com/ning/billing/glue/JunctionModule.java b/api/src/main/java/com/ning/billing/glue/JunctionModule.java
index 62cad80..1393732 100644
--- a/api/src/main/java/com/ning/billing/glue/JunctionModule.java
+++ b/api/src/main/java/com/ning/billing/glue/JunctionModule.java
@@ -27,4 +27,6 @@ public interface JunctionModule {
 
     public void installEntitlementUserApi();
 
+    public void installJunctionApi();
+
 }
diff --git a/api/src/main/java/com/ning/billing/junction/api/JunctionApi.java b/api/src/main/java/com/ning/billing/junction/api/JunctionApi.java
new file mode 100644
index 0000000..70bdd44
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/junction/api/JunctionApi.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2010-2013 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.junction.api;
+
+import java.util.List;
+import java.util.UUID;
+
+import com.ning.billing.util.callcontext.TenantContext;
+
+public interface JunctionApi {
+
+    /**
+     *
+     * @param overdueableId the uuid of the object potentially in an overduabke state
+     * @param context       the context associated to that call
+     * @return              a list of all the blocking states for that object
+     */
+    public List<BlockingState> getBlockingHistory(UUID overdueableId, TenantContext context);
+}
+
+
diff --git a/api/src/main/java/com/ning/billing/osgi/api/OSGIKillbill.java b/api/src/main/java/com/ning/billing/osgi/api/OSGIKillbill.java
index 646afd9..51a72f6 100644
--- a/api/src/main/java/com/ning/billing/osgi/api/OSGIKillbill.java
+++ b/api/src/main/java/com/ning/billing/osgi/api/OSGIKillbill.java
@@ -27,6 +27,7 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.invoice.api.InvoiceMigrationApi;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.invoice.api.InvoiceUserApi;
+import com.ning.billing.junction.api.JunctionApi;
 import com.ning.billing.osgi.api.config.PluginConfigServiceApi;
 import com.ning.billing.overdue.OverdueUserApi;
 import com.ning.billing.payment.api.PaymentApi;
@@ -85,6 +86,8 @@ public interface OSGIKillbill {
 
     public TagUserApi getTagUserApi();
 
+    public JunctionApi getJunctionApi();
+
     /**
      * Used by the OSGI bundles to discover their configuration
      *
diff --git a/junction/src/main/java/com/ning/billing/junction/api/DefaultJunctionApi.java b/junction/src/main/java/com/ning/billing/junction/api/DefaultJunctionApi.java
new file mode 100644
index 0000000..ee81e49
--- /dev/null
+++ b/junction/src/main/java/com/ning/billing/junction/api/DefaultJunctionApi.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2010-2013 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.junction.api;
+
+import java.util.List;
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import com.ning.billing.junction.dao.BlockingStateDao;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.callcontext.TenantContext;
+
+public class DefaultJunctionApi implements JunctionApi {
+
+    private final BlockingStateDao dao;
+    private final InternalCallContextFactory internalCallContextFactory;
+
+    @Inject
+    public DefaultJunctionApi(final BlockingStateDao dao, final InternalCallContextFactory internalCallContextFactory) {
+        this.dao = dao;
+        this.internalCallContextFactory = internalCallContextFactory;
+    }
+
+
+    @Override
+    public List<BlockingState> getBlockingHistory(final UUID overdueableId, final TenantContext context) {
+        return dao.getBlockingHistoryFor(overdueableId, internalCallContextFactory.createInternalTenantContext(context));
+    }
+}
diff --git a/junction/src/main/java/com/ning/billing/junction/glue/DefaultJunctionModule.java b/junction/src/main/java/com/ning/billing/junction/glue/DefaultJunctionModule.java
index ce80386..d92e52a 100644
--- a/junction/src/main/java/com/ning/billing/junction/glue/DefaultJunctionModule.java
+++ b/junction/src/main/java/com/ning/billing/junction/glue/DefaultJunctionModule.java
@@ -21,6 +21,8 @@ import org.skife.config.ConfigSource;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.glue.JunctionModule;
+import com.ning.billing.junction.api.DefaultJunctionApi;
+import com.ning.billing.junction.api.JunctionApi;
 import com.ning.billing.junction.api.svcs.DefaultInternalBlockingApi;
 import com.ning.billing.junction.block.BlockingChecker;
 import com.ning.billing.junction.block.DefaultBlockingChecker;
@@ -51,6 +53,7 @@ public class DefaultJunctionModule extends AbstractModule implements JunctionMod
         installBillingApi();
         installEntitlementUserApi();
         installBlockingChecker();
+        installJunctionApi();
 
         // Internal
         installBlockingCalculator();
@@ -84,4 +87,9 @@ public class DefaultJunctionModule extends AbstractModule implements JunctionMod
     public void installBlockingCalculator() {
         bind(BlockingCalculator.class).asEagerSingleton();
     }
+
+    @Override
+    public void installJunctionApi() {
+        bind(JunctionApi.class).to(DefaultJunctionApi.class).asEagerSingleton();
+    }
 }
diff --git a/osgi/src/main/java/com/ning/billing/osgi/DefaultOSGIKillbill.java b/osgi/src/main/java/com/ning/billing/osgi/DefaultOSGIKillbill.java
index ea43446..67412a9 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/DefaultOSGIKillbill.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/DefaultOSGIKillbill.java
@@ -31,6 +31,7 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.invoice.api.InvoiceMigrationApi;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.invoice.api.InvoiceUserApi;
+import com.ning.billing.junction.api.JunctionApi;
 import com.ning.billing.osgi.api.OSGIKillbill;
 import com.ning.billing.osgi.api.config.PluginConfigServiceApi;
 import com.ning.billing.osgi.glue.DefaultOSGIModule;
@@ -64,6 +65,8 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
     private final CustomFieldUserApi customFieldUserApi;
     private final ExportUserApi exportUserApi;
     private final TagUserApi tagUserApi;
+    private final JunctionApi junctionApi;
+
     private final PluginConfigServiceApi configServiceApi;
 
     @Inject
@@ -86,6 +89,7 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
                                final CustomFieldUserApi customFieldUserApi,
                                final ExportUserApi exportUserApi,
                                final TagUserApi tagUserApi,
+                               final JunctionApi junctionApi,
                                final PluginConfigServiceApi configServiceApi) {
         this.accountUserApi = accountUserApi;
         this.analyticsSanityApi = analyticsSanityApi;
@@ -106,6 +110,7 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
         this.customFieldUserApi = customFieldUserApi;
         this.exportUserApi = exportUserApi;
         this.tagUserApi = tagUserApi;
+        this.junctionApi = junctionApi;
         this.configServiceApi = configServiceApi;
     }
 
@@ -205,6 +210,11 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
     }
 
     @Override
+    public JunctionApi getJunctionApi() {
+        return junctionApi;
+    }
+
+    @Override
     public PluginConfigServiceApi getPluginConfigServiceApi() {
         return configServiceApi;
     }
diff --git a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillAPI.java b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillAPI.java
index 47ca336..06cdc54 100644
--- a/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillAPI.java
+++ b/osgi-bundles/libs/killbill/src/main/java/com/ning/killbill/osgi/libs/killbill/OSGIKillbillAPI.java
@@ -30,6 +30,7 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.invoice.api.InvoiceMigrationApi;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.invoice.api.InvoiceUserApi;
+import com.ning.billing.junction.api.JunctionApi;
 import com.ning.billing.osgi.api.OSGIKillbill;
 import com.ning.billing.osgi.api.config.PluginConfigServiceApi;
 import com.ning.billing.overdue.OverdueUserApi;
@@ -251,6 +252,16 @@ public class OSGIKillbillAPI extends OSGIKillbillLibraryBase implements OSGIKill
     }
 
     @Override
+    public JunctionApi getJunctionApi() {
+        return withServiceTracker(killbillTracker, new APICallback<JunctionApi, OSGIKillbill>(KILLBILL_SERVICE_NAME) {
+            @Override
+            public JunctionApi executeWithService(final OSGIKillbill service) {
+                return service.getJunctionApi();
+            }
+        });
+    }
+
+    @Override
     public PluginConfigServiceApi getPluginConfigServiceApi() {
         return withServiceTracker(killbillTracker, new APICallback<PluginConfigServiceApi, OSGIKillbill>(KILLBILL_SERVICE_NAME) {
             @Override
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
index 89967e0..ac47120 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
@@ -21,6 +21,7 @@ import org.mockito.Mockito;
 import com.ning.billing.account.api.AccountUserApi;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.glue.JunctionModule;
+import com.ning.billing.junction.api.JunctionApi;
 import com.ning.billing.util.svcapi.junction.BillingInternalApi;
 import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
 
@@ -31,6 +32,7 @@ public class MockJunctionModule extends AbstractModule implements JunctionModule
     private final BlockingInternalApi blockingApi = Mockito.mock(BlockingInternalApi.class);
     private final AccountUserApi userApi = Mockito.mock(AccountUserApi.class);
     private final EntitlementUserApi entUserApi = Mockito.mock(EntitlementUserApi.class);
+    private final JunctionApi junctionApi = Mockito.mock(JunctionApi.class);
 
     @Override
     protected void configure() {
@@ -38,6 +40,7 @@ public class MockJunctionModule extends AbstractModule implements JunctionModule
         installAccountUserApi();
         installBillingApi();
         installEntitlementUserApi();
+        installJunctionApi();
     }
 
     @Override
@@ -60,4 +63,9 @@ public class MockJunctionModule extends AbstractModule implements JunctionModule
         bind(EntitlementUserApi.class).toInstance(entUserApi);
     }
 
+    @Override
+    public void installJunctionApi() {
+         bind(JunctionApi.class).toInstance(junctionApi);
+    }
+
 }