killbill-aplcache

Adding Account overdue states

4/6/2012 9:50:39 PM

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