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());
+
+ }
+}