killbill-aplcache

Details

diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationBase.java
index 6bec34b..c3b2036 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegrationBase.java
@@ -1050,8 +1050,13 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
         }
 
         @Override
-        public String getItemResultBehaviorMode() {
-            return null;
+        public UsageDetailMode getItemResultBehaviorMode() {
+            return defaultInvoiceConfig.getItemResultBehaviorMode();
+        }
+
+        @Override
+        public UsageDetailMode getItemResultBehaviorMode(final InternalTenantContext tenantContext) {
+            return getItemResultBehaviorMode();
         }
 
         public void setInvoicingSystemEnabled(final boolean invoicingSystemEnabled) {
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/config/MultiTenantInvoiceConfig.java b/invoice/src/main/java/org/killbill/billing/invoice/config/MultiTenantInvoiceConfig.java
index adcf302..98e14d7 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/config/MultiTenantInvoiceConfig.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/config/MultiTenantInvoiceConfig.java
@@ -32,6 +32,7 @@ import org.skife.config.TimeSpan;
 
 public class MultiTenantInvoiceConfig extends MultiTenantConfigBase implements InvoiceConfig {
 
+
     private final InvoiceConfig staticConfig;
 
     @Inject
@@ -163,12 +164,26 @@ public class MultiTenantInvoiceConfig extends MultiTenantConfigBase implements I
     }
 
     @Override
-    public String getItemResultBehaviorMode() {
-        final String result = staticConfig.getItemResultBehaviorMode();
-        if (result != InvoiceConfig.AGGREGATE_MODE || result != InvoiceConfig.DETAIL_MODE) {
-            return InvoiceConfig.AGGREGATE_MODE;
+    public UsageDetailMode getItemResultBehaviorMode() {
+        final UsageDetailMode mode = staticConfig.getItemResultBehaviorMode();
+        if (mode.compareTo(UsageDetailMode.AGGREGATE) != 0 || mode.compareTo(UsageDetailMode.DETAIL) != 0) {
+            return UsageDetailMode.AGGREGATE;
+        }
+        return mode;
+    }
+
+    @Override
+    public UsageDetailMode getItemResultBehaviorMode(final InternalTenantContext tenantContext) {
+        final UsageDetailMode mode = staticConfig.getItemResultBehaviorMode();
+        final String result = getStringTenantConfig("getItemResultBehaviorMode", tenantContext);
+        if (result != null){
+            return UsageDetailMode.valueOf(result);
+        }
+
+        if (mode.compareTo(UsageDetailMode.AGGREGATE) != 0 || mode.compareTo(UsageDetailMode.DETAIL) != 0) {
+            return UsageDetailMode.AGGREGATE;
         }
-        return result;
+        return mode;
     }
 
     @Override
diff --git a/util/src/main/java/org/killbill/billing/util/config/definition/InvoiceConfig.java b/util/src/main/java/org/killbill/billing/util/config/definition/InvoiceConfig.java
index 434291e..2291565 100644
--- a/util/src/main/java/org/killbill/billing/util/config/definition/InvoiceConfig.java
+++ b/util/src/main/java/org/killbill/billing/util/config/definition/InvoiceConfig.java
@@ -27,8 +27,11 @@ import org.skife.config.Param;
 import org.skife.config.TimeSpan;
 
 public interface InvoiceConfig extends KillbillConfig {
-    static final String AGGREGATE_MODE = "aggregate";
-    static final String DETAIL_MODE = "detail";
+
+    public enum UsageDetailMode {
+        AGGREGATE,
+        DETAIL,
+    }
 
     @Config("org.killbill.invoice.maxNumberOfMonthsInFuture")
     @Default("36")
@@ -121,7 +124,12 @@ public interface InvoiceConfig extends KillbillConfig {
     boolean isInvoicingSystemEnabled(@Param("dummy") final InternalTenantContext tenantContext);
 
     @Config("org.killbill.invoice.item.result.behavior.mode")
-    @Default(AGGREGATE_MODE)
+    @Default("AGGREGATE")
+    @Description("How the result for an item will be reported (aggregate mode or detail mode). ")
+    UsageDetailMode getItemResultBehaviorMode();
+
+    @Config("org.killbill.invoice.item.result.behavior.mode")
+    @Default("AGGREGATE")
     @Description("How the result for an item will be reported (aggregate mode or detail mode). ")
-    String getItemResultBehaviorMode();
+    UsageDetailMode getItemResultBehaviorMode(@Param("dummy") final InternalTenantContext tenantContext);
 }