killbill-memoizeit
Changes
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/DefaultEntitlementDao.java 6(+3 -3)
entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java 2(+1 -1)
Details
diff --git a/account/src/main/resources/com/ning/billing/account/dao/AccountEmailSqlDao.sql.stg b/account/src/main/resources/com/ning/billing/account/dao/AccountEmailSqlDao.sql.stg
index 05bdcd2..30972a6 100644
--- a/account/src/main/resources/com/ning/billing/account/dao/AccountEmailSqlDao.sql.stg
+++ b/account/src/main/resources/com/ning/billing/account/dao/AccountEmailSqlDao.sql.stg
@@ -27,18 +27,18 @@ tableValues() ::= <<
getEmailByAccountId() ::= <<
select
-<allTableFields()>
-from <tableName()>
-where account_id = :accountId
-and is_active
-<AND_CHECK_TENANT()>
+ <allTableFields("t.")>
+from <tableName()> t
+where t.account_id = :accountId
+and t.is_active
+<AND_CHECK_TENANT("t.")>
;
>>
markEmailAsDeleted() ::= <<
-update <tableName()>
-set is_active = 0
-where id = :id
-<AND_CHECK_TENANT()>
+update <tableName()> t
+set t.is_active = 0
+where <idField("t.")> = :id
+<AND_CHECK_TENANT("t.")>
;
>>
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
index 84e5d3d..7bd0ae1 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessTagRecorder.java
@@ -48,7 +48,7 @@ import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.entitlement.engine.addon.AddonUtils;
-import com.ning.billing.entitlement.engine.dao.AuditedEntitlementDao;
+import com.ning.billing.entitlement.engine.dao.DefaultEntitlementDao;
import com.ning.billing.entitlement.engine.dao.EntitlementDao;
import com.ning.billing.mock.MockAccountBuilder;
import com.ning.billing.util.bus.InMemoryInternalBus;
@@ -90,7 +90,7 @@ public class TestBusinessTagRecorder extends AnalyticsTestSuiteWithEmbeddedDB {
final CatalogService catalogService = new DefaultCatalogService(Mockito.mock(CatalogConfig.class), Mockito.mock(VersionedCatalogLoader.class));
final AddonUtils addonUtils = new AddonUtils(catalogService);
final DefaultNotificationQueueService notificationQueueService = new DefaultNotificationQueueService(dbi, clock, internalCallContextFactory);
- final EntitlementDao entitlementDao = new AuditedEntitlementDao(dbi, clock, addonUtils, notificationQueueService, eventBus, catalogService);
+ final EntitlementDao entitlementDao = new DefaultEntitlementDao(dbi, clock, addonUtils, notificationQueueService, eventBus, catalogService);
final PlanAligner planAligner = new PlanAligner(catalogService);
final DefaultSubscriptionApiService apiService = new DefaultSubscriptionApiService(clock, entitlementDao, catalogService, planAligner, internalCallContextFactory);
final DefaultSubscriptionFactory subscriptionFactory = new DefaultSubscriptionFactory(apiService, clock, catalogService);
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
index 96d5e66..459cae7 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
@@ -18,6 +18,7 @@ package com.ning.billing.entitlement.glue;
import org.skife.config.ConfigurationObjectFactory;
+import com.ning.billing.entitlement.engine.dao.DefaultEntitlementDao;
import com.ning.billing.util.config.EntitlementConfig;
import com.ning.billing.entitlement.alignment.MigrationPlanAligner;
import com.ning.billing.entitlement.alignment.PlanAligner;
@@ -40,7 +41,6 @@ import com.ning.billing.entitlement.api.user.DefaultSubscriptionFactory;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.engine.addon.AddonUtils;
import com.ning.billing.entitlement.engine.core.Engine;
-import com.ning.billing.entitlement.engine.dao.AuditedEntitlementDao;
import com.ning.billing.entitlement.engine.dao.EntitlementDao;
import com.ning.billing.entitlement.engine.dao.RepairEntitlementDao;
import com.ning.billing.glue.EntitlementModule;
@@ -60,7 +60,7 @@ public class DefaultEntitlementModule extends AbstractModule implements Entitlem
}
protected void installEntitlementDao() {
- bind(EntitlementDao.class).to(AuditedEntitlementDao.class).asEagerSingleton();
+ bind(EntitlementDao.class).to(DefaultEntitlementDao.class).asEagerSingleton();
bind(EntitlementDao.class).annotatedWith(Names.named(REPAIR_NAMED)).to(RepairEntitlementDao.class);
bind(RepairEntitlementLifecycleDao.class).annotatedWith(Names.named(REPAIR_NAMED)).to(RepairEntitlementDao.class);
bind(RepairEntitlementDao.class).asEagerSingleton();
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
index 048ab21..228e23f 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
@@ -26,7 +26,7 @@ import com.ning.billing.util.notificationq.NotificationQueueService;
import com.google.inject.Inject;
-public class MockEntitlementDaoSql extends AuditedEntitlementDao {
+public class MockEntitlementDaoSql extends DefaultEntitlementDao {
@Inject
public MockEntitlementDaoSql(final IDBI dbi, final Clock clock, final AddonUtils addonUtils, final NotificationQueueService notificationQueueService,
final InternalBus eventBus, final CatalogService catalogService) {
diff --git a/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java b/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
index 77ebc62..906a0b6 100644
--- a/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
+++ b/payment/src/main/java/com/ning/billing/payment/glue/PaymentModule.java
@@ -25,6 +25,7 @@ import org.skife.config.ConfigSource;
import org.skife.config.ConfigurationObjectFactory;
import org.skife.config.SimplePropertyConfigSource;
+import com.ning.billing.payment.dao.DefaultPaymentDao;
import com.ning.billing.util.config.PaymentConfig;
import com.ning.billing.payment.api.DefaultPaymentApi;
import com.ning.billing.payment.api.PaymentApi;
@@ -35,7 +36,6 @@ import com.ning.billing.payment.bus.TagHandler;
import com.ning.billing.payment.core.PaymentMethodProcessor;
import com.ning.billing.payment.core.PaymentProcessor;
import com.ning.billing.payment.core.RefundProcessor;
-import com.ning.billing.payment.dao.AuditedPaymentDao;
import com.ning.billing.payment.dao.PaymentDao;
import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
import com.ning.billing.payment.retry.AutoPayRetryService;
@@ -72,7 +72,7 @@ public class PaymentModule extends AbstractModule {
}
protected void installPaymentDao() {
- bind(PaymentDao.class).to(AuditedPaymentDao.class).asEagerSingleton();
+ bind(PaymentDao.class).to(DefaultPaymentDao.class).asEagerSingleton();
}
protected void installPaymentProviderPlugins(final PaymentConfig config) {
diff --git a/payment/src/test/java/com/ning/billing/payment/dao/TestPaymentDao.java b/payment/src/test/java/com/ning/billing/payment/dao/TestPaymentDao.java
index 8424853..c574c78 100644
--- a/payment/src/test/java/com/ning/billing/payment/dao/TestPaymentDao.java
+++ b/payment/src/test/java/com/ning/billing/payment/dao/TestPaymentDao.java
@@ -55,7 +55,7 @@ public class TestPaymentDao extends PaymentTestSuiteWithEmbeddedDB {
public void setup() throws IOException {
clock = new DefaultClock();
setupDb();
- paymentDao = new AuditedPaymentDao(dbi);
+ paymentDao = new DefaultPaymentDao(dbi);
}
private void setupDb() {
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 361b6f5..a7084a5 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
@@ -110,7 +110,7 @@ public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, Tena
return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<List<String>>() {
@Override
public List<String> inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- final List<TenantKVModelDao> tenantKV = entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).getTenantValueForKey(key, context.getTenantRecordId());
+ final List<TenantKVModelDao> tenantKV = entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).getTenantValueForKey(key, context);
return ImmutableList.copyOf(Collections2.transform(tenantKV, new Function<TenantKVModelDao, String>() {
@Override
public String apply(final TenantKVModelDao in) {
@@ -126,7 +126,8 @@ public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, Tena
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);
+ final TenantKVModelDao tenantKVModelDao = new TenantKVModelDao(UUID.randomUUID(), context.getCreatedDate(), context.getUpdatedDate(), key, value);
+ entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).create(tenantKVModelDao, context);
return null;
}
});
@@ -137,7 +138,7 @@ public class DefaultTenantDao extends EntityDaoBase<TenantModelDao, Tenant, Tena
transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
@Override
public Void inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
- entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).deleteTenantKey(key, context.getTenantRecordId());
+ entitySqlDaoWrapperFactory.become(TenantKVSqlDao.class).markTenantKeyAsDeleted(key, context);
return null;
}
});
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
index 3eb3955..516ce59 100644
--- a/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
+++ b/tenant/src/main/java/com/ning/billing/tenant/dao/TenantKVModelDao.java
@@ -29,6 +29,7 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
private String key;
private String value;
+ private Boolean isActive;
public TenantKVModelDao() { /* For the DAO mapper */ }
@@ -36,6 +37,7 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
super(id, createdDate, updatedDate);
this.key = key;
this.value = value;
+ this.isActive = true;
}
public String getKey() {
@@ -46,12 +48,17 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
return value;
}
+ public Boolean getIsActive() {
+ return isActive;
+ }
+
@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(", isActive=").append(isActive);
sb.append('}');
return sb.toString();
}
@@ -70,6 +77,9 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
final TenantKVModelDao that = (TenantKVModelDao) o;
+ if (isActive != null ? !isActive.equals(that.isActive) : that.isActive != null) {
+ return false;
+ }
if (key != null ? !key.equals(that.key) : that.key != null) {
return false;
}
@@ -85,6 +95,7 @@ public class TenantKVModelDao extends EntityBase implements EntityModelDao<Tenan
int result = super.hashCode();
result = 31 * result + (key != null ? key.hashCode() : 0);
result = 31 * result + (value != null ? value.hashCode() : 0);
+ result = 31 * result + (isActive != null ? isActive.hashCode() : 0);
return result;
}
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 ccef4fd..f75be0f 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
@@ -16,60 +16,30 @@
package com.ning.billing.tenant.dao;
-import java.sql.ResultSet;
-import java.sql.SQLException;
import java.util.List;
-import java.util.UUID;
-import org.joda.time.DateTime;
-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.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.tenant.api.DefaultTenantKV;
import com.ning.billing.tenant.api.TenantKV;
-import com.ning.billing.tenant.dao.TenantKVSqlDao.TenantKVMapper;
+import com.ning.billing.util.audit.ChangeType;
import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.dao.MapperBase;
-import com.ning.billing.util.dao.UuidMapper;
+import com.ning.billing.util.callcontext.InternalTenantContext;
+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, TenantKVMapper.class})
public interface TenantKVSqlDao extends EntitySqlDao<TenantKVModelDao, TenantKV> {
- // TODO should take a context
-
@SqlQuery
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);
+ @BindBean final InternalTenantContext context);
@SqlUpdate
- public void deleteTenantKey(@Bind("key") final String key,
- @Bind("tenantRecordId") Long tenantRecordId);
-
- public class TenantKVMapper extends MapperBase implements ResultSetMapper<TenantKV> {
-
- @Override
- public TenantKV map(final int index, final ResultSet result, final StatementContext context) throws SQLException {
- final UUID id = getUUID(result, "id");
- final String key = result.getString("t_key");
- final String value = result.getString("t_value");
- final DateTime createdDate = getDateTime(result, "created_date");
- final DateTime updatedDate = getDateTime(result, "updated_date");
- return new DefaultTenantKV(id, key, value, createdDate, updatedDate);
- }
- }
+ @Audited(ChangeType.DELETE)
+ public void markTenantKeyAsDeleted(@Bind("key") final String key,
+ @BindBean final InternalCallContext context);
}
diff --git a/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg b/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
index ce66a1a..20edb99 100644
--- a/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
+++ b/tenant/src/main/resources/com/ning/billing/tenant/dao/TenantKVSqlDao.sql.stg
@@ -1,58 +1,45 @@
-group TenantKVSqlDao;
-
-
-tenantKVFields(prefix) ::= <<
- <prefix>record_id,
- <prefix>id,
- <prefix>tenant_record_id,
- <prefix>t_key,
- <prefix>t_value,
- <prefix>created_date,
- <prefix>created_by,
- <prefix>updated_date,
- <prefix>updated_by
+group TenantKVSqlDao: EntitySqlDao;
+
+tableName() ::= "tenant_kvs"
+
+tableFields(prefix) ::= <<
+ <prefix>t_key
+, <prefix>t_value
+, <prefix>is_active
+, <prefix>created_date
+, <prefix>created_by
+, <prefix>updated_date
+, <prefix>updated_by
>>
-insertTenantKeyValue() ::= <<
- INSERT INTO tenant_kvs (
- id
- , tenant_record_id
- , t_key
- , t_value
- , created_date
- , created_by
- , updated_date
- , updated_by
- ) VALUES (
- :id
- , :tenantRecordId
- , :key
- , :value
- , :createdDate
- , :userName
- , :updatedDate
- , :userName
- );
+tableValues() ::= <<
+ :key
+, :value
+, :isActive
+, :createdDate
+, :createdBy
+, :updatedDate
+, :updatedBy
>>
+accountRecordIdFieldWithComma() ::= ""
-getTenantValueForKey() ::= <<
- SELECT <tenantKVFields()>
- FROM tenant_kvs
- WHERE
- tenant_record_id = :tenantRecordId AND t_key = :key
- ;
->>
+accountRecordIdValueWithComma() ::= ""
-deleteTenantKey() ::= <<
- DELETE FROM tenant_kvs
- WHERE
- tenant_record_id = :tenantRecordId AND t_key = :key
- ;
+getTenantValueForKey() ::= <<
+select
+ <allTableFields("t.")>
+from <tableName()> t
+where t.t_key = :key
+<AND_CHECK_TENANT("t.")>
+;
>>
-
-test() ::= <<
- SELECT 1 FROM tenants;
+markTenantKeyAsDeleted() ::= <<
+update <tableName()> t
+set t.is_active = 0
+where t.t_key = :key
+<AND_CHECK_TENANT("t.")>
+;
>>
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 8fa62d5..1ded618 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
@@ -187,7 +187,6 @@ public class EntitySqlDaoWrapperInvocationHandler<S extends EntitySqlDao<M, E>,
}
private List<String> retrieveEntityIdsFromArguments(final Method method, final Object[] args) {
-
final Annotation[][] parameterAnnotations = method.getParameterAnnotations();
int i = -1;
for (final Object arg : args) {
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDao.java
index 92f4fd0..d40fbf4 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/DefaultTagDao.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2011 Ning, Inc.
+ * 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
@@ -143,7 +143,7 @@ public class DefaultTagDao extends EntityDaoBase<TagModelDao, Tag, TagApiExcepti
throw new TagApiException(ErrorCode.TAG_DOES_NOT_EXIST, tagDefinition.getName());
}
// Delete the tag
- transactional.deleteById(tag.getId(), context);
+ transactional.markTagAsDeleted(tag.getId().toString(), context);
postBusEventFromTransaction(tag, tag, ChangeType.DELETE, entitySqlDaoWrapperFactory, context);
return null;
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 9d4070a..968c957 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
@@ -207,7 +207,7 @@ public class DefaultTagDefinitionDao extends EntityDaoBase<TagDefinitionModelDao
}
// Delete it
- tagDefinitionSqlDao.deleteTagDefinition(definitionId.toString(), context);
+ tagDefinitionSqlDao.markTagDefinitionAsDeleted(definitionId.toString(), context);
postBusEventFromTransaction(tagDefinition, tagDefinition, ChangeType.DELETE, entitySqlDaoWrapperFactory, context);
return null;
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
index c83f06d..5c0aaf9 100644
--- 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
@@ -30,6 +30,7 @@ public class TagDefinitionModelDao extends EntityBase implements EntityModelDao<
private String name;
private String description;
+ private Boolean isActive;
public TagDefinitionModelDao() { /* For the DAO mapper */ }
@@ -37,6 +38,7 @@ public class TagDefinitionModelDao extends EntityBase implements EntityModelDao<
super(id, createdDate, updatedDate);
this.name = name;
this.description = description;
+ this.isActive = true;
}
public TagDefinitionModelDao(final ControlTagType tag) {
@@ -60,12 +62,17 @@ public class TagDefinitionModelDao extends EntityBase implements EntityModelDao<
return description;
}
+ public Boolean getIsActive() {
+ return isActive;
+ }
+
@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(", isActive=").append(isActive);
sb.append('}');
return sb.toString();
}
@@ -87,6 +94,9 @@ public class TagDefinitionModelDao extends EntityBase implements EntityModelDao<
if (description != null ? !description.equals(that.description) : that.description != null) {
return false;
}
+ if (isActive != null ? !isActive.equals(that.isActive) : that.isActive != null) {
+ return false;
+ }
if (name != null ? !name.equals(that.name) : that.name != null) {
return false;
}
@@ -99,6 +109,7 @@ public class TagDefinitionModelDao extends EntityBase implements EntityModelDao<
int result = super.hashCode();
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (description != null ? description.hashCode() : 0);
+ result = 31 * result + (isActive != null ? isActive.hashCode() : 0);
return result;
}
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 7f46ebe..8603f3d 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
@@ -20,13 +20,13 @@ import java.util.Collection;
import java.util.List;
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 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.entity.dao.Audited;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
@@ -37,18 +37,18 @@ public interface TagDefinitionSqlDao extends EntitySqlDao<TagDefinitionModelDao,
@SqlQuery
public TagDefinitionModelDao getByName(@Bind("name") final String definitionName,
- @InternalTenantContextBinder final InternalTenantContext context);
+ @BindBean final InternalTenantContext context);
@SqlUpdate
@Audited(ChangeType.DELETE)
- public void deleteTagDefinition(@Bind("id") final String definitionId,
- @InternalTenantContextBinder final InternalCallContext context);
+ public void markTagDefinitionAsDeleted(@Bind("id") final String definitionId,
+ @BindBean final InternalCallContext context);
@SqlQuery
public int tagDefinitionUsageCount(@Bind("id") final String definitionId,
- @InternalTenantContextBinder final InternalTenantContext context);
+ @BindBean final InternalTenantContext context);
@SqlQuery
public List<TagDefinitionModelDao> getByIds(@UUIDCollectionBinder final Collection<String> definitionIds,
- @InternalTenantContextBinder final InternalTenantContext context);
+ @BindBean 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
index 9f4bc7d..8d381df 100644
--- 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
@@ -31,6 +31,7 @@ public class TagModelDao extends EntityBase implements EntityModelDao<Tag> {
private UUID tagDefinitionId;
private UUID objectId;
private ObjectType objectType;
+ private Boolean isActive;
public TagModelDao() { /* For the DAO mapper */ }
@@ -45,6 +46,7 @@ public class TagModelDao extends EntityBase implements EntityModelDao<Tag> {
this.tagDefinitionId = tagDefinitionId;
this.objectId = objectId;
this.objectType = objectType;
+ this.isActive = true;
}
public TagModelDao(final Tag tag) {
@@ -63,6 +65,10 @@ public class TagModelDao extends EntityBase implements EntityModelDao<Tag> {
return objectType;
}
+ public Boolean getIsActive() {
+ return isActive;
+ }
+
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
@@ -70,6 +76,7 @@ public class TagModelDao extends EntityBase implements EntityModelDao<Tag> {
sb.append("{tagDefinitionId=").append(tagDefinitionId);
sb.append(", objectId=").append(objectId);
sb.append(", objectType=").append(objectType);
+ sb.append(", isActive=").append(isActive);
sb.append('}');
return sb.toString();
}
@@ -88,6 +95,9 @@ public class TagModelDao extends EntityBase implements EntityModelDao<Tag> {
final TagModelDao that = (TagModelDao) o;
+ if (isActive != null ? !isActive.equals(that.isActive) : that.isActive != null) {
+ return false;
+ }
if (objectId != null ? !objectId.equals(that.objectId) : that.objectId != null) {
return false;
}
@@ -107,6 +117,7 @@ public class TagModelDao extends EntityBase implements EntityModelDao<Tag> {
result = 31 * result + (tagDefinitionId != null ? tagDefinitionId.hashCode() : 0);
result = 31 * result + (objectId != null ? objectId.hashCode() : 0);
result = 31 * result + (objectType != null ? objectType.hashCode() : 0);
+ result = 31 * result + (isActive != null ? isActive.hashCode() : 0);
return result;
}
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 acfe66e..2455417 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
@@ -25,8 +25,10 @@ import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import com.ning.billing.ObjectType;
+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.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.Tag;
@@ -35,8 +37,9 @@ import com.ning.billing.util.tag.Tag;
public interface TagSqlDao extends EntitySqlDao<TagModelDao, Tag> {
@SqlUpdate
- void deleteById(@Bind("id") UUID id,
- @BindBean InternalCallContext context);
+ @Audited(ChangeType.DELETE)
+ void markTagAsDeleted(@Bind("id") String tagId,
+ @BindBean InternalCallContext context);
@SqlQuery
List<TagModelDao> getTagsForObject(@Bind("objectId") UUID objectId,
diff --git a/util/src/main/resources/com/ning/billing/util/ddl.sql b/util/src/main/resources/com/ning/billing/util/ddl.sql
index 2a1edb7..3036278 100644
--- a/util/src/main/resources/com/ning/billing/util/ddl.sql
+++ b/util/src/main/resources/com/ning/billing/util/ddl.sql
@@ -47,6 +47,7 @@ CREATE TABLE tag_definitions (
id char(36) NOT NULL,
name varchar(20) NOT NULL,
description varchar(200) NOT NULL,
+ is_active bool DEFAULT true,
created_by varchar(50) NOT NULL,
created_date datetime NOT NULL,
updated_by varchar(50) NOT NULL,
@@ -65,6 +66,7 @@ CREATE TABLE tag_definition_history (
target_record_id int(11) unsigned NOT NULL,
name varchar(30) NOT NULL,
description varchar(200),
+ is_active bool DEFAULT true,
change_type char(6) NOT NULL,
created_by varchar(50) NOT NULL,
created_date datetime NOT NULL,
@@ -86,6 +88,7 @@ CREATE TABLE tags (
tag_definition_id char(36) NOT NULL,
object_id char(36) NOT NULL,
object_type varchar(30) NOT NULL,
+ is_active bool DEFAULT true,
created_by varchar(50) NOT NULL,
created_date datetime NOT NULL,
updated_by varchar(50) NOT NULL,
@@ -96,7 +99,6 @@ CREATE TABLE tags (
) ENGINE = innodb;
CREATE UNIQUE INDEX tags_id ON tags(id);
CREATE INDEX tags_by_object ON tags(object_id);
-CREATE UNIQUE INDEX tags_unique ON tags(tag_definition_id, object_id);
CREATE INDEX tags_tenant_account_record_id ON tags(tenant_record_id, account_record_id);
DROP TABLE IF EXISTS tag_history;
@@ -107,6 +109,7 @@ CREATE TABLE tag_history (
object_id char(36) NOT NULL,
object_type varchar(30) NOT NULL,
tag_definition_id char(36) NOT NULL,
+ is_active bool DEFAULT true,
change_type char(6) NOT NULL,
created_by varchar(50) NOT NULL,
created_date datetime NOT NULL,
diff --git a/util/src/main/resources/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.sql.stg b/util/src/main/resources/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.sql.stg
index 9492ebd..2d796c1 100644
--- a/util/src/main/resources/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.sql.stg
+++ b/util/src/main/resources/com/ning/billing/util/tag/dao/TagDefinitionSqlDao.sql.stg
@@ -5,6 +5,7 @@ tableName() ::= "tag_definitions"
tableFields(prefix) ::= <<
<prefix>name
, <prefix>description
+, <prefix>is_active
, <prefix>created_by
, <prefix>created_date
, <prefix>updated_by
@@ -14,6 +15,7 @@ tableFields(prefix) ::= <<
tableValues() ::= <<
:name
, :description
+, :isActive
, :createdBy
, :createdDate
, :updatedBy
@@ -24,34 +26,42 @@ accountRecordIdFieldWithComma() ::= ""
accountRecordIdValueWithComma() ::= ""
-
historyTableName() ::= "tag_definition_history"
-deleteTagDefinition() ::= <<
- DELETE FROM tag_definitions
- WHERE id = :id
- <AND_CHECK_TENANT()>
- ;
+markTagDefinitionAsDeleted() ::= <<
+update <tableName()> t
+set t.is_active = 0
+where <idField("t.")> = :id
+<AND_CHECK_TENANT("t.")>
+;
>>
tagDefinitionUsageCount() ::= <<
- SELECT COUNT(id)
- FROM tags
- WHERE tag_definition_id = :id
- <AND_CHECK_TENANT()>
+select
+ count(<idField("t.")>)
+from tags t
+where t.is_active
+and t.tag_definition_id = :id
+<AND_CHECK_TENANT("t.")>
+;
>>
getByName() ::= <<
- SELECT <allTableFields()>
- FROM tag_definitions
- WHERE name = :name
- <AND_CHECK_TENANT()>
- ;
+select
+ <allTableFields("t.")>
+from <tableName()> t
+where t.name = :name
+and t.is_active
+<AND_CHECK_TENANT("t.")>
+;
>>
getByIds(tag_definition_ids) ::= <<
- SELECT <allTableFields()>
- FROM tag_definitions
- WHERE id IN (<tag_definition_ids: {id | :id_<i0>}; separator="," >)
- <AND_CHECK_TENANT()>
+select
+ <allTableFields("t.")>
+from <tableName()> t
+where t.is_active
+and <idField("t.")> in (<tag_definition_ids: {id | :id_<i0>}; separator="," >)
+<AND_CHECK_TENANT("t.")>
+;
>>
diff --git a/util/src/main/resources/com/ning/billing/util/tag/dao/TagSqlDao.sql.stg b/util/src/main/resources/com/ning/billing/util/tag/dao/TagSqlDao.sql.stg
index 3dd5e0f..410f56b 100644
--- a/util/src/main/resources/com/ning/billing/util/tag/dao/TagSqlDao.sql.stg
+++ b/util/src/main/resources/com/ning/billing/util/tag/dao/TagSqlDao.sql.stg
@@ -6,6 +6,7 @@ tableFields(prefix) ::= <<
<prefix>tag_definition_id
, <prefix>object_id
, <prefix>object_type
+, <prefix>is_active
, <prefix>created_by
, <prefix>created_date
, <prefix>updated_by
@@ -16,6 +17,7 @@ tableValues() ::= <<
:tagDefinitionId
, :objectId
, :objectType
+, :isActive
, :createdBy
, :createdDate
, :updatedBy
@@ -24,50 +26,21 @@ tableValues() ::= <<
historyTableName() ::= "tag_history"
-deleteById() ::= <<
-delete from <tableName()>
-where id = :id
-<AND_CHECK_TENANT()>
+markTagAsDeleted() ::= <<
+update <tableName()> t
+set t.is_active = 0
+where <idField("t.")> = :id
+<AND_CHECK_TENANT("t.")>
;
>>
getTagsForObject() ::= <<
select
-<allTableFields()>
-from <tableName()>
-where
-object_id = :objectId AND object_type = :objectType
-<AND_CHECK_TENANT()>
+ <allTableFields("t.")>
+from <tableName()> t
+where t.is_active
+and t.object_id = :objectId
+and t.object_type = :objectType
+<AND_CHECK_TENANT("t.")>
;
>>
-
-findTag() ::= <<
- SELECT <fields()> FROM tags
- WHERE tag_definition_id = :tagDefinitionId
- AND object_id = :objectId AND object_type = :objectType
- <AND_CHECK_TENANT()>
- ;
->>
-
-getRecordIds() ::= <<
- SELECT record_id, id
- FROM tags
- WHERE object_id = :objectId AND object_type = :objectType
- <AND_CHECK_TENANT()>
- ;
->>
-
-getHistoryRecordIds() ::= <<
- SELECT history_record_id, record_id
- FROM tag_history
- WHERE history_record_id > :maxHistoryRecordId
- <AND_CHECK_TENANT()>
- ;
->>
-
-load() ::= <<
- SELECT <fields()>
- FROM tags
- WHERE object_id = :objectId AND object_type = :objectType
- <AND_CHECK_TENANT()>;
->>