Details
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
index c056ae6..fdc70e6 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
@@ -71,4 +71,9 @@ public class DefaultAccountUserApi implements com.ning.billing.account.api.Accou
public void updateAccount(final Account account) throws AccountApiException {
dao.update(account);
}
+
+ @Override
+ public void deleteAccountByKey(String externalKey) throws AccountApiException {
+ dao.deleteByKey(externalKey);
+ }
}
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
index 9d4b2ac..74a8d51 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
@@ -31,4 +31,6 @@ public interface AccountDao extends EntityDao<Account> {
* @throws AccountApiException when externalKey is null
*/
public UUID getIdFromKey(String externalKey) throws AccountApiException;
+
+ public void deleteByKey(String externalKey) throws AccountApiException;
}
\ No newline at end of file
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountSqlDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountSqlDao.java
index 42feebe..323ae0f 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountSqlDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountSqlDao.java
@@ -16,12 +16,15 @@
package com.ning.billing.account.dao;
-import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.user.AccountBuilder;
-import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.util.UuidMapper;
-import com.ning.billing.util.entity.EntityDao;
-import org.joda.time.DateTime;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.UUID;
+
import org.joda.time.DateTimeZone;
import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
@@ -37,15 +40,11 @@ import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
-import java.lang.annotation.Annotation;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.UUID;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.user.AccountBuilder;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.UuidMapper;
+import com.ning.billing.util.entity.EntityDao;
@ExternalizedSqlViaStringTemplate3
@RegisterMapper({UuidMapper.class, AccountSqlDao.AccountMapper.class})
@@ -64,6 +63,10 @@ public interface AccountSqlDao extends EntityDao<Account>, Transactional<Account
@SqlUpdate
public void update(@AccountBinder Account account);
+ @Override
+ @SqlUpdate
+ public void deleteByKey(@Bind("externalKey") final String key);
+
public static class AccountMapper implements ResultSetMapper<Account> {
@Override
public Account map(int index, ResultSet result, StatementContext context) throws SQLException {
@@ -112,7 +115,7 @@ public interface AccountSqlDao extends EntityDao<Account>, Transactional<Account
@Target({ElementType.PARAMETER})
public @interface AccountBinder {
public static class AccountBinderFactory implements BinderFactory {
- public Binder build(Annotation annotation) {
+ public Binder<AccountBinder, Account> build(Annotation annotation) {
return new Binder<AccountBinder, Account>() {
public void bind(SQLStatement q, AccountBinder bind, Account account) {
q.bind("id", account.getId().toString());
diff --git a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
index 59b8959..0fdb5d3 100644
--- a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
@@ -157,6 +157,27 @@ public class DefaultAccountDao implements AccountDao {
}
}
}
+
+ @Override
+ public void deleteByKey(final String externalKey) throws AccountApiException {
+ try {
+ accountDao.inTransaction(new Transaction<Void, AccountSqlDao>() {
+ @Override
+ public Void inTransaction(final AccountSqlDao accountSqlDao, final TransactionStatus status) throws AccountApiException, EventBus.EventBusException {
+
+ accountSqlDao.deleteByKey(externalKey);
+
+ return null;
+ }
+ });
+ } catch (RuntimeException re) {
+ if (re.getCause() instanceof AccountApiException) {
+ throw (AccountApiException) re.getCause();
+ } else {
+ throw re;
+ }
+ }
+ }
@Override
public void test() {
@@ -212,4 +233,6 @@ public class DefaultAccountDao implements AccountDao {
fieldStoreDao.save(accountId, objectType, fieldList);
}
}
+
+
}
diff --git a/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg b/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
index 59cc9a3..f45df50 100644
--- a/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
+++ b/account/src/main/resources/com/ning/billing/account/dao/AccountSqlDao.sql.stg
@@ -21,6 +21,12 @@ update() ::= <<
WHERE id = :id;
>>
+deleteByKey() ::= <<
+ DELETE FROM accounts
+ WHERE external_key = :externalKey;
+>>
+
+
getAccountByKey() ::= <<
select id, external_key, email, name, first_name_length, currency, billing_cycle_day,
payment_provider_name, time_zone, locale,
diff --git a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
index 335c529..49bd534 100644
--- a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
+++ b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
@@ -105,4 +105,15 @@ public class MockAccountUserApi implements AccountUserApi {
public void updateAccount(Account account) {
throw new UnsupportedOperationException();
}
+
+ @Override
+ public void deleteAccountByKey(String externalKey)
+ throws AccountApiException {
+ for (Account account : accounts) {
+ if (externalKey.equals(account.getExternalKey())) {
+ accounts.remove(account.getId());
+ }
+ }
+
+ }
}
diff --git a/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
index 69efaa1..d80a05e 100644
--- a/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
@@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentHashMap;
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountChangeNotification;
import com.ning.billing.account.api.user.DefaultAccountChangeNotification;
import com.ning.billing.account.api.user.DefaultAccountCreationEvent;
@@ -95,4 +96,13 @@ public class MockAccountDao implements AccountDao {
}
}
}
+
+ @Override
+ public void deleteByKey(String externalKey) throws AccountApiException {
+ for (Account account : accounts.values()) {
+ if (externalKey.equals(account.getExternalKey())) {
+ accounts.remove(account.getId());
+ }
+ }
+ }
}
diff --git a/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
index 1d4d2dc..6fd395e 100644
--- a/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/TestSimpleAccountDao.java
@@ -341,4 +341,23 @@ public class TestSimpleAccountDao extends AccountDaoTestBase {
null, null, null, null, null, null, null, null, null, null);
accountDao.update(updatedAccount);
}
+
+ @Test(groups={"slow"},enabled=true)
+ public void testDelete() throws AccountApiException {
+
+ Account a = createTestAccount();
+ accountDao.create(a);
+ String key = a.getExternalKey();
+
+ Account r = accountDao.getAccountByKey(key);
+ assertNotNull(r);
+ assertEquals(r.getExternalKey(), a.getExternalKey());
+
+ accountDao.deleteByKey(key);
+
+ Account s = accountDao.getAccountByKey(key);
+ assertTrue(s==null);
+
+ }
+
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java b/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
index 791d191..2ce98b8 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/MockIAccountUserApi.java
@@ -16,12 +16,10 @@
package com.ning.billing.analytics;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
-
import java.util.List;
import java.util.UUID;
+
import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.account.api.DefaultAccount;
@@ -72,4 +70,9 @@ public class MockIAccountUserApi implements AccountUserApi
public UUID getIdFromKey(String externalKey) {
return id;
}
+
+ @Override
+ public void deleteAccountByKey(String externalKey) {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountData.java b/api/src/main/java/com/ning/billing/account/api/AccountData.java
index adeb1f9..654400b 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountData.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountData.java
@@ -16,10 +16,9 @@
package com.ning.billing.account.api;
-import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
+
import com.ning.billing.catalog.api.Currency;
-import com.ning.billing.util.entity.Entity;
public interface AccountData {
diff --git a/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java b/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
index 9ebb876..fcdbcd9 100644
--- a/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
+++ b/api/src/main/java/com/ning/billing/account/api/AccountUserApi.java
@@ -40,4 +40,6 @@ public interface AccountUserApi {
public List<Account> getAccounts();
public UUID getIdFromKey(String externalKey) throws AccountApiException;
+
+ public void deleteAccountByKey(String externalKey) throws AccountApiException;
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadAccount.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadAccount.java
index 8b4870b..355ab61 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadAccount.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadAccount.java
@@ -16,7 +16,6 @@
package com.ning.billing.entitlement.api.billing;
-import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadAccountUserApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadAccountUserApi.java
index 94f0ea7..967d8b6 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadAccountUserApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/BrainDeadAccountUserApi.java
@@ -60,4 +60,10 @@ public class BrainDeadAccountUserApi implements AccountUserApi {
throw new UnsupportedOperationException();
}
+ @Override
+ public void deleteAccountByKey(String externalKey)
+ throws AccountApiException {
+ throw new UnsupportedOperationException();
+ }
+
}
diff --git a/util/src/main/java/com/ning/billing/util/entity/EntityDao.java b/util/src/main/java/com/ning/billing/util/entity/EntityDao.java
index 9fc34ea..3e68158 100644
--- a/util/src/main/java/com/ning/billing/util/entity/EntityDao.java
+++ b/util/src/main/java/com/ning/billing/util/entity/EntityDao.java
@@ -40,4 +40,7 @@ public interface EntityDao<T extends Entity> {
@SqlUpdate
public void test();
+
+ @SqlUpdate
+ public void deleteByKey(String key) throws AccountApiException;
}