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 70752e0..259ff88 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
@@ -118,9 +118,29 @@ public class CatalogResource extends JaxRsResourceBase {
@Produces(APPLICATION_XML)
@ApiOperation(value = "Retrieve the full catalog as XML", response = String.class, hidden = true)
@ApiResponses(value = {})
- public Response getCatalogXml(@javax.ws.rs.core.Context final HttpServletRequest request) throws Exception {
+ public Response getCatalogXml(@QueryParam(QUERY_REQUESTED_DT) final String requestedDate,
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws Exception {
final TenantContext tenantContext = context.createTenantContextNoAccountId(request);
- return Response.status(Status.OK).entity(XMLWriter.writeXML((VersionedCatalog) catalogUserApi.getCatalog(catalogName, tenantContext), VersionedCatalog.class)).build();
+ final DateTime catalogDateVersion = requestedDate != null ?
+ DATE_TIME_FORMATTER.parseDateTime(requestedDate).toDateTime(DateTimeZone.UTC) :
+ null;
+
+ final VersionedCatalog catalog = (VersionedCatalog) catalogUserApi.getCatalog(catalogName, tenantContext);
+ final String result;
+ if (catalogDateVersion != null) {
+ final VersionedCatalog oneVersionCatalog = new VersionedCatalog();
+ for (final StandaloneCatalog v : catalog.getVersions()) {
+ if (v.getEffectiveDate().compareTo(catalogDateVersion.toDate()) >= 0) {
+ oneVersionCatalog.add(v);
+ break;
+ }
+ }
+ result = XMLWriter.writeXML(oneVersionCatalog, VersionedCatalog.class);
+ } else {
+ result = XMLWriter.writeXML(catalog, VersionedCatalog.class);
+ }
+
+ return Response.status(Status.OK).entity(result).build();
}
@TimedResource
@@ -166,6 +186,25 @@ public class CatalogResource extends JaxRsResourceBase {
return Response.status(Status.OK).entity(result).build();
}
+ @TimedResource
+ @GET
+ @Path("/versions")
+ @Produces(APPLICATION_JSON)
+ @ApiOperation(value = "Retrieve a list of catalog versions", response = DateTime.class, responseContainer = "List")
+ @ApiResponses(value = {})
+ public Response getCatalogVersionJson(@javax.ws.rs.core.Context final HttpServletRequest request) throws Exception {
+
+ final TenantContext tenantContext = context.createTenantContextNoAccountId(request);
+ final VersionedCatalog catalog = (VersionedCatalog) catalogUserApi.getCatalog(catalogName, tenantContext);
+
+ final List<DateTime> result = new ArrayList<DateTime>();
+ for (final StandaloneCatalog v : catalog.getVersions()) {
+ result.add(new DateTime(v.getEffectiveDate()));
+ }
+
+ return Response.status(Status.OK).entity(result).build();
+ }
+
// Need to figure out dependency on StandaloneCatalog
// @GET
// @Path("/xsd")
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 c5f263b..cfe419e 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
@@ -237,4 +237,14 @@ public class TestCatalog extends TestJaxrsBase {
Assert.assertEquals(catalogsJson.size(), 0);
}
+
+ @Test(groups = "slow")
+ public void testGetCatalogVersions() throws Exception {
+ final String versionPath1 = Resources.getResource("SpyCarBasic.xml").getPath();
+ killBillClient.uploadXMLCatalog(versionPath1, requestOptions);
+
+ List<DateTime> versions = killBillClient.getCatalogVersions(requestOptions);
+ Assert.assertEquals(1, versions.size());
+ Assert.assertEquals(versions.get(0).compareTo(DateTime.parse("2013-02-08T00:00:00+00:00")), 0);
+ }
}