killbill-memoizeit

Integration with IRS -- entitlement

11/4/2011 10:04:41 PM

Details

diff --git a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
index 3d0bad2..f58f601 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
@@ -34,7 +34,6 @@ import java.util.List;
 public class AnalyticsListener implements IApiListener
 {
     private static final Logger log = LoggerFactory.getLogger(AnalyticsListener.class);
-
     private final EventDao dao;
     private final IEntitlementUserApi entitlementApi;
     private final IAccountUserApi accountApi;
diff --git a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
index 28b9725..8e91594 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
@@ -33,23 +33,28 @@ public class CatalogService implements IService, Provider<ICatalog>, ICatalogSer
 
     private static final String CATALOG_SERVICE_NAME = "catalog-service";
 
-    private final ICatalogConfig config;
-
     private static ICatalog catalog;
 
+    private final ICatalogConfig config;
+    private boolean isInitialized;
+
 
     @Inject
     public CatalogService(ICatalogConfig config) {
         this.config = config;
         System.out.println(config.getCatalogURI());
+        this.isInitialized = false;
     }
 
     @Override
-    public void initialize() throws ServiceException {
-        try {
-            catalog = CatalogLoader.getCatalogFromProperty(config.getCatalogURI());
-        } catch (Exception e) {
-            throw new ServiceException(e);
+    public synchronized void initialize() throws ServiceException {
+        if (!isInitialized) {
+            try {
+                catalog = CatalogLoader.getCatalogFromProperty(config.getCatalogURI());
+                isInitialized = true;
+            } catch (Exception e) {
+                throw new ServiceException(e);
+            }
         }
     }
 
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
index 5777cba..a1528ce 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/BillingApi.java
@@ -38,7 +38,6 @@ public class BillingApi implements IEntitlementBillingApi {
     private final IClock clock;
     private final IEntitlementDao dao;
 
-    @Inject
     public BillingApi(Engine engine, IClock clock, IEntitlementDao dao) {
         super();
         this.engine = engine;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
index e664566..c30e2c1 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/EntitlementUserApi.java
@@ -51,21 +51,27 @@ public class EntitlementUserApi implements IEntitlementUserApi {
     private final IEntitlementDao dao;
     private final IPlanAligner planAligner;
 
+    private boolean initialized;
+
     private ICatalog catalog;
-    @Inject
+
     public EntitlementUserApi(Engine engine, IClock clock, IPlanAligner planAligner, IEntitlementDao dao) {
         super();
         this.engine = engine;
         this.clock = clock;
         this.dao = dao;
         this.planAligner = planAligner;
+        this.initialized = false;
 
     }
 
     @Override
-    public void initialize(List<IApiListener> listeners) {
-        this.catalog = engine.getCatalog();
-        engine.registerApiObservers(listeners);
+    public synchronized void initialize(List<IApiListener> listeners) {
+        if (!initialized) {
+            this.catalog = engine.getCatalog();
+            engine.registerApiObservers(listeners);
+            initialized = true;
+        }
     }
 
     @Override
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
index b71f669..0db9538 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
@@ -30,11 +30,15 @@ import com.ning.billing.catalog.api.ICatalogUserApi;
 import com.ning.billing.catalog.api.IPlan;
 import com.ning.billing.config.IEntitlementConfig;
 
-import com.ning.billing.entitlement.IEntitlementSystem;
+import com.ning.billing.entitlement.IEntitlementService;
 import com.ning.billing.entitlement.alignment.IPlanAligner;
 import com.ning.billing.entitlement.alignment.IPlanAligner.TimedPhase;
 import com.ning.billing.entitlement.alignment.PlanAligner;
+import com.ning.billing.entitlement.api.billing.BillingApi;
+import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.api.user.IApiListener;
+import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.engine.dao.IEntitlementDao;
 import com.ning.billing.entitlement.events.IEvent;
@@ -44,7 +48,7 @@ import com.ning.billing.entitlement.events.phase.PhaseEvent;
 import com.ning.billing.entitlement.events.user.IUserEvent;
 import com.ning.billing.util.clock.IClock;
 
-public class Engine implements IEventListener, IEntitlementSystem {
+public class Engine implements IEventListener, IEntitlementService {
 
     private static final String ENTITLEMENT_SERVICE_NAME = "entitlement-service";
 
@@ -57,7 +61,8 @@ public class Engine implements IEventListener, IEntitlementSystem {
     private final IApiEventProcessor apiEventProcessor;
     private final ICatalogService catalogService;
     private final IPlanAligner planAligner;
-
+    private final IEntitlementUserApi userApi;
+    private final IEntitlementBillingApi billingApi;
     private List<IApiListener> observers;
     private ICatalog catalog;
 
@@ -72,6 +77,8 @@ public class Engine implements IEventListener, IEntitlementSystem {
         this.planAligner = planAligner;
         this.catalogService = catalogService;
         this.observers = null;
+        this.userApi = new EntitlementUserApi(this, clock, planAligner, dao);
+        this.billingApi = new BillingApi(this, clock, dao);
         instance = this;
 
     }
@@ -100,6 +107,18 @@ public class Engine implements IEventListener, IEntitlementSystem {
         apiEventProcessor.stopNotifications();
     }
 
+    @Override
+    public IEntitlementUserApi getUserApi(List<IApiListener> listeners) {
+        userApi.initialize(listeners);
+        return userApi;
+    }
+
+    @Override
+    public IEntitlementBillingApi getBillingApi() {
+        return billingApi;
+    }
+
+
     public void registerApiObservers(List<IApiListener> observers) {
         this.observers = observers;
     }
@@ -185,6 +204,4 @@ public class Engine implements IEventListener, IEntitlementSystem {
         return planAligner;
     }
 
-
-
 }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
index d57a0d8..6074d94 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
@@ -22,13 +22,9 @@ import com.google.inject.AbstractModule;
 import com.ning.billing.catalog.CatalogUserApi;
 import com.ning.billing.catalog.api.ICatalogUserApi;
 import com.ning.billing.config.IEntitlementConfig;
-import com.ning.billing.entitlement.IEntitlementSystem;
+import com.ning.billing.entitlement.IEntitlementService;
 import com.ning.billing.entitlement.alignment.IPlanAligner;
 import com.ning.billing.entitlement.alignment.PlanAligner;
-import com.ning.billing.entitlement.api.billing.BillingApi;
-import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
-import com.ning.billing.entitlement.api.user.IEntitlementUserApi;
-import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.engine.core.ApiEventProcessor;
 import com.ning.billing.entitlement.engine.core.Engine;
 import com.ning.billing.entitlement.engine.core.IApiEventProcessor;
@@ -63,19 +59,11 @@ public class EntitlementModule extends AbstractModule {
     }
 
     protected void installEntitlementCore() {
-        bind(IEntitlementSystem.class).to(Engine.class).asEagerSingleton();
+        bind(IEntitlementService.class).to(Engine.class).asEagerSingleton();
         bind(Engine.class).asEagerSingleton();
         bind(IPlanAligner.class).to(PlanAligner.class).asEagerSingleton();
     }
 
-    protected void installUserApi() {
-        bind(IEntitlementUserApi.class).to(EntitlementUserApi.class).asEagerSingleton();
-    }
-
-    protected void installBillingApi() {
-        bind(IEntitlementBillingApi.class).to(BillingApi.class).asEagerSingleton();
-    }
-
 
     @Override
     protected void configure() {
@@ -85,7 +73,5 @@ public class EntitlementModule extends AbstractModule {
         installApiEventProcessor();
         installEntitlementDao();
         installEntitlementCore();
-        installUserApi();
-        installBillingApi();
     }
 }
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
index 8de2d8e..13786fb 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiBase.java
@@ -50,7 +50,7 @@ import com.ning.billing.catalog.api.ICatalogUserApi;
 import com.ning.billing.catalog.api.IDuration;
 import com.ning.billing.catalog.api.TimeUnit;
 import com.ning.billing.config.IEntitlementConfig;
-import com.ning.billing.entitlement.IEntitlementSystem;
+import com.ning.billing.entitlement.IEntitlementService;
 import com.ning.billing.entitlement.api.ApiTestListener;
 import com.ning.billing.entitlement.api.ApiTestListener.NextEvent;
 import com.ning.billing.entitlement.api.billing.IEntitlementBillingApi;
@@ -71,7 +71,7 @@ public abstract class TestUserApiBase {
 
     protected static final long DAY_IN_MS = (24 * 3600 * 1000);
 
-    protected IEntitlementSystem entitlementService;
+    protected IEntitlementService entitlementService;
     //protected Engine engine;
     protected IEntitlementUserApi entitlementApi;
     protected IEntitlementBillingApi billingApi;
@@ -112,11 +112,8 @@ public abstract class TestUserApiBase {
         loadSystemPropertiesFromClasspath("/entitlement.properties");
         final Injector g = getInjector();
 
-        entitlementService = g.getInstance(IEntitlementSystem.class);
-        //engine = g.getInstance(Engine.class);
-        entitlementApi = g.getInstance(IEntitlementUserApi.class);
+        entitlementService = g.getInstance(IEntitlementService.class);
         catalogService = g.getInstance(ICatalogService.class);
-        billingApi = g.getInstance(IEntitlementBillingApi.class);
         config = g.getInstance(IEntitlementConfig.class);
         dao = g.getInstance(IEntitlementDao.class);
         clock = (ClockMock) g.getInstance(IClock.class);
@@ -145,7 +142,8 @@ public abstract class TestUserApiBase {
         testListener = new ApiTestListener();
         List<IApiListener> listeners =  new ArrayList<IApiListener>();
         listeners.add(testListener);
-        entitlementApi.initialize(listeners);
+        entitlementApi = entitlementService.getUserApi(listeners);
+        billingApi = entitlementService.getBillingApi();
 
     }