Details
diff --git a/api/src/main/java/com/ning/billing/catalog/api/overdue/Overdueable.java b/api/src/main/java/com/ning/billing/catalog/api/overdue/Overdueable.java
index 3bf94d3..9910c7e 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/overdue/Overdueable.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/overdue/Overdueable.java
@@ -20,5 +20,10 @@ import java.util.UUID;
public interface Overdueable {
+ public enum Type {
+ ACCOUNT,
+ SUBSCRIPTION_BUNDLE
+ }
+
public UUID getId();
}
diff --git a/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java b/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
index 9a81737..bb7f632 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/StaticCatalog.java
@@ -18,6 +18,7 @@ package com.ning.billing.catalog.api;
import java.util.Date;
+import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.api.overdue.OverdueStateSet;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
@@ -79,6 +80,7 @@ public interface StaticCatalog {
public abstract boolean canCreatePlan(PlanSpecifier specifier) throws CatalogApiException;
- public abstract OverdueStateSet<SubscriptionBundle> currentBundleOverdueStateSet() throws CatalogApiException;
+ public abstract OverdueStateSet<SubscriptionBundle> currentBundleOverdueStateSet() throws CatalogApiException;
+ public abstract OverdueStateSet<Account> currentAccountOverdueStateSet() throws CatalogApiException;
}
\ No newline at end of file
diff --git a/api/src/main/java/com/ning/billing/ErrorCode.java b/api/src/main/java/com/ning/billing/ErrorCode.java
index d51a16a..0a8bfd5 100644
--- a/api/src/main/java/com/ning/billing/ErrorCode.java
+++ b/api/src/main/java/com/ning/billing/ErrorCode.java
@@ -56,6 +56,9 @@ public enum ErrorCode {
ENT_GET_NO_BUNDLE_FOR_SUBSCRIPTION(1080, "Could not find a bundle for subscription %s"),
ENT_GET_INVALID_BUNDLE_ID(1081, "Could not find a bundle matching id %s"),
ENT_INVALID_SUBSCRIPTION_ID(1082, "Unknown subscription %s"),
+
+ ENT_BUNDLE_IS_OVERDUE_BLOCKED(1090, "Changes to this bundle are blocked by overdue enforcement (%s : %s)"),
+ ENT_ACCOUNT_IS_OVERDUE_BLOCKED(1091, "Changes to this account are blocked by overdue enforcement (%s)"),
/*
*
* Range 2000 : CATALOG
@@ -162,7 +165,7 @@ public enum ErrorCode {
*
*/
OVERDUE_OVERDUEABLE_NOT_SUPPORTED(5001, "The Overdueable type '%s' is not supported"),
- OVERDUE_CAT_ERROR_ENCOUNTERED(5002,"Catalog error encountered when attempting to refresh the state of Overdueable: id='%s', type='%s'"),
+ OVERDUE_CAT_ERROR_ENCOUNTERED(5002,"Catalog error encountered when attempting to refresh the state of Overdueable: id='%s', type='%s'")
;
diff --git a/catalog/src/main/java/com/ning/billing/catalog/overdue/DefaultOverdueStateSet.java b/catalog/src/main/java/com/ning/billing/catalog/overdue/DefaultOverdueStateSet.java
index 73fdbe1..9ebc851 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/overdue/DefaultOverdueStateSet.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/overdue/DefaultOverdueStateSet.java
@@ -23,6 +23,7 @@ import com.ning.billing.ErrorCode;
import com.ning.billing.catalog.StandaloneCatalog;
import com.ning.billing.catalog.api.CatalogApiException;
import com.ning.billing.catalog.api.overdue.BillingState;
+import com.ning.billing.catalog.api.overdue.OverdueState;
import com.ning.billing.catalog.api.overdue.OverdueStateSet;
import com.ning.billing.catalog.api.overdue.Overdueable;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
@@ -43,6 +44,14 @@ public abstract class DefaultOverdueStateSet<T extends Overdueable> extends Vali
throw new CatalogApiException(ErrorCode.CAT_MISSING_CLEAR_STATE);
}
+ @Override
+ public OverdueState<T> findState(String stateName) throws CatalogApiException {
+ for(DefaultOverdueState<T> state: getStates()) {
+ if(state.getName().equals(stateName) ) { return state; }
+ }
+ throw new CatalogApiException(ErrorCode.CAT_NO_SUCH_OVEDUE_STATE, stateName);
+ }
+
/* (non-Javadoc)
* @see com.ning.billing.catalog.overdue.OverdueBillingState#findClearState()
diff --git a/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueRules.java b/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueRules.java
index 34b40e4..74351cc 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueRules.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueRules.java
@@ -20,7 +20,9 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
+import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.StandaloneCatalog;
+import com.ning.billing.catalog.api.overdue.OverdueStateSet;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.util.config.ValidatingConfig;
import com.ning.billing.util.config.ValidationErrors;
@@ -30,6 +32,9 @@ public class OverdueRules extends ValidatingConfig<StandaloneCatalog> {
@XmlElement(required=false, name="bundleOverdueStates")
private OverdueStatesBundle bundleOverdueStates;
+
+ @XmlElement(required=false, name="accountOverdueStates")
+ private OverdueStatesAccount accountOverdueStates;
public DefaultOverdueStateSet<SubscriptionBundle> getBundleStateSet() {
@@ -42,4 +47,9 @@ public class OverdueRules extends ValidatingConfig<StandaloneCatalog> {
ValidationErrors errors) {
return bundleOverdueStates.validate(root, errors);
}
+
+
+ public DefaultOverdueStateSet<Account> getAccountStateSet() {
+ return accountOverdueStates;
+ }
}
diff --git a/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueStatesAccount.java b/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueStatesAccount.java
new file mode 100644
index 0000000..0e687a4
--- /dev/null
+++ b/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueStatesAccount.java
@@ -0,0 +1,34 @@
+/*
+ * 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.catalog.overdue;
+
+import javax.xml.bind.annotation.XmlElement;
+
+import com.ning.billing.account.api.Account;
+
+public class OverdueStatesAccount extends DefaultOverdueStateSet<Account> {
+
+ @XmlElement(required=false, name="accountOverdueStates")
+ private DefaultOverdueState<Account>[] accountOverdueStates;
+
+ @Override
+ protected DefaultOverdueState<Account>[] getStates() {
+ return accountOverdueStates;
+ }
+
+
+}
diff --git a/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueStatesBundle.java b/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueStatesBundle.java
index b96f26c..d7736ac 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueStatesBundle.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/overdue/OverdueStatesBundle.java
@@ -34,13 +34,4 @@ public class OverdueStatesBundle extends DefaultOverdueStateSet<SubscriptionBund
return bundleOverdueStates;
}
- @Override
- public OverdueState<SubscriptionBundle> findState(String stateName) throws CatalogApiException {
- for(DefaultOverdueState<SubscriptionBundle> state: bundleOverdueStates) {
- if(state.getName().equals(stateName) ) { return state; }
- }
- throw new CatalogApiException(ErrorCode.CAT_NO_SUCH_OVEDUE_STATE, stateName);
- }
-
-
}
diff --git a/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java b/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
index 72a7e2e..7208884 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/StandaloneCatalog.java
@@ -27,6 +27,7 @@ import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import com.ning.billing.ErrorCode;
+import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.api.ActionPolicy;
import com.ning.billing.catalog.api.BillingAlignment;
import com.ning.billing.catalog.api.BillingPeriod;
@@ -327,6 +328,12 @@ public class StandaloneCatalog extends ValidatingConfig<StandaloneCatalog> imple
return overdueRules.getBundleStateSet();
}
+ @Override
+ public OverdueStateSet<Account> currentAccountOverdueStateSet()
+ throws CatalogApiException {
+ return overdueRules.getAccountStateSet();
+ }
+
}
diff --git a/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java b/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
index 00fd66c..c468755 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
@@ -33,6 +33,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ning.billing.ErrorCode;
+import com.ning.billing.account.api.Account;
import com.ning.billing.catalog.api.ActionPolicy;
import com.ning.billing.catalog.api.BillingAlignment;
import com.ning.billing.catalog.api.BillingPeriod;
@@ -453,6 +454,12 @@ public class VersionedCatalog extends ValidatingConfig<StandaloneCatalog> implem
return versionForDate(clock.getUTCNow()).currentBundleOverdueStateSet();
}
+ @Override
+ public OverdueStateSet<Account> currentAccountOverdueStateSet()
+ throws CatalogApiException {
+ return versionForDate(clock.getUTCNow()).currentAccountOverdueStateSet();
+ }
+
}