killbill-memoizeit

util: Make DefaultCustomFieldUserApi#removeCustomFields

11/4/2017 12:18:01 AM

Details

diff --git a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
index 163eeea..c3d2f95 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/api/DefaultCustomFieldUserApi.java
@@ -92,7 +92,7 @@ public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
             final Iterable<CustomFieldModelDao> transformed = Iterables.transform(customFields, new Function<CustomField, CustomFieldModelDao>() {
                 @Override
                 public CustomFieldModelDao apply(final CustomField input) {
-                    return new CustomFieldModelDao(context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType());
+                    return new CustomFieldModelDao(input.getId(), context.getCreatedDate(), context.getCreatedDate(), input.getFieldName(), input.getFieldValue(), input.getObjectId(), input.getObjectType());
                 }
             });
             ((DefaultCustomFieldDao) customFieldDao).create(transformed, internalCallContext);
@@ -101,9 +101,15 @@ public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
 
     @Override
     public void removeCustomFields(final List<CustomField> customFields, final CallContext context) throws CustomFieldApiException {
-        // TODO make it transactional
-        for (final CustomField cur : customFields) {
-            customFieldDao.deleteCustomField(cur.getId(), internalCallContextFactory.createInternalCallContext(cur.getObjectId(), cur.getObjectType(), context));
+        if (!customFields.isEmpty()) {
+            final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(customFields.get(0).getObjectId(), customFields.get(0).getObjectType(), context);
+            final Iterable<UUID> curstomFieldIds = Iterables.transform(customFields, new Function<CustomField, UUID>() {
+                @Override
+                public UUID apply(final CustomField input) {
+                    return input.getId();
+                }
+            });
+            customFieldDao.deleteCustomFields(curstomFieldIds, internalCallContext);
         }
     }
 
diff --git a/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldDao.java b/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldDao.java
index 977ddaa..ca8f8b9 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldDao.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/dao/CustomFieldDao.java
@@ -37,5 +37,5 @@ public interface CustomFieldDao extends EntityDao<CustomFieldModelDao, CustomFie
 
     public List<CustomFieldModelDao> getCustomFieldsForAccount(final InternalTenantContext context);
 
-    void deleteCustomField(UUID customFieldId, InternalCallContext context) throws CustomFieldApiException;
+    void deleteCustomFields(Iterable<UUID> customFieldIds, InternalCallContext context) throws CustomFieldApiException;
 }
diff --git a/util/src/main/java/org/killbill/billing/util/customfield/dao/DefaultCustomFieldDao.java b/util/src/main/java/org/killbill/billing/util/customfield/dao/DefaultCustomFieldDao.java
index 28677b9..c6bdff6 100644
--- a/util/src/main/java/org/killbill/billing/util/customfield/dao/DefaultCustomFieldDao.java
+++ b/util/src/main/java/org/killbill/billing/util/customfield/dao/DefaultCustomFieldDao.java
@@ -104,17 +104,19 @@ public class DefaultCustomFieldDao extends EntityDaoBase<CustomFieldModelDao, Cu
     }
 
     @Override
-    public void deleteCustomField(final UUID customFieldId, final InternalCallContext context) throws CustomFieldApiException {
+    public void deleteCustomFields(final Iterable<UUID> customFieldIds, final InternalCallContext context) throws CustomFieldApiException {
         transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
             @Override
             public Void inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception {
                 final CustomFieldSqlDao sqlDao = entitySqlDaoWrapperFactory.become(CustomFieldSqlDao.class);
 
-                final CustomFieldModelDao customField = sqlDao.getById(customFieldId.toString(), context);
-                sqlDao.markTagAsDeleted(customFieldId.toString(), context);
-
-                postBusEventFromTransaction(customField, customField, ChangeType.DELETE, entitySqlDaoWrapperFactory, context);
-
+                for (final UUID cur : customFieldIds) {
+                    final CustomFieldModelDao customField = sqlDao.getById(cur.toString(), context);
+                    if (customField != null) {
+                        sqlDao.markTagAsDeleted(cur.toString(), context);
+                        postBusEventFromTransaction(customField, customField, ChangeType.DELETE, entitySqlDaoWrapperFactory, context);
+                    }
+                }
                 return null;
             }
         });
diff --git a/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java b/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
index 4004e9a..4798957 100644
--- a/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
+++ b/util/src/test/java/org/killbill/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
@@ -76,7 +76,7 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
         customFieldUserApi.addCustomFields(ImmutableList.<CustomField>of(customField1, customField2), callContext);
         assertListenerStatus();
 
-        // Verify operation is indeed transaction, and nothing was inserted
+        // Verify operation is indeed transactional, and nothing was inserted
         final CustomField customField3 = new StringCustomField("qrqrq123", "qrqrq 456", ObjectType.ACCOUNT, accountId, callContext.getCreatedDate());
         try {
             customFieldUserApi.addCustomFields(ImmutableList.<CustomField>of(customField3, customField1), callContext);
@@ -93,6 +93,18 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
 
         all = customFieldUserApi.getCustomFieldsForAccount(accountId, callContext);
         Assert.assertEquals(all.size(), 3);
+
+        eventsListener.pushExpectedEvents(NextEvent.CUSTOM_FIELD, NextEvent.CUSTOM_FIELD);
+        customFieldUserApi.removeCustomFields(ImmutableList.of(customField1, customField3), callContext);
+        assertListenerStatus();
+
+        all = customFieldUserApi.getCustomFieldsForAccount(accountId, callContext);
+        Assert.assertEquals(all.size(), 1);
+        Assert.assertEquals(all.get(0).getId(), customField2.getId());
+        Assert.assertEquals(all.get(0).getObjectId(), accountId);
+        Assert.assertEquals(all.get(0).getObjectType(), ObjectType.ACCOUNT);
+        Assert.assertEquals(all.get(0).getFieldName(), customField2.getFieldName());
+        Assert.assertEquals(all.get(0).getFieldValue(), customField2.getFieldValue());
     }
 
 
diff --git a/util/src/test/java/org/killbill/billing/util/customfield/dao/MockCustomFieldDao.java b/util/src/test/java/org/killbill/billing/util/customfield/dao/MockCustomFieldDao.java
index f3d5cf7..b9b1720 100644
--- a/util/src/test/java/org/killbill/billing/util/customfield/dao/MockCustomFieldDao.java
+++ b/util/src/test/java/org/killbill/billing/util/customfield/dao/MockCustomFieldDao.java
@@ -52,14 +52,13 @@ public class MockCustomFieldDao extends MockEntityDaoBase<CustomFieldModelDao, C
         throw new UnsupportedOperationException();
     }
 
-
     @Override
-    public Pagination<CustomFieldModelDao> searchCustomFields(final String searchKey, final Long offset, final Long limit, final InternalTenantContext context) {
+    public void deleteCustomFields(final Iterable<UUID> customFieldIds, final InternalCallContext context) throws CustomFieldApiException {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void deleteCustomField(final UUID customFieldId, final InternalCallContext context) throws CustomFieldApiException {
+    public Pagination<CustomFieldModelDao> searchCustomFields(final String searchKey, final Long offset, final Long limit, final InternalTenantContext context) {
         throw new UnsupportedOperationException();
     }
 }