Details
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java b/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
index c7e20d7..88eb3d6 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
@@ -44,9 +44,11 @@ import org.killbill.billing.catalog.caching.CatalogCache;
import org.killbill.billing.tenant.api.TenantApiException;
import org.killbill.billing.tenant.api.TenantKV.TenantKey;
import org.killbill.billing.tenant.api.TenantUserApi;
+import org.killbill.billing.util.cache.Cachable.CacheType;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.clock.Clock;
import org.killbill.xmlloader.ValidationErrors;
import org.killbill.xmlloader.ValidationException;
import org.killbill.xmlloader.XMLLoader;
@@ -62,16 +64,19 @@ public class DefaultCatalogUserApi implements CatalogUserApi {
private final InternalCallContextFactory internalCallContextFactory;
private final TenantUserApi tenantApi;
private final CatalogCache catalogCache;
+ private final Clock clock;
@Inject
public DefaultCatalogUserApi(final CatalogService catalogService,
final TenantUserApi tenantApi,
final CatalogCache catalogCache,
+ final Clock clock,
final InternalCallContextFactory internalCallContextFactory) {
this.catalogService = catalogService;
this.tenantApi = tenantApi;
this.catalogCache = catalogCache;
+ this.clock = clock;
this.internalCallContextFactory = internalCallContextFactory;
}
@@ -197,6 +202,18 @@ public class DefaultCatalogUserApi implements CatalogUserApi {
}
}
+ @Override
+ public void deleteCatalog(final CallContext callContext) throws CatalogApiException {
+
+ final InternalTenantContext internalTenantContext = internalCallContextFactory.createInternalTenantContextWithoutAccountRecordId(callContext);
+ try {
+ catalogCache.clearCatalog(internalTenantContext);
+ tenantApi.deleteTenantKey(TenantKey.CATALOG.toString(), callContext);
+ createDefaultEmptyCatalog(clock.getUTCNow(), callContext);
+ } catch (final TenantApiException e) {
+ throw new CatalogApiException(e);
+ }
+ }
private StandaloneCatalog getCurrentStandaloneCatalogForTenant(final InternalTenantContext internalTenantContext) throws CatalogApiException {
final VersionedCatalog versionedCatalog = (VersionedCatalog) catalogService.getCurrentCatalog(false, false, internalTenantContext);
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 b2be1ca..fea4aa9 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
@@ -22,6 +22,7 @@ import java.util.List;
import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
@@ -49,9 +50,12 @@ import org.killbill.billing.jaxrs.json.SimplePlanJson;
import org.killbill.billing.jaxrs.util.Context;
import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
import org.killbill.billing.payment.api.PaymentApi;
+import org.killbill.billing.tenant.api.TenantApiException;
+import org.killbill.billing.tenant.api.TenantKV.TenantKey;
import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
+import org.killbill.billing.util.cache.Cachable.CacheType;
import org.killbill.billing.util.callcontext.CallContext;
import org.killbill.billing.util.callcontext.TenantContext;
import org.killbill.clock.Clock;
@@ -62,6 +66,7 @@ import com.google.inject.Inject;
import com.google.inject.Singleton;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@@ -220,4 +225,19 @@ public class CatalogResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, CatalogResource.class, null, null, request);
}
+
+ @DELETE
+ @ApiOperation(value = "Delete all versions for a per tenant catalog")
+ @ApiResponses(value = {})
+ public Response deleteCatalog(@HeaderParam(HDR_CREATED_BY) final String createdBy,
+ @HeaderParam(HDR_REASON) final String reason,
+ @HeaderParam(HDR_COMMENT) final String comment,
+ @javax.ws.rs.core.Context final UriInfo uriInfo,
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws TenantApiException, CatalogApiException {
+ final CallContext callContext = context.createCallContextNoAccountId(createdBy, reason, comment, request);
+ catalogUserApi.deleteCatalog(callContext);
+ return Response.status(Status.OK).build();
+ }
+
+
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
index 1d729f0..35c70d4 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TestResource.java
@@ -221,31 +221,6 @@ public class TestResource extends JaxRsResourceBase {
- @DELETE
- @Path("/catalog")
- @ApiOperation(value = "Delete all versions for a per tenant catalog")
- @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid subscription id supplied"),
- @ApiResponse(code = 404, message = "Entitlement not found")})
- public Response deleteCatalog(@HeaderParam(HDR_CREATED_BY) final String createdBy,
- @HeaderParam(HDR_REASON) final String reason,
- @HeaderParam(HDR_COMMENT) final String comment,
- @javax.ws.rs.core.Context final UriInfo uriInfo,
- @javax.ws.rs.core.Context final HttpServletRequest request) throws TenantApiException, CatalogApiException {
-
- final CallContext callContext = context.createCallContextNoAccountId(createdBy, reason, comment, request);
-
- // remove for all tenants-- otherwise we need to convert the callContext into an internalTenantContext to get the key
- cacheControllerDispatcher.getCacheController(CacheType.TENANT_CATALOG).removeAll();
- // Soft delete the current entry
- tenantApi.deleteTenantKey(TenantKey.CATALOG.toString(), callContext);
-
- // Recreate default entry so that user does not default to KB default catalog
- catalogUserApi.createDefaultEmptyCatalog(clock.getUTCNow(),callContext);
-
- return Response.status(Status.OK).build();
- }
-
-
private boolean waitForNotificationToComplete(final ServletRequest request, final Long timeoutSec) {
final TenantContext tenantContext = context.createTenantContextNoAccountId(request);
final Long tenantRecordId = recordIdApi.getRecordId(tenantContext.getTenantId(), ObjectType.TENANT, tenantContext);
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 d20771a..055bc14 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
@@ -232,13 +232,7 @@ public class TestCatalog extends TestJaxrsBase {
List<Catalog> catalogsJson = killBillClient.getJSONCatalog(requestOptions);
Assert.assertEquals(catalogsJson.size(), 1);
- final String uri = "/1.0/kb/test/catalog";
-
- final Multimap result = HashMultimap.create();
- result.put(KillBillHttpClient.AUDIT_OPTION_CREATED_BY, createdBy);
- result.put(KillBillHttpClient.AUDIT_OPTION_REASON, reason);
- result.put(KillBillHttpClient.AUDIT_OPTION_COMMENT, comment);
- killBillHttpClient.doDelete(uri, requestOptions);
+ killBillClient.deleteCatalog(requestOptions);
// Verify that we see no catalog -- and in particular not the KB default catalog
catalogsJson = killBillClient.getJSONCatalog(requestOptions);