killbill-aplcache

catalog: Properly fix a regression in the DefaultDuration

3/15/2016 6:29:35 PM

Details

diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
index 6fc145a..cc1e343 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
@@ -24,6 +24,8 @@ import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
 import org.joda.time.Period;
 
+import org.killbill.billing.ErrorCode;
+import org.killbill.billing.catalog.api.CatalogApiException;
 import org.killbill.billing.catalog.api.Duration;
 import org.killbill.billing.catalog.api.TimeUnit;
 import org.killbill.xmlloader.ValidatingConfig;
@@ -61,7 +63,7 @@ public class DefaultDuration extends ValidatingConfig<StandaloneCatalog> impleme
     }
 
     @Override
-    public DateTime addToDateTime(final DateTime dateTime) {
+    public DateTime addToDateTime(final DateTime dateTime) throws CatalogApiException {
         if ((number == null) && (unit != TimeUnit.UNLIMITED)) {
             return dateTime;
         }
@@ -75,12 +77,12 @@ public class DefaultDuration extends ValidatingConfig<StandaloneCatalog> impleme
                 return dateTime.plusYears(number);
             case UNLIMITED:
             default:
-                throw new  IllegalStateException("Unexpected duration unit " + unit);
+                throw new CatalogApiException(ErrorCode.CAT_UNDEFINED_DURATION, unit);
         }
     }
 
     @Override
-    public LocalDate addToLocalDate(final LocalDate localDate) {
+    public LocalDate addToLocalDate(final LocalDate localDate) throws CatalogApiException {
         if ((number == null) && (unit != TimeUnit.UNLIMITED)) {
             return localDate;
         }
@@ -94,7 +96,7 @@ public class DefaultDuration extends ValidatingConfig<StandaloneCatalog> impleme
                 return localDate.plusYears(number);
             case UNLIMITED:
             default:
-                throw new  IllegalStateException("Unexpected duration unit " + unit);
+                throw new CatalogApiException(ErrorCode.CAT_UNDEFINED_DURATION, unit);
         }
     }
 
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
index 1955c5e..7d1c326 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
@@ -252,7 +252,10 @@ public class DefaultPlan extends ValidatingConfig<StandaloneCatalog> implements 
             }
             final Recurring recurring = phase.getRecurring();
             if (recurring == null || recurring.getRecurringPrice() == null || recurring.getRecurringPrice().isZero()) {
-                result = phase.getDuration().addToDateTime(result);
+                try {
+                    result = phase.getDuration().addToDateTime(result);
+                } catch (final CatalogApiException ignored) {
+                }
             } else {
                 break;
             }