killbill-memoizeit

Details

diff --git a/catalog/src/main/java/org/killbill/billing/catalog/VersionedCatalog.java b/catalog/src/main/java/org/killbill/billing/catalog/VersionedCatalog.java
index 975d9eb..3841905 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/VersionedCatalog.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/VersionedCatalog.java
@@ -48,7 +48,6 @@ import org.killbill.billing.catalog.api.PlanAlignmentChange;
 import org.killbill.billing.catalog.api.PlanAlignmentCreate;
 import org.killbill.billing.catalog.api.PlanChangeResult;
 import org.killbill.billing.catalog.api.PlanPhase;
-import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
 import org.killbill.billing.catalog.api.PlanPhasePriceOverridesWithCallContext;
 import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
 import org.killbill.billing.catalog.api.PlanSpecifier;
@@ -254,6 +253,10 @@ public class VersionedCatalog extends ValidatingConfig<StandaloneCatalogWithPric
         return versionForDate(requestedDate).getCurrentPlans();
     }
 
+    public DefaultPriceListSet getPriceLists(final DateTime requestedDate) throws CatalogApiException {
+        return versionForDate(requestedDate).getStandaloneCatalog().getPriceLists();
+    }
+
     //
     // Find a plan
     //
@@ -397,6 +400,10 @@ public class VersionedCatalog extends ValidatingConfig<StandaloneCatalogWithPric
         return versionForDate(clock.getUTCNow()).getEffectiveDate();
     }
 
+    public Date getEffectiveDate(final DateTime requestedDate) throws CatalogApiException {
+        return versionForDate(requestedDate).getEffectiveDate();
+    }
+
     @Override
     public BillingMode getRecurringBillingMode() {
         return recurringBillingMode;
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
index 80c5059..44eef61 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
@@ -26,6 +26,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+import org.joda.time.DateTime;
 import org.killbill.billing.catalog.DefaultPriceListSet;
 import org.killbill.billing.catalog.VersionedCatalog;
 import org.killbill.billing.catalog.api.BillingPeriod;
@@ -66,13 +67,13 @@ public class CatalogJson {
     }
 
 
-    public CatalogJson(final VersionedCatalog catalog) throws CatalogApiException {
+    public CatalogJson(final VersionedCatalog catalog, final DateTime requestedDate) throws CatalogApiException {
         name = catalog.getCatalogName();
-        effectiveDate = catalog.getEffectiveDate();
-        currencies = Arrays.asList(catalog.getCurrentSupportedCurrencies());
+        effectiveDate = catalog.getEffectiveDate(requestedDate);
+        currencies = Arrays.asList(catalog.getSupportedCurrencies(requestedDate));
         priceLists = new ArrayList<PriceListJson>();
 
-        final Plan[] plans = catalog.getCurrentPlans();
+        final Plan[] plans = catalog.getPlans(requestedDate);
         final Map<String, ProductJson> productMap = new HashMap<String, ProductJson>();
         for (final Plan plan : plans) {
             // Build the product associated with this plan
@@ -106,7 +107,7 @@ public class CatalogJson {
 
         products = ImmutableList.<ProductJson>copyOf(productMap.values());
 
-        final DefaultPriceListSet priceLists = catalog.getVersions().get(0).getStandaloneCatalog().getPriceLists();
+        final DefaultPriceListSet priceLists = catalog.getPriceLists(requestedDate);
         for (PriceList childPriceList : priceLists.getAllPriceLists()) {
             this.priceLists.add(new PriceListJson(childPriceList));
         }
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
index b75254b..31e33a1 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
@@ -35,6 +35,8 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
 import org.killbill.billing.account.api.AccountUserApi;
 import org.killbill.billing.catalog.StandaloneCatalog;
 import org.killbill.billing.catalog.VersionedCatalog;
@@ -126,10 +128,16 @@ public class CatalogResource extends JaxRsResourceBase {
     @Produces(APPLICATION_JSON)
     @ApiOperation(value = "Retrieve the catalog as JSON", response = StaticCatalog.class)
     @ApiResponses(value = {})
-    public Response getCatalogJson(@javax.ws.rs.core.Context final HttpServletRequest request) throws Exception {
+    public Response getCatalogJson(@QueryParam(QUERY_REQUESTED_DT) final String requestedDate,
+                                   @javax.ws.rs.core.Context final HttpServletRequest request) throws Exception {
+        DateTime catalogDateVersion = clock.getUTCNow();
+        if (requestedDate != null) {
+            catalogDateVersion = DATE_TIME_FORMATTER.parseDateTime(requestedDate).toDateTime(DateTimeZone.UTC);
+        }
+
         final TenantContext tenantContext = context.createContext(request);
         final Catalog catalog = catalogUserApi.getCatalog(catalogName, tenantContext);
-        final CatalogJson json = new CatalogJson((VersionedCatalog) catalog);
+        final CatalogJson json = new CatalogJson((VersionedCatalog) catalog, catalogDateVersion);
         return Response.status(Status.OK).entity(json).build();
     }
 

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index 68abf0c..fcc6476 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <artifactId>killbill-oss-parent</artifactId>
         <groupId>org.kill-bill.billing</groupId>
-        <version>0.67</version>
+        <version>0.68-SNAPSHOT</version>
     </parent>
     <artifactId>killbill</artifactId>
     <version>0.15.10-SNAPSHOT</version>
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCatalog.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCatalog.java
index 2c5c3f5..35a8890 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCatalog.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCatalog.java
@@ -23,6 +23,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.joda.time.DateTime;
+import org.killbill.billing.client.KillBillClientException;
 import org.killbill.billing.client.model.Catalog;
 import org.killbill.billing.client.model.Plan;
 import org.killbill.billing.client.model.PlanDetail;
@@ -84,4 +86,13 @@ public class TestCatalog extends TestJaxrsBase {
         }
         Assert.assertEquals(foundBasePlans, allBasePlans);
     }
+
+    @Test(groups = "slow", description = "Try to retrieve a json version of the catalog with an invalid date",
+            expectedExceptions = KillBillClientException.class,
+            expectedExceptionsMessageRegExp = "There is no catalog version that applies for the given date.*")
+    public void testCatalogInvalidDate() throws Exception {
+        final Catalog catalogJson = killBillClient.getJSONCatalog(DateTime.parse("2008-01-01"));
+        Assert.fail();
+    }
+
 }