Details
diff --git a/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java b/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
index 361f9bf..2f9555f 100644
--- a/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
+++ b/api/src/main/java/com/ning/billing/util/tag/ControlTagType.java
@@ -16,26 +16,34 @@
package com.ning.billing.util.tag;
+import java.util.List;
import java.util.UUID;
+import com.ning.billing.util.dao.ObjectType;
+
+import com.google.common.collect.ImmutableList;
+
public enum ControlTagType {
- AUTO_PAY_OFF(new UUID(0, 1), "Suspends payments until removed.", true, false),
- AUTO_INVOICING_OFF(new UUID(0, 2), "Suspends invoicing until removed.", false, true),
- OVERDUE_ENFORCEMENT_OFF(new UUID(0, 3), "Suspends overdue enforcement behaviour until removed.", false, false),
- WRITTEN_OFF(new UUID(0, 4), "Indicates that an invoice is written off. No billing or payment effect.", false, false),
- MANUAL_PAY(new UUID(0, 5), "Indicates that Killbill doesn't process payments for that account (external payments only)", true, false);
+ AUTO_PAY_OFF(new UUID(0, 1), "Suspends payments until removed.", true, false, ImmutableList.<ObjectType>of(ObjectType.ACCOUNT)),
+ AUTO_INVOICING_OFF(new UUID(0, 2), "Suspends invoicing until removed.", false, true, ImmutableList.<ObjectType>of(ObjectType.ACCOUNT)),
+ OVERDUE_ENFORCEMENT_OFF(new UUID(0, 3), "Suspends overdue enforcement behaviour until removed.", false, false, ImmutableList.<ObjectType>of(ObjectType.ACCOUNT)),
+ WRITTEN_OFF(new UUID(0, 4), "Indicates that an invoice is written off. No billing or payment effect.", false, false, ImmutableList.<ObjectType>of(ObjectType.INVOICE)),
+ MANUAL_PAY(new UUID(0, 5), "Indicates that Killbill doesn't process payments for that account (external payments only)", true, false, ImmutableList.<ObjectType>of(ObjectType.ACCOUNT));
private final UUID id;
private final String description;
private final boolean autoPaymentOff;
private final boolean autoInvoicingOff;
+ private final List<ObjectType> applicableObjectTypes;
- ControlTagType(final UUID id, final String description, final boolean autoPaymentOff, final boolean autoInvoicingOff) {
+ ControlTagType(final UUID id, final String description, final boolean autoPaymentOff, final boolean autoInvoicingOff,
+ final List<ObjectType> applicableObjectTypes) {
this.id = id;
this.description = description;
this.autoPaymentOff = autoPaymentOff;
this.autoInvoicingOff = autoInvoicingOff;
+ this.applicableObjectTypes = applicableObjectTypes;
}
public UUID getId() {
@@ -53,4 +61,8 @@ public enum ControlTagType {
public boolean getAutoInvoicingOff() {
return this.autoInvoicingOff;
}
+
+ public List<ObjectType> getApplicableObjectTypes() {
+ return applicableObjectTypes;
+ }
}
diff --git a/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java b/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
index 9471734..6114060 100644
--- a/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
+++ b/api/src/main/java/com/ning/billing/util/tag/TagDefinition.java
@@ -16,16 +16,23 @@
package com.ning.billing.util.tag;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import java.util.List;
+
+import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.entity.Entity;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
// TODO: needs to surface created date, created by
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public interface TagDefinition extends Entity {
+
String getName();
String getDescription();
Boolean isControlTag();
+
+ List<ObjectType> getApplicableObjectTypes();
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
index d9cf279..630c5ae 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/TagDefinitionJson.java
@@ -16,12 +16,18 @@
package com.ning.billing.jaxrs.json;
+import java.util.List;
+
import javax.annotation.Nullable;
+import com.ning.billing.util.dao.ObjectType;
import com.ning.billing.util.tag.TagDefinition;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
public class TagDefinitionJson {
@@ -29,20 +35,33 @@ public class TagDefinitionJson {
private final Boolean isControlTag;
private final String name;
private final String description;
+ private final List<String> applicableObjectTypes;
@JsonCreator
public TagDefinitionJson(@JsonProperty("id") final String id,
@JsonProperty("isControlTag") final Boolean isControlTag,
@JsonProperty("name") final String name,
- @JsonProperty("description") @Nullable final String description) {
+ @JsonProperty("description") @Nullable final String description,
+ @JsonProperty("applicableObjectTypes") @Nullable final List<String> applicableObjectTypes) {
this.id = id;
this.isControlTag = isControlTag;
this.name = name;
this.description = description;
+ this.applicableObjectTypes = applicableObjectTypes;
}
public TagDefinitionJson(final TagDefinition tagDefinition) {
- this(tagDefinition.getId().toString(), tagDefinition.isControlTag(), tagDefinition.getName(), tagDefinition.getDescription());
+ this(tagDefinition.getId().toString(), tagDefinition.isControlTag(), tagDefinition.getName(),
+ tagDefinition.getDescription(), ImmutableList.<String>copyOf(Collections2.transform(tagDefinition.getApplicableObjectTypes(), new Function<ObjectType, String>() {
+ @Override
+ public String apply(@Nullable final ObjectType input) {
+ if (input == null) {
+ return "";
+ } else {
+ return input.toString();
+ }
+ }
+ })));
}
public String getId() {
@@ -62,6 +81,10 @@ public class TagDefinitionJson {
return description;
}
+ public List<String> getApplicableObjectTypes() {
+ return applicableObjectTypes;
+ }
+
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
@@ -70,6 +93,7 @@ public class TagDefinitionJson {
sb.append(", isControlTag=").append(isControlTag);
sb.append(", name='").append(name).append('\'');
sb.append(", description='").append(description).append('\'');
+ sb.append(", applicableObjectTypes='").append(applicableObjectTypes).append('\'');
sb.append('}');
return sb.toString();
}
@@ -105,6 +129,9 @@ public class TagDefinitionJson {
if (name != null ? !name.equals(that.name) : that.name != null) {
return false;
}
+ if (applicableObjectTypes != null ? !applicableObjectTypes.equals(that.applicableObjectTypes) : that.applicableObjectTypes != null) {
+ return false;
+ }
return true;
}
@@ -115,6 +142,7 @@ public class TagDefinitionJson {
result = 31 * result + (isControlTag != null ? isControlTag.hashCode() : 0);
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (description != null ? description.hashCode() : 0);
+ result = 31 * result + (applicableObjectTypes != null ? applicableObjectTypes.hashCode() : 0);
return result;
}
}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestTagDefinitionJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestTagDefinitionJson.java
index 2bfe258..6aa44ed 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestTagDefinitionJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestTagDefinitionJson.java
@@ -24,6 +24,7 @@ import org.testng.annotations.Test;
import com.ning.billing.jaxrs.JaxrsTestSuite;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableList;
public class TestTagDefinitionJson extends JaxrsTestSuite {
@@ -35,11 +36,13 @@ public class TestTagDefinitionJson extends JaxrsTestSuite {
final Boolean isControlTag = true;
final String name = UUID.randomUUID().toString();
final String description = UUID.randomUUID().toString();
- final TagDefinitionJson tagDefinitionJson = new TagDefinitionJson(id, isControlTag, name, description);
+ final ImmutableList<String> applicableObjectTypes = ImmutableList.<String>of(UUID.randomUUID().toString());
+ final TagDefinitionJson tagDefinitionJson = new TagDefinitionJson(id, isControlTag, name, description, applicableObjectTypes);
Assert.assertEquals(tagDefinitionJson.getId(), id);
Assert.assertEquals(tagDefinitionJson.isControlTag(), isControlTag);
Assert.assertEquals(tagDefinitionJson.getName(), name);
Assert.assertEquals(tagDefinitionJson.getDescription(), description);
+ Assert.assertEquals(tagDefinitionJson.getApplicableObjectTypes(), applicableObjectTypes);
final String asJson = mapper.writeValueAsString(tagDefinitionJson);
final TagDefinitionJson fromJson = mapper.readValue(asJson, TagDefinitionJson.class);
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestAccount.java b/server/src/test/java/com/ning/billing/jaxrs/TestAccount.java
index 226f4ea..cfe911d 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestAccount.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestAccount.java
@@ -44,6 +44,7 @@ import com.ning.billing.jaxrs.resources.JaxrsResource;
import com.ning.http.client.Response;
import com.fasterxml.jackson.core.type.TypeReference;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import static org.testng.Assert.assertEquals;
@@ -259,7 +260,8 @@ public class TestAccount extends TestJaxrsBase {
public void testTags() throws Exception {
// Use tag definition for AUTO_PAY_OFF
- final TagDefinitionJson input = new TagDefinitionJson(new UUID(0, 1).toString(), "AUTO_PAY_OFF", "nothing more to say");
+ final TagDefinitionJson input = new TagDefinitionJson(new UUID(0, 1).toString(), false, "AUTO_PAY_OFF",
+ "nothing more to say", ImmutableList.<String>of());
final Map<String, String> queryParams = new HashMap<String, String>();
queryParams.put(JaxrsResource.QUERY_TAGS, input.getId());
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestTag.java b/server/src/test/java/com/ning/billing/jaxrs/TestTag.java
index 2fbf239..fa84c93 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestTag.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestTag.java
@@ -27,6 +27,7 @@ import com.ning.billing.jaxrs.resources.JaxrsResource;
import com.ning.http.client.Response;
import com.fasterxml.jackson.core.type.TypeReference;
+import com.google.common.collect.ImmutableList;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
@@ -36,7 +37,7 @@ public class TestTag extends TestJaxrsBase {
@Test(groups = "slow")
public void testTagDefinitionOk() throws Exception {
- final TagDefinitionJson input = new TagDefinitionJson(null, "blue", "relaxing color");
+ final TagDefinitionJson input = new TagDefinitionJson(null, false, "blue", "relaxing color", ImmutableList.<String>of());
String baseJson = mapper.writeValueAsString(input);
Response response = doPost(JaxrsResource.TAG_DEFINITIONS_PATH, baseJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode());
@@ -51,7 +52,8 @@ public class TestTag extends TestJaxrsBase {
baseJson = response.getResponseBody();
final TagDefinitionJson objFromJson = mapper.readValue(baseJson, TagDefinitionJson.class);
assertNotNull(objFromJson);
- assertTrue(objFromJson.equalsNoId(input));
+ assertEquals(objFromJson.getName(), input.getName());
+ assertEquals(objFromJson.getDescription(), input.getDescription());
}
@Test(groups = "slow")
@@ -63,22 +65,22 @@ public class TestTag extends TestJaxrsBase {
List<TagDefinitionJson> objFromJson = mapper.readValue(baseJson, new TypeReference<List<TagDefinitionJson>>() {});
final int sizeSystemTag = (objFromJson == null || objFromJson.size() == 0) ? 0 : objFromJson.size();
- final TagDefinitionJson inputBlue = new TagDefinitionJson(null, "blue", "relaxing color");
+ final TagDefinitionJson inputBlue = new TagDefinitionJson(null, false, "blue", "relaxing color", ImmutableList.<String>of());
baseJson = mapper.writeValueAsString(inputBlue);
response = doPost(JaxrsResource.TAG_DEFINITIONS_PATH, baseJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode());
- final TagDefinitionJson inputRed = new TagDefinitionJson(null, "red", "hot color");
+ final TagDefinitionJson inputRed = new TagDefinitionJson(null, false, "red", "hot color", ImmutableList.<String>of());
baseJson = mapper.writeValueAsString(inputRed);
response = doPost(JaxrsResource.TAG_DEFINITIONS_PATH, baseJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode());
- final TagDefinitionJson inputYellow = new TagDefinitionJson(null, "yellow", "vibrant color");
+ final TagDefinitionJson inputYellow = new TagDefinitionJson(null, false, "yellow", "vibrant color", ImmutableList.<String>of());
baseJson = mapper.writeValueAsString(inputYellow);
response = doPost(JaxrsResource.TAG_DEFINITIONS_PATH, baseJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode());
- final TagDefinitionJson inputGreen = new TagDefinitionJson(null, "green", "super relaxing color");
+ final TagDefinitionJson inputGreen = new TagDefinitionJson(null, false, "green", "super relaxing color", ImmutableList.<String>of());
baseJson = mapper.writeValueAsString(inputGreen);
response = doPost(JaxrsResource.TAG_DEFINITIONS_PATH, baseJson, DEFAULT_EMPTY_QUERY, DEFAULT_HTTP_TIMEOUT_SEC);
assertEquals(response.getStatusCode(), Status.CREATED.getStatusCode());
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
index 7cf580e..95b1991 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
@@ -73,14 +73,14 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
throws TagApiException {
TagDefinition tagDefintion = null;
- for (ControlTagType t : ControlTagType.values()) {
+ for (final ControlTagType t : ControlTagType.values()) {
if (t.getId().equals(tagDefinitionId)) {
- tagDefintion = new DefaultTagDefinition(t.getId(), t.toString(), t.getDescription(), true);
+ tagDefintion = new DefaultTagDefinition(t);
break;
}
}
if (tagDefintion == null) {
- TagDefinitionSqlDao transTagDefintionSqlDao = tagSqlDao.become(TagDefinitionSqlDao.class);
+ final TagDefinitionSqlDao transTagDefintionSqlDao = tagSqlDao.become(TagDefinitionSqlDao.class);
tagDefintion = transTagDefintionSqlDao.getById(tagDefinitionId.toString());
}
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 fc0ddf2..30700a1 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
@@ -63,16 +63,16 @@ public class DefaultTagDefinitionDao implements TagDefinitionDao {
// Add control tag definitions
for (final ControlTagType controlTag : ControlTagType.values()) {
- definitionList.add(new DefaultTagDefinition(controlTag.getId(), controlTag.toString(), controlTag.getDescription(), true));
+ definitionList.add(new DefaultTagDefinition(controlTag));
}
return definitionList;
}
@Override
- public TagDefinition getByName(String definitionName) {
+ public TagDefinition getByName(final String definitionName) {
for (final ControlTagType controlTag : ControlTagType.values()) {
if (controlTag.name().equals(definitionName)) {
- return new DefaultTagDefinition(controlTag.getId(), controlTag.toString(), controlTag.getDescription(), true);
+ return new DefaultTagDefinition(controlTag);
}
}
return tagDefinitionSqlDao.getByName(definitionName);
@@ -83,7 +83,7 @@ public class DefaultTagDefinitionDao implements TagDefinitionDao {
public TagDefinition getById(final UUID definitionId) {
for (final ControlTagType controlTag : ControlTagType.values()) {
if (controlTag.getId().equals(definitionId)) {
- return new DefaultTagDefinition(controlTag.getId(), controlTag.toString(), controlTag.getDescription(), true);
+ return new DefaultTagDefinition(controlTag);
}
}
return tagDefinitionSqlDao.getById(definitionId.toString());
@@ -91,12 +91,11 @@ public class DefaultTagDefinitionDao implements TagDefinitionDao {
@Override
public List<TagDefinition> getByIds(final Collection<UUID> definitionIds) {
-
- List<TagDefinition> result = new LinkedList<TagDefinition>();
+ 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.getId(), controlTag.toString(), controlTag.getDescription(), true));
+ result.add(new DefaultTagDefinition(controlTag));
break;
}
}
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 3e566a5..8b0d38c 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
@@ -16,30 +16,46 @@
package com.ning.billing.util.tag;
+import java.util.List;
import java.util.UUID;
+import com.ning.billing.util.dao.ObjectType;
+import com.ning.billing.util.entity.EntityBase;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import com.ning.billing.util.entity.EntityBase;
+import com.google.common.collect.ImmutableList;
public class DefaultTagDefinition extends EntityBase implements TagDefinition {
+
private final String name;
private final String description;
private final Boolean controlTag;
+ private final List<ObjectType> applicableObjectTypes;
public DefaultTagDefinition(final String name, final String description, final Boolean isControlTag) {
this(UUID.randomUUID(), name, description, isControlTag);
}
+ public DefaultTagDefinition(final UUID id, final String name, final String description, final Boolean isControlTag) {
+ this(id, name, description, isControlTag, ImmutableList.<ObjectType>copyOf(ObjectType.values()));
+ }
+
+ public DefaultTagDefinition(final ControlTagType controlTag) {
+ this(controlTag.getId(), controlTag.toString(), controlTag.getDescription(), true, controlTag.getApplicableObjectTypes());
+ }
+
@JsonCreator
public DefaultTagDefinition(@JsonProperty("id") final UUID id,
@JsonProperty("name") final String name,
@JsonProperty("description") final String description,
- @JsonProperty("controlTag") final Boolean controlTag) {
+ @JsonProperty("controlTag") final Boolean controlTag,
+ @JsonProperty("applicableObjectTypes") final List<ObjectType> applicableObjectTypes) {
super(id);
this.name = name;
this.description = description;
this.controlTag = controlTag;
+ this.applicableObjectTypes = applicableObjectTypes;
}
@Override
@@ -58,18 +74,22 @@ public class DefaultTagDefinition extends EntityBase implements TagDefinition {
}
@Override
+ public List<ObjectType> getApplicableObjectTypes() {
+ return applicableObjectTypes;
+ }
+
+ @Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("DefaultTagDefinition");
- sb.append("{description='").append(description).append('\'');
- sb.append(", name='").append(name).append('\'');
+ sb.append("{name='").append(name).append('\'');
+ sb.append(", description='").append(description).append('\'');
sb.append(", controlTag=").append(controlTag);
+ sb.append(", applicableObjectTypes=").append(applicableObjectTypes);
sb.append('}');
return sb.toString();
}
-
-
@Override
public boolean equals(final Object o) {
if (this == o) {
@@ -78,29 +98,31 @@ public class DefaultTagDefinition extends EntityBase implements TagDefinition {
if (o == null || getClass() != o.getClass()) {
return false;
}
+
final DefaultTagDefinition that = (DefaultTagDefinition) o;
- if (id != null ? !id.equals(that.id) : that.id != null) {
+ if (applicableObjectTypes != null ? !applicableObjectTypes.equals(that.applicableObjectTypes) : that.applicableObjectTypes != null) {
return false;
}
- if (description != null ? !description.equals(that.description) : that.description != null) {
+ if (controlTag != null ? !controlTag.equals(that.controlTag) : that.controlTag != null) {
return false;
}
- if (controlTag != null ? !controlTag.equals(that.controlTag) : that.controlTag != null) {
+ 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 = name != null ? name.hashCode() : 0;
- result = 31 * result + (id != null ? id.hashCode() : 0);
result = 31 * result + (description != null ? description.hashCode() : 0);
result = 31 * result + (controlTag != null ? controlTag.hashCode() : 0);
+ result = 31 * result + (applicableObjectTypes != null ? applicableObjectTypes.hashCode() : 0);
return result;
}
}