killbill-aplcache

jaxrs, catalog: Implement new CatalogUserApi#deleteCatalog

6/29/2017 2:54:09 PM

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);