killbill-memoizeit

Details

diff --git a/api/src/main/java/com/ning/billing/junction/api/BillingApi.java b/api/src/main/java/com/ning/billing/junction/api/BillingApi.java
index 4128811..bb38e8d 100644
--- a/api/src/main/java/com/ning/billing/junction/api/BillingApi.java
+++ b/api/src/main/java/com/ning/billing/junction/api/BillingApi.java
@@ -16,14 +16,9 @@
 
 package com.ning.billing.junction.api;
 
-import java.util.SortedSet;
 import java.util.UUID;
 
-import org.joda.time.DateTime;
-
-import com.ning.billing.entitlement.api.billing.BillingEvent;
 import com.ning.billing.entitlement.api.billing.ChargeThruApi;
-import com.ning.billing.util.callcontext.CallContext;
 
 public interface BillingApi extends ChargeThruApi {
     /**
@@ -32,5 +27,5 @@ public interface BillingApi extends ChargeThruApi {
      * @return an ordered list of billing event for the given accounts
      *
      */
-    public SortedSet<BillingEvent> getBillingEventsForAccountAndUpdateAccountBCD(UUID accountId);
+    public BillingEventSet getBillingEventsForAccountAndUpdateAccountBCD(UUID accountId);
 }
diff --git a/api/src/main/java/com/ning/billing/junction/api/BillingEventSet.java b/api/src/main/java/com/ning/billing/junction/api/BillingEventSet.java
new file mode 100644
index 0000000..3a7b66d
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/junction/api/BillingEventSet.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2010-2011 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.SortedSet;
+import java.util.UUID;
+
+import com.ning.billing.entitlement.api.billing.BillingEvent;
+
+public interface BillingEventSet extends SortedSet<BillingEvent> {
+
+    public abstract boolean isAccountAutoInvoiceOff();
+
+    public abstract List<UUID> getSubscriptionIdsWithAutoInvoiceOff();
+
+}
\ No newline at end of file
diff --git a/api/src/main/java/com/ning/billing/overdue/Condition.java b/api/src/main/java/com/ning/billing/overdue/Condition.java
new file mode 100644
index 0000000..8607e91
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/overdue/Condition.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2010-2011 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.overdue;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.junction.api.Blockable;
+import com.ning.billing.overdue.config.api.BillingState;
+
+
+
+public interface Condition<T extends Blockable> {
+
+    public boolean evaluate(BillingState<T> state, DateTime now);
+
+}
\ No newline at end of file
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingApi.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingApi.java
index 8f88049..29d9cd9 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingApi.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingApi.java
@@ -17,8 +17,6 @@
 package com.ning.billing.junction.plumbing.billing;
 
 import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
 import java.util.UUID;
 
 import org.joda.time.DateTime;
@@ -41,6 +39,8 @@ import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.SubscriptionEvent;
 import com.ning.billing.junction.api.BillingApi;
+import com.ning.billing.junction.api.BillingEventSet;
+import com.ning.billing.util.api.TagUserApi;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.CallContextFactory;
 import com.ning.billing.util.callcontext.CallOrigin;
@@ -56,11 +56,12 @@ public class DefaultBillingApi implements BillingApi {
     private final EntitlementUserApi entitlementUserApi;
     private final CatalogService catalogService;
     private final BlockingCalculator blockCalculator;
+//    private final TagUserApi tagApi;
 
     @Inject
     public DefaultBillingApi(final ChargeThruApi chargeThruApi, final CallContextFactory factory, final AccountUserApi accountApi, 
             final BillCycleDayCalculator bcdCalculator, final EntitlementUserApi entitlementUserApi, final BlockingCalculator blockCalculator,
-            final CatalogService catalogService) {
+            final CatalogService catalogService) { //, final TagUserApi tagApi) {
 
         this.chargeThruApi = chargeThruApi;
         this.accountApi = accountApi;
@@ -69,17 +70,20 @@ public class DefaultBillingApi implements BillingApi {
         this.entitlementUserApi = entitlementUserApi;
         this.catalogService = catalogService;
         this.blockCalculator = blockCalculator;
+  //      this.tagApi = tagApi;
     }
 
     @Override
-    public SortedSet<BillingEvent> getBillingEventsForAccountAndUpdateAccountBCD(final UUID accountId) {
+    public BillingEventSet getBillingEventsForAccountAndUpdateAccountBCD(final UUID accountId) {
         CallContext context = factory.createCallContext(API_USER_NAME, CallOrigin.INTERNAL, UserType.SYSTEM);
 
         List<SubscriptionBundle> bundles = entitlementUserApi.getBundlesForAccount(accountId);
-        SortedSet<BillingEvent> result = new TreeSet<BillingEvent>();
+        BillingEventSet result = new DefaultBillingEventSet();
 
         try {
             Account account = accountApi.getAccountById(accountId);
+            
+
             for (final SubscriptionBundle bundle: bundles) {
                 List<Subscription> subscriptions = entitlementUserApi.getSubscriptionsForBundle(bundle.getId());
 
diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingEventSet.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingEventSet.java
new file mode 100644
index 0000000..fdda46c
--- /dev/null
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/DefaultBillingEventSet.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010-2011 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.plumbing.billing;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.UUID;
+
+import com.ning.billing.entitlement.api.billing.BillingEvent;
+import com.ning.billing.junction.api.BillingEventSet;
+
+public class DefaultBillingEventSet extends TreeSet<BillingEvent> implements SortedSet<BillingEvent>, BillingEventSet {
+    private static final long serialVersionUID = 1L;
+
+    private boolean    accountAutoInvoiceOff           = false;
+    private List<UUID> subscriptionIdsWithAutoInvoiceOff = new ArrayList<UUID>();
+    
+    /* (non-Javadoc)
+     * @see com.ning.billing.junction.plumbing.billing.BillingEventSet#isAccountAutoInvoiceOff()
+     */
+    @Override
+    public boolean isAccountAutoInvoiceOff() {
+        return accountAutoInvoiceOff;
+    }
+    
+    /* (non-Javadoc)
+     * @see com.ning.billing.junction.plumbing.billing.BillingEventSet#getSubscriptionIdsWithAutoInvoiceOff()
+     */
+    @Override
+    public List<UUID> getSubscriptionIdsWithAutoInvoiceOff() {
+        return subscriptionIdsWithAutoInvoiceOff;
+    }
+
+    public void setAccountAutoInvoiceIsOff(boolean accountAutoInvoiceIsOff) {
+        this.accountAutoInvoiceOff = accountAutoInvoiceIsOff;
+    }
+
+    public void setSubscriptionIdsWithAutoInvoiceOff(List<UUID> subscriptionIdsWithAutoInvoiceOff) {
+        this.subscriptionIdsWithAutoInvoiceOff = subscriptionIdsWithAutoInvoiceOff;
+    }
+    
+    
+}
diff --git a/overdue/src/test/java/com/ning/billing/overdue/wrapper/TestOverdueWrapper.java b/overdue/src/test/java/com/ning/billing/overdue/wrapper/TestOverdueWrapper.java
new file mode 100644
index 0000000..1efb572
--- /dev/null
+++ b/overdue/src/test/java/com/ning/billing/overdue/wrapper/TestOverdueWrapper.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2010-2011 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.overdue.wrapper;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.junction.api.BlockingApi;
+import com.ning.billing.overdue.OverdueState;
+import com.ning.billing.overdue.OverdueTestBase;
+import com.ning.billing.overdue.config.OverdueConfig;
+import com.ning.billing.util.config.XMLLoader;
+
+public class TestOverdueWrapper extends OverdueTestBase {
+    @Test( groups={"fast"} , enabled = true)
+    public void testWrapperBasic() throws Exception {
+        InputStream is = new ByteArrayInputStream(configXml.getBytes());
+        config = XMLLoader.getObjectFromStreamNoValidation(is,  OverdueConfig.class);
+        overdueWrapperFactory.setOverdueConfig(config);
+        
+
+        SubscriptionBundle bundle;
+        OverdueWrapper<SubscriptionBundle> wrapper ;
+        OverdueState<SubscriptionBundle> state;
+
+        state = config.getBundleStateSet().findState("OD1"); 
+        bundle = createBundle(clock.getUTCNow().minusDays(31));
+        wrapper = overdueWrapperFactory.createOverdueWrapperFor(bundle);
+        wrapper.refresh();
+        checkStateApplied(state);
+
+
+        state = config.getBundleStateSet().findState("OD2");
+        bundle = createBundle(clock.getUTCNow().minusDays(41));
+        wrapper = overdueWrapperFactory.createOverdueWrapperFor(bundle);
+        wrapper.refresh();
+        checkStateApplied(state);
+
+        state = config.getBundleStateSet().findState("OD3");
+        bundle = createBundle(clock.getUTCNow().minusDays(51));
+        wrapper = overdueWrapperFactory.createOverdueWrapperFor(bundle);
+        wrapper.refresh();
+        checkStateApplied(state);
+
+    }
+    @Test( groups={"fast"} , enabled = true)
+    public void testWrapperNoConfig() throws Exception {
+
+        overdueWrapperFactory.setOverdueConfig(null);
+        
+
+        SubscriptionBundle bundle;
+        OverdueWrapper<SubscriptionBundle> wrapper ;
+        OverdueState<SubscriptionBundle> state;
+
+        InputStream is = new ByteArrayInputStream(configXml.getBytes());
+        config = XMLLoader.getObjectFromStreamNoValidation(is,  OverdueConfig.class);
+        state = config.getBundleStateSet().findState(BlockingApi.CLEAR_STATE_NAME); 
+        bundle = createBundle(clock.getUTCNow().minusDays(31));
+        wrapper = overdueWrapperFactory.createOverdueWrapperFor(bundle);
+        OverdueState<SubscriptionBundle> result = wrapper.refresh();
+
+
+        Assert.assertEquals(result.getName(),state.getName());
+        Assert.assertEquals(result.blockChanges(), state.blockChanges());
+        Assert.assertEquals(result.disableEntitlementAndChangesBlocked(), state.disableEntitlementAndChangesBlocked());
+
+    }
+}