killbill-memoizeit
Changes
pom.xml 2(+1 -1)
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();
+ }
+
}