diff --git a/util/src/main/java/org/killbill/billing/util/tag/DefaultTagDefinition.java b/util/src/main/java/org/killbill/billing/util/tag/DefaultTagDefinition.java
index 32d85f8..48383fe 100644
--- a/util/src/main/java/org/killbill/billing/util/tag/DefaultTagDefinition.java
+++ b/util/src/main/java/org/killbill/billing/util/tag/DefaultTagDefinition.java
@@ -44,13 +44,14 @@ public class DefaultTagDefinition extends EntityBase implements TagDefinition {
}
public DefaultTagDefinition(final UUID id, final String name, final String description, final Boolean isControlTag) {
- this(id, name, description, isControlTag, ImmutableList.<ObjectType>copyOf(ObjectType.values()));
+ this(id, name, description, isControlTag, getApplicableObjectTypes(id, isControlTag));
}
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,
@@ -131,4 +132,16 @@ public class DefaultTagDefinition extends EntityBase implements TagDefinition {
result = 31 * result + (applicableObjectTypes != null ? applicableObjectTypes.hashCode() : 0);
return result;
}
+
+ private static List<ObjectType> getApplicableObjectTypes(final UUID id, final Boolean isControlTag) {
+ if (!isControlTag) {
+ return ImmutableList.<ObjectType>of();
+ }
+ for (final ControlTagType cur : ControlTagType.values()) {
+ if (cur.getId().equals(id)) {
+ return cur.getApplicableObjectTypes();
+ }
+ }
+ throw new IllegalStateException(String.format("ControlTag id %s does not seem to exist", id));
+ }
}
diff --git a/util/src/test/java/org/killbill/billing/util/tag/TestDefaultTagDefinition.java b/util/src/test/java/org/killbill/billing/util/tag/TestDefaultTagDefinition.java
new file mode 100644
index 0000000..59aaf26
--- /dev/null
+++ b/util/src/test/java/org/killbill/billing/util/tag/TestDefaultTagDefinition.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
+ *
+ * The Billing Project 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 org.killbill.billing.util.tag;
+
+import java.util.UUID;
+
+import org.killbill.billing.util.UtilTestSuiteNoDB;
+import org.killbill.billing.util.api.TagApiException;
+import org.killbill.billing.util.api.TagDefinitionApiException;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class TestDefaultTagDefinition extends UtilTestSuiteNoDB {
+
+ @Test(groups = "fast")
+ public void testDefaultTagDefinition() throws TagApiException, TagDefinitionApiException {
+
+ final DefaultTagDefinition def1 = new DefaultTagDefinition(UUID.randomUUID(), "foo", "nothing", false);
+ Assert.assertTrue(def1.getApplicableObjectTypes().isEmpty());
+
+ for (final ControlTagType cur : ControlTagType.values()) {
+
+ final DefaultTagDefinition curDef = new DefaultTagDefinition(cur.getId(), cur.name(), cur.getDescription(), true);
+ Assert.assertFalse(curDef.getApplicableObjectTypes().isEmpty());
+ Assert.assertEquals(curDef.getApplicableObjectTypes(), cur.getApplicableObjectTypes());
+ }
+
+ try {
+ new DefaultTagDefinition(UUID.randomUUID(), "bar", "nothing again", true);
+ Assert.fail("Not a control tag type");
+ } catch (final IllegalStateException e) {
+ }
+ }
+}