killbill-aplcache
Changes
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java 4(+2 -2)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java 100(+96 -4)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java 64(+59 -5)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java 78(+76 -2)
util/src/main/java/com/ning/billing/util/entity/collection/dao/UpdatableEntityCollectionSqlDao.java 57(+0 -57)
util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java 10(+5 -5)
util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperInvocationHandler.java 51(+19 -32)
Details
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 1755dfd..ead462f 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
@@ -18,12 +18,13 @@ package com.ning.billing.account.dao;
import java.util.UUID;
+import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.EntityDao;
-public interface AccountDao extends EntityDao<AccountModelDao, AccountApiException> {
+public interface AccountDao extends EntityDao<AccountModelDao, Account, AccountApiException> {
public AccountModelDao getAccountByKey(String key, InternalTenantContext context);
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountEmailDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountEmailDao.java
index 5feb039..81f65ea 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountEmailDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountEmailDao.java
@@ -20,11 +20,12 @@ import java.util.List;
import java.util.UUID;
import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.account.api.AccountEmail;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.EntityDao;
-public interface AccountEmailDao extends EntityDao<AccountEmailModelDao, AccountApiException> {
+public interface AccountEmailDao extends EntityDao<AccountEmailModelDao, AccountEmail, AccountApiException> {
public void delete(AccountEmailModelDao email, InternalCallContext context);
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountEmailModelDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountEmailModelDao.java
index 76792e0..8ac1499 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountEmailModelDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountEmailModelDao.java
@@ -21,9 +21,11 @@ import java.util.UUID;
import org.joda.time.DateTime;
import com.ning.billing.account.api.AccountEmail;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class AccountEmailModelDao extends EntityBase {
+public class AccountEmailModelDao extends EntityBase implements EntityModelDao<AccountEmail> {
private UUID accountId;
private String email;
@@ -89,4 +91,9 @@ public class AccountEmailModelDao extends EntityBase {
result = 31 * result + (email != null ? email.hashCode() : 0);
return result;
}
+
+ @Override
+ public TableName getTableName() {
+ return TableName.ACCOUNT_EMAIL;
+ }
}
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
index b4180df..65344f1 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountEmailSqlDao.java
@@ -24,6 +24,7 @@ import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+import com.ning.billing.account.api.AccountEmail;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
@@ -32,7 +33,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
-public interface AccountEmailSqlDao extends EntitySqlDao<AccountEmailModelDao> {
+public interface AccountEmailSqlDao extends EntitySqlDao<AccountEmailModelDao, AccountEmail> {
@SqlUpdate
@Audited(ChangeType.DELETE)
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountModelDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountModelDao.java
index e0e4a05..95e6aaa 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountModelDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountModelDao.java
@@ -23,11 +23,14 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
+import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class AccountModelDao extends EntityBase {
+public class AccountModelDao extends EntityBase implements EntityModelDao<Account> {
private String externalKey;
private String email;
@@ -310,4 +313,9 @@ public class AccountModelDao extends EntityBase {
result = 31 * result + (isNotifiedForInvoices != null ? isNotifiedForInvoices.hashCode() : 0);
return result;
}
+
+ @Override
+ public TableName getTableName() {
+ return TableName.ACCOUNT;
+ }
}
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 dbc3892..1ee1c71 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
@@ -23,6 +23,7 @@ import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+import com.ning.billing.account.api.Account;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
@@ -31,7 +32,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
-public interface AccountSqlDao extends EntitySqlDao<AccountModelDao> {
+public interface AccountSqlDao extends EntitySqlDao<AccountModelDao, Account> {
@SqlQuery
public AccountModelDao getAccountByKey(@Bind("externalKey") final String key,
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 8b417ee..dc3fe91 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
@@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory;
import com.ning.billing.BillingExceptionBase;
import com.ning.billing.ErrorCode;
+import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.user.DefaultAccountChangeEvent;
import com.ning.billing.account.api.user.DefaultAccountCreationEvent;
@@ -44,7 +45,7 @@ import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
import com.google.inject.Inject;
-public class DefaultAccountDao extends EntityDaoBase<AccountModelDao, AccountApiException> implements AccountDao {
+public class DefaultAccountDao extends EntityDaoBase<AccountModelDao, Account, AccountApiException> implements AccountDao {
private static final Logger log = LoggerFactory.getLogger(DefaultAccountDao.class);
diff --git a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountEmailDao.java b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountEmailDao.java
index 57378fd..b365237 100644
--- a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountEmailDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountEmailDao.java
@@ -23,6 +23,7 @@ import org.skife.jdbi.v2.IDBI;
import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.account.api.AccountEmail;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.EntityDaoBase;
@@ -33,7 +34,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
import com.google.inject.Inject;
-public class DefaultAccountEmailDao extends EntityDaoBase<AccountEmailModelDao, AccountApiException> implements AccountEmailDao {
+public class DefaultAccountEmailDao extends EntityDaoBase<AccountEmailModelDao, AccountEmail, AccountApiException> implements AccountEmailDao {
@Inject
public DefaultAccountEmailDao(final IDBI dbi) {
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 9f93178..ea89b8b 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
@@ -20,6 +20,7 @@ import java.util.Map;
import java.util.UUID;
import com.ning.billing.ErrorCode;
+import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.DefaultAccount;
import com.ning.billing.account.api.DefaultMutableAccountData;
@@ -35,7 +36,7 @@ import com.ning.billing.util.svcsapi.bus.InternalBus.EventBusException;
import com.google.inject.Inject;
-public class MockAccountDao extends MockEntityDaoBase<AccountModelDao, AccountApiException> implements AccountDao {
+public class MockAccountDao extends MockEntityDaoBase<AccountModelDao, Account, AccountApiException> implements AccountDao {
private final InternalBus eventBus;
diff --git a/account/src/test/java/com/ning/billing/account/dao/MockAccountEmailDao.java b/account/src/test/java/com/ning/billing/account/dao/MockAccountEmailDao.java
index b8a0a70..2bea51f 100644
--- a/account/src/test/java/com/ning/billing/account/dao/MockAccountEmailDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/MockAccountEmailDao.java
@@ -22,10 +22,11 @@ import java.util.Map;
import java.util.UUID;
import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.account.api.AccountEmail;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.MockEntityDaoBase;
-public class MockAccountEmailDao extends MockEntityDaoBase<AccountEmailModelDao, AccountApiException> implements AccountEmailDao {
+public class MockAccountEmailDao extends MockEntityDaoBase<AccountEmailModelDao, AccountEmail, AccountApiException> implements AccountEmailDao {
@Override
public List<AccountEmailModelDao> getByAccountId(final UUID accountId, final InternalTenantContext context) {
diff --git a/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
index d804410..3b9d32c 100644
--- a/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
+++ b/account/src/test/java/com/ning/billing/account/dao/TestAccountDao.java
@@ -41,21 +41,21 @@ import com.ning.billing.util.api.CustomFieldApiException;
import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.audit.dao.AuditDao;
import com.ning.billing.util.audit.dao.DefaultAuditDao;
-import com.ning.billing.util.clock.DefaultClock;
import com.ning.billing.util.customfield.CustomField;
import com.ning.billing.util.customfield.StringCustomField;
-import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
import com.ning.billing.util.customfield.dao.CustomFieldDao;
+import com.ning.billing.util.customfield.dao.CustomFieldModelDao;
+import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
import com.ning.billing.util.entity.EntityPersistenceException;
-import com.ning.billing.util.tag.ControlTagType;
-import com.ning.billing.util.tag.DefaultControlTag;
import com.ning.billing.util.tag.DefaultTagDefinition;
import com.ning.billing.util.tag.DescriptiveTag;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
-import com.ning.billing.util.tag.dao.AuditedTagDao;
+import com.ning.billing.util.tag.dao.DefaultTagDao;
import com.ning.billing.util.tag.dao.TagDao;
+import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
import com.ning.billing.util.tag.dao.TagDefinitionSqlDao;
+import com.ning.billing.util.tag.dao.TagModelDao;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
@@ -132,12 +132,12 @@ public class TestAccountDao extends AccountDaoTestBase {
final UUID accountId = UUID.randomUUID();
CustomField field = new StringCustomField(fieldName, fieldValue, ObjectType.ACCOUNT, accountId, internalCallContext.getCreatedDate());
- final CustomFieldDao customFieldDao = new AuditedCustomFieldDao(dbi);
- customFieldDao.create(field, internalCallContext);
+ final CustomFieldDao customFieldDao = new DefaultCustomFieldDao(dbi);
+ customFieldDao.create(new CustomFieldModelDao(field), internalCallContext);
- final List<CustomField> customFieldMap = customFieldDao.getCustomFields(accountId, ObjectType.ACCOUNT, internalCallContext);
+ final List<CustomFieldModelDao> customFieldMap = customFieldDao.getCustomFields(accountId, ObjectType.ACCOUNT, internalCallContext);
assertEquals(customFieldMap.size(), 1);
- final CustomField customField = customFieldMap.get(0);
+ final CustomFieldModelDao customField = customFieldMap.get(0);
assertEquals(customField.getFieldName(), fieldName);
assertEquals(customField.getFieldValue(), fieldValue);
}
@@ -147,17 +147,16 @@ public class TestAccountDao extends AccountDaoTestBase {
final AccountModelDao account = createTestAccount(1);
final TagDefinition definition = new DefaultTagDefinition("Test Tag", "For testing only", false);
final TagDefinitionSqlDao tagDefinitionDao = dbi.onDemand(TagDefinitionSqlDao.class);
- tagDefinitionDao.create(definition, internalCallContext);
+ tagDefinitionDao.create(new TagDefinitionModelDao(definition), internalCallContext);
- final TagDao tagDao = new AuditedTagDao(dbi, tagEventBuilder, bus, new DefaultClock());
+ final TagDao tagDao = new DefaultTagDao(dbi, tagEventBuilder, bus);
- final TagDefinition tagDefinition = tagDefinitionDao.getById(definition.getId().toString(), internalCallContext);
- final Tag tag = tagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(tagDefinition.getId()), ObjectType.ACCOUNT, account.getId(), internalCallContext.getCreatedDate()) :
- new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, account.getId(), internalCallContext.getCreatedDate());
+ final TagDefinitionModelDao tagDefinition = tagDefinitionDao.getById(definition.getId().toString(), internalCallContext);
+ final Tag tag = new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, account.getId(), internalCallContext.getCreatedDate());
- tagDao.create(tag, internalCallContext);
+ tagDao.create(new TagModelDao(tag), internalCallContext);
- final List<Tag> tags = tagDao.getTags(account.getId(), ObjectType.ACCOUNT, internalCallContext);
+ final List<TagModelDao> tags = tagDao.getTags(account.getId(), ObjectType.ACCOUNT, internalCallContext);
assertEquals(tags.size(), 1);
assertEquals(tags.get(0).getTagDefinitionId(), definition.getId());
diff --git a/api/src/main/java/com/ning/billing/ObjectType.java b/api/src/main/java/com/ning/billing/ObjectType.java
index 4899a44..0b18aa9 100644
--- a/api/src/main/java/com/ning/billing/ObjectType.java
+++ b/api/src/main/java/com/ning/billing/ObjectType.java
@@ -32,7 +32,8 @@ public enum ObjectType {
REFUND("refund"),
TAG("tag"),
TAG_DEFINITION("tag definition"),
- TENANT("tenant");
+ TENANT("tenant"),
+ TENANT_KVS("tenant kvs");
private final String objectName;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
index d487ba4..b903a3e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/BundleSqlDao.java
@@ -32,7 +32,6 @@ import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
import com.ning.billing.entitlement.engine.dao.model.SubscriptionBundleModelDao;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
@@ -44,8 +43,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(BundleSqlDao.ISubscriptionBundleSqlMapper.class)
-public interface BundleSqlDao extends EntitySqlDao<SubscriptionBundleModelDao> {
-
+public interface BundleSqlDao extends EntitySqlDao<SubscriptionBundleModelDao, SubscriptionBundle> {
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -55,17 +53,16 @@ public interface BundleSqlDao extends EntitySqlDao<SubscriptionBundleModelDao> {
@SqlQuery
public SubscriptionBundleModelDao getBundleFromAccountAndKey(@Bind("accountId") String accountId,
- @Bind("externalKey") String externalKey,
- @BindBean final InternalTenantContext context);
+ @Bind("externalKey") String externalKey,
+ @BindBean final InternalTenantContext context);
@SqlQuery
public List<SubscriptionBundleModelDao> getBundleFromAccount(@Bind("accountId") String accountId,
- @BindBean final InternalTenantContext context);
+ @BindBean final InternalTenantContext context);
@SqlQuery
public List<SubscriptionBundleModelDao> getBundlesForKey(@Bind("externalKey") String externalKey,
- @BindBean final InternalTenantContext context);
-
+ @BindBean final InternalTenantContext context);
public static class ISubscriptionBundleSqlMapper extends MapperBase implements ResultSetMapper<SubscriptionBundleModelDao> {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java
index 2e21dcf..a2fb510 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementEventSqlDao.java
@@ -33,6 +33,7 @@ import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.entitlement.engine.dao.EntitlementEventSqlDao.EventSqlMapper;
import com.ning.billing.entitlement.engine.dao.model.EntitlementEventModelDao;
+import com.ning.billing.entitlement.events.EntitlementEvent;
import com.ning.billing.entitlement.events.EntitlementEvent.EventType;
import com.ning.billing.entitlement.events.user.ApiEventType;
import com.ning.billing.util.audit.ChangeType;
@@ -45,7 +46,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(EventSqlMapper.class)
-public interface EntitlementEventSqlDao extends EntitySqlDao<EntitlementEventModelDao> {
+public interface EntitlementEventSqlDao extends EntitySqlDao<EntitlementEventModelDao, EntitlementEvent> {
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -72,7 +73,6 @@ public interface EntitlementEventSqlDao extends EntitySqlDao<EntitlementEventMod
public List<EntitlementEventModelDao> getEventsForSubscription(@Bind("subscriptionId") String subscriptionId,
@BindBean final InternalTenantContext context);
-
public static class EventSqlMapper extends MapperBase implements ResultSetMapper<EntitlementEventModelDao> {
@Override
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java
index 9d6f268..e1cac4a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/EntitlementEventModelDao.java
@@ -38,9 +38,11 @@ import com.ning.billing.entitlement.events.user.ApiEventTransfer;
import com.ning.billing.entitlement.events.user.ApiEventType;
import com.ning.billing.entitlement.events.user.ApiEventUncancel;
import com.ning.billing.entitlement.exceptions.EntitlementError;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class EntitlementEventModelDao extends EntityBase {
+public class EntitlementEventModelDao extends EntityBase implements EntityModelDao<EntitlementEvent> {
private final long totalOrdering;
private final EventType eventType;
@@ -100,12 +102,10 @@ public class EntitlementEventModelDao extends EntityBase {
return userType != null ? userType.toString() : null;
}
-
public EventType getEventTypeX() {
return eventType;
}
-
public ApiEventType getUserTypeX() {
return userType;
}
@@ -147,7 +147,7 @@ public class EntitlementEventModelDao extends EntityBase {
return isActive;
}
- public static EntitlementEvent toEntitlementEvent(EntitlementEventModelDao src) {
+ public static EntitlementEvent toEntitlementEvent(final EntitlementEventModelDao src) {
final EventBaseBuilder<?> base = ((src.getEventTypeX() == EventType.PHASE) ?
new PhaseEventBuilder() :
@@ -198,4 +198,96 @@ public class EntitlementEventModelDao extends EntityBase {
}
return result;
}
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("EntitlementEventModelDao");
+ sb.append("{totalOrdering=").append(totalOrdering);
+ sb.append(", eventType=").append(eventType);
+ sb.append(", userType=").append(userType);
+ sb.append(", requestedDate=").append(requestedDate);
+ sb.append(", effectiveDate=").append(effectiveDate);
+ sb.append(", subscriptionId=").append(subscriptionId);
+ sb.append(", planName='").append(planName).append('\'');
+ sb.append(", phaseName='").append(phaseName).append('\'');
+ sb.append(", priceListName='").append(priceListName).append('\'');
+ sb.append(", currentVersion=").append(currentVersion);
+ sb.append(", isActive=").append(isActive);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final EntitlementEventModelDao that = (EntitlementEventModelDao) o;
+
+ if (currentVersion != that.currentVersion) {
+ return false;
+ }
+ if (isActive != that.isActive) {
+ return false;
+ }
+ if (totalOrdering != that.totalOrdering) {
+ return false;
+ }
+ if (effectiveDate != null ? !effectiveDate.equals(that.effectiveDate) : that.effectiveDate != null) {
+ return false;
+ }
+ if (eventType != that.eventType) {
+ return false;
+ }
+ if (phaseName != null ? !phaseName.equals(that.phaseName) : that.phaseName != null) {
+ return false;
+ }
+ if (planName != null ? !planName.equals(that.planName) : that.planName != null) {
+ return false;
+ }
+ if (priceListName != null ? !priceListName.equals(that.priceListName) : that.priceListName != null) {
+ return false;
+ }
+ if (requestedDate != null ? !requestedDate.equals(that.requestedDate) : that.requestedDate != null) {
+ return false;
+ }
+ if (subscriptionId != null ? !subscriptionId.equals(that.subscriptionId) : that.subscriptionId != null) {
+ return false;
+ }
+ if (userType != that.userType) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (int) (totalOrdering ^ (totalOrdering >>> 32));
+ result = 31 * result + (eventType != null ? eventType.hashCode() : 0);
+ result = 31 * result + (userType != null ? userType.hashCode() : 0);
+ result = 31 * result + (requestedDate != null ? requestedDate.hashCode() : 0);
+ result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
+ result = 31 * result + (subscriptionId != null ? subscriptionId.hashCode() : 0);
+ result = 31 * result + (planName != null ? planName.hashCode() : 0);
+ result = 31 * result + (phaseName != null ? phaseName.hashCode() : 0);
+ result = 31 * result + (priceListName != null ? priceListName.hashCode() : 0);
+ result = 31 * result + (int) (currentVersion ^ (currentVersion >>> 32));
+ result = 31 * result + (isActive ? 1 : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.SUBSCRIPTION_EVENTS;
+ }
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java
index a287d36..ae3193c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionBundleModelDao.java
@@ -22,23 +22,25 @@ import org.joda.time.DateTime;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class SubscriptionBundleModelDao extends EntityBase {
+public class SubscriptionBundleModelDao extends EntityBase implements EntityModelDao<SubscriptionBundle> {
private final String externalKey;
private final UUID accountId;
private final DateTime lastSysUpdateDate;
- public SubscriptionBundleModelDao(final UUID id, final String key, final UUID accountId, final DateTime lastSysUpdateDate, final DateTime createdDate, final DateTime updateDate) {
+ public SubscriptionBundleModelDao(final UUID id, final String key, final UUID accountId, final DateTime lastSysUpdateDate,
+ final DateTime createdDate, final DateTime updateDate) {
super(id, createdDate, updateDate);
this.externalKey = key;
this.accountId = accountId;
this.lastSysUpdateDate = lastSysUpdateDate;
}
-
- public SubscriptionBundleModelDao(SubscriptionBundleData input) {
+ public SubscriptionBundleModelDao(final SubscriptionBundleData input) {
this(input.getId(), input.getExternalKey(), input.getAccountId(), input.getLastSysUpdateDate(), input.getCreatedDate(), input.getUpdatedDate());
}
@@ -54,10 +56,62 @@ public class SubscriptionBundleModelDao extends EntityBase {
return lastSysUpdateDate;
}
- public static SubscriptionBundle toSubscriptionbundle(SubscriptionBundleModelDao src) {
+ public static SubscriptionBundle toSubscriptionbundle(final SubscriptionBundleModelDao src) {
if (src == null) {
return null;
}
return new SubscriptionBundleData(src.getId(), src.getExternalKey(), src.getAccountId(), src.getLastSysUpdateDate());
}
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("SubscriptionBundleModelDao");
+ sb.append("{externalKey='").append(externalKey).append('\'');
+ sb.append(", accountId=").append(accountId);
+ sb.append(", lastSysUpdateDate=").append(lastSysUpdateDate);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final SubscriptionBundleModelDao that = (SubscriptionBundleModelDao) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+ if (externalKey != null ? !externalKey.equals(that.externalKey) : that.externalKey != null) {
+ return false;
+ }
+ if (lastSysUpdateDate != null ? !lastSysUpdateDate.equals(that.lastSysUpdateDate) : that.lastSysUpdateDate != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (externalKey != null ? externalKey.hashCode() : 0);
+ result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
+ result = 31 * result + (lastSysUpdateDate != null ? lastSysUpdateDate.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.BUNDLES;
+ }
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java
index d58021f..129da56 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/model/SubscriptionModelDao.java
@@ -24,9 +24,11 @@ import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory.SubscriptionBuilder;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class SubscriptionModelDao extends EntityBase {
+public class SubscriptionModelDao extends EntityBase implements EntityModelDao<Subscription> {
private final UUID bundleId;
private final ProductCategory category;
@@ -81,7 +83,7 @@ public class SubscriptionModelDao extends EntityBase {
return paidThroughDate;
}
- public static Subscription toSubscription(SubscriptionModelDao src) {
+ public static Subscription toSubscription(final SubscriptionModelDao src) {
if (src == null) {
return null;
}
@@ -99,4 +101,76 @@ public class SubscriptionModelDao extends EntityBase {
.setCreatedDate(src.getCreatedDate())
.setUpdatedDate(src.getUpdatedDate()));
}
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("SubscriptionModelDao");
+ sb.append("{bundleId=").append(bundleId);
+ sb.append(", category=").append(category);
+ sb.append(", startDate=").append(startDate);
+ sb.append(", bundleStartDate=").append(bundleStartDate);
+ sb.append(", activeVersion=").append(activeVersion);
+ sb.append(", chargedThroughDate=").append(chargedThroughDate);
+ sb.append(", paidThroughDate=").append(paidThroughDate);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final SubscriptionModelDao that = (SubscriptionModelDao) o;
+
+ if (activeVersion != that.activeVersion) {
+ return false;
+ }
+ if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
+ return false;
+ }
+ if (bundleStartDate != null ? !bundleStartDate.equals(that.bundleStartDate) : that.bundleStartDate != null) {
+ return false;
+ }
+ if (category != that.category) {
+ return false;
+ }
+ if (chargedThroughDate != null ? !chargedThroughDate.equals(that.chargedThroughDate) : that.chargedThroughDate != null) {
+ return false;
+ }
+ if (paidThroughDate != null ? !paidThroughDate.equals(that.paidThroughDate) : that.paidThroughDate != null) {
+ return false;
+ }
+ if (startDate != null ? !startDate.equals(that.startDate) : that.startDate != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (bundleId != null ? bundleId.hashCode() : 0);
+ result = 31 * result + (category != null ? category.hashCode() : 0);
+ result = 31 * result + (startDate != null ? startDate.hashCode() : 0);
+ result = 31 * result + (bundleStartDate != null ? bundleStartDate.hashCode() : 0);
+ result = 31 * result + (int) (activeVersion ^ (activeVersion >>> 32));
+ result = 31 * result + (chargedThroughDate != null ? chargedThroughDate.hashCode() : 0);
+ result = 31 * result + (paidThroughDate != null ? paidThroughDate.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.SUBSCRIPTIONS;
+ }
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
index aa6793e..c068244 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
@@ -23,27 +23,21 @@ import java.util.List;
import java.util.UUID;
import org.joda.time.DateTime;
-import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.Binder;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory.SubscriptionBuilder;
import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.entitlement.api.user.SubscriptionData;
import com.ning.billing.entitlement.engine.dao.SubscriptionSqlDao.SubscriptionMapper;
import com.ning.billing.entitlement.engine.dao.model.SubscriptionModelDao;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.callcontext.InternalTenantContextBinder;
-import com.ning.billing.util.dao.BinderBase;
import com.ning.billing.util.dao.MapperBase;
import com.ning.billing.util.entity.dao.Audited;
import com.ning.billing.util.entity.dao.EntitySqlDao;
@@ -51,11 +45,11 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(SubscriptionMapper.class)
-public interface SubscriptionSqlDao extends EntitySqlDao<SubscriptionModelDao> {
+public interface SubscriptionSqlDao extends EntitySqlDao<SubscriptionModelDao, Subscription> {
@SqlQuery
public List<SubscriptionModelDao> getSubscriptionsFromBundleId(@Bind("bundleId") String bundleId,
- @BindBean final InternalTenantContext context);
+ @BindBean final InternalTenantContext context);
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -74,7 +68,6 @@ public interface SubscriptionSqlDao extends EntitySqlDao<SubscriptionModelDao> {
@Bind("bundleStartDate") Date bundleStartDate,
@BindBean final InternalCallContext context);
-
public static class SubscriptionMapper extends MapperBase implements ResultSetMapper<SubscriptionModelDao> {
@Override
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
index f80fa48..730fbbc 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/DefaultInvoiceDao.java
@@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
import com.ning.billing.ErrorCode;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.api.InvoiceItemType;
import com.ning.billing.invoice.api.InvoicePayment.InvoicePaymentType;
@@ -58,7 +59,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.inject.Inject;
-public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, InvoiceApiException> implements InvoiceDao {
+public class DefaultInvoiceDao extends EntityDaoBase<InvoiceModelDao, Invoice, InvoiceApiException> implements InvoiceDao {
private static final Logger log = LoggerFactory.getLogger(DefaultInvoiceDao.class);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemModelDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemModelDao.java
index 99a342b..6f289c7 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemModelDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemModelDao.java
@@ -25,9 +25,11 @@ import org.joda.time.LocalDate;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.invoice.api.InvoiceItemType;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class InvoiceItemModelDao extends EntityBase {
+public class InvoiceItemModelDao extends EntityBase implements EntityModelDao<InvoiceItem> {
private InvoiceItemType type;
private UUID invoiceId;
@@ -227,4 +229,9 @@ public class InvoiceItemModelDao extends EntityBase {
result = 31 * result + (linkedItemId != null ? linkedItemId.hashCode() : 0);
return result;
}
+
+ @Override
+ public TableName getTableName() {
+ return TableName.INVOICE_ITEMS;
+ }
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemSqlDao.java
index 6eda367..ff72410 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceItemSqlDao.java
@@ -22,12 +22,13 @@ import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import com.ning.billing.invoice.api.InvoiceItem;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
-public interface InvoiceItemSqlDao extends EntitySqlDao<InvoiceItemModelDao> {
+public interface InvoiceItemSqlDao extends EntitySqlDao<InvoiceItemModelDao, InvoiceItem> {
@SqlQuery
List<InvoiceItemModelDao> getInvoiceItemsByInvoice(@Bind("invoiceId") final String invoiceId,
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceModelDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceModelDao.java
index f21f64c..f28a0ea 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceModelDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceModelDao.java
@@ -26,9 +26,11 @@ import org.joda.time.LocalDate;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class InvoiceModelDao extends EntityBase {
+public class InvoiceModelDao extends EntityBase implements EntityModelDao<Invoice> {
private UUID accountId;
private Integer invoiceNumber;
@@ -169,4 +171,9 @@ public class InvoiceModelDao extends EntityBase {
result = 31 * result + (migrated ? 1 : 0);
return result;
}
+
+ @Override
+ public TableName getTableName() {
+ return TableName.INVOICES;
+ }
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentModelDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentModelDao.java
index 2e9af69..b3462bc 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentModelDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentModelDao.java
@@ -24,9 +24,11 @@ import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.api.InvoicePayment.InvoicePaymentType;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class InvoicePaymentModelDao extends EntityBase {
+public class InvoicePaymentModelDao extends EntityBase implements EntityModelDao<InvoicePayment> {
private InvoicePaymentType type;
private UUID invoiceId;
@@ -162,4 +164,9 @@ public class InvoicePaymentModelDao extends EntityBase {
result = 31 * result + (linkedInvoicePaymentId != null ? linkedInvoicePaymentId.hashCode() : 0);
return result;
}
+
+ @Override
+ public TableName getTableName() {
+ return TableName.INVOICE_PAYMENTS;
+ }
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
index a2b9f08..4aeacf8 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoicePaymentSqlDao.java
@@ -26,6 +26,7 @@ import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
+import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
@@ -35,7 +36,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
-public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePaymentModelDao> {
+public interface InvoicePaymentSqlDao extends EntitySqlDao<InvoicePaymentModelDao, InvoicePayment> {
@SqlQuery
public InvoicePaymentModelDao getByPaymentId(@Bind("paymentId") final String paymentId,
diff --git a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
index 863add6..943f909 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/dao/InvoiceSqlDao.java
@@ -24,12 +24,13 @@ import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
-public interface InvoiceSqlDao extends EntitySqlDao<InvoiceModelDao> {
+public interface InvoiceSqlDao extends EntitySqlDao<InvoiceModelDao, Invoice> {
@SqlQuery
List<InvoiceModelDao> getInvoicesByAccount(@Bind("accountId") final String accountId,
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
index 3b0a030..e3bb748 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/TestDefaultInvoiceDao.java
@@ -31,6 +31,7 @@ import org.testng.annotations.Test;
import com.ning.billing.ErrorCode;
import com.ning.billing.invoice.InvoiceTestSuite;
+import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.invoice.api.InvoiceApiException;
import com.ning.billing.invoice.notification.NextBillingDatePoster;
import com.ning.billing.util.callcontext.InternalTenantContext;
@@ -50,7 +51,7 @@ public class TestDefaultInvoiceDao extends InvoiceTestSuite {
invoiceSqlDao = Mockito.mock(InvoiceSqlDao.class);
Mockito.when(idbi.onDemand(InvoiceSqlDao.class)).thenReturn(invoiceSqlDao);
Mockito.when(invoiceSqlDao.getById(Mockito.anyString(), Mockito.<InternalTenantContext>any())).thenReturn(Mockito.mock(InvoiceModelDao.class));
- Mockito.when(invoiceSqlDao.inTransaction(Mockito.<Transaction<Void, EntitySqlDao<InvoiceModelDao>>>any())).thenAnswer(new Answer() {
+ Mockito.when(invoiceSqlDao.inTransaction(Mockito.<Transaction<Void, EntitySqlDao<InvoiceModelDao, Invoice>>>any())).thenAnswer(new Answer() {
@Override
public Object answer(final InvocationOnMock invocation) {
final Object[] args = invocation.getArguments();
diff --git a/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateModelDao.java b/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateModelDao.java
index cdf5830..5dbdd25 100644
--- a/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateModelDao.java
+++ b/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateModelDao.java
@@ -24,10 +24,12 @@ import com.ning.billing.junction.api.Blockable;
import com.ning.billing.junction.api.Blockable.Type;
import com.ning.billing.junction.api.BlockingState;
import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
-public class BlockingStateModelDao extends EntityBase {
+public class BlockingStateModelDao extends EntityBase implements EntityModelDao<BlockingState>{
private final UUID blockableId;
private final Type type;
@@ -89,4 +91,24 @@ public class BlockingStateModelDao extends EntityBase {
return new DefaultBlockingState(src.getId(), src.getBlockableId(),src.getState(), src.getType(), src.getService(), src.getBlockChange(), src.getBlockEntitlement(), src.getBlockBilling(),
src.getCreatedDate(), src.getUpdatedDate());
}
+
+ @Override
+ public TableName getTableName() {
+ return TableName.BLOCKING_STATES;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("BlockingStateModelDao");
+ sb.append("{blockableId=").append(blockableId);
+ sb.append(", type=").append(type);
+ sb.append(", state='").append(state).append('\'');
+ sb.append(", service='").append(service).append('\'');
+ sb.append(", blockChange=").append(blockChange);
+ sb.append(", blockEntitlement=").append(blockEntitlement);
+ sb.append(", blockBilling=").append(blockBilling);
+ sb.append('}');
+ return sb.toString();
+ }
}
diff --git a/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateSqlDao.java b/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateSqlDao.java
index 300c2b4..c1edb7e 100644
--- a/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateSqlDao.java
+++ b/junction/src/main/java/com/ning/billing/junction/dao/BlockingStateSqlDao.java
@@ -53,7 +53,7 @@ import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
@EntitySqlDaoStringTemplate
@RegisterMapper(BlockingStateSqlDao.BlockingHistorySqlMapper.class)
-public interface BlockingStateSqlDao extends EntitySqlDao<BlockingStateModelDao> {
+public interface BlockingStateSqlDao extends EntitySqlDao<BlockingStateModelDao, BlockingState> {
@SqlQuery
public BlockingStateModelDao getBlockingStateFor(@Bind("blockableId") UUID blockableId, @BindBean final InternalTenantContext context);
diff --git a/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java b/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
index 6f9541b..d91d213 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/notification/TestOverdueCheckNotifier.java
@@ -62,7 +62,7 @@ import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
+import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
import com.ning.billing.util.customfield.dao.CustomFieldDao;
import com.ning.billing.util.email.EmailModule;
import com.ning.billing.util.email.templates.TemplateModule;
@@ -74,7 +74,7 @@ import com.ning.billing.util.notificationq.NotificationQueueService;
import com.ning.billing.util.svcapi.account.AccountInternalApi;
import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
import com.ning.billing.util.svcsapi.bus.InternalBus;
-import com.ning.billing.util.tag.dao.AuditedTagDao;
+import com.ning.billing.util.tag.dao.DefaultTagDao;
import com.ning.billing.util.tag.dao.TagDao;
import com.google.inject.Guice;
@@ -130,8 +130,8 @@ public class TestOverdueCheckNotifier extends OverdueTestSuiteWithEmbeddedDB {
bind(MysqlTestingHelper.class).toInstance(helper);
final IDBI dbi = helper.getDBI();
bind(IDBI.class).toInstance(dbi);
- bind(TagDao.class).to(AuditedTagDao.class).asEagerSingleton();
- bind(CustomFieldDao.class).to(AuditedCustomFieldDao.class).asEagerSingleton();
+ bind(TagDao.class).to(DefaultTagDao.class).asEagerSingleton();
+ bind(CustomFieldDao.class).to(DefaultCustomFieldDao.class).asEagerSingleton();
bind(GlobalLocker.class).to(MySqlGlobalLocker.class).asEagerSingleton();
install(new MockJunctionModule());
install(new EmailModule());
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentAttemptModelDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentAttemptModelDao.java
index f57fe56..8f18809 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentAttemptModelDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentAttemptModelDao.java
@@ -23,10 +23,13 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
+import com.ning.billing.payment.api.Payment.PaymentAttempt;
import com.ning.billing.payment.api.PaymentStatus;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class PaymentAttemptModelDao extends EntityBase {
+public class PaymentAttemptModelDao extends EntityBase implements EntityModelDao<PaymentAttempt> {
private final UUID accountId;
private final UUID invoiceId;
@@ -96,4 +99,81 @@ public class PaymentAttemptModelDao extends EntityBase {
public BigDecimal getRequestedAmount() {
return requestedAmount;
}
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("PaymentAttemptModelDao");
+ sb.append("{accountId=").append(accountId);
+ sb.append(", invoiceId=").append(invoiceId);
+ sb.append(", paymentId=").append(paymentId);
+ sb.append(", processingStatus=").append(processingStatus);
+ sb.append(", effectiveDate=").append(effectiveDate);
+ sb.append(", gatewayErrorCode='").append(gatewayErrorCode).append('\'');
+ sb.append(", gatewayErrorMsg='").append(gatewayErrorMsg).append('\'');
+ sb.append(", requestedAmount=").append(requestedAmount);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final PaymentAttemptModelDao that = (PaymentAttemptModelDao) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+ if (effectiveDate != null ? !effectiveDate.equals(that.effectiveDate) : that.effectiveDate != null) {
+ return false;
+ }
+ if (gatewayErrorCode != null ? !gatewayErrorCode.equals(that.gatewayErrorCode) : that.gatewayErrorCode != null) {
+ return false;
+ }
+ if (gatewayErrorMsg != null ? !gatewayErrorMsg.equals(that.gatewayErrorMsg) : that.gatewayErrorMsg != null) {
+ return false;
+ }
+ if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
+ return false;
+ }
+ if (paymentId != null ? !paymentId.equals(that.paymentId) : that.paymentId != null) {
+ return false;
+ }
+ if (processingStatus != that.processingStatus) {
+ return false;
+ }
+ if (requestedAmount != null ? !requestedAmount.equals(that.requestedAmount) : that.requestedAmount != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
+ result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0);
+ result = 31 * result + (paymentId != null ? paymentId.hashCode() : 0);
+ result = 31 * result + (processingStatus != null ? processingStatus.hashCode() : 0);
+ result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
+ result = 31 * result + (gatewayErrorCode != null ? gatewayErrorCode.hashCode() : 0);
+ result = 31 * result + (gatewayErrorMsg != null ? gatewayErrorMsg.hashCode() : 0);
+ result = 31 * result + (requestedAmount != null ? requestedAmount.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.PAYMENT_ATTEMPTS;
+ }
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentAttemptSqlDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentAttemptSqlDao.java
index 768ebe6..3b9f306 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentAttemptSqlDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentAttemptSqlDao.java
@@ -23,11 +23,9 @@ import java.util.List;
import java.util.UUID;
import org.joda.time.DateTime;
-import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.Binder;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
@@ -38,7 +36,6 @@ import com.ning.billing.payment.api.PaymentStatus;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.dao.BinderBase;
import com.ning.billing.util.dao.MapperBase;
import com.ning.billing.util.entity.dao.Audited;
import com.ning.billing.util.entity.dao.EntitySqlDao;
@@ -46,8 +43,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(PaymentAttemptSqlDao.PaymentAttemptModelDaoMapper.class)
-public interface PaymentAttemptSqlDao extends EntitySqlDao<PaymentAttemptModelDao> {
-
+public interface PaymentAttemptSqlDao extends EntitySqlDao<PaymentAttemptModelDao, PaymentAttempt> {
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -61,7 +57,6 @@ public interface PaymentAttemptSqlDao extends EntitySqlDao<PaymentAttemptModelDa
List<PaymentAttemptModelDao> getByPaymentId(@Bind("paymentId") final String paymentId,
@BindBean final InternalTenantContext context);
-
public static class PaymentAttemptModelDaoMapper extends MapperBase implements ResultSetMapper<PaymentAttemptModelDao> {
@Override
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodModelDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodModelDao.java
index e3ebe9f..272562c 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodModelDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodModelDao.java
@@ -22,9 +22,12 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
+import com.ning.billing.payment.api.PaymentMethod;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class PaymentMethodModelDao extends EntityBase {
+public class PaymentMethodModelDao extends EntityBase implements EntityModelDao<PaymentMethod> {
private final UUID accountId;
private final String pluginName;
@@ -118,4 +121,9 @@ public class PaymentMethodModelDao extends EntityBase {
result = 31 * result + (externalId != null ? externalId.hashCode() : 0);
return result;
}
+
+ @Override
+ public TableName getTableName() {
+ return TableName.PAYMENT_METHODS;
+ }
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodSqlDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodSqlDao.java
index 74da14a..f0998c0 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodSqlDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentMethodSqlDao.java
@@ -22,11 +22,9 @@ import java.util.List;
import java.util.UUID;
import org.joda.time.DateTime;
-import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.Binder;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
@@ -36,8 +34,6 @@ import com.ning.billing.payment.api.PaymentMethod;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.dao.BinderBase;
-import com.ning.billing.util.dao.EntityHistory;
import com.ning.billing.util.dao.MapperBase;
import com.ning.billing.util.entity.dao.Audited;
import com.ning.billing.util.entity.dao.EntitySqlDao;
@@ -45,7 +41,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(PaymentMethodSqlDao.PaymentMethodDaoMapper.class)
-public interface PaymentMethodSqlDao extends EntitySqlDao<PaymentMethodModelDao> {
+public interface PaymentMethodSqlDao extends EntitySqlDao<PaymentMethodModelDao, PaymentMethod> {
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -57,7 +53,6 @@ public interface PaymentMethodSqlDao extends EntitySqlDao<PaymentMethodModelDao>
void unmarkPaymentMethodAsDeleted(@Bind("id") final String paymentMethodId,
@BindBean final InternalCallContext context);
-
@SqlQuery
PaymentMethodModelDao getPaymentMethodIncludedDelete(@Bind("id") final String paymentMethodId,
@BindBean final InternalTenantContext context);
@@ -65,7 +60,6 @@ public interface PaymentMethodSqlDao extends EntitySqlDao<PaymentMethodModelDao>
@SqlQuery
List<PaymentMethodModelDao> getByAccountId(@Bind("accountId") final String accountId, @BindBean final InternalCallContext context);
-
public static class PaymentMethodDaoMapper extends MapperBase implements ResultSetMapper<PaymentMethodModelDao> {
@Override
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentModelDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentModelDao.java
index a2af3dd..eda78ae 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentModelDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentModelDao.java
@@ -24,10 +24,13 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.api.Payment;
import com.ning.billing.payment.api.PaymentStatus;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class PaymentModelDao extends EntityBase {
+public class PaymentModelDao extends EntityBase implements EntityModelDao<Payment> {
public static final Integer INVALID_PAYMENT_NUMBER = new Integer(-13);
@@ -113,4 +116,91 @@ public class PaymentModelDao extends EntityBase {
public String getExtSecondPaymentRefId() {
return extSecondPaymentRefId;
}
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("PaymentModelDao");
+ sb.append("{accountId=").append(accountId);
+ sb.append(", invoiceId=").append(invoiceId);
+ sb.append(", paymentMethodId=").append(paymentMethodId);
+ sb.append(", amount=").append(amount);
+ sb.append(", currency=").append(currency);
+ sb.append(", effectiveDate=").append(effectiveDate);
+ sb.append(", paymentNumber=").append(paymentNumber);
+ sb.append(", paymentStatus=").append(paymentStatus);
+ sb.append(", extFirstPaymentRefId='").append(extFirstPaymentRefId).append('\'');
+ sb.append(", extSecondPaymentRefId='").append(extSecondPaymentRefId).append('\'');
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final PaymentModelDao that = (PaymentModelDao) o;
+
+ if (accountId != null ? !accountId.equals(that.accountId) : that.accountId != null) {
+ return false;
+ }
+ if (amount != null ? !amount.equals(that.amount) : that.amount != null) {
+ return false;
+ }
+ if (currency != that.currency) {
+ return false;
+ }
+ if (effectiveDate != null ? !effectiveDate.equals(that.effectiveDate) : that.effectiveDate != null) {
+ return false;
+ }
+ if (extFirstPaymentRefId != null ? !extFirstPaymentRefId.equals(that.extFirstPaymentRefId) : that.extFirstPaymentRefId != null) {
+ return false;
+ }
+ if (extSecondPaymentRefId != null ? !extSecondPaymentRefId.equals(that.extSecondPaymentRefId) : that.extSecondPaymentRefId != null) {
+ return false;
+ }
+ if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
+ return false;
+ }
+ if (paymentMethodId != null ? !paymentMethodId.equals(that.paymentMethodId) : that.paymentMethodId != null) {
+ return false;
+ }
+ if (paymentNumber != null ? !paymentNumber.equals(that.paymentNumber) : that.paymentNumber != null) {
+ return false;
+ }
+ if (paymentStatus != that.paymentStatus) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
+ result = 31 * result + (invoiceId != null ? invoiceId.hashCode() : 0);
+ result = 31 * result + (paymentMethodId != null ? paymentMethodId.hashCode() : 0);
+ result = 31 * result + (amount != null ? amount.hashCode() : 0);
+ result = 31 * result + (currency != null ? currency.hashCode() : 0);
+ result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
+ result = 31 * result + (paymentNumber != null ? paymentNumber.hashCode() : 0);
+ result = 31 * result + (paymentStatus != null ? paymentStatus.hashCode() : 0);
+ result = 31 * result + (extFirstPaymentRefId != null ? extFirstPaymentRefId.hashCode() : 0);
+ result = 31 * result + (extSecondPaymentRefId != null ? extSecondPaymentRefId.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.PAYMENTS;
+ }
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentSqlDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentSqlDao.java
index 0452e0a..71a1571 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentSqlDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentSqlDao.java
@@ -23,35 +23,28 @@ import java.util.List;
import java.util.UUID;
import org.joda.time.DateTime;
-import org.skife.jdbi.v2.SQLStatement;
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.Binder;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.api.Payment;
import com.ning.billing.payment.api.PaymentStatus;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.callcontext.InternalTenantContextBinder;
-import com.ning.billing.util.dao.BinderBase;
-import com.ning.billing.util.dao.EntityHistory;
import com.ning.billing.util.dao.MapperBase;
import com.ning.billing.util.entity.dao.Audited;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
-import com.ning.billing.util.entity.dao.UpdatableEntitySqlDao;
@EntitySqlDaoStringTemplate
@RegisterMapper(PaymentSqlDao.PaymentModelDaoMapper.class)
-public interface PaymentSqlDao extends EntitySqlDao<PaymentModelDao> {
-
-
+public interface PaymentSqlDao extends EntitySqlDao<PaymentModelDao, Payment> {
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -67,7 +60,6 @@ public interface PaymentSqlDao extends EntitySqlDao<PaymentModelDao> {
@Bind("amount") final BigDecimal amount,
@BindBean final InternalCallContext context);
-
@SqlQuery
PaymentModelDao getLastPaymentForAccountAndPaymentMethod(@Bind("accountId") final String accountId,
@Bind("paymentMethodId") final String paymentMethodId,
@@ -81,8 +73,6 @@ public interface PaymentSqlDao extends EntitySqlDao<PaymentModelDao> {
List<PaymentModelDao> getPaymentsForAccount(@Bind("accountId") final String accountId,
@BindBean final InternalTenantContext context);
-
-
public static class PaymentModelDaoMapper extends MapperBase implements ResultSetMapper<PaymentModelDao> {
@Override
@@ -101,7 +91,7 @@ public interface PaymentSqlDao extends EntitySqlDao<PaymentModelDao> {
final String extSecondPaymentRefId = rs.getString("ext_second_payment_ref_id");
final DateTime createdDate = getDateTime(rs, "created_date");
final DateTime updatedDate = getDateTime(rs, "updated_date");
- return new PaymentModelDao(id, createdDate, updatedDate, accountId , invoiceId, paymentMethodId, paymentNumber,
+ return new PaymentModelDao(id, createdDate, updatedDate, accountId, invoiceId, paymentMethodId, paymentNumber,
amount, currency, paymentStatus, effectiveDate, extFirstPaymentRefId, extSecondPaymentRefId);
}
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/RefundModelDao.java b/payment/src/main/java/com/ning/billing/payment/dao/RefundModelDao.java
index 7a2cfb4..c16a523 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/RefundModelDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/RefundModelDao.java
@@ -24,9 +24,12 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.api.Refund;
+import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public class RefundModelDao extends EntityBase {
+public class RefundModelDao extends EntityBase implements EntityModelDao<Refund> {
private final UUID accountId;
private final UUID paymentId;
@@ -155,4 +158,9 @@ public class RefundModelDao extends EntityBase {
result = 31 * result + (updatedDate != null ? updatedDate.hashCode() : 0);
return result;
}
+
+ @Override
+ public TableName getTableName() {
+ return TableName.REFUNDS;
+ }
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/RefundSqlDao.java b/payment/src/main/java/com/ning/billing/payment/dao/RefundSqlDao.java
index 108ffda..f3f611c 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/RefundSqlDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/RefundSqlDao.java
@@ -32,6 +32,7 @@ import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.api.Refund;
import com.ning.billing.payment.dao.RefundModelDao.RefundStatus;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
@@ -43,7 +44,7 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper(RefundSqlDao.RefundModelDaoMapper.class)
-public interface RefundSqlDao extends EntitySqlDao<RefundModelDao> {
+public interface RefundSqlDao extends EntitySqlDao<RefundModelDao, Refund> {
@SqlUpdate
@Audited(ChangeType.UPDATE)
@@ -59,7 +60,6 @@ public interface RefundSqlDao extends EntitySqlDao<RefundModelDao> {
List<RefundModelDao> getRefundsForAccount(@Bind("accountId") final String accountId,
@BindBean final InternalTenantContext context);
-
public static class RefundModelDaoMapper extends MapperBase implements ResultSetMapper<RefundModelDao> {
@Override
diff --git a/payment/src/main/resources/com/ning/billing/payment/ddl.sql b/payment/src/main/resources/com/ning/billing/payment/ddl.sql
index d9dd685..14c5246 100644
--- a/payment/src/main/resources/com/ning/billing/payment/ddl.sql
+++ b/payment/src/main/resources/com/ning/billing/payment/ddl.sql
@@ -131,7 +131,7 @@ CREATE TABLE payment_method_history (
tenant_record_id int(11) unsigned default null,
PRIMARY KEY(record_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-CREATE UNIQUE INDEX payment_method_history_target_record_id ON payment_method_history(target_record_id);
+CREATE INDEX payment_method_history_target_record_id ON payment_method_history(target_record_id);
CREATE INDEX payment_method_history_tenant_account_record_id ON payment_method_history(tenant_record_id, account_record_id);
DROP TABLE IF EXISTS refunds;
diff --git a/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java b/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
index b3ac99d..7f1fc99 100644
--- a/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
+++ b/server/src/test/java/com/ning/billing/server/security/TestKillbillJdbcRealm.java
@@ -24,7 +24,6 @@ import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.support.DelegatingSubject;
-import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -33,7 +32,7 @@ import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.server.ServerTestSuiteWithEmbeddedDB;
import com.ning.billing.tenant.api.DefaultTenant;
import com.ning.billing.tenant.dao.DefaultTenantDao;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.tenant.dao.TenantModelDao;
import com.jolbox.bonecp.BoneCPConfig;
import com.jolbox.bonecp.BoneCPDataSource;
@@ -46,10 +45,10 @@ public class TestKillbillJdbcRealm extends ServerTestSuiteWithEmbeddedDB {
@BeforeMethod(groups = "slow")
public void setUp() throws Exception {
// Create the tenant
- final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI(), Mockito.mock(InternalBus.class));
+ final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI());
tenant = new DefaultTenant(UUID.randomUUID(), null, null, UUID.randomUUID().toString(),
UUID.randomUUID().toString(), UUID.randomUUID().toString());
- tenantDao.create(tenant, internalCallContext);
+ tenantDao.create(new TenantModelDao(tenant), internalCallContext);
// Setup the security manager
final BoneCPConfig dbConfig = new BoneCPConfig();
diff --git a/tenant/src/main/java/com/ning/billing/tenant/api/DefaultTenant.java b/tenant/src/main/java/com/ning/billing/tenant/api/DefaultTenant.java
index fbc405a..e054a76 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/api/DefaultTenant.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/api/DefaultTenant.java
@@ -22,6 +22,7 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
+import com.ning.billing.tenant.dao.TenantModelDao;
import com.ning.billing.util.entity.EntityBase;
public class DefaultTenant extends EntityBase implements Tenant {
@@ -58,6 +59,11 @@ public class DefaultTenant extends EntityBase implements Tenant {
this.apiSecret = apiSecret;
}
+ public DefaultTenant(final TenantModelDao tenant) {
+ this(tenant.getId(), tenant.getCreatedDate(), tenant.getUpdatedDate(), tenant.getExternalKey(), tenant.getApiKey(),
+ tenant.getApiSecret());
+ }
+
@Override
public String getExternalKey() {
return externalKey;
diff --git a/tenant/src/main/java/com/ning/billing/tenant/api/user/DefaultTenantUserApi.java b/tenant/src/main/java/com/ning/billing/tenant/api/user/DefaultTenantUserApi.java
index fd226b0..e0a19de 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/api/user/DefaultTenantUserApi.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/api/user/DefaultTenantUserApi.java
@@ -26,12 +26,12 @@ import com.ning.billing.tenant.api.TenantApiException;
import com.ning.billing.tenant.api.TenantData;
import com.ning.billing.tenant.api.TenantUserApi;
import com.ning.billing.tenant.dao.TenantDao;
+import com.ning.billing.tenant.dao.TenantModelDao;
import com.ning.billing.util.callcontext.CallContext;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.entity.EntityPersistenceException;
import com.google.inject.Inject;
@@ -46,13 +46,12 @@ public class DefaultTenantUserApi implements TenantUserApi {
this.internalCallContextFactory = internalCallContextFactory;
}
-
@Override
public Tenant createTenant(final TenantData data, final CallContext context) throws TenantApiException {
final Tenant tenant = new DefaultTenant(data);
try {
- tenantDao.create(tenant, internalCallContextFactory.createInternalCallContext(context));
+ tenantDao.create(new TenantModelDao(tenant), internalCallContextFactory.createInternalCallContext(context));
} catch (final TenantApiException e) {
throw new TenantApiException(e, ErrorCode.TENANT_CREATION_FAILED);
}
@@ -62,36 +61,35 @@ public class DefaultTenantUserApi implements TenantUserApi {
@Override
public Tenant getTenantByApiKey(final String key) throws TenantApiException {
- final Tenant tenant = tenantDao.getTenantByApiKey(key);
+ final TenantModelDao tenant = tenantDao.getTenantByApiKey(key);
if (tenant == null) {
throw new TenantApiException(ErrorCode.TENANT_DOES_NOT_EXIST_FOR_API_KEY, key);
}
- return tenant;
+ return new DefaultTenant(tenant);
}
@Override
public Tenant getTenantById(final UUID id) throws TenantApiException {
// TODO - API cleanup?
- final Tenant tenant = tenantDao.getById(id, new InternalTenantContext(null, null));
+ final TenantModelDao tenant = tenantDao.getById(id, new InternalTenantContext(null, null));
if (tenant == null) {
throw new TenantApiException(ErrorCode.TENANT_DOES_NOT_EXIST_FOR_ID, id);
}
- return tenant;
+ return new DefaultTenant(tenant);
}
@Override
public List<String> getTenantValueForKey(final String key, final TenantContext context)
throws TenantApiException {
- final InternalTenantContext internalContext = internalCallContextFactory.createInternalTenantContext(context);
- final List<String> value = tenantDao.getTenantValueForKey(key, internalContext);
- return value;
+ final InternalTenantContext internalContext = internalCallContextFactory.createInternalTenantContext(context);
+ return tenantDao.getTenantValueForKey(key, internalContext);
}
@Override
public void addTenantKeyValue(final String key, final String value, final CallContext context)
throws TenantApiException {
- final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(context);
+ final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(context);
// TODO Figure out the exact verification if nay
/*
final Tenant tenant = tenantDao.getById(context.getTenantId(), internalContext);
@@ -102,7 +100,6 @@ public class DefaultTenantUserApi implements TenantUserApi {
tenantDao.addTenantKeyValue(key, value, internalContext);
}
-
@Override
public void deleteTenantKey(final String key, final CallContext context)
throws TenantApiException {
@@ -112,7 +109,7 @@ public class DefaultTenantUserApi implements TenantUserApi {
throw new TenantApiException(ErrorCode.TENANT_DOES_NOT_EXIST_FOR_ID, tenantId);
}
*/
- final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(context);
+ final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(context);
tenantDao.deleteTenantKey(key, internalContext);
}
}
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
index b6892af..0453f1f 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/DefaultTenantDao.java
@@ -19,24 +19,25 @@ package com.ning.billing.tenant.dao;
import java.util.List;
import java.util.UUID;
-import javax.annotation.Nullable;
-
import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.codec.Base64;
import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.util.ByteSource;
import org.skife.jdbi.v2.IDBI;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.ning.billing.ErrorCode;
import com.ning.billing.tenant.api.Tenant;
import com.ning.billing.tenant.api.TenantApiException;
-import com.ning.billing.tenant.api.TenantKV;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.entity.EntityPersistenceException;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.entity.dao.EntityDaoBase;
+import com.ning.billing.util.entity.dao.EntitySqlDao;
+import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionWrapper;
+import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionalJdbiWrapper;
+import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
@@ -44,88 +45,98 @@ import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.inject.Inject;
-public class DefaultTenantDao implements TenantDao {
-
- private static final Logger log = LoggerFactory.getLogger(DefaultTenantDao.class);
+public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, TenantApiException> implements TenantDao {
private final RandomNumberGenerator rng = new SecureRandomNumberGenerator();
- private final TenantSqlDao tenantSqlDao;
- private final TenantKVSqlDao tenantKVSqlDao;
- private final InternalBus eventBus;
-
@Inject
- public DefaultTenantDao(final IDBI dbi, final InternalBus eventBus) {
- this.eventBus = eventBus;
- this.tenantSqlDao = dbi.onDemand(TenantSqlDao.class);
- this.tenantKVSqlDao = dbi.onDemand(TenantKVSqlDao.class);
+ public DefaultTenantDao(final IDBI dbi) {
+ super(new EntitySqlDaoTransactionalJdbiWrapper(dbi), TenantSqlDao.class);
}
@Override
- public Tenant getTenantByApiKey(final String apiKey) {
- return tenantSqlDao.getByApiKey(apiKey);
+ protected TenantApiException generateAlreadyExistsException(final TenantModelDao entity, final InternalCallContext context) {
+ return new TenantApiException(ErrorCode.TENANT_ALREADY_EXISTS, entity.getExternalKey());
}
@Override
- public void create(final Tenant entity, final InternalCallContext context) throws TenantApiException {
+ public TenantModelDao getTenantByApiKey(final String apiKey) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<TenantModelDao>() {
+ @Override
+ public TenantModelDao inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ return entitySqlDaoWrapperFactory.become(TenantSqlDao.class).getByApiKey(apiKey);
+ }
+ });
+ }
+
+ @Override
+ public void create(final TenantModelDao entity, final InternalCallContext context) throws TenantApiException {
// Create the salt and password
final ByteSource salt = rng.nextBytes();
// Hash the plain-text password with the random salt and multiple
// iterations and then Base64-encode the value (requires less space than Hex):
+ // TODO switch to bcrypt
final String hashedPasswordBase64 = new Sha256Hash(entity.getApiSecret(), salt, 1024).toBase64();
- tenantSqlDao.create(entity, hashedPasswordBase64, salt.toBase64(), context);
- }
-
- @Override
- public Long getRecordId(final UUID id, final InternalTenantContext context) {
- return tenantSqlDao.getRecordId(id.toString(), context);
- }
-
- @Override
- public Tenant getById(final UUID id, final InternalTenantContext context) {
- return tenantSqlDao.getById(id.toString(), context);
- }
-
- @Override
- public List<Tenant> get(final InternalTenantContext context) {
- return tenantSqlDao.get(context);
- }
-
- @Override
- public void test(final InternalTenantContext context) {
- tenantSqlDao.test(context);
+ transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
+ @Override
+ public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ entitySqlDaoWrapperFactory.become(TenantSqlDao.class).create(entity, hashedPasswordBase64, salt.toBase64(), context);
+ return null;
+ }
+ });
}
@VisibleForTesting
AuthenticationInfo getAuthenticationInfoForTenant(final UUID id) {
- return tenantSqlDao.getSecrets(id.toString()).toAuthenticationInfo();
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<AuthenticationInfo>() {
+ @Override
+ public AuthenticationInfo inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final TenantModelDao tenantModelDao = entitySqlDaoWrapperFactory.become(TenantSqlDao.class).getSecrets(id.toString());
+
+ final SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(tenantModelDao.getApiKey(), tenantModelDao.getApiSecret().toCharArray(), getClass().getSimpleName());
+ authenticationInfo.setCredentialsSalt(ByteSource.Util.bytes(Base64.decode(tenantModelDao.getApiSalt())));
+
+ return authenticationInfo;
+ }
+ });
}
@Override
public List<String> getTenantValueForKey(final String key, final InternalTenantContext context) {
- final List<TenantKV> tenantKV = tenantKVSqlDao.getTenantValueForKey(key, context.getTenantRecordId());
- return ImmutableList.copyOf(Collections2.transform(tenantKV, new Function<TenantKV, String>() {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<String>>() {
@Override
- @Nullable
- public String apply(final @Nullable TenantKV in) {
- return in.getValue();
+ public List<String> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final List<TenantKVModelDao> tenantKV = entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).getTenantValueForKey(key, context.getTenantRecordId());
+ return ImmutableList.copyOf(Collections2.transform(tenantKV, new Function<TenantKVModelDao, String>() {
+ @Override
+ public String apply(final TenantKVModelDao in) {
+ return in.getValue();
+ }
+ }));
}
- }));
+ });
}
@Override
public void addTenantKeyValue(final String key, final String value, final InternalCallContext context) {
- tenantKVSqlDao.insertTenantKeyValue(UUID.randomUUID().toString(), key, value, context.getTenantRecordId(), context);
+ transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
+ @Override
+ public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).insertTenantKeyValue(UUID.randomUUID().toString(), key, value, context.getTenantRecordId(), context);
+ return null;
+ }
+ });
}
@Override
public void deleteTenantKey(final String key, final InternalCallContext context) {
- tenantKVSqlDao.deleteTenantKey(key, context.getTenantRecordId());
- }
-
- @Override
- public Tenant getByRecordId(final Long recordId, final InternalTenantContext context) {
- throw new UnsupportedOperationException();
+ transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
+ @Override
+ public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).deleteTenantKey(key, context.getTenantRecordId());
+ return null;
+ }
+ });
}
}
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantDao.java
index 6b38750..6c2f339 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantDao.java
@@ -24,9 +24,9 @@ import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.EntityDao;
-public interface TenantDao extends EntityDao<Tenant, TenantApiException> {
+public interface TenantDao extends EntityDao<TenantModelDao, Tenant, TenantApiException> {
- public Tenant getTenantByApiKey(final String key);
+ public TenantModelDao getTenantByApiKey(final String key);
public List<String> getTenantValueForKey(final String key, final InternalTenantContext context);
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
new file mode 100644
index 0000000..3eb3955
--- /dev/null
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.tenant.dao;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.tenant.api.TenantKV;
+import com.ning.billing.util.dao.TableName;
+import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
+
+public class TenantKVModelDao extends EntityBase implements EntityModelDao<TenantKV> {
+
+ private String key;
+ private String value;
+
+ public TenantKVModelDao() { /* For the DAO mapper */ }
+
+ public TenantKVModelDao(final UUID id, final DateTime createdDate, final DateTime updatedDate, final String key, final String value) {
+ super(id, createdDate, updatedDate);
+ this.key = key;
+ this.value = value;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("TenantKVModelDao");
+ sb.append("{key='").append(key).append('\'');
+ sb.append(", value='").append(value).append('\'');
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final TenantKVModelDao that = (TenantKVModelDao) o;
+
+ if (key != null ? !key.equals(that.key) : that.key != null) {
+ return false;
+ }
+ if (value != null ? !value.equals(that.value) : that.value != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (key != null ? key.hashCode() : 0);
+ result = 31 * result + (value != null ? value.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.TENANT_KVS;
+ }
+}
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
index d6d2772..ccef4fd 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVSqlDao.java
@@ -13,6 +13,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
+
package com.ning.billing.tenant.dao;
import java.sql.ResultSet;
@@ -27,15 +28,12 @@ import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
-import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.tenant.api.DefaultTenantKV;
import com.ning.billing.tenant.api.TenantKV;
import com.ning.billing.tenant.dao.TenantKVSqlDao.TenantKVMapper;
import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.callcontext.InternalTenantContextBinder;
import com.ning.billing.util.dao.MapperBase;
import com.ning.billing.util.dao.UuidMapper;
import com.ning.billing.util.entity.dao.EntitySqlDao;
@@ -43,19 +41,24 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
@RegisterMapper({UuidMapper.class, TenantKVMapper.class})
-public interface TenantKVSqlDao extends EntitySqlDao<TenantKV> {
+public interface TenantKVSqlDao extends EntitySqlDao<TenantKVModelDao, TenantKV> {
// TODO should take a context
@SqlQuery
- public List<TenantKV> getTenantValueForKey(@Bind("key") final String key, @Bind("tenantRecordId") Long tenantRecordId);
+ public List<TenantKVModelDao> getTenantValueForKey(@Bind("key") final String key,
+ @Bind("tenantRecordId") Long tenantRecordId);
@SqlUpdate
- public void insertTenantKeyValue(@Bind("id") String id, @Bind("key") final String key, @Bind("value") final String value, @Bind("tenantRecordId") Long tenantRecordId, @BindBean final InternalCallContext context);
+ public void insertTenantKeyValue(@Bind("id") String id,
+ @Bind("key") final String key,
+ @Bind("value") final String value,
+ @Bind("tenantRecordId") Long tenantRecordId,
+ @BindBean final InternalCallContext context);
@SqlUpdate
- public void deleteTenantKey(@Bind("key") final String key, @Bind("tenantRecordId") Long tenantRecordId);
-
+ public void deleteTenantKey(@Bind("key") final String key,
+ @Bind("tenantRecordId") Long tenantRecordId);
public class TenantKVMapper extends MapperBase implements ResultSetMapper<TenantKV> {
diff --git a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantSqlDao.java b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantSqlDao.java
index e7d188a..e632f47 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantSqlDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantSqlDao.java
@@ -17,33 +17,31 @@
package com.ning.billing.tenant.dao;
import org.skife.jdbi.v2.sqlobject.Bind;
+import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
-import org.skife.jdbi.v2.sqlobject.customizers.Mapper;
-import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import com.ning.billing.tenant.api.Tenant;
+import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContextBinder;
-import com.ning.billing.util.dao.UuidMapper;
+import com.ning.billing.util.entity.dao.Audited;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
-@RegisterMapper({UuidMapper.class, TenantMapper.class})
-public interface TenantSqlDao extends EntitySqlDao<Tenant> {
+public interface TenantSqlDao extends EntitySqlDao<TenantModelDao, Tenant> {
@SqlQuery
- public Tenant getByApiKey(@Bind("apiKey") final String apiKey);
+ public TenantModelDao getByApiKey(@Bind("apiKey") final String apiKey);
@SqlUpdate
- public void create(@TenantBinder final Tenant tenant,
+ @Audited(ChangeType.INSERT)
+ public void create(@BindBean final TenantModelDao tenant,
@Bind("apiSecret") final String apiSecret,
@Bind("apiSalt") final String apiSalt,
@InternalTenantContextBinder final InternalCallContext context);
@SqlQuery
- @Mapper(TenantSecretsMapper.class)
- public TenantSecrets getSecrets(@Bind("id") final String id);
-
+ public TenantModelDao getSecrets(@Bind("id") final String id);
}
diff --git a/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java b/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
index f069f59..844d0a4 100644
--- a/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
+++ b/tenant/src/test/java/com/ning/billing/tenant/dao/TestDefaultTenantDao.java
@@ -22,24 +22,22 @@ import java.util.UUID;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
-import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.tenant.TenantTestSuiteWithEmbeddedDb;
import com.ning.billing.tenant.api.DefaultTenant;
import com.ning.billing.tenant.security.KillbillCredentialsMatcher;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
public class TestDefaultTenantDao extends TenantTestSuiteWithEmbeddedDb {
@Test(groups = "slow")
public void testWeCanStoreAndMatchCredentials() throws Exception {
- final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI(), Mockito.mock(InternalBus.class));
+ final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI());
final DefaultTenant tenant = new DefaultTenant(UUID.randomUUID(), null, null, UUID.randomUUID().toString(),
- UUID.randomUUID().toString(), UUID.randomUUID().toString());
- tenantDao.create(tenant, internalCallContext);
+ UUID.randomUUID().toString(), UUID.randomUUID().toString());
+ tenantDao.create(new TenantModelDao(tenant), internalCallContext);
// Verify we can retrieve it
Assert.assertEquals(tenantDao.getTenantByApiKey(tenant.getApiKey()).getId(), tenant.getId());
@@ -59,19 +57,19 @@ public class TestDefaultTenantDao extends TenantTestSuiteWithEmbeddedDb {
@Test(groups = "slow")
public void testTenantKeyValue() throws Exception {
- final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI(), Mockito.mock(InternalBus.class));
+ final DefaultTenantDao tenantDao = new DefaultTenantDao(getMysqlTestingHelper().getDBI());
final DefaultTenant tenant = new DefaultTenant(UUID.randomUUID(), null, null, UUID.randomUUID().toString(),
- UUID.randomUUID().toString(), UUID.randomUUID().toString());
- tenantDao.create(tenant, internalCallContext);
+ UUID.randomUUID().toString(), UUID.randomUUID().toString());
+ tenantDao.create(new TenantModelDao(tenant), internalCallContext);
tenantDao.addTenantKeyValue("TheKey", "TheValue", internalCallContext);
- List<String> value = tenantDao.getTenantValueForKey("TheKey", internalCallContext);
+ List<String> value = tenantDao.getTenantValueForKey("TheKey", internalCallContext);
Assert.assertEquals(value.size(), 1);
Assert.assertEquals(value.get(0), "TheValue");
tenantDao.addTenantKeyValue("TheKey", "TheSecondValue", internalCallContext);
- value = tenantDao.getTenantValueForKey("TheKey", internalCallContext);
+ value = tenantDao.getTenantValueForKey("TheKey", internalCallContext);
Assert.assertEquals(value.size(), 2);
tenantDao.deleteTenantKey("TheKey", internalCallContext);
diff --git a/util/src/main/java/com/ning/billing/util/customfield/api/DefaultCustomFieldUserApi.java b/util/src/main/java/com/ning/billing/util/customfield/api/DefaultCustomFieldUserApi.java
index ba20f36..b1f0a38 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/api/DefaultCustomFieldUserApi.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/api/DefaultCustomFieldUserApi.java
@@ -19,7 +19,6 @@ package com.ning.billing.util.customfield.api;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.BillingExceptionBase;
import com.ning.billing.ObjectType;
import com.ning.billing.util.api.CustomFieldApiException;
import com.ning.billing.util.api.CustomFieldUserApi;
@@ -29,7 +28,11 @@ import com.ning.billing.util.callcontext.TenantContext;
import com.ning.billing.util.customfield.CustomField;
import com.ning.billing.util.customfield.StringCustomField;
import com.ning.billing.util.customfield.dao.CustomFieldDao;
+import com.ning.billing.util.customfield.dao.CustomFieldModelDao;
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
import com.google.inject.Inject;
public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
@@ -45,15 +48,20 @@ public class DefaultCustomFieldUserApi implements CustomFieldUserApi {
@Override
public List<CustomField> getCustomFields(final UUID objectId, final ObjectType objectType, final TenantContext context) {
- return customFieldDao.getCustomFields(objectId, objectType, internalCallContextFactory.createInternalTenantContext(context));
+ return ImmutableList.<CustomField>copyOf(Collections2.transform(customFieldDao.getCustomFields(objectId, objectType, internalCallContextFactory.createInternalTenantContext(context)),
+ new Function<CustomFieldModelDao, CustomField>() {
+ @Override
+ public CustomField apply(final CustomFieldModelDao input) {
+ return new StringCustomField(input);
+ }
+ }));
}
@Override
public void addCustomFields(final List<CustomField> fields, final CallContext context) throws CustomFieldApiException {
-
// TODO make it transactional
- for (CustomField cur : fields) {
- customFieldDao.create(cur, internalCallContextFactory.createInternalCallContext(cur.getObjectId(), cur.getObjectType(), context));
+ for (final CustomField cur : fields) {
+ customFieldDao.create(new CustomFieldModelDao(cur), internalCallContextFactory.createInternalCallContext(cur.getObjectId(), cur.getObjectType(), context));
}
}
}
diff --git a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldDao.java b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldDao.java
index 89da9cd..ead8b57 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldDao.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldDao.java
@@ -19,15 +19,13 @@ package com.ning.billing.util.customfield.dao;
import java.util.List;
import java.util.UUID;
-import com.ning.billing.BillingExceptionBase;
import com.ning.billing.ObjectType;
import com.ning.billing.util.api.CustomFieldApiException;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.customfield.CustomField;
import com.ning.billing.util.entity.dao.EntityDao;
-public interface CustomFieldDao extends EntityDao<CustomField, CustomFieldApiException> {
+public interface CustomFieldDao extends EntityDao<CustomFieldModelDao, CustomField, CustomFieldApiException> {
-
- public List<CustomField> getCustomFields(final UUID objectId, final ObjectType objectType, final InternalTenantContext context);
+ public List<CustomFieldModelDao> getCustomFields(final UUID objectId, final ObjectType objectType, final InternalTenantContext context);
}
diff --git a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldModelDao.java b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldModelDao.java
new file mode 100644
index 0000000..1f166d5
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldModelDao.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.customfield.dao;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.ObjectType;
+import com.ning.billing.util.customfield.CustomField;
+import com.ning.billing.util.dao.TableName;
+import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
+
+public class CustomFieldModelDao extends EntityBase implements EntityModelDao<CustomField> {
+
+ private String fieldName;
+ private String fieldValue;
+ private UUID objectId;
+ private ObjectType objectType;
+
+ public CustomFieldModelDao() { /* For the DAO mapper */ }
+
+ public CustomFieldModelDao(final UUID id, final DateTime createdDate, final DateTime updatedDate, final String fieldName,
+ final String fieldValue, final UUID objectId, final ObjectType objectType) {
+ super(id, createdDate, updatedDate);
+ this.fieldName = fieldName;
+ this.fieldValue = fieldValue;
+ this.objectId = objectId;
+ this.objectType = objectType;
+ }
+
+ public CustomFieldModelDao(final CustomField customField) {
+ this(customField.getId(), customField.getCreatedDate(), customField.getUpdatedDate(), customField.getFieldName(),
+ customField.getFieldValue(), customField.getObjectId(), customField.getObjectType());
+ }
+
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ public String getFieldValue() {
+ return fieldValue;
+ }
+
+ public UUID getObjectId() {
+ return objectId;
+ }
+
+ public ObjectType getObjectType() {
+ return objectType;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("CustomFieldModelDao");
+ sb.append("{fieldName='").append(fieldName).append('\'');
+ sb.append(", fieldValue='").append(fieldValue).append('\'');
+ sb.append(", objectId=").append(objectId);
+ sb.append(", objectType=").append(objectType);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final CustomFieldModelDao that = (CustomFieldModelDao) o;
+
+ if (fieldName != null ? !fieldName.equals(that.fieldName) : that.fieldName != null) {
+ return false;
+ }
+ if (fieldValue != null ? !fieldValue.equals(that.fieldValue) : that.fieldValue != null) {
+ return false;
+ }
+ if (objectId != null ? !objectId.equals(that.objectId) : that.objectId != null) {
+ return false;
+ }
+ if (objectType != that.objectType) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (fieldName != null ? fieldName.hashCode() : 0);
+ result = 31 * result + (fieldValue != null ? fieldValue.hashCode() : 0);
+ result = 31 * result + (objectId != null ? objectId.hashCode() : 0);
+ result = 31 * result + (objectType != null ? objectType.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.CUSTOM_FIELD;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
index c14b131..34a8059 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/dao/CustomFieldSqlDao.java
@@ -16,33 +16,24 @@
package com.ning.billing.util.customfield.dao;
-import java.util.Collection;
import java.util.List;
import java.util.UUID;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
-import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import com.ning.billing.ObjectType;
-import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.callcontext.InternalTenantContextBinder;
import com.ning.billing.util.customfield.CustomField;
-import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.ObjectTypeBinder;
-import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate
-@RegisterMapper(CustomFieldMapper.class)
-public interface CustomFieldSqlDao extends EntitySqlDao<CustomField> {
+public interface CustomFieldSqlDao extends EntitySqlDao<CustomFieldModelDao, CustomField> {
@SqlQuery
- List<CustomField> getCustomFieldsForObject(@Bind("objectId") UUID objectId, @Bind("objectType") ObjectType objectType, @BindBean InternalTenantContext internalTenantContext);
+ List<CustomFieldModelDao> getCustomFieldsForObject(@Bind("objectId") UUID objectId,
+ @Bind("objectType") ObjectType objectType,
+ @BindBean InternalTenantContext internalTenantContext);
}
diff --git a/util/src/main/java/com/ning/billing/util/customfield/StringCustomField.java b/util/src/main/java/com/ning/billing/util/customfield/StringCustomField.java
index e820c00..ec58bed 100644
--- a/util/src/main/java/com/ning/billing/util/customfield/StringCustomField.java
+++ b/util/src/main/java/com/ning/billing/util/customfield/StringCustomField.java
@@ -21,12 +21,11 @@ import java.util.UUID;
import org.joda.time.DateTime;
import com.ning.billing.ObjectType;
-import com.ning.billing.util.entity.Entity;
+import com.ning.billing.util.customfield.dao.CustomFieldModelDao;
import com.ning.billing.util.entity.EntityBase;
public class StringCustomField extends EntityBase implements CustomField {
-
private final String fieldName;
private final String fieldValue;
private final UUID objectId;
@@ -45,6 +44,10 @@ public class StringCustomField extends EntityBase implements CustomField {
}
+ public StringCustomField(final CustomFieldModelDao input) {
+ this(input.getId(), input.getFieldName(), input.getFieldValue(), input.getObjectType(), input.getObjectId(), input.getCreatedDate());
+ }
+
@Override
public String getFieldName() {
return fieldName;
diff --git a/util/src/main/java/com/ning/billing/util/dao/AuditSqlDao.java b/util/src/main/java/com/ning/billing/util/dao/AuditSqlDao.java
index 094169b..5f13d83 100644
--- a/util/src/main/java/com/ning/billing/util/dao/AuditSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/dao/AuditSqlDao.java
@@ -25,13 +25,10 @@ import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.Define;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
import com.ning.billing.util.audit.AuditLog;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.callcontext.InternalTenantContextBinder;
-import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@EntitySqlDaoStringTemplate("/com/ning/billing/util/entity/dao/EntitySqlDao.sql.stg")
diff --git a/util/src/main/java/com/ning/billing/util/dao/EntityHistoryBinder.java b/util/src/main/java/com/ning/billing/util/dao/EntityHistoryBinder.java
index a9435a8..3d0e2aa 100644
--- a/util/src/main/java/com/ning/billing/util/dao/EntityHistoryBinder.java
+++ b/util/src/main/java/com/ning/billing/util/dao/EntityHistoryBinder.java
@@ -35,30 +35,29 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ning.billing.util.entity.Entity;
+import com.ning.billing.util.entity.dao.EntityModelDao;
@BindingAnnotation(EntityHistoryBinder.EntityHistoryBinderFactory.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface EntityHistoryBinder {
-
- public static class EntityHistoryBinderFactory<T extends Entity> implements BinderFactory {
+ public static class EntityHistoryBinderFactory<M extends EntityModelDao<E>, E extends Entity> implements BinderFactory {
private static final Logger logger = LoggerFactory.getLogger(EntityHistoryBinder.class);
@Override
public Binder build(final Annotation annotation) {
- return new Binder<EntityHistoryBinder, EntityHistory<T>>() {
-
+ return new Binder<EntityHistoryBinder, EntityHistoryModelDao<M, E>>() {
@Override
- public void bind(final SQLStatement<?> q, final EntityHistoryBinder bind, final EntityHistory<T> history) {
+ public void bind(final SQLStatement<?> q, final EntityHistoryBinder bind, final EntityHistoryModelDao<M, E> history) {
try {
// Emulate @BndBean
- final Entity arg = history.getEntity();
+ final M arg = history.getEntity();
final BeanInfo infos = Introspector.getBeanInfo(arg.getClass());
final PropertyDescriptor[] props = infos.getPropertyDescriptors();
- for (PropertyDescriptor prop : props) {
+ for (final PropertyDescriptor prop : props) {
q.bind(prop.getName(), prop.getReadMethod().invoke(arg));
}
q.bind("id", history.getId());
diff --git a/util/src/main/java/com/ning/billing/util/dao/HistorySqlDao.java b/util/src/main/java/com/ning/billing/util/dao/HistorySqlDao.java
index 7822434..c69684f 100644
--- a/util/src/main/java/com/ning/billing/util/dao/HistorySqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/dao/HistorySqlDao.java
@@ -16,23 +16,16 @@
package com.ning.billing.util.dao;
-import java.util.List;
-
import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.callcontext.InternalTenantContextBinder;
import com.ning.billing.util.entity.Entity;
+import com.ning.billing.util.entity.dao.EntityModelDao;
-public interface HistorySqlDao<T extends Entity> {
-
- @SqlBatch(transactional = false)
- public void batchAddHistoryFromTransaction(List<EntityHistory> histories,
- @InternalTenantContextBinder InternalCallContext context);
+public interface HistorySqlDao<M extends EntityModelDao<E>, E extends Entity> {
@SqlUpdate
- public void addHistoryFromTransaction(@EntityHistoryBinder EntityHistory<T> history,
+ public void addHistoryFromTransaction(@EntityHistoryBinder EntityHistoryModelDao<M, E> history,
@BindBean InternalCallContext context);
}
diff --git a/util/src/main/java/com/ning/billing/util/dao/TableName.java b/util/src/main/java/com/ning/billing/util/dao/TableName.java
index af23356..0e4da16 100644
--- a/util/src/main/java/com/ning/billing/util/dao/TableName.java
+++ b/util/src/main/java/com/ning/billing/util/dao/TableName.java
@@ -19,72 +19,55 @@ package com.ning.billing.util.dao;
import javax.annotation.Nullable;
import com.ning.billing.ObjectType;
-import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.AccountEmail;
-import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.api.InvoiceItem;
-import com.ning.billing.invoice.api.InvoicePayment;
-import com.ning.billing.payment.api.Payment;
-import com.ning.billing.payment.api.Payment.PaymentAttempt;
-import com.ning.billing.payment.api.PaymentMethod;
-import com.ning.billing.payment.api.Refund;
-import com.ning.billing.tenant.api.Tenant;
-import com.ning.billing.util.customfield.CustomField;
-import com.ning.billing.util.entity.Entity;
-import com.ning.billing.util.tag.Tag;
-import com.ning.billing.util.tag.TagDefinition;
/**
* Map table names to entity object types and classes, and history tables (if exists)
*/
public enum TableName {
ACCOUNT_HISTORY("account_history"),
- ACCOUNT("accounts", ObjectType.ACCOUNT, Account.class, ACCOUNT_HISTORY),
+ ACCOUNT("accounts", ObjectType.ACCOUNT, ACCOUNT_HISTORY),
ACCOUNT_EMAIL_HISTORY("account_email_history"),
- ACCOUNT_EMAIL("account_emails", ObjectType.ACCOUNT_EMAIL, AccountEmail.class, ACCOUNT_EMAIL_HISTORY),
- BUNDLES("bundles", ObjectType.BUNDLE, SubscriptionBundle.class),
+ ACCOUNT_EMAIL("account_emails", ObjectType.ACCOUNT_EMAIL, ACCOUNT_EMAIL_HISTORY),
+ BUNDLES("bundles", ObjectType.BUNDLE),
+ BLOCKING_STATES("blocking_states"),
CUSTOM_FIELD_HISTORY("custom_field_history"),
- CUSTOM_FIELD("custom_fields", ObjectType.CUSTOM_FIELD, CustomField.class, CUSTOM_FIELD_HISTORY),
- INVOICE_ITEMS("invoice_items", ObjectType.INVOICE_ITEM, InvoiceItem.class),
- INVOICE_PAYMENTS("invoice_payments", ObjectType.INVOICE_PAYMENT, InvoicePayment.class),
- INVOICES("invoices", ObjectType.INVOICE, Invoice.class),
+ CUSTOM_FIELD("custom_fields", ObjectType.CUSTOM_FIELD, CUSTOM_FIELD_HISTORY),
+ INVOICE_ITEMS("invoice_items", ObjectType.INVOICE_ITEM),
+ INVOICE_PAYMENTS("invoice_payments", ObjectType.INVOICE_PAYMENT),
+ INVOICES("invoices", ObjectType.INVOICE),
PAYMENT_ATTEMPT_HISTORY("payment_attempt_history"),
- PAYMENT_ATTEMPTS("payment_attempts", ObjectType.PAYMENT_ATTEMPT, PaymentAttempt.class, PAYMENT_ATTEMPT_HISTORY),
+ PAYMENT_ATTEMPTS("payment_attempts", ObjectType.PAYMENT_ATTEMPT, PAYMENT_ATTEMPT_HISTORY),
PAYMENT_HISTORY("payment_history"),
- PAYMENTS("payments", ObjectType.PAYMENT, Payment.class, PAYMENT_HISTORY),
+ PAYMENTS("payments", ObjectType.PAYMENT, PAYMENT_HISTORY),
PAYMENT_METHOD_HISTORY("payment_method_history"),
- PAYMENT_METHODS("payment_methods", ObjectType.PAYMENT_METHOD, PaymentMethod.class, PAYMENT_METHOD_HISTORY),
- SUBSCRIPTIONS("subscriptions", ObjectType.SUBSCRIPTION, Subscription.class),
- // TODO - entity class?
- SUBSCRIPTION_EVENTS("subscription_events", ObjectType.SUBSCRIPTION_EVENT, null),
+ PAYMENT_METHODS("payment_methods", ObjectType.PAYMENT_METHOD, PAYMENT_METHOD_HISTORY),
+ SUBSCRIPTIONS("subscriptions", ObjectType.SUBSCRIPTION),
+ SUBSCRIPTION_EVENTS("subscription_events", ObjectType.SUBSCRIPTION_EVENT),
REFUND_HISTORY("refund_history"),
- REFUNDS("refunds", ObjectType.REFUND, Refund.class, REFUND_HISTORY),
+ REFUNDS("refunds", ObjectType.REFUND, REFUND_HISTORY),
TAG_DEFINITION_HISTORY("tag_definition_history"),
- TAG_DEFINITIONS("tag_definitions", ObjectType.TAG_DEFINITION, TagDefinition.class, TAG_DEFINITION_HISTORY),
+ TAG_DEFINITIONS("tag_definitions", ObjectType.TAG_DEFINITION, TAG_DEFINITION_HISTORY),
TAG_HISTORY("tag_history"),
- TENANT("tenants", ObjectType.TENANT, Tenant.class),
- TAG("tags", ObjectType.TAG, Tag.class, TAG_HISTORY);
+ TENANT("tenants", ObjectType.TENANT),
+ TENANT_KVS("tenant_kvs", ObjectType.TENANT_KVS),
+ TAG("tags", ObjectType.TAG, TAG_HISTORY);
private final String tableName;
private final ObjectType objectType;
- private final Class<? extends Entity> entityClass;
private final TableName historyTableName;
- TableName(final String tableName, @Nullable final ObjectType objectType, @Nullable final Class<? extends Entity> entityClass, @Nullable final TableName historyTableName) {
+ TableName(final String tableName, @Nullable final ObjectType objectType, @Nullable final TableName historyTableName) {
this.tableName = tableName;
this.objectType = objectType;
- this.entityClass = entityClass;
this.historyTableName = historyTableName;
}
- TableName(final String tableName, final ObjectType objectType, @Nullable final Class<? extends Entity> entityClass) {
- this(tableName, objectType, entityClass, null);
+ TableName(final String tableName, final ObjectType objectType) {
+ this(tableName, objectType, null);
}
TableName(final String tableName) {
- this(tableName, null, null, null);
+ this(tableName, null, null);
}
public static TableName fromObjectType(final ObjectType objectType) {
@@ -96,15 +79,6 @@ public enum TableName {
return null;
}
- public static TableName fromEntityClass(final Class<? extends Entity> entityClass) {
- for (final TableName tableName : values()) {
- if (tableName.getEntityClass() != null && tableName.getEntityClass().isAssignableFrom(entityClass)) {
- return tableName;
- }
- }
- return null;
- }
-
public String getTableName() {
return tableName;
}
@@ -117,10 +91,6 @@ public enum TableName {
return historyTableName;
}
- public Class<? extends Entity> getEntityClass() {
- return entityClass;
- }
-
public boolean hasHistoryTable() {
return historyTableName != null;
}
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntityDao.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntityDao.java
index 3470485..cb5ec2a 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntityDao.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntityDao.java
@@ -23,19 +23,18 @@ import com.ning.billing.BillingExceptionBase;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.Entity;
-import com.ning.billing.util.entity.EntityPersistenceException;
-public interface EntityDao<T extends Entity, U extends BillingExceptionBase> {
+public interface EntityDao<M extends EntityModelDao<E>, E extends Entity, U extends BillingExceptionBase> {
- public void create(T entity, InternalCallContext context) throws U;
+ public void create(M entity, InternalCallContext context) throws U;
public Long getRecordId(UUID id, InternalTenantContext context);
- public T getByRecordId(Long recordId, InternalTenantContext context);
+ public M getByRecordId(Long recordId, InternalTenantContext context);
- public T getById(UUID id, InternalTenantContext context);
+ public M getById(UUID id, InternalTenantContext context);
- public List<T> get(InternalTenantContext context);
+ public List<M> get(InternalTenantContext context);
public void test(InternalTenantContext context);
}
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntityDaoBase.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntityDaoBase.java
index 15fea54..cfa095e 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntityDaoBase.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntityDaoBase.java
@@ -25,19 +25,19 @@ import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.Entity;
-public abstract class EntityDaoBase<T extends Entity, U extends BillingExceptionBase> implements EntityDao<T, U> {
+public abstract class EntityDaoBase<M extends EntityModelDao<E>, E extends Entity, U extends BillingExceptionBase> implements EntityDao<M, E, U> {
protected final EntitySqlDaoTransactionalJdbiWrapper transactionalSqlDao;
- private Class<? extends EntitySqlDao<T>> realSqlDao;
+ private final Class<? extends EntitySqlDao<M, E>> realSqlDao;
- public EntityDaoBase(final EntitySqlDaoTransactionalJdbiWrapper transactionalSqlDao, Class<? extends EntitySqlDao<T>> realSqlDao) {
+ public EntityDaoBase(final EntitySqlDaoTransactionalJdbiWrapper transactionalSqlDao, final Class<? extends EntitySqlDao<M, E>> realSqlDao) {
this.transactionalSqlDao = transactionalSqlDao;
this.realSqlDao = realSqlDao;
}
@Override
- public void create(final T entity, final InternalCallContext context) throws U {
+ public void create(final M entity, final InternalCallContext context) throws U {
transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
@Override
public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
@@ -45,11 +45,11 @@ public abstract class EntityDaoBase<T extends Entity, U extends BillingException
if (getById(entity.getId(), context) != null) {
throw generateAlreadyExistsException(entity, context);
}
- final EntitySqlDao<T> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
+ final EntitySqlDao<M, E> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
transactional.create(entity, context);
- final T refreshedEntity = transactional.getById(entity.getId().toString(), context);
+ final M refreshedEntity = transactional.getById(entity.getId().toString(), context);
postBusEventFromTransaction(entity, refreshedEntity, ChangeType.INSERT, entitySqlDaoWrapperFactory, context);
return null;
@@ -57,11 +57,12 @@ public abstract class EntityDaoBase<T extends Entity, U extends BillingException
});
}
- protected void postBusEventFromTransaction(T entity, T savedEntity, ChangeType changeType, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context)
- throws BillingExceptionBase {
+ protected void postBusEventFromTransaction(final M entity, final M savedEntity, final ChangeType changeType,
+ final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory,
+ final InternalCallContext context) throws BillingExceptionBase {
}
- protected abstract U generateAlreadyExistsException(final T entity, final InternalCallContext context);
+ protected abstract U generateAlreadyExistsException(final M entity, final InternalCallContext context);
@Override
public Long getRecordId(final UUID id, final InternalTenantContext context) {
@@ -69,43 +70,43 @@ public abstract class EntityDaoBase<T extends Entity, U extends BillingException
@Override
public Long inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- final EntitySqlDao<T> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
+ final EntitySqlDao<M, E> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
return transactional.getRecordId(id.toString(), context);
}
});
}
@Override
- public T getByRecordId(final Long recordId, final InternalTenantContext context) {
- return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<T>() {
+ public M getByRecordId(final Long recordId, final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<M>() {
@Override
- public T inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- final EntitySqlDao<T> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
+ public M inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final EntitySqlDao<M, E> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
return transactional.getByRecordId(recordId, context);
}
});
}
@Override
- public T getById(final UUID id, final InternalTenantContext context) {
- return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<T>() {
+ public M getById(final UUID id, final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<M>() {
@Override
- public T inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- final EntitySqlDao<T> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
+ public M inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final EntitySqlDao<M, E> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
return transactional.getById(id.toString(), context);
}
});
}
@Override
- public List<T> get(final InternalTenantContext context) {
- return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<T>>() {
+ public List<M> get(final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<M>>() {
@Override
- public List<T> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- final EntitySqlDao<T> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
+ public List<M> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final EntitySqlDao<M, E> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
return transactional.get(context);
}
});
@@ -117,7 +118,7 @@ public abstract class EntityDaoBase<T extends Entity, U extends BillingException
@Override
public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- final EntitySqlDao<T> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
+ final EntitySqlDao<M, E> transactional = entitySqlDaoWrapperFactory.become(realSqlDao);
transactional.test(context);
return null;
}
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDao.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDao.java
index c914ba7..48e1e83 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDao.java
@@ -35,19 +35,19 @@ import com.ning.billing.util.entity.Entity;
import com.ning.billing.util.entity.EntityPersistenceException;
@EntitySqlDaoStringTemplate
-public interface EntitySqlDao<T extends Entity> extends AuditSqlDao, HistorySqlDao<T>, Transmogrifier, Transactional<EntitySqlDao<T>>, CloseMe {
+public interface EntitySqlDao<M extends EntityModelDao<E>, E extends Entity> extends AuditSqlDao, HistorySqlDao<M, E>, Transmogrifier, Transactional<EntitySqlDao<M, E>>, CloseMe {
@SqlUpdate
@Audited(ChangeType.INSERT)
- public void create(@BindBean final T entity,
+ public void create(@BindBean final M entity,
@BindBean final InternalCallContext context) throws EntityPersistenceException;
@SqlQuery
- public T getById(@Bind("id") final String id,
+ public M getById(@Bind("id") final String id,
@BindBean final InternalTenantContext context);
@SqlQuery
- public T getByRecordId(@Bind("recordId") final Long recordId,
+ public M getByRecordId(@Bind("recordId") final Long recordId,
@BindBean final InternalTenantContext context);
@SqlQuery
@@ -59,7 +59,7 @@ public interface EntitySqlDao<T extends Entity> extends AuditSqlDao, HistorySqlD
@BindBean final InternalTenantContext context);
@SqlQuery
- public List<T> get(@BindBean final InternalTenantContext context);
+ public List<M> get(@BindBean final InternalTenantContext context);
@SqlUpdate
public void test(@BindBean final InternalTenantContext context);
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java
index 9a4dd2a..13ba96c 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoTransactionalJdbiWrapper.java
@@ -33,7 +33,7 @@ public class EntitySqlDaoTransactionalJdbiWrapper {
this.dbi = dbi;
}
- class JdbiTransaction<ReturnType, T extends Entity> implements Transaction<ReturnType, EntitySqlDao<T>> {
+ class JdbiTransaction<ReturnType, M extends EntityModelDao<E>, E extends Entity> implements Transaction<ReturnType, EntitySqlDao<M, E>> {
private final EntitySqlDaoTransactionWrapper<ReturnType> entitySqlDaoTransactionWrapper;
@@ -42,14 +42,14 @@ public class EntitySqlDaoTransactionalJdbiWrapper {
}
@Override
- public ReturnType inTransaction(final EntitySqlDao<T> transactionalSqlDao, final TransactionStatus status) throws Exception {
+ public ReturnType inTransaction(final EntitySqlDao<M, E> transactionalSqlDao, final TransactionStatus status) throws Exception {
final EntitySqlDaoWrapperFactory<EntitySqlDao> factoryEntitySqlDao = new EntitySqlDaoWrapperFactory<EntitySqlDao>(transactionalSqlDao);
return entitySqlDaoTransactionWrapper.inTransaction(factoryEntitySqlDao);
}
}
// To handle warnings only
- interface InitialEntitySqlDao extends EntitySqlDao<Entity> {}
+ interface InitialEntitySqlDao extends EntitySqlDao<EntityModelDao<Entity>, Entity> {}
/**
* @param entitySqlDaoTransactionWrapper transaction to execute
@@ -57,7 +57,7 @@ public class EntitySqlDaoTransactionalJdbiWrapper {
* @return result from the transaction fo type ReturnType
*/
public <ReturnType> ReturnType execute(final EntitySqlDaoTransactionWrapper<ReturnType> entitySqlDaoTransactionWrapper) {
- final EntitySqlDao<Entity> entitySqlDao = dbi.onDemand(InitialEntitySqlDao.class);
- return entitySqlDao.inTransaction(new JdbiTransaction<ReturnType, Entity>(entitySqlDaoTransactionWrapper));
+ final EntitySqlDao<EntityModelDao<Entity>, Entity> entitySqlDao = dbi.onDemand(InitialEntitySqlDao.class);
+ return entitySqlDao.inTransaction(new JdbiTransaction<ReturnType, EntityModelDao<Entity>, Entity>(entitySqlDaoTransactionWrapper));
}
}
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperFactory.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperFactory.java
index bd4ea2c..b9dd2d4 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperFactory.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperFactory.java
@@ -18,8 +18,6 @@ package com.ning.billing.util.entity.dao;
import java.lang.reflect.Proxy;
-import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
-
import com.ning.billing.util.entity.Entity;
/**
@@ -45,7 +43,9 @@ public class EntitySqlDaoWrapperFactory<InitialSqlDao extends EntitySqlDao> {
* @param <NewSqlDao> EntitySqlDao type to create
* @return instance of NewSqlDao
*/
- public <NewSqlDao extends EntitySqlDao<NewEntity>, NewEntity extends Entity> NewSqlDao become(final Class<NewSqlDao> newSqlDaoClass) {
+ public <NewSqlDao extends EntitySqlDao<NewEntityModelDao, NewEntity>,
+ NewEntityModelDao extends EntityModelDao<NewEntity>,
+ NewEntity extends Entity> NewSqlDao become(final Class<NewSqlDao> newSqlDaoClass) {
return create(newSqlDaoClass, sqlDao.become(newSqlDaoClass));
}
@@ -53,10 +53,13 @@ public class EntitySqlDaoWrapperFactory<InitialSqlDao extends EntitySqlDao> {
return sqlDao.become(newTransactionalClass);
}
- private <NewSqlDao extends EntitySqlDao<NewEntity>, NewEntity extends Entity> NewSqlDao create(final Class<NewSqlDao> newSqlDaoClass, final NewSqlDao newSqlDao) {
+ private <NewSqlDao extends EntitySqlDao<NewEntityModelDao, NewEntity>,
+ NewEntityModelDao extends EntityModelDao<NewEntity>,
+ NewEntity extends Entity> NewSqlDao create(final Class<NewSqlDao> newSqlDaoClass, final NewSqlDao newSqlDao) {
final ClassLoader classLoader = newSqlDao.getClass().getClassLoader();
final Class[] interfacesToImplement = {newSqlDaoClass};
- final EntitySqlDaoWrapperInvocationHandler<NewSqlDao, NewEntity> wrapperInvocationHandler = new EntitySqlDaoWrapperInvocationHandler<NewSqlDao, NewEntity>(newSqlDaoClass, newSqlDao);
+ final EntitySqlDaoWrapperInvocationHandler<NewSqlDao, NewEntityModelDao, NewEntity> wrapperInvocationHandler =
+ new EntitySqlDaoWrapperInvocationHandler<NewSqlDao, NewEntityModelDao, NewEntity>(newSqlDaoClass, newSqlDao);
final Object newSqlDaoObject = Proxy.newProxyInstance(classLoader, interfacesToImplement, wrapperInvocationHandler);
return newSqlDaoClass.cast(newSqlDaoObject);
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperInvocationHandler.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperInvocationHandler.java
index d07117e..387fbd5 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperInvocationHandler.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntitySqlDaoWrapperInvocationHandler.java
@@ -36,7 +36,7 @@ import org.slf4j.LoggerFactory;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.dao.EntityAudit;
-import com.ning.billing.util.dao.EntityHistory;
+import com.ning.billing.util.dao.EntityHistoryModelDao;
import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.entity.Entity;
@@ -47,16 +47,18 @@ import com.google.common.collect.ImmutableList.Builder;
/**
* Wraps an instance of EntitySqlDao, performing extra work around each method (Sql query)
*
- * @param <T> EntitySqlDao type of the wrapped instance
+ * @param <S> EntitySqlDao type of the wrapped instance
+ * @param <M> EntityModel associated with S
+ * @param <E> Entity associated with M
*/
-public class EntitySqlDaoWrapperInvocationHandler<T extends EntitySqlDao<U>, U extends Entity> implements InvocationHandler {
+public class EntitySqlDaoWrapperInvocationHandler<S extends EntitySqlDao<M, E>, M extends EntityModelDao<E>, E extends Entity> implements InvocationHandler {
private final Logger logger = LoggerFactory.getLogger(EntitySqlDaoWrapperInvocationHandler.class);
- private final Class<T> sqlDaoClass;
- private final T sqlDao;
+ private final Class<S> sqlDaoClass;
+ private final S sqlDao;
- public EntitySqlDaoWrapperInvocationHandler(final Class<T> sqlDaoClass, final T sqlDao) {
+ public EntitySqlDaoWrapperInvocationHandler(final Class<S> sqlDaoClass, final S sqlDao) {
this.sqlDaoClass = sqlDaoClass;
this.sqlDao = sqlDao;
}
@@ -128,12 +130,12 @@ public class EntitySqlDaoWrapperInvocationHandler<T extends EntitySqlDao<U>, U e
InternalCallContext context = null;
List<String> entityIds = null;
- final Map<String, U> entities = new HashMap<String, U>();
+ final Map<String, M> entities = new HashMap<String, M>();
final Map<String, Long> entityRecordIds = new HashMap<String, Long>();
if (annotation != null) {
// There will be some work required after the statement is executed,
// get the id before in case the change is a delete
- context = retrieveContextFromArguments(method, args);
+ context = retrieveContextFromArguments(args);
entityIds = retrieveEntityIdsFromArguments(method, args);
for (final String entityId : entityIds) {
entities.put(entityId, sqlDao.getById(entityId, context));
@@ -156,19 +158,15 @@ public class EntitySqlDaoWrapperInvocationHandler<T extends EntitySqlDao<U>, U e
return obj;
}
- private void updateHistoryAndAudit(final String entityId, final Map<String, U> entities, final Map<String, Long> entityRecordIds,
+ private void updateHistoryAndAudit(final String entityId, final Map<String, M> entities, final Map<String, Long> entityRecordIds,
final ChangeType changeType, final InternalCallContext context) {
// Make sure to re-hydrate the object (especially needed for create calls)
- final U reHydratedEntity = sqlDao.getById(entityId, context);
+ final M reHydratedEntity = sqlDao.getById(entityId, context);
final Long reHydratedEntityRecordId = sqlDao.getRecordId(entityId, context);
- final U entity = Objects.firstNonNull(reHydratedEntity, entities.get(entityId));
+ final M entity = Objects.firstNonNull(reHydratedEntity, entities.get(entityId));
final Long entityRecordId = Objects.firstNonNull(reHydratedEntityRecordId, entityRecordIds.get(entityId));
+ final TableName tableName = entity.getTableName();
- final TableName tableName = retrieveTableNameFromEntity(entity);
- // TODO
- if (tableName == TableName.SUBSCRIPTION_EVENTS) {
- return;
- }
// Note: audit entries point to the history record id
final Long historyRecordId;
if (tableName.getHistoryTableName() != null) {
@@ -233,7 +231,8 @@ public class EntitySqlDaoWrapperInvocationHandler<T extends EntitySqlDao<U>, U e
return entityIds;
}
- private InternalCallContext retrieveContextFromArguments(final Method method, final Object[] args) {
+
+ private InternalCallContext retrieveContextFromArguments(final Object[] args) {
for (final Object arg : args) {
if (!(arg instanceof InternalCallContext)) {
continue;
@@ -243,27 +242,15 @@ public class EntitySqlDaoWrapperInvocationHandler<T extends EntitySqlDao<U>, U e
return null;
}
- private TableName retrieveTableNameFromEntity(final U entity) {
- final TableName tableName = TableName.fromEntityClass(entity.getClass());
- if (tableName == null) {
- // Currently, this is only for EntitlementEvent which is not accessible from TableName (util)
- // TODO what should we do about it?
- return TableName.SUBSCRIPTION_EVENTS;
- } else {
- return tableName;
- }
- }
-
- private Long insertHistory(final Long entityRecordId, final U entity, final ChangeType changeType, final InternalCallContext context) {
+ private Long insertHistory(final Long entityRecordId, final M entityModelDao, final ChangeType changeType, final InternalCallContext context) {
// TODO use clock
- EntityHistory<U> history = new EntityHistory<U>(entity, entityRecordId, changeType, context.getCreatedDate());
-
+ final EntityHistoryModelDao<M, E> history = new EntityHistoryModelDao<M, E>(entityModelDao, entityRecordId, changeType, context.getCreatedDate());
sqlDao.addHistoryFromTransaction(history, context);
return sqlDao.getHistoryRecordId(entityRecordId, context);
}
private void insertAudits(final TableName tableName, final Long historyRecordId, final ChangeType changeType, final InternalCallContext context) {
- // STEPH can we trust context or should we use Clock?
+ // TODO use clock
final TableName destinationTableName = Objects.firstNonNull(tableName.getHistoryTableName(), tableName);
final EntityAudit audit = new EntityAudit(destinationTableName, historyRecordId, changeType, context.getCreatedDate());
sqlDao.insertAuditFromTransaction(audit, context);
diff --git a/util/src/main/java/com/ning/billing/util/glue/CustomFieldModule.java b/util/src/main/java/com/ning/billing/util/glue/CustomFieldModule.java
index 97fbec0..8969805 100644
--- a/util/src/main/java/com/ning/billing/util/glue/CustomFieldModule.java
+++ b/util/src/main/java/com/ning/billing/util/glue/CustomFieldModule.java
@@ -18,7 +18,7 @@ package com.ning.billing.util.glue;
import com.ning.billing.util.api.CustomFieldUserApi;
import com.ning.billing.util.customfield.api.DefaultCustomFieldUserApi;
-import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
+import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
import com.ning.billing.util.customfield.dao.CustomFieldDao;
import com.google.inject.AbstractModule;
@@ -35,7 +35,7 @@ public class CustomFieldModule extends AbstractModule {
}
protected void installCustomFieldDao() {
- bind(CustomFieldDao.class).to(AuditedCustomFieldDao.class).asEagerSingleton();
+ bind(CustomFieldDao.class).to(DefaultCustomFieldDao.class).asEagerSingleton();
}
}
diff --git a/util/src/main/java/com/ning/billing/util/glue/TagStoreModule.java b/util/src/main/java/com/ning/billing/util/glue/TagStoreModule.java
index e2b974b..b89f9f8 100644
--- a/util/src/main/java/com/ning/billing/util/glue/TagStoreModule.java
+++ b/util/src/main/java/com/ning/billing/util/glue/TagStoreModule.java
@@ -20,7 +20,7 @@ import com.ning.billing.util.api.TagUserApi;
import com.ning.billing.util.svcapi.tag.DefaultTagInternalApi;
import com.ning.billing.util.svcapi.tag.TagInternalApi;
import com.ning.billing.util.tag.api.DefaultTagUserApi;
-import com.ning.billing.util.tag.dao.AuditedTagDao;
+import com.ning.billing.util.tag.dao.DefaultTagDao;
import com.ning.billing.util.tag.dao.DefaultTagDefinitionDao;
import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
@@ -30,7 +30,7 @@ import com.google.inject.AbstractModule;
public class TagStoreModule extends AbstractModule {
protected void installDaos() {
bind(TagDefinitionDao.class).to(DefaultTagDefinitionDao.class).asEagerSingleton();
- bind(TagDao.class).to(AuditedTagDao.class).asEagerSingleton();
+ bind(TagDao.class).to(DefaultTagDao.class).asEagerSingleton();
}
@Override
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
index fedf00a..774e20c 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/tag/DefaultTagInternalApi.java
@@ -13,6 +13,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
+
package com.ning.billing.util.svcapi.tag;
import java.util.List;
@@ -26,11 +27,19 @@ import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.tag.ControlTagType;
import com.ning.billing.util.tag.DefaultControlTag;
+import com.ning.billing.util.tag.DefaultTagDefinition;
import com.ning.billing.util.tag.DescriptiveTag;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
+import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
+import com.ning.billing.util.tag.dao.TagModelDao;
+import com.ning.billing.util.tag.dao.TagModelDaoHelper;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
public class DefaultTagInternalApi implements TagInternalApi {
@@ -46,29 +55,38 @@ public class DefaultTagInternalApi implements TagInternalApi {
@Override
public List<TagDefinition> getTagDefinitions(final InternalTenantContext context) {
- return tagDefinitionDao.getTagDefinitions(context);
+ return ImmutableList.<TagDefinition>copyOf(Collections2.transform(tagDefinitionDao.getTagDefinitions(context),
+ new Function<TagDefinitionModelDao, TagDefinition>() {
+ @Override
+ public TagDefinition apply(final TagDefinitionModelDao input) {
+ return new DefaultTagDefinition(input, TagModelDaoHelper.isControlTag(input.getName()));
+ }
+ }));
}
@Override
- public List<Tag> getTags(UUID objectId, ObjectType objectType, InternalTenantContext context) {
- return tagDao.getTags(objectId, objectType, context);
+ public List<Tag> getTags(final UUID objectId, final ObjectType objectType, final InternalTenantContext context) {
+ return ImmutableList.<Tag>copyOf(Collections2.transform(tagDao.getTags(objectId, objectType, context),
+ new Function<TagModelDao, Tag>() {
+ @Override
+ public Tag apply(final TagModelDao input) {
+ return TagModelDaoHelper.isControlTag(input.getTagDefinitionId()) ?
+ new DefaultControlTag(ControlTagType.getTypeFromId(input.getTagDefinitionId()), objectType, objectId, input.getCreatedDate()) :
+ new DescriptiveTag(input.getTagDefinitionId(), objectType, objectId, input.getCreatedDate());
+ }
+ }));
}
@Override
- public void addTag(UUID objectId, ObjectType objectType,
- UUID tagDefinitionId, InternalCallContext context)
+ public void addTag(final UUID objectId, final ObjectType objectType, final UUID tagDefinitionId, final InternalCallContext context)
throws TagApiException {
-
- final TagDefinition tagDefinition = tagDefinitionDao.getById(tagDefinitionId, context);
- final Tag tag = tagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(tagDefinition.getId()), objectType, objectId, context.getCreatedDate()) :
- new DescriptiveTag(tagDefinition.getId(), objectType, objectId, context.getCreatedDate());
+ final TagModelDao tag = new TagModelDao(context.getCreatedDate(), tagDefinitionId, objectId, objectType);
tagDao.create(tag, context);
}
@Override
- public void removeTag(UUID objectId, ObjectType objectType,
- UUID tagDefinitionId, InternalCallContext context)
+ public void removeTag(final UUID objectId, final ObjectType objectType, final UUID tagDefinitionId, final InternalCallContext context)
throws TagApiException {
tagDao.deleteTag(objectId, objectType, tagDefinitionId, context);
}
diff --git a/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java b/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
index 40f191e..bc3ae14 100644
--- a/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
+++ b/util/src/main/java/com/ning/billing/util/svcapi/tag/TagInternalApi.java
@@ -41,7 +41,7 @@ public interface TagInternalApi {
*/
public List<Tag> getTags(UUID objectId, ObjectType objectType, InternalTenantContext context);
- public void addTag(UUID objectId, ObjectType objectType, UUID tagDefinitionId, InternalCallContext context) throws TagApiException;
+ public void addTag(final UUID objectId, final ObjectType objectType, UUID tagDefinitionId, InternalCallContext context) throws TagApiException;
- public void removeTag(UUID objectId, ObjectType objectType, UUID tagDefinitionId, InternalCallContext context) throws TagApiException;
+ public void removeTag(final UUID objectId, final ObjectType objectType, final UUID tagDefinitionId, InternalCallContext context) throws TagApiException;
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
index 7ff9a13..ae12ebc 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/DefaultTagUserApi.java
@@ -18,7 +18,6 @@ package com.ning.billing.util.tag.api;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import com.ning.billing.ObjectType;
@@ -31,12 +30,19 @@ import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.callcontext.TenantContext;
import com.ning.billing.util.tag.ControlTagType;
import com.ning.billing.util.tag.DefaultControlTag;
+import com.ning.billing.util.tag.DefaultTagDefinition;
import com.ning.billing.util.tag.DescriptiveTag;
import com.ning.billing.util.tag.Tag;
import com.ning.billing.util.tag.TagDefinition;
import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
+import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
+import com.ning.billing.util.tag.dao.TagModelDao;
+import com.ning.billing.util.tag.dao.TagModelDaoHelper;
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
import com.google.inject.Inject;
public class DefaultTagUserApi implements TagUserApi {
@@ -54,12 +60,19 @@ public class DefaultTagUserApi implements TagUserApi {
@Override
public List<TagDefinition> getTagDefinitions(final TenantContext context) {
- return tagDefinitionDao.getTagDefinitions(internalCallContextFactory.createInternalTenantContext(context));
+ return ImmutableList.<TagDefinition>copyOf(Collections2.transform(tagDefinitionDao.getTagDefinitions(internalCallContextFactory.createInternalTenantContext(context)),
+ new Function<TagDefinitionModelDao, TagDefinition>() {
+ @Override
+ public TagDefinition apply(final TagDefinitionModelDao input) {
+ return new DefaultTagDefinition(input, TagModelDaoHelper.isControlTag(input.getName()));
+ }
+ }));
}
@Override
public TagDefinition create(final String definitionName, final String description, final CallContext context) throws TagDefinitionApiException {
- return tagDefinitionDao.create(definitionName, description, internalCallContextFactory.createInternalCallContext(context));
+ final TagDefinitionModelDao tagDefinitionModelDao = tagDefinitionDao.create(definitionName, description, internalCallContextFactory.createInternalCallContext(context));
+ return new DefaultTagDefinition(tagDefinitionModelDao, TagModelDaoHelper.isControlTag(tagDefinitionModelDao.getName()));
}
@Override
@@ -70,29 +83,33 @@ public class DefaultTagUserApi implements TagUserApi {
@Override
public TagDefinition getTagDefinition(final UUID tagDefinitionId, final TenantContext context)
throws TagDefinitionApiException {
- return tagDefinitionDao.getById(tagDefinitionId, internalCallContextFactory.createInternalTenantContext(context));
+ final TagDefinitionModelDao tagDefinitionModelDao = tagDefinitionDao.getById(tagDefinitionId, internalCallContextFactory.createInternalTenantContext(context));
+ return new DefaultTagDefinition(tagDefinitionModelDao, TagModelDaoHelper.isControlTag(tagDefinitionModelDao.getName()));
}
@Override
public List<TagDefinition> getTagDefinitions(final Collection<UUID> tagDefinitionIds, final TenantContext context)
throws TagDefinitionApiException {
- return tagDefinitionDao.getByIds(tagDefinitionIds, internalCallContextFactory.createInternalTenantContext(context));
+ return ImmutableList.<TagDefinition>copyOf(Collections2.transform(tagDefinitionDao.getByIds(tagDefinitionIds, internalCallContextFactory.createInternalTenantContext(context)),
+ new Function<TagDefinitionModelDao, TagDefinition>() {
+ @Override
+ public TagDefinition apply(final TagDefinitionModelDao input) {
+ return new DefaultTagDefinition(input, TagModelDaoHelper.isControlTag(input.getName()));
+ }
+ }));
}
@Override
public void addTags(final UUID objectId, final ObjectType objectType, final Collection<UUID> tagDefinitionIds, final CallContext context) throws TagApiException {
for (final UUID tagDefinitionId : tagDefinitionIds) {
- addTag(objectId, objectType, tagDefinitionId,context);
+ addTag(objectId, objectType, tagDefinitionId, context);
}
}
@Override
public void addTag(final UUID objectId, final ObjectType objectType, final UUID tagDefinitionId, final CallContext context) throws TagApiException {
final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(objectId, objectType, context);
-
- final TagDefinition tagDefinition = tagDefinitionDao.getById(tagDefinitionId, internalContext);
- final Tag tag = tagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(tagDefinition.getId()), objectType, objectId, context.getCreatedDate()) :
- new DescriptiveTag(tagDefinition.getId(), objectType, objectId, context.getCreatedDate());
+ final TagModelDao tag = new TagModelDao(context.getCreatedDate(), tagDefinitionId, objectId, objectType);
tagDao.create(tag, internalContext);
}
@@ -111,12 +128,21 @@ public class DefaultTagUserApi implements TagUserApi {
@Override
public List<Tag> getTags(final UUID objectId, final ObjectType objectType, final TenantContext context) {
- return tagDao.getTags(objectId, objectType, internalCallContextFactory.createInternalTenantContext(context));
+ return ImmutableList.<Tag>copyOf(Collections2.transform(tagDao.getTags(objectId, objectType, internalCallContextFactory.createInternalTenantContext(context)),
+ new Function<TagModelDao, Tag>() {
+ @Override
+ public Tag apply(final TagModelDao input) {
+ return TagModelDaoHelper.isControlTag(input.getTagDefinitionId()) ?
+ new DefaultControlTag(ControlTagType.getTypeFromId(input.getTagDefinitionId()), objectType, objectId, input.getCreatedDate()) :
+ new DescriptiveTag(input.getTagDefinitionId(), objectType, objectId, input.getCreatedDate());
+ }
+ }));
}
@Override
public TagDefinition getTagDefinitionForName(final String tagDefinitionName, final TenantContext context)
throws TagDefinitionApiException {
- return tagDefinitionDao.getByName(tagDefinitionName, internalCallContextFactory.createInternalTenantContext(context));
+ return new DefaultTagDefinition(tagDefinitionDao.getByName(tagDefinitionName, internalCallContextFactory.createInternalTenantContext(context)),
+ TagModelDaoHelper.isControlTag(tagDefinitionName));
}
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java b/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java
index 4db25cb..e8275ea 100644
--- a/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java
+++ b/util/src/main/java/com/ning/billing/util/tag/api/user/TagEventBuilder.java
@@ -28,38 +28,40 @@ import com.ning.billing.util.events.UserTagCreationInternalEvent;
import com.ning.billing.util.events.UserTagDefinitionCreationInternalEvent;
import com.ning.billing.util.events.UserTagDefinitionDeletionInternalEvent;
import com.ning.billing.util.events.UserTagDeletionInternalEvent;
-import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.DefaultTagDefinition;
+import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
public class TagEventBuilder {
- public UserTagDefinitionCreationInternalEvent newUserTagDefinitionCreationEvent(final UUID tagDefinitionId, final TagDefinition tagDefinition, final InternalCallContext context) {
- return new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
+
+ public UserTagDefinitionCreationInternalEvent newUserTagDefinitionCreationEvent(final UUID tagDefinitionId, final TagDefinitionModelDao tagDefinition, final InternalCallContext context) {
+ return new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, new DefaultTagDefinition(tagDefinition, false), context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
}
- public UserTagDefinitionDeletionInternalEvent newUserTagDefinitionDeletionEvent(final UUID tagDefinitionId, final TagDefinition tagDefinition, final InternalCallContext context) {
- return new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
+ public UserTagDefinitionDeletionInternalEvent newUserTagDefinitionDeletionEvent(final UUID tagDefinitionId, final TagDefinitionModelDao tagDefinition, final InternalCallContext context) {
+ return new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, new DefaultTagDefinition(tagDefinition, false), context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
}
- public ControlTagDefinitionCreationInternalEvent newControlTagDefinitionCreationEvent(final UUID tagDefinitionId, final TagDefinition tagDefinition, final InternalCallContext context) {
- return new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
+ public ControlTagDefinitionCreationInternalEvent newControlTagDefinitionCreationEvent(final UUID tagDefinitionId, final TagDefinitionModelDao tagDefinition, final InternalCallContext context) {
+ return new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, new DefaultTagDefinition(tagDefinition, true), context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
}
- public ControlTagDefinitionDeletionInternalEvent newControlTagDefinitionDeletionEvent(final UUID tagDefinitionId, final TagDefinition tagDefinition, final InternalCallContext context) {
- return new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
+ public ControlTagDefinitionDeletionInternalEvent newControlTagDefinitionDeletionEvent(final UUID tagDefinitionId, final TagDefinitionModelDao tagDefinition, final InternalCallContext context) {
+ return new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, new DefaultTagDefinition(tagDefinition, true), context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
}
- public UserTagCreationInternalEvent newUserTagCreationEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final InternalCallContext context) {
- return new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
+ public UserTagCreationInternalEvent newUserTagCreationEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinitionModelDao tagDefinition, final InternalCallContext context) {
+ return new DefaultUserTagCreationEvent(tagId, objectId, objectType, new DefaultTagDefinition(tagDefinition, false), context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
}
- public UserTagDeletionInternalEvent newUserTagDeletionEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final InternalCallContext context) {
- return new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
+ public UserTagDeletionInternalEvent newUserTagDeletionEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinitionModelDao tagDefinition, final InternalCallContext context) {
+ return new DefaultUserTagDeletionEvent(tagId, objectId, objectType, new DefaultTagDefinition(tagDefinition, false), context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
}
- public ControlTagCreationInternalEvent newControlTagCreationEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final InternalCallContext context) {
- return new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
+ public ControlTagCreationInternalEvent newControlTagCreationEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinitionModelDao tagDefinition, final InternalCallContext context) {
+ return new DefaultControlTagCreationEvent(tagId, objectId, objectType, new DefaultTagDefinition(tagDefinition, true), context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
}
- public ControlTagDeletionInternalEvent newControlTagDeletionEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinition tagDefinition, final InternalCallContext context) {
- return new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId() );
+ public ControlTagDeletionInternalEvent newControlTagDeletionEvent(final UUID tagId, final UUID objectId, final ObjectType objectType, final TagDefinitionModelDao tagDefinition, final InternalCallContext context) {
+ return new DefaultControlTagDeletionEvent(tagId, objectId, objectType, new DefaultTagDefinition(tagDefinition, true), context.getUserToken(), context.getAccountRecordId(), context.getTenantRecordId());
}
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
index 7a56736..9d4070a 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDefinitionDao.java
@@ -38,10 +38,8 @@ import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionWrapper;
import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionalJdbiWrapper;
import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
import com.ning.billing.util.events.TagDefinitionInternalEvent;
-import com.ning.billing.util.events.TagInternalEvent;
import com.ning.billing.util.svcsapi.bus.InternalBus;
import com.ning.billing.util.tag.ControlTagType;
-import com.ning.billing.util.tag.DefaultTagDefinition;
import com.ning.billing.util.tag.TagDefinition;
import com.ning.billing.util.tag.api.user.TagEventBuilder;
@@ -49,11 +47,10 @@ import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.inject.Inject;
-public class DefaultTagDefinitionDao extends EntityDaoBase<TagDefinition, TagDefinitionApiException> implements TagDefinitionDao {
+public class DefaultTagDefinitionDao extends EntityDaoBase<TagDefinitionModelDao, TagDefinition, TagDefinitionApiException> implements TagDefinitionDao {
private static final Logger log = LoggerFactory.getLogger(DefaultTagDefinitionDao.class);
- private final TagDefinitionSqlDao tagDefinitionSqlDao;
private final TagEventBuilder tagEventBuilder;
private final InternalBus bus;
@@ -62,92 +59,112 @@ public class DefaultTagDefinitionDao extends EntityDaoBase<TagDefinition, TagDef
super(new EntitySqlDaoTransactionalJdbiWrapper(dbi), TagDefinitionSqlDao.class);
this.tagEventBuilder = tagEventBuilder;
this.bus = bus;
- this.tagDefinitionSqlDao = dbi.onDemand(TagDefinitionSqlDao.class);
}
@Override
- public List<TagDefinition> getTagDefinitions(final InternalTenantContext context) {
- // Get user definitions from the database
- final List<TagDefinition> definitionList = new LinkedList<TagDefinition>();
- definitionList.addAll(tagDefinitionSqlDao.get(context));
-
- // Add control tag definitions
- for (final ControlTagType controlTag : ControlTagType.values()) {
- definitionList.add(new DefaultTagDefinition(controlTag));
- }
- return definitionList;
+ public List<TagDefinitionModelDao> getTagDefinitions(final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<TagDefinitionModelDao>>() {
+ @Override
+ public List<TagDefinitionModelDao> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ // Get user definitions from the database
+ final List<TagDefinitionModelDao> definitionList = new LinkedList<TagDefinitionModelDao>();
+ definitionList.addAll(entitySqlDaoWrapperFactory.become(TagDefinitionSqlDao.class).get(context));
+
+ // Add control tag definitions
+ for (final ControlTagType controlTag : ControlTagType.values()) {
+ definitionList.add(new TagDefinitionModelDao(controlTag));
+ }
+ return definitionList;
+ }
+ });
}
@Override
- public TagDefinition getByName(final String definitionName, final InternalTenantContext context) {
- for (final ControlTagType controlTag : ControlTagType.values()) {
- if (controlTag.name().equals(definitionName)) {
- return new DefaultTagDefinition(controlTag);
+ public TagDefinitionModelDao getByName(final String definitionName, final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<TagDefinitionModelDao>() {
+ @Override
+ public TagDefinitionModelDao inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ for (final ControlTagType controlTag : ControlTagType.values()) {
+ if (controlTag.name().equals(definitionName)) {
+ return new TagDefinitionModelDao(controlTag);
+ }
+ }
+ return entitySqlDaoWrapperFactory.become(TagDefinitionSqlDao.class).getByName(definitionName, context);
}
- }
- return tagDefinitionSqlDao.getByName(definitionName, context);
+ });
}
@Override
- public TagDefinition getById(final UUID definitionId, final InternalTenantContext context) {
- for (final ControlTagType controlTag : ControlTagType.values()) {
- if (controlTag.getId().equals(definitionId)) {
- return new DefaultTagDefinition(controlTag);
+ public TagDefinitionModelDao getById(final UUID definitionId, final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<TagDefinitionModelDao>() {
+ @Override
+ public TagDefinitionModelDao inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ for (final ControlTagType controlTag : ControlTagType.values()) {
+ if (controlTag.getId().equals(definitionId)) {
+ return new TagDefinitionModelDao(controlTag);
+ }
+ }
+ return entitySqlDaoWrapperFactory.become(TagDefinitionSqlDao.class).getById(definitionId.toString(), context);
}
- }
- return tagDefinitionSqlDao.getById(definitionId.toString(), context);
+ });
}
@Override
- public List<TagDefinition> getByIds(final Collection<UUID> definitionIds, final InternalTenantContext context) {
- final List<TagDefinition> result = new LinkedList<TagDefinition>();
- for (final UUID cur : definitionIds) {
- for (final ControlTagType controlTag : ControlTagType.values()) {
- if (controlTag.getId().equals(cur)) {
- result.add(new DefaultTagDefinition(controlTag));
- break;
+ public List<TagDefinitionModelDao> getByIds(final Collection<UUID> definitionIds, final InternalTenantContext context) {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<TagDefinitionModelDao>>() {
+ @Override
+ public List<TagDefinitionModelDao> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final List<TagDefinitionModelDao> result = new LinkedList<TagDefinitionModelDao>();
+ for (final UUID cur : definitionIds) {
+ for (final ControlTagType controlTag : ControlTagType.values()) {
+ if (controlTag.getId().equals(cur)) {
+ result.add(new TagDefinitionModelDao(controlTag));
+ break;
+ }
+ }
}
- }
- }
- if (definitionIds.size() > 0) {
- result.addAll(tagDefinitionSqlDao.getByIds(Collections2.transform(definitionIds, new Function<UUID, String>() {
- @Override
- public String apply(final UUID input) {
- return input.toString();
+ if (definitionIds.size() > 0) {
+ result.addAll(entitySqlDaoWrapperFactory.become(TagDefinitionSqlDao.class).getByIds(Collections2.transform(definitionIds, new Function<UUID, String>() {
+ @Override
+ public String apply(final UUID input) {
+ return input.toString();
+ }
+
+ }), context));
}
-
- }), context));
- }
- return result;
+ return result;
+ }
+ });
}
@Override
- public TagDefinition create(final String definitionName, final String description,
- final InternalCallContext context) throws TagDefinitionApiException {
+ public TagDefinitionModelDao create(final String definitionName, final String description,
+ final InternalCallContext context) throws TagDefinitionApiException {
// Make sure a control tag with this name don't already exist
- if (isControlTagName(definitionName)) {
+ if (TagModelDaoHelper.isControlTag(definitionName)) {
throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_CONFLICTS_WITH_CONTROL_TAG, definitionName);
}
try {
- return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<TagDefinition>() {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<TagDefinitionModelDao>() {
@Override
- public TagDefinition inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ public TagDefinitionModelDao inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final TagDefinitionSqlDao tagDefinitionSqlDao = entitySqlDaoWrapperFactory.become(TagDefinitionSqlDao.class);
// Make sure the tag definition doesn't exist already
- final TagDefinition existingDefinition = tagDefinitionSqlDao.getByName(definitionName, context);
+ final TagDefinitionModelDao existingDefinition = tagDefinitionSqlDao.getByName(definitionName, context);
if (existingDefinition != null) {
throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_ALREADY_EXISTS, definitionName);
}
// Create it
- final TagDefinition tagDefinition = new DefaultTagDefinition(definitionName, description, false);
+ final TagDefinitionModelDao tagDefinition = new TagDefinitionModelDao(context.getCreatedDate(), definitionName, description);
tagDefinitionSqlDao.create(tagDefinition, context);
// Post an event to the bus
+ final boolean isControlTag = TagModelDaoHelper.isControlTag(tagDefinition.getName());
final TagDefinitionInternalEvent tagDefinitionEvent;
- if (tagDefinition.isControlTag()) {
+ if (isControlTag) {
tagDefinitionEvent = tagEventBuilder.newControlTagDefinitionCreationEvent(tagDefinition.getId(), tagDefinition, context);
} else {
tagDefinitionEvent = tagEventBuilder.newUserTagDefinitionCreationEvent(tagDefinition.getId(), tagDefinition, context);
@@ -170,16 +187,6 @@ public class DefaultTagDefinitionDao extends EntityDaoBase<TagDefinition, TagDef
}
}
- private boolean isControlTagName(final String definitionName) {
- for (final ControlTagType controlTagName : ControlTagType.values()) {
- if (controlTagName.toString().equals(definitionName)) {
- return true;
- }
- }
-
- return false;
- }
-
@Override
public void deleteById(final UUID definitionId, final InternalCallContext context) throws TagDefinitionApiException {
try {
@@ -189,7 +196,7 @@ public class DefaultTagDefinitionDao extends EntityDaoBase<TagDefinition, TagDef
final TagDefinitionSqlDao tagDefinitionSqlDao = entitySqlDaoWrapperFactory.become(TagDefinitionSqlDao.class);
// Make sure the tag definition exists
- final TagDefinition tagDefinition = tagDefinitionSqlDao.getById(definitionId.toString(), context);
+ final TagDefinitionModelDao tagDefinition = tagDefinitionSqlDao.getById(definitionId.toString(), context);
if (tagDefinition == null) {
throw new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_DOES_NOT_EXIST, definitionId);
}
@@ -215,20 +222,21 @@ public class DefaultTagDefinitionDao extends EntityDaoBase<TagDefinition, TagDef
}
}
- protected void postBusEventFromTransaction(TagDefinition tagDefinition, TagDefinition savedTagDefinition, ChangeType changeType, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context)
+ protected void postBusEventFromTransaction(final TagDefinitionModelDao tagDefinition, final TagDefinitionModelDao savedTagDefinition,
+ final ChangeType changeType, final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory, final InternalCallContext context)
throws BillingExceptionBase {
-
final TagDefinitionInternalEvent tagDefinitionEvent;
- switch(changeType) {
+ final boolean isControlTag = TagModelDaoHelper.isControlTag(tagDefinition.getName());
+ switch (changeType) {
case INSERT:
- tagDefinitionEvent = (tagDefinition.isControlTag()) ?
+ tagDefinitionEvent = (isControlTag) ?
tagEventBuilder.newControlTagDefinitionCreationEvent(tagDefinition.getId(), tagDefinition, context) :
tagEventBuilder.newUserTagDefinitionCreationEvent(tagDefinition.getId(), tagDefinition, context);
break;
case DELETE:
- tagDefinitionEvent = (tagDefinition.isControlTag()) ?
+ tagDefinitionEvent = (isControlTag) ?
tagEventBuilder.newControlTagDefinitionDeletionEvent(tagDefinition.getId(), tagDefinition, context) :
tagEventBuilder.newUserTagDefinitionDeletionEvent(tagDefinition.getId(), tagDefinition, context);
break;
@@ -244,7 +252,7 @@ public class DefaultTagDefinitionDao extends EntityDaoBase<TagDefinition, TagDef
}
@Override
- protected TagDefinitionApiException generateAlreadyExistsException(final TagDefinition entity, final InternalCallContext context) {
+ protected TagDefinitionApiException generateAlreadyExistsException(final TagDefinitionModelDao entity, final InternalCallContext context) {
return new TagDefinitionApiException(ErrorCode.TAG_DEFINITION_ALREADY_EXISTS, entity.getId());
}
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
index f1e5c3f..152dfbf 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagDao.java
@@ -17,23 +17,20 @@
package com.ning.billing.util.tag.dao;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import com.ning.billing.ObjectType;
import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.dao.AuditedCollectionDao;
-import com.ning.billing.util.tag.Tag;
public interface TagDao {
- void create(Tag tag, InternalCallContext context) throws TagApiException;
+ void create(TagModelDao tag, InternalCallContext context) throws TagApiException;
void deleteTag(UUID objectId, ObjectType objectType, UUID tagDefinition, InternalCallContext context) throws TagApiException;
- Tag getById(UUID tagId, InternalTenantContext context);
+ TagModelDao getById(UUID tagId, InternalTenantContext context);
- List<Tag> getTags(UUID objectId, ObjectType objectType, InternalTenantContext internalTenantContext);
+ List<TagModelDao> getTags(UUID objectId, ObjectType objectType, InternalTenantContext internalTenantContext);
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionDao.java
index b2cc4f0..74b33f6 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionDao.java
@@ -23,19 +23,18 @@ import java.util.UUID;
import com.ning.billing.util.api.TagDefinitionApiException;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.tag.TagDefinition;
public interface TagDefinitionDao {
- public List<TagDefinition> getTagDefinitions(InternalTenantContext context);
+ public List<TagDefinitionModelDao> getTagDefinitions(InternalTenantContext context);
- public TagDefinition getById(UUID definitionId, InternalTenantContext context);
+ public TagDefinitionModelDao getById(UUID definitionId, InternalTenantContext context);
- public TagDefinition getByName(String definitionName, InternalTenantContext context);
+ public TagDefinitionModelDao getByName(String definitionName, InternalTenantContext context);
- public List<TagDefinition> getByIds(Collection<UUID> definitionIds, InternalTenantContext context);
+ public List<TagDefinitionModelDao> getByIds(Collection<UUID> definitionIds, InternalTenantContext context);
- public TagDefinition create(String definitionName, String description, InternalCallContext context) throws TagDefinitionApiException;
+ public TagDefinitionModelDao create(String definitionName, String description, InternalCallContext context) throws TagDefinitionApiException;
public void deleteById(UUID definitionId, InternalCallContext context) throws TagDefinitionApiException;
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionModelDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionModelDao.java
new file mode 100644
index 0000000..c83f06d
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionModelDao.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.dao;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.util.dao.TableName;
+import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
+import com.ning.billing.util.tag.ControlTagType;
+import com.ning.billing.util.tag.TagDefinition;
+
+public class TagDefinitionModelDao extends EntityBase implements EntityModelDao<TagDefinition> {
+
+ private String name;
+ private String description;
+
+ public TagDefinitionModelDao() { /* For the DAO mapper */ }
+
+ public TagDefinitionModelDao(final UUID id, final DateTime createdDate, final DateTime updatedDate, final String name, final String description) {
+ super(id, createdDate, updatedDate);
+ this.name = name;
+ this.description = description;
+ }
+
+ public TagDefinitionModelDao(final ControlTagType tag) {
+ this(tag.getId(), null, null, tag.name(), tag.getDescription());
+ }
+
+ public TagDefinitionModelDao(final DateTime createdDate, final String name, final String description) {
+ this(UUID.randomUUID(), createdDate, createdDate, name, description);
+ }
+
+ public TagDefinitionModelDao(final TagDefinition tagDefinition) {
+ this(tagDefinition.getId(), tagDefinition.getCreatedDate(), tagDefinition.getUpdatedDate(), tagDefinition.getName(),
+ tagDefinition.getDescription());
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("TagDefinitionModelDao");
+ sb.append("{name='").append(name).append('\'');
+ sb.append(", description='").append(description).append('\'');
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final TagDefinitionModelDao that = (TagDefinitionModelDao) o;
+
+ if (description != null ? !description.equals(that.description) : that.description != null) {
+ return false;
+ }
+ if (name != null ? !name.equals(that.name) : that.name != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (name != null ? name.hashCode() : 0);
+ result = 31 * result + (description != null ? description.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.TAG_DEFINITIONS;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.java
index 69db67b..7f46ebe 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.java
@@ -16,51 +16,28 @@
package com.ning.billing.util.tag.dao;
-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.Collection;
import java.util.List;
-import java.util.UUID;
-import org.skife.jdbi.v2.SQLStatement;
-import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.sqlobject.Bind;
-import org.skife.jdbi.v2.sqlobject.Binder;
-import org.skife.jdbi.v2.sqlobject.BinderFactory;
-import org.skife.jdbi.v2.sqlobject.BindingAnnotation;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
-import org.skife.jdbi.v2.sqlobject.customizers.RegisterArgumentFactory;
-import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import org.skife.jdbi.v2.tweak.ResultSetMapper;
import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.callcontext.InternalTenantContextBinder;
-import com.ning.billing.util.dao.DateTimeArgumentFactory;
-import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.EnumArgumentFactory;
-import com.ning.billing.util.dao.UUIDArgumentFactory;
import com.ning.billing.util.entity.dao.Audited;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
-import com.ning.billing.util.tag.DefaultTagDefinition;
import com.ning.billing.util.tag.TagDefinition;
@EntitySqlDaoStringTemplate
-@RegisterMapper(TagDefinitionSqlDao.TagDefinitionMapper.class)
-public interface TagDefinitionSqlDao extends EntitySqlDao<TagDefinition> {
-
+public interface TagDefinitionSqlDao extends EntitySqlDao<TagDefinitionModelDao, TagDefinition> {
@SqlQuery
- public TagDefinition getByName(@Bind("name") final String definitionName,
- @InternalTenantContextBinder final InternalTenantContext context);
+ public TagDefinitionModelDao getByName(@Bind("name") final String definitionName,
+ @InternalTenantContextBinder final InternalTenantContext context);
@SqlUpdate
@Audited(ChangeType.DELETE)
@@ -72,19 +49,6 @@ public interface TagDefinitionSqlDao extends EntitySqlDao<TagDefinition> {
@InternalTenantContextBinder final InternalTenantContext context);
@SqlQuery
- public List<TagDefinition> getByIds(@UUIDCollectionBinder final Collection<String> definitionIds,
- @InternalTenantContextBinder final InternalTenantContext context);
-
-
- public class TagDefinitionMapper implements ResultSetMapper<TagDefinition> {
-
- @Override
- public TagDefinition map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
- final UUID id = UUID.fromString(result.getString("id"));
- final String name = result.getString("name");
- final String description = result.getString("description");
- return new DefaultTagDefinition(id, name, description, false);
- }
- }
-
+ public List<TagDefinitionModelDao> getByIds(@UUIDCollectionBinder final Collection<String> definitionIds,
+ @InternalTenantContextBinder final InternalTenantContext context);
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagModelDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagModelDao.java
new file mode 100644
index 0000000..9f4bc7d
--- /dev/null
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagModelDao.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.util.tag.dao;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.ObjectType;
+import com.ning.billing.util.dao.TableName;
+import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.entity.dao.EntityModelDao;
+import com.ning.billing.util.tag.Tag;
+
+public class TagModelDao extends EntityBase implements EntityModelDao<Tag> {
+
+ private UUID tagDefinitionId;
+ private UUID objectId;
+ private ObjectType objectType;
+
+ public TagModelDao() { /* For the DAO mapper */ }
+
+ public TagModelDao(final DateTime createdDate, final UUID tagDefinitionId,
+ final UUID objectId, final ObjectType objectType) {
+ this(UUID.randomUUID(), createdDate, createdDate, tagDefinitionId, objectId, objectType);
+ }
+
+ public TagModelDao(final UUID id, final DateTime createdDate, final DateTime updatedDate, final UUID tagDefinitionId,
+ final UUID objectId, final ObjectType objectType) {
+ super(id, createdDate, updatedDate);
+ this.tagDefinitionId = tagDefinitionId;
+ this.objectId = objectId;
+ this.objectType = objectType;
+ }
+
+ public TagModelDao(final Tag tag) {
+ this(tag.getId(), tag.getCreatedDate(), tag.getUpdatedDate(), tag.getTagDefinitionId(), tag.getObjectId(), tag.getObjectType());
+ }
+
+ public UUID getTagDefinitionId() {
+ return tagDefinitionId;
+ }
+
+ public UUID getObjectId() {
+ return objectId;
+ }
+
+ public ObjectType getObjectType() {
+ return objectType;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("TagModelDao");
+ sb.append("{tagDefinitionId=").append(tagDefinitionId);
+ sb.append(", objectId=").append(objectId);
+ sb.append(", objectType=").append(objectType);
+ sb.append('}');
+ return sb.toString();
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final TagModelDao that = (TagModelDao) o;
+
+ if (objectId != null ? !objectId.equals(that.objectId) : that.objectId != null) {
+ return false;
+ }
+ if (objectType != that.objectType) {
+ return false;
+ }
+ if (tagDefinitionId != null ? !tagDefinitionId.equals(that.tagDefinitionId) : that.tagDefinitionId != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (tagDefinitionId != null ? tagDefinitionId.hashCode() : 0);
+ result = 31 * result + (objectId != null ? objectId.hashCode() : 0);
+ result = 31 * result + (objectType != null ? objectType.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public TableName getTableName() {
+ return TableName.TAG;
+ }
+}
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
index 9fc3659..acfe66e 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/TagSqlDao.java
@@ -16,40 +16,30 @@
package com.ning.billing.util.tag.dao;
-import java.util.Collection;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
-import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
-import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
import com.ning.billing.ObjectType;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.callcontext.InternalTenantContextBinder;
-import com.ning.billing.util.dao.EntityHistory;
-import com.ning.billing.util.dao.ObjectTypeBinder;
-import com.ning.billing.util.entity.collection.dao.UpdatableEntityCollectionSqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
import com.ning.billing.util.tag.Tag;
-import com.ning.billing.util.tag.TagDefinition;
@EntitySqlDaoStringTemplate
-@RegisterMapper(TagMapper.class)
-public interface TagSqlDao extends EntitySqlDao<Tag> {
-
+public interface TagSqlDao extends EntitySqlDao<TagModelDao, Tag> {
@SqlUpdate
- void deleteById(@Bind("id") UUID id, @BindBean InternalCallContext context);
+ void deleteById(@Bind("id") UUID id,
+ @BindBean InternalCallContext context);
@SqlQuery
- List<Tag> getTagsForObject(@Bind("objectId") UUID objectId, @Bind("objectType") ObjectType objectType, @BindBean InternalTenantContext internalTenantContext);
+ List<TagModelDao> getTagsForObject(@Bind("objectId") UUID objectId,
+ @Bind("objectType") ObjectType objectType,
+ @BindBean InternalTenantContext internalTenantContext);
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java b/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
index ec92f07..83e1152 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DefaultControlTag.java
@@ -27,12 +27,12 @@ public class DefaultControlTag extends DescriptiveTag implements ControlTag {
private final ControlTagType controlTagType;
// use to create new objects
- public DefaultControlTag(final ControlTagType controlTagType, ObjectType objectType, UUID objectId, DateTime createdDate) {
+ public DefaultControlTag(final ControlTagType controlTagType, final ObjectType objectType, final UUID objectId, final DateTime createdDate) {
this(UUID.randomUUID(), controlTagType, objectType, objectId, createdDate);
}
// use to hydrate objects when loaded from the persistence layer
- public DefaultControlTag(final UUID id, final ControlTagType controlTagType, ObjectType objectType, UUID objectId, DateTime createdDate) {
+ public DefaultControlTag(final UUID id, final ControlTagType controlTagType, final ObjectType objectType, final UUID objectId, final DateTime createdDate) {
super(id, controlTagType.getId(), objectType, objectId, createdDate);
this.controlTagType = controlTagType;
}
diff --git a/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java b/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
index 7732daa..b823b86 100644
--- a/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
+++ b/util/src/main/java/com/ning/billing/util/tag/DefaultTagDefinition.java
@@ -21,6 +21,7 @@ import java.util.UUID;
import com.ning.billing.ObjectType;
import com.ning.billing.util.entity.EntityBase;
+import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -33,6 +34,10 @@ public class DefaultTagDefinition extends EntityBase implements TagDefinition {
private final Boolean controlTag;
private final List<ObjectType> applicableObjectTypes;
+ public DefaultTagDefinition(final TagDefinitionModelDao tagDefinitionModelDao, final boolean isControlTag) {
+ this(tagDefinitionModelDao.getId(), tagDefinitionModelDao.getName(), tagDefinitionModelDao.getDescription(), isControlTag);
+ }
+
public DefaultTagDefinition(final String name, final String description, final Boolean isControlTag) {
this(UUID.randomUUID(), name, description, isControlTag);
}
diff --git a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
index 3706e15..8d56557 100644
--- a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
+++ b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
@@ -18,7 +18,6 @@ package com.ning.billing.util.audit.dao;
import java.io.IOException;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import org.skife.jdbi.v2.Handle;
@@ -41,14 +40,13 @@ import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.dao.TableName;
import com.ning.billing.util.glue.AuditModule;
import com.ning.billing.util.svcsapi.bus.InternalBus;
-import com.ning.billing.util.tag.ControlTagType;
-import com.ning.billing.util.tag.DefaultControlTag;
import com.ning.billing.util.tag.DescriptiveTag;
import com.ning.billing.util.tag.MockTagStoreModuleSql;
import com.ning.billing.util.tag.Tag;
-import com.ning.billing.util.tag.TagDefinition;
-import com.ning.billing.util.tag.dao.AuditedTagDao;
+import com.ning.billing.util.tag.dao.DefaultTagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
+import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
+import com.ning.billing.util.tag.dao.TagModelDao;
import com.google.inject.Inject;
@@ -59,7 +57,7 @@ public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
private TagDefinitionDao tagDefinitionDao;
@Inject
- private AuditedTagDao tagDao;
+ private DefaultTagDao tagDao;
@Inject
private AuditDao auditDao;
@@ -112,21 +110,20 @@ public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
private void addTag() throws TagDefinitionApiException, TagApiException {
// Create a tag definition
- final TagDefinition tagDefinition = tagDefinitionDao.create(UUID.randomUUID().toString().substring(0, 5),
- UUID.randomUUID().toString().substring(0, 5),
- internalCallContext);
+ final TagDefinitionModelDao tagDefinition = tagDefinitionDao.create(UUID.randomUUID().toString().substring(0, 5),
+ UUID.randomUUID().toString().substring(0, 5),
+ internalCallContext);
Assert.assertEquals(tagDefinitionDao.getById(tagDefinition.getId(), internalCallContext), tagDefinition);
// Create a tag
final UUID objectId = UUID.randomUUID();
- final Tag tag = tagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(tagDefinition.getId()), ObjectType.ACCOUNT, objectId, clock.getUTCNow()) :
- new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, clock.getUTCNow());
+ final Tag tag = new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, clock.getUTCNow());
- tagDao.create(tag, internalCallContext);
- final List<Tag> tags = tagDao.getTags(objectId, ObjectType.ACCOUNT, internalCallContext);
+ tagDao.create(new TagModelDao(tag), internalCallContext);
+ final List<TagModelDao> tags = tagDao.getTags(objectId, ObjectType.ACCOUNT, internalCallContext);
Assert.assertEquals(tags.size(), 1);
- final Tag savedTag = tags.get(0);
+ final TagModelDao savedTag = tags.get(0);
Assert.assertEquals(savedTag.getTagDefinitionId(), tagDefinition.getId());
tagId = savedTag.getId();
}
diff --git a/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java b/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
index 40f9599..ac498c4 100644
--- a/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
+++ b/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
@@ -31,10 +31,9 @@ import com.ning.billing.ObjectType;
import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.clock.DefaultClock;
import com.ning.billing.util.customfield.CustomField;
import com.ning.billing.util.customfield.StringCustomField;
-import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
+import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
import com.ning.billing.util.customfield.dao.CustomFieldDao;
import com.google.common.collect.ImmutableList;
@@ -46,7 +45,7 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
@BeforeMethod(groups = "slow")
public void setUp() throws Exception {
final InternalCallContextFactory internalCallContextFactory = new InternalCallContextFactory(getMysqlTestingHelper().getDBI(), new ClockMock());
- final CustomFieldDao customFieldDao = new AuditedCustomFieldDao(getMysqlTestingHelper().getDBI());
+ final CustomFieldDao customFieldDao = new DefaultCustomFieldDao(getMysqlTestingHelper().getDBI());
customFieldUserApi = new DefaultCustomFieldUserApi(internalCallContextFactory, customFieldDao);
}
diff --git a/util/src/test/java/com/ning/billing/util/customfield/dao/MockCustomFieldDao.java b/util/src/test/java/com/ning/billing/util/customfield/dao/MockCustomFieldDao.java
index 730e012..354da71 100644
--- a/util/src/test/java/com/ning/billing/util/customfield/dao/MockCustomFieldDao.java
+++ b/util/src/test/java/com/ning/billing/util/customfield/dao/MockCustomFieldDao.java
@@ -17,29 +17,22 @@
package com.ning.billing.util.customfield.dao;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
-
-import com.ning.billing.BillingExceptionBase;
import com.ning.billing.ObjectType;
import com.ning.billing.util.api.CustomFieldApiException;
-import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.customfield.CustomField;
-import com.ning.billing.util.entity.Entity;
import com.ning.billing.util.entity.dao.MockEntityDaoBase;
-public class MockCustomFieldDao extends MockEntityDaoBase<CustomField, CustomFieldApiException> implements CustomFieldDao {
+public class MockCustomFieldDao extends MockEntityDaoBase<CustomFieldModelDao, CustomField, CustomFieldApiException> implements CustomFieldDao {
@Override
- public List<CustomField> getCustomFields(final UUID objectId, final ObjectType objectType, final InternalTenantContext context) {
- List<CustomField> result = new ArrayList<CustomField>();
- List<CustomField> all = get(context);
- for (CustomField cur : all) {
+ public List<CustomFieldModelDao> getCustomFields(final UUID objectId, final ObjectType objectType, final InternalTenantContext context) {
+ final List<CustomFieldModelDao> result = new ArrayList<CustomFieldModelDao>();
+ final List<CustomFieldModelDao> all = get(context);
+ for (final CustomFieldModelDao cur : all) {
if (cur.getObjectId().equals(objectId) && cur.getObjectType() == objectType) {
result.add(cur);
}
diff --git a/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java b/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
index c72c883..f401ca4 100644
--- a/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
+++ b/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
@@ -30,25 +30,23 @@ import com.ning.billing.ObjectType;
import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
import com.ning.billing.util.api.CustomFieldApiException;
-import com.ning.billing.util.clock.DefaultClock;
-import com.ning.billing.util.customfield.dao.AuditedCustomFieldDao;
import com.ning.billing.util.customfield.dao.CustomFieldDao;
-import com.ning.billing.util.customfield.dao.CustomFieldSqlDao;
+import com.ning.billing.util.customfield.dao.CustomFieldModelDao;
+import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
-import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
public class TestFieldStore extends UtilTestSuiteWithEmbeddedDB {
+
private final Logger log = LoggerFactory.getLogger(TestFieldStore.class);
private final MysqlTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getMysqlTestingHelper();
- private IDBI dbi;
private CustomFieldDao customFieldDao;
@BeforeClass(groups = "slow")
protected void setup() throws IOException {
try {
- dbi = helper.getDBI();
- customFieldDao = new AuditedCustomFieldDao(dbi);
+ final IDBI dbi = helper.getDBI();
+ customFieldDao = new DefaultCustomFieldDao(dbi);
} catch (Throwable t) {
log.error("Setup failed", t);
fail(t.toString());
@@ -60,16 +58,15 @@ public class TestFieldStore extends UtilTestSuiteWithEmbeddedDB {
final UUID id = UUID.randomUUID();
final ObjectType objectType = ObjectType.ACCOUNT;
-
String fieldName = "TestField1";
String fieldValue = "Kitty Hawk";
- CustomField field = new StringCustomField(fieldName, fieldValue, objectType, id, internalCallContext.getCreatedDate());
- customFieldDao.create(field, internalCallContext);
+ final CustomField field = new StringCustomField(fieldName, fieldValue, objectType, id, internalCallContext.getCreatedDate());
+ customFieldDao.create(new CustomFieldModelDao(field), internalCallContext);
fieldName = "TestField2";
fieldValue = "Cape Canaveral";
- CustomField field2 = new StringCustomField(fieldName, fieldValue, objectType, id, internalCallContext.getCreatedDate());
- customFieldDao.create(field2 ,internalCallContext);
+ final CustomField field2 = new StringCustomField(fieldName, fieldValue, objectType, id, internalCallContext.getCreatedDate());
+ customFieldDao.create(new CustomFieldModelDao(field2), internalCallContext);
}
}
diff --git a/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritanceWithJdbi.java b/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritanceWithJdbi.java
index 4d3e62c..ed26dd4 100644
--- a/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritanceWithJdbi.java
+++ b/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritanceWithJdbi.java
@@ -24,6 +24,7 @@ import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.clock.ClockMock;
import com.ning.billing.util.entity.Entity;
+import com.ning.billing.util.entity.dao.EntityModelDao;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@@ -33,8 +34,10 @@ public class TestStringTemplateInheritanceWithJdbi extends KillbillTestSuiteWith
private static interface Kombucha extends Entity {}
+ private static interface KombuchaModelDao extends EntityModelDao<Kombucha> {}
+
@EntitySqlDaoStringTemplate("/com/ning/billing/util/dao/Kombucha.sql.stg")
- private static interface KombuchaSqlDao extends EntitySqlDao<Kombucha> {
+ private static interface KombuchaSqlDao extends EntitySqlDao<KombuchaModelDao, Kombucha> {
@SqlQuery
public boolean isIsTimeForKombucha();
diff --git a/util/src/test/java/com/ning/billing/util/entity/dao/MockEntityDaoBase.java b/util/src/test/java/com/ning/billing/util/entity/dao/MockEntityDaoBase.java
index d59dc79..494d616 100644
--- a/util/src/test/java/com/ning/billing/util/entity/dao/MockEntityDaoBase.java
+++ b/util/src/test/java/com/ning/billing/util/entity/dao/MockEntityDaoBase.java
@@ -30,15 +30,15 @@ import com.ning.billing.util.entity.Entity;
import com.google.common.collect.ImmutableMap;
-public class MockEntityDaoBase<T extends Entity, U extends BillingExceptionBase> implements EntityDao<T, U> {
+public class MockEntityDaoBase<M extends EntityModelDao<E>, E extends Entity, U extends BillingExceptionBase> implements EntityDao<M, E, U> {
protected static final AtomicLong autoIncrement = new AtomicLong(1);
- protected final Map<UUID, Map<Long, T>> entities = new HashMap<UUID, Map<Long, T>>();
+ protected final Map<UUID, Map<Long, M>> entities = new HashMap<UUID, Map<Long, M>>();
@Override
- public void create(final T entity, final InternalCallContext context) throws U {
- entities.put(entity.getId(), ImmutableMap.<Long, T>of(autoIncrement.incrementAndGet(), entity));
+ public void create(final M entity, final InternalCallContext context) throws U {
+ entities.put(entity.getId(), ImmutableMap.<Long, M>of(autoIncrement.incrementAndGet(), entity));
}
@Override
@@ -47,8 +47,8 @@ public class MockEntityDaoBase<T extends Entity, U extends BillingExceptionBase>
}
@Override
- public T getByRecordId(final Long recordId, final InternalTenantContext context) {
- for (final Map<Long, T> cur : entities.values()) {
+ public M getByRecordId(final Long recordId, final InternalTenantContext context) {
+ for (final Map<Long, M> cur : entities.values()) {
if (cur.keySet().iterator().next().equals(recordId)) {
cur.values().iterator().next();
}
@@ -57,25 +57,25 @@ public class MockEntityDaoBase<T extends Entity, U extends BillingExceptionBase>
}
@Override
- public T getById(final UUID id, final InternalTenantContext context) {
+ public M getById(final UUID id, final InternalTenantContext context) {
return entities.get(id).values().iterator().next();
}
@Override
- public List<T> get(final InternalTenantContext context) {
- final List<T> result = new ArrayList<T>();
- for (final Map<Long, T> cur : entities.values()) {
+ public List<M> get(final InternalTenantContext context) {
+ final List<M> result = new ArrayList<M>();
+ for (final Map<Long, M> cur : entities.values()) {
result.add(cur.values().iterator().next());
}
return result;
}
- public void update(final T entity, final InternalCallContext context) {
+ public void update(final M entity, final InternalCallContext context) {
final Long entityRecordId = getRecordId(entity.getId(), context);
entities.get(entity.getId()).put(entityRecordId, entity);
}
- public void delete(final T entity, final InternalCallContext context) {
+ public void delete(final M entity, final InternalCallContext context) {
entities.remove(entity.getId());
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
index 7543b4c..f619b3a 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
@@ -35,19 +35,21 @@ import com.ning.billing.util.events.UserTagDefinitionDeletionInternalEvent;
import com.ning.billing.util.events.UserTagDeletionInternalEvent;
import com.ning.billing.util.tag.DefaultTagDefinition;
import com.ning.billing.util.tag.TagDefinition;
+import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
public class TestTagEventBuilder extends UtilTestSuite {
+
@Test(groups = "fast")
public void testNewUserTagDefinitionCreationEvent() throws Exception {
final UUID tagDefinitionId = UUID.randomUUID();
final String tagDefinitionName = UUID.randomUUID().toString();
final String tagDefinitionDescription = UUID.randomUUID().toString();
- final boolean controlTag = true;
+ final boolean controlTag = false;
final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
final UUID userToken = internalCallContext.getUserToken();
final TagEventBuilder tagEventBuilder = new TagEventBuilder();
- final TagDefinitionInternalEvent event = tagEventBuilder.newUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, internalCallContext);
+ final TagDefinitionInternalEvent event = tagEventBuilder.newUserTagDefinitionCreationEvent(tagDefinitionId, new TagDefinitionModelDao(tagDefinition), internalCallContext);
Assert.assertTrue(event instanceof UserTagDefinitionCreationInternalEvent);
Assert.assertEquals(event, new DefaultUserTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken, 1L, 1L));
@@ -61,12 +63,12 @@ public class TestTagEventBuilder extends UtilTestSuite {
final UUID tagDefinitionId = UUID.randomUUID();
final String tagDefinitionName = UUID.randomUUID().toString();
final String tagDefinitionDescription = UUID.randomUUID().toString();
- final boolean controlTag = true;
+ final boolean controlTag = false;
final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
final UUID userToken = internalCallContext.getUserToken();
final TagEventBuilder tagEventBuilder = new TagEventBuilder();
- final TagDefinitionInternalEvent event = tagEventBuilder.newUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, internalCallContext);
+ final TagDefinitionInternalEvent event = tagEventBuilder.newUserTagDefinitionDeletionEvent(tagDefinitionId, new TagDefinitionModelDao(tagDefinition), internalCallContext);
Assert.assertTrue(event instanceof UserTagDefinitionDeletionInternalEvent);
Assert.assertEquals(event, new DefaultUserTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken, 1L, 1L));
@@ -85,7 +87,7 @@ public class TestTagEventBuilder extends UtilTestSuite {
final UUID userToken = internalCallContext.getUserToken();
final TagEventBuilder tagEventBuilder = new TagEventBuilder();
- final TagDefinitionInternalEvent event = tagEventBuilder.newControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, internalCallContext);
+ final TagDefinitionInternalEvent event = tagEventBuilder.newControlTagDefinitionCreationEvent(tagDefinitionId, new TagDefinitionModelDao(tagDefinition), internalCallContext);
Assert.assertTrue(event instanceof ControlTagDefinitionCreationInternalEvent);
Assert.assertEquals(event, new DefaultControlTagDefinitionCreationEvent(tagDefinitionId, tagDefinition, userToken, 1L, 1L));
@@ -104,7 +106,7 @@ public class TestTagEventBuilder extends UtilTestSuite {
final UUID userToken = internalCallContext.getUserToken();
final TagEventBuilder tagEventBuilder = new TagEventBuilder();
- final TagDefinitionInternalEvent event = tagEventBuilder.newControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, internalCallContext);
+ final TagDefinitionInternalEvent event = tagEventBuilder.newControlTagDefinitionDeletionEvent(tagDefinitionId, new TagDefinitionModelDao(tagDefinition), internalCallContext);
Assert.assertTrue(event instanceof ControlTagDefinitionDeletionInternalEvent);
Assert.assertEquals(event, new DefaultControlTagDefinitionDeletionEvent(tagDefinitionId, tagDefinition, userToken, 1L, 1L));
@@ -121,12 +123,12 @@ public class TestTagEventBuilder extends UtilTestSuite {
final UUID tagDefinitionId = UUID.randomUUID();
final String tagDefinitionName = UUID.randomUUID().toString();
final String tagDefinitionDescription = UUID.randomUUID().toString();
- final boolean controlTag = true;
+ final boolean controlTag = false;
final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
final UUID userToken = internalCallContext.getUserToken();
final TagEventBuilder tagEventBuilder = new TagEventBuilder();
- final TagInternalEvent event = tagEventBuilder.newUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, internalCallContext);
+ final TagInternalEvent event = tagEventBuilder.newUserTagCreationEvent(tagId, objectId, objectType, new TagDefinitionModelDao(tagDefinition), internalCallContext);
Assert.assertTrue(event instanceof UserTagCreationInternalEvent);
Assert.assertEquals(event, new DefaultUserTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken, 1L, 1L));
@@ -143,12 +145,12 @@ public class TestTagEventBuilder extends UtilTestSuite {
final UUID tagDefinitionId = UUID.randomUUID();
final String tagDefinitionName = UUID.randomUUID().toString();
final String tagDefinitionDescription = UUID.randomUUID().toString();
- final boolean controlTag = true;
+ final boolean controlTag = false;
final TagDefinition tagDefinition = new DefaultTagDefinition(tagDefinitionId, tagDefinitionName, tagDefinitionDescription, controlTag);
final UUID userToken = internalCallContext.getUserToken();
final TagEventBuilder tagEventBuilder = new TagEventBuilder();
- final TagInternalEvent event = tagEventBuilder.newUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, internalCallContext);
+ final TagInternalEvent event = tagEventBuilder.newUserTagDeletionEvent(tagId, objectId, objectType, new TagDefinitionModelDao(tagDefinition), internalCallContext);
Assert.assertTrue(event instanceof UserTagDeletionInternalEvent);
Assert.assertEquals(event, new DefaultUserTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken, 1L, 1L));
@@ -170,7 +172,7 @@ public class TestTagEventBuilder extends UtilTestSuite {
final UUID userToken = internalCallContext.getUserToken();
final TagEventBuilder tagEventBuilder = new TagEventBuilder();
- final TagInternalEvent event = tagEventBuilder.newControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, internalCallContext);
+ final TagInternalEvent event = tagEventBuilder.newControlTagCreationEvent(tagId, objectId, objectType, new TagDefinitionModelDao(tagDefinition), internalCallContext);
Assert.assertTrue(event instanceof ControlTagCreationInternalEvent);
Assert.assertEquals(event, new DefaultControlTagCreationEvent(tagId, objectId, objectType, tagDefinition, userToken, 1L, 1L));
@@ -192,7 +194,7 @@ public class TestTagEventBuilder extends UtilTestSuite {
final UUID userToken = internalCallContext.getUserToken();
final TagEventBuilder tagEventBuilder = new TagEventBuilder();
- final TagInternalEvent event = tagEventBuilder.newControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, internalCallContext);
+ final TagInternalEvent event = tagEventBuilder.newControlTagDeletionEvent(tagId, objectId, objectType, new TagDefinitionModelDao(tagDefinition), internalCallContext);
Assert.assertTrue(event instanceof ControlTagDeletionInternalEvent);
Assert.assertEquals(event, new DefaultControlTagDeletionEvent(tagId, objectId, objectType, tagDefinition, userToken, 1L, 1L));
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
index 4b08d00..cfa14f4 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
@@ -23,11 +23,6 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import javax.annotation.Nullable;
-
-import org.joda.time.DateTime;
-import org.skife.jdbi.v2.sqlobject.mixins.Transmogrifier;
-
import com.ning.billing.ObjectType;
import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.callcontext.InternalCallContext;
@@ -36,12 +31,12 @@ import com.ning.billing.util.tag.Tag;
public class MockTagDao implements TagDao {
- private final Map<UUID, List<Tag>> tagStore = new HashMap<UUID, List<Tag>>();
+ private final Map<UUID, List<TagModelDao>> tagStore = new HashMap<UUID, List<TagModelDao>>();
@Override
- public void create(final Tag tag, final InternalCallContext context) throws TagApiException {
+ public void create(final TagModelDao tag, final InternalCallContext context) throws TagApiException {
if (tagStore.get(tag.getObjectId()) == null) {
- tagStore.put(tag.getObjectId(), new ArrayList<Tag>());
+ tagStore.put(tag.getObjectId(), new ArrayList<TagModelDao>());
}
tagStore.get(tag.getObjectId()).add(tag);
}
@@ -49,11 +44,11 @@ public class MockTagDao implements TagDao {
@Override
public void deleteTag(final UUID objectId, final ObjectType objectType,
final UUID tagDefinitionId, final InternalCallContext context) {
- final List<Tag> tags = tagStore.get(objectId);
+ final List<TagModelDao> tags = tagStore.get(objectId);
if (tags != null) {
- final Iterator<Tag> tagIterator = tags.iterator();
+ final Iterator<TagModelDao> tagIterator = tags.iterator();
while (tagIterator.hasNext()) {
- final Tag tag = tagIterator.next();
+ final TagModelDao tag = tagIterator.next();
if (tag.getTagDefinitionId().equals(tagDefinitionId)) {
tagIterator.remove();
}
@@ -62,12 +57,12 @@ public class MockTagDao implements TagDao {
}
@Override
- public Tag getById(final UUID tagId, final InternalTenantContext context) {
+ public TagModelDao getById(final UUID tagId, final InternalTenantContext context) {
throw new UnsupportedOperationException();
}
@Override
- public List<Tag> getTags(final UUID objectId, final ObjectType objectType, final InternalTenantContext internalTenantContext) {
+ public List<TagModelDao> getTags(final UUID objectId, final ObjectType objectType, final InternalTenantContext internalTenantContext) {
throw new UnsupportedOperationException();
}
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDefinitionDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDefinitionDao.java
index 9c1c02e..f03a034 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDefinitionDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDefinitionDao.java
@@ -26,27 +26,25 @@ import java.util.concurrent.ConcurrentHashMap;
import com.ning.billing.util.api.TagDefinitionApiException;
import com.ning.billing.util.callcontext.InternalCallContext;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.tag.DefaultTagDefinition;
-import com.ning.billing.util.tag.TagDefinition;
public class MockTagDefinitionDao implements TagDefinitionDao {
- private final Map<String, TagDefinition> tags = new ConcurrentHashMap<String, TagDefinition>();
+ private final Map<String, TagDefinitionModelDao> tags = new ConcurrentHashMap<String, TagDefinitionModelDao>();
@Override
- public List<TagDefinition> getTagDefinitions(final InternalTenantContext context) {
- return new ArrayList<TagDefinition>(tags.values());
+ public List<TagDefinitionModelDao> getTagDefinitions(final InternalTenantContext context) {
+ return new ArrayList<TagDefinitionModelDao>(tags.values());
}
@Override
- public TagDefinition getByName(final String definitionName, final InternalTenantContext context) {
+ public TagDefinitionModelDao getByName(final String definitionName, final InternalTenantContext context) {
return tags.get(definitionName);
}
@Override
- public TagDefinition create(final String definitionName, final String description,
- final InternalCallContext context) throws TagDefinitionApiException {
- final TagDefinition tag = new DefaultTagDefinition(definitionName, description, false);
+ public TagDefinitionModelDao create(final String definitionName, final String description,
+ final InternalCallContext context) throws TagDefinitionApiException {
+ final TagDefinitionModelDao tag = new TagDefinitionModelDao(null, definitionName, description);
tags.put(tag.getId().toString(), tag);
return tag;
@@ -58,12 +56,12 @@ public class MockTagDefinitionDao implements TagDefinitionDao {
}
@Override
- public TagDefinition getById(final UUID definitionId, final InternalTenantContext context) {
+ public TagDefinitionModelDao getById(final UUID definitionId, final InternalTenantContext context) {
return null;
}
@Override
- public List<TagDefinition> getByIds(final Collection<UUID> definitionIds, final InternalTenantContext context) {
+ public List<TagDefinitionModelDao> getByIds(final Collection<UUID> definitionIds, final InternalTenantContext context) {
return null;
}
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
index 9f58e12..350c1cb 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestAuditedTagDao.java
@@ -19,7 +19,6 @@ package com.ning.billing.util.tag.dao;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import org.testng.Assert;
@@ -33,16 +32,14 @@ import com.ning.billing.ObjectType;
import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
import com.ning.billing.util.api.TagDefinitionApiException;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.events.BusInternalEvent;
import com.ning.billing.util.events.TagInternalEvent;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
import com.ning.billing.util.tag.ControlTagType;
-import com.ning.billing.util.tag.DefaultControlTag;
import com.ning.billing.util.tag.DescriptiveTag;
import com.ning.billing.util.tag.MockTagStoreModuleSql;
import com.ning.billing.util.tag.Tag;
-import com.ning.billing.util.tag.TagDefinition;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
@@ -59,7 +56,7 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
private TagDefinitionDao tagDefinitionDao;
@Inject
- private AuditedTagDao tagDao;
+ private DefaultTagDao tagDao;
@Inject
private Clock clock;
@@ -90,14 +87,14 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
final List<UUID> uuids = new ArrayList<UUID>();
// Check with a empty Collection first
- List<TagDefinition> result = tagDefinitionDao.getByIds(uuids, internalCallContext);
+ List<TagDefinitionModelDao> result = tagDefinitionDao.getByIds(uuids, internalCallContext);
assertEquals(result.size(), 0);
- final TagDefinition defYo = tagDefinitionDao.create("yo", "defintion yo", internalCallContext);
+ final TagDefinitionModelDao defYo = tagDefinitionDao.create("yo", "defintion yo", internalCallContext);
uuids.add(defYo.getId());
- final TagDefinition defBah = tagDefinitionDao.create("bah", "defintion bah", internalCallContext);
+ final TagDefinitionModelDao defBah = tagDefinitionDao.create("bah", "defintion bah", internalCallContext);
uuids.add(defBah.getId());
- final TagDefinition defZoo = tagDefinitionDao.create("zoo", "defintion zoo", internalCallContext);
+ final TagDefinitionModelDao defZoo = tagDefinitionDao.create("zoo", "defintion zoo", internalCallContext);
uuids.add(defZoo.getId());
result = tagDefinitionDao.getByIds(uuids, internalCallContext);
@@ -115,8 +112,8 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetById() throws TagDefinitionApiException {
// User Tag
- final TagDefinition defYo = tagDefinitionDao.create("yo", "defintion yo", internalCallContext);
- final TagDefinition resDefYo = tagDefinitionDao.getById(defYo.getId(), internalCallContext);
+ final TagDefinitionModelDao defYo = tagDefinitionDao.create("yo", "defintion yo", internalCallContext);
+ final TagDefinitionModelDao resDefYo = tagDefinitionDao.getById(defYo.getId(), internalCallContext);
assertEquals(defYo, resDefYo);
// Control Tag
@@ -125,7 +122,7 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
Assert.fail("Should not be able to create a control tag");
} catch (TagDefinitionApiException ignore) {
}
- final TagDefinition resdef_AUTO_INVOICING_OFF = tagDefinitionDao.getById(ControlTagType.AUTO_INVOICING_OFF.getId(), internalCallContext);
+ final TagDefinitionModelDao resdef_AUTO_INVOICING_OFF = tagDefinitionDao.getById(ControlTagType.AUTO_INVOICING_OFF.getId(), internalCallContext);
assertEquals(resdef_AUTO_INVOICING_OFF.getId(), ControlTagType.AUTO_INVOICING_OFF.getId());
assertEquals(resdef_AUTO_INVOICING_OFF.getName(), ControlTagType.AUTO_INVOICING_OFF.name());
assertEquals(resdef_AUTO_INVOICING_OFF.getDescription(), ControlTagType.AUTO_INVOICING_OFF.getDescription());
@@ -134,8 +131,8 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetByName() throws TagDefinitionApiException {
// User Tag
- final TagDefinition defYo = tagDefinitionDao.create("yo", "defintion yo", internalCallContext);
- final TagDefinition resDefYo = tagDefinitionDao.getByName(defYo.getName(), internalCallContext);
+ final TagDefinitionModelDao defYo = tagDefinitionDao.create("yo", "defintion yo", internalCallContext);
+ final TagDefinitionModelDao resDefYo = tagDefinitionDao.getByName(defYo.getName(), internalCallContext);
assertEquals(defYo, resDefYo);
// Control Tag
@@ -144,7 +141,7 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
Assert.fail("Should not be able to create a control tag");
} catch (TagDefinitionApiException ignore) {
}
- final TagDefinition resdef_AUTO_PAY_OFF = tagDefinitionDao.getByName(ControlTagType.AUTO_PAY_OFF.name(), internalCallContext);
+ final TagDefinitionModelDao resdef_AUTO_PAY_OFF = tagDefinitionDao.getByName(ControlTagType.AUTO_PAY_OFF.name(), internalCallContext);
assertEquals(resdef_AUTO_PAY_OFF.getId(), ControlTagType.AUTO_PAY_OFF.getId());
assertEquals(resdef_AUTO_PAY_OFF.getName(), ControlTagType.AUTO_PAY_OFF.name());
assertEquals(resdef_AUTO_PAY_OFF.getDescription(), ControlTagType.AUTO_PAY_OFF.getDescription());
@@ -162,17 +159,16 @@ public class TestAuditedTagDao extends UtilTestSuiteWithEmbeddedDB {
Assert.assertEquals(eventsListener.getTagEvents().size(), 0);
// Create a tag definition
- final TagDefinition createdTagDefinition = tagDefinitionDao.create(definitionName, description, internalCallContext);
+ final TagDefinitionModelDao createdTagDefinition = tagDefinitionDao.create(definitionName, description, internalCallContext);
Assert.assertEquals(createdTagDefinition.getName(), definitionName);
Assert.assertEquals(createdTagDefinition.getDescription(), description);
// Make sure we can create a tag
- final Tag tag = createdTagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(createdTagDefinition.getId()), objectType, objectId, internalCallContext.getCreatedDate()) :
- new DescriptiveTag(createdTagDefinition.getId(), objectType, objectId, internalCallContext.getCreatedDate());
- tagDao.create(tag, internalCallContext);
+ final Tag tag = new DescriptiveTag(createdTagDefinition.getId(), objectType, objectId, internalCallContext.getCreatedDate());
+ tagDao.create(new TagModelDao(tag), internalCallContext);
// Make sure we can retrieve it via the DAO
- final List<Tag> foundTags = tagDao.getTags(objectId, objectType, internalCallContext);
+ final List<TagModelDao> foundTags = tagDao.getTags(objectId, objectType, internalCallContext);
Assert.assertEquals(foundTags.size(), 1);
Assert.assertEquals(foundTags.get(0).getTagDefinitionId(), createdTagDefinition.getId());
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
index d5c2f2e..387f950 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
@@ -30,12 +30,11 @@ import org.testng.annotations.Test;
import com.ning.billing.dbi.MysqlTestingHelper;
import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.events.BusInternalEvent;
import com.ning.billing.util.events.TagDefinitionInternalEvent;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
import com.ning.billing.util.tag.MockTagStoreModuleSql;
-import com.ning.billing.util.tag.TagDefinition;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
@@ -83,12 +82,12 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
Assert.assertEquals(eventsListener.getTagDefinitionEvents().size(), 0);
// Make sure we can create a tag definition
- final TagDefinition createdTagDefinition = tagDefinitionDao.create(definitionName, description, internalCallContext);
+ final TagDefinitionModelDao createdTagDefinition = tagDefinitionDao.create(definitionName, description, internalCallContext);
Assert.assertEquals(createdTagDefinition.getName(), definitionName);
Assert.assertEquals(createdTagDefinition.getDescription(), description);
// Make sure we can retrieve it via the DAO
- final TagDefinition foundTagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
+ final TagDefinitionModelDao foundTagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
Assert.assertEquals(foundTagDefinition, createdTagDefinition);
// Verify we caught an event on the bus
@@ -97,7 +96,8 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
final TagDefinitionInternalEvent tagDefinitionFirstEventReceived = eventsListener.getTagDefinitionEvents().get(0);
Assert.assertEquals(eventsListener.getEvents().get(0), tagDefinitionFirstEventReceived);
Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinitionId(), createdTagDefinition.getId());
- Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinition(), createdTagDefinition);
+ Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
+ Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
Assert.assertEquals(tagDefinitionFirstEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_CREATION);
Assert.assertEquals(tagDefinitionFirstEventReceived.getUserToken(), internalCallContext.getUserToken());
@@ -113,7 +113,8 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
final TagDefinitionInternalEvent tagDefinitionSecondEventReceived = eventsListener.getTagDefinitionEvents().get(1);
Assert.assertEquals(eventsListener.getEvents().get(1), tagDefinitionSecondEventReceived);
Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinitionId(), createdTagDefinition.getId());
- Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinition(), createdTagDefinition);
+ Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
+ Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
Assert.assertEquals(tagDefinitionSecondEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_DELETION);
Assert.assertEquals(tagDefinitionSecondEventReceived.getUserToken(), internalCallContext.getUserToken());
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
index 55891c6..a58b70f 100644
--- a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
+++ b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
@@ -38,6 +38,8 @@ import com.ning.billing.util.clock.Clock;
import com.ning.billing.util.svcsapi.bus.InternalBus;
import com.ning.billing.util.tag.dao.TagDao;
import com.ning.billing.util.tag.dao.TagDefinitionDao;
+import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
+import com.ning.billing.util.tag.dao.TagModelDao;
import com.google.inject.Inject;
@@ -69,7 +71,7 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
@Inject
private InternalBus bus;
- private TagDefinition testTagDefinition;
+ private TagDefinitionModelDao testTagDefinition;
private final Logger log = LoggerFactory.getLogger(TestTagStore.class);
@@ -107,28 +109,25 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
final UUID accountId = UUID.randomUUID();
final Tag tag = new DescriptiveTag(testTagDefinition.getId(), ObjectType.ACCOUNT, accountId, clock.getUTCNow());
- tagDao.create(tag, internalCallContext);
+ tagDao.create(new TagModelDao(tag), internalCallContext);
- final Tag savedTag = tagDao.getById(tag.getId(), internalCallContext);
+ final TagModelDao savedTag = tagDao.getById(tag.getId(), internalCallContext);
assertEquals(savedTag.getTagDefinitionId(), tag.getTagDefinitionId());
assertEquals(savedTag.getId(), tag.getId());
}
-
@Test(groups = "slow")
public void testControlTagCreation() throws TagApiException {
final UUID accountId = UUID.randomUUID();
final ControlTag tag = new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF, ObjectType.ACCOUNT, accountId, clock.getUTCNow());
+ tagDao.create(new TagModelDao(tag), internalCallContext);
- tagDao.create(tag, internalCallContext);
-
- final Tag savedTag = tagDao.getById(tag.getId(), internalCallContext);
+ final TagModelDao savedTag = tagDao.getById(tag.getId(), internalCallContext);
assertEquals(savedTag.getTagDefinitionId(), tag.getTagDefinitionId());
assertEquals(savedTag.getId(), tag.getId());
}
-
@Test(groups = "slow", expectedExceptions = TagDefinitionApiException.class)
public void testTagDefinitionCreationWithControlTagName() throws TagDefinitionApiException {
final String definitionName = ControlTagType.AUTO_PAY_OFF.toString();
@@ -140,7 +139,7 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
final String definitionName = "TestTag1234";
tagDefinitionDao.create(definitionName, "Some test tag", internalCallContext);
- TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
+ TagDefinitionModelDao tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
assertNotNull(tagDefinition);
tagDefinitionDao.deleteById(tagDefinition.getId(), internalCallContext);
@@ -153,13 +152,12 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
final String definitionName = "TestTag12345";
tagDefinitionDao.create(definitionName, "Some test tag", internalCallContext);
- final TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
+ final TagDefinitionModelDao tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
assertNotNull(tagDefinition);
final UUID objectId = UUID.randomUUID();
- final Tag tag = tagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(tagDefinition.getId()), ObjectType.ACCOUNT, objectId, internalCallContext.getCreatedDate()) :
- new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, internalCallContext.getCreatedDate());
- tagDao.create(tag, internalCallContext);
+ final Tag tag = new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, internalCallContext.getCreatedDate());
+ tagDao.create(new TagModelDao(tag), internalCallContext);
tagDefinitionDao.deleteById(tagDefinition.getId(), internalCallContext);
}
@@ -173,16 +171,13 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
fail("Could not create tag definition", e);
}
- final TagDefinition tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
+ final TagDefinitionModelDao tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
assertNotNull(tagDefinition);
final UUID objectId = UUID.randomUUID();
-
- final Tag tag = tagDefinition.isControlTag() ? new DefaultControlTag(ControlTagType.getTypeFromId(tagDefinition.getId()), ObjectType.ACCOUNT, objectId, internalCallContext.getCreatedDate()) :
- new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, internalCallContext.getCreatedDate());
-
- tagDao.create(tag, internalCallContext);
+ final Tag tag = new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, internalCallContext.getCreatedDate());
+ tagDao.create(new TagModelDao(tag), internalCallContext);
tagDao.deleteTag(objectId, ObjectType.ACCOUNT, tagDefinition.getId(), internalCallContext);
try {
@@ -194,7 +189,7 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetTagDefinitions() {
- final List<TagDefinition> definitionList = tagDefinitionDao.getTagDefinitions(internalCallContext);
+ final List<TagDefinitionModelDao> definitionList = tagDefinitionDao.getTagDefinitions(internalCallContext);
assertTrue(definitionList.size() >= ControlTagType.values().length);
}
}