killbill-memoizeit
Changes
invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalCapacityUsageInArrear.java 3(+1 -2)
invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalConsumableUsageInArrear.java 2(+1 -1)
invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java 47(+13 -34)
invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageCapacityInArrearDetail.java 20(+0 -20)
invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageConsumableInArrearDetail.java 17(+0 -17)
Details
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalCapacityUsageInArrear.java b/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalCapacityUsageInArrear.java
index 3652965..e5321fe 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalCapacityUsageInArrear.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalCapacityUsageInArrear.java
@@ -32,7 +32,6 @@ import org.killbill.billing.catalog.api.Usage;
import org.killbill.billing.invoice.api.InvoiceItem;
import org.killbill.billing.invoice.model.UsageInvoiceItem;
import org.killbill.billing.invoice.usage.details.UsageCapacityInArrearDetail;
-import org.killbill.billing.invoice.usage.details.UsageConsumableInArrearTierUnitDetail;
import org.killbill.billing.invoice.usage.details.UsageInArrearDetail;
import org.killbill.billing.invoice.usage.details.UsageInArrearTierUnitDetail;
import org.killbill.billing.usage.RawUsage;
@@ -73,7 +72,7 @@ public class ContiguousIntervalCapacityUsageInArrear extends ContiguousIntervalU
final BigDecimal amountToBill = toBeBilledUsage.subtract(billedUsage);
if (amountToBill.compareTo(BigDecimal.ZERO) > 0) {
- final String itemDetails = areAllBilledItemsWithDetails ? toBeBilledUsageDetails.toJson(objectMapper) : null;
+ final String itemDetails = areAllBilledItemsWithDetails ? toJson(toBeBilledUsageDetails) : null;
final InvoiceItem item = new UsageInvoiceItem(invoiceId, accountId, getBundleId(), getSubscriptionId(), getPlanName(),
getPhaseName(), usage.getName(), startDate, endDate, amountToBill, null, getCurrency(), null, itemDetails);
result.add(item);
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalConsumableUsageInArrear.java b/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalConsumableUsageInArrear.java
index 7ef86ff..04073ba 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalConsumableUsageInArrear.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalConsumableUsageInArrear.java
@@ -82,7 +82,7 @@ public class ContiguousIntervalConsumableUsageInArrear extends ContiguousInterva
result.add(item);
}
} else {
- final String itemDetails = toBeBilledUsageDetails.toJson(objectMapper);
+ final String itemDetails = toJson(toBeBilledUsageDetails);
final InvoiceItem item = new UsageInvoiceItem(invoiceId, accountId, getBundleId(), getSubscriptionId(), getPlanName(),
getPhaseName(), usage.getName(), startDate, endDate, amountToBill, null, getCurrency(), null, itemDetails);
result.add(item);
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java b/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java
index 429ed96..7dfba4f 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java
@@ -17,11 +17,9 @@
package org.killbill.billing.invoice.usage;
-import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -37,8 +35,6 @@ import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.catalog.api.BillingMode;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.Currency;
-import org.killbill.billing.catalog.api.Limit;
-import org.killbill.billing.catalog.api.Tier;
import org.killbill.billing.catalog.api.Usage;
import org.killbill.billing.catalog.api.UsageType;
import org.killbill.billing.invoice.api.InvoiceApiException;
@@ -46,10 +42,7 @@ import org.killbill.billing.invoice.api.InvoiceItem;
import org.killbill.billing.invoice.api.InvoiceItemType;
import org.killbill.billing.invoice.generator.BillingIntervalDetail;
import org.killbill.billing.invoice.model.UsageInvoiceItem;
-import org.killbill.billing.invoice.usage.details.UsageCapacityInArrearDetail;
-import org.killbill.billing.invoice.usage.details.UsageConsumableInArrearTierUnitDetail;
import org.killbill.billing.invoice.usage.details.UsageInArrearDetail;
-import org.killbill.billing.invoice.usage.details.UsageInArrearTierUnitDetail;
import org.killbill.billing.junction.BillingEvent;
import org.killbill.billing.usage.RawUsage;
import org.killbill.billing.usage.api.RolledUpUnit;
@@ -59,16 +52,14 @@ import org.killbill.billing.util.jackson.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-import static org.killbill.billing.invoice.usage.UsageUtils.getCapacityInArrearTier;
import static org.killbill.billing.invoice.usage.UsageUtils.getCapacityInArrearUnitTypes;
import static org.killbill.billing.invoice.usage.UsageUtils.getConsumableInArrearUnitTypes;
@@ -208,24 +199,24 @@ public abstract class ContiguousIntervalUsageInArrear {
final List<RolledUpUnit> rolledUpUnits = ru.getRolledUpUnits();
-
-
final UsageInArrearDetail toBeBilledUsageDetails = getToBeBilledUsageDetails(rolledUpUnits, billedItems, areAllBilledItemsWithDetails);
final BigDecimal toBeBilledUsage = toBeBilledUsageDetails.getAmount();
final int billedUsageDelta = billedUsage.compareTo(toBeBilledUsage);
// We built more in the past than what we find now, data usage vanished?
if (billedUsageDelta > 0) {
+ /*
throw new InvoiceApiException(ErrorCode.UNEXPECTED_ERROR,
String.format("ILLEGAL INVOICING STATE: Usage period start='%s', end='%s', previously billed amount='%.2f', new proposed amount='%.2f'",
ru.getStart(), ru.getEnd(), billedUsage, toBeBilledUsage));
- // Something remains to be billed
+ */
+ // Something remains to be billed
} else if (billedUsageDelta < 0) {
populateResults(ru.getStart(), ru.getEnd(), billedItems, billedUsage, toBeBilledUsage, toBeBilledUsageDetails, areAllBilledItemsWithDetails, result);
}
}
- final LocalDate nextNotificationdate = computeNextNotificationDate();
- return new UsageInArrearItemsAndNextNotificationDate(result, nextNotificationdate);
+ final LocalDate nextNotificationDate = computeNextNotificationDate();
+ return new UsageInArrearItemsAndNextNotificationDate(result, nextNotificationDate);
}
protected abstract void populateResults(final LocalDate startDate, final LocalDate endDate, final Iterable<InvoiceItem> billedItems, final BigDecimal billedUsage, final BigDecimal toBeBilledUsage, final UsageInArrearDetail toBeBilledUsageDetails, final boolean areAllBilledItemsWithDetails, final List<InvoiceItem> result);
@@ -368,16 +359,6 @@ public abstract class ContiguousIntervalUsageInArrear {
}
}
- private Limit getTierLimit(final Tier tier, final String unitType) {
- for (final Limit cur : tier.getLimits()) {
- if (cur.getUnit().getName().equals(unitType)) {
- return cur;
- }
- }
- Preconditions.checkState(false, "Could not find unit type " + unitType + " in usage tier ");
- return null;
- }
-
/**
* @param filteredUsageForInterval the list of invoiceItem to consider
* @return the price amount that was already billed for that period and usage section (across unitTypes)
@@ -482,15 +463,13 @@ public abstract class ContiguousIntervalUsageInArrear {
}
}
- public BigDecimal toBeBilledForUnit(final List<UsageConsumableInArrearTierUnitDetail> toBeBilledDetails, final UsageType usageType) {
- if (usageType == UsageType.CAPACITY) {
- return toBeBilledDetails.get(0).getAmount();
- } else {
- BigDecimal result = BigDecimal.ZERO;
- for (UsageConsumableInArrearTierUnitDetail toBeBilled : toBeBilledDetails) {
- result = result.add(toBeBilled.getAmount());
- }
- return result;
+ protected String toJson(final UsageInArrearDetail usageInArrearDetail) {
+ try {
+ return objectMapper.writeValueAsString(usageInArrearDetail);
+ } catch (JsonProcessingException e) {
+ Preconditions.checkState(false, e.getMessage());
+ return null;
}
}
+
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageCapacityInArrearDetail.java b/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageCapacityInArrearDetail.java
index 9298f99..4baa4d9 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageCapacityInArrearDetail.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageCapacityInArrearDetail.java
@@ -20,12 +20,8 @@ package org.killbill.billing.invoice.usage.details;
import java.math.BigDecimal;
import java.util.List;
-import org.killbill.billing.util.jackson.ObjectMapper;
-
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.google.common.base.Preconditions;
public class UsageCapacityInArrearDetail implements UsageInArrearDetail {
@@ -50,20 +46,4 @@ public class UsageCapacityInArrearDetail implements UsageInArrearDetail {
public List<UsageInArrearTierUnitDetail> getTierDetails() {
return tierDetails;
}
-
- @Override
- public String toJson(final ObjectMapper objectMapper) {
-
-
- String result = null;
- if (tierDetails != null && tierDetails.size() > 0) {
- try {
- result = objectMapper.writeValueAsString(this);
- } catch (JsonProcessingException e) {
- Preconditions.checkState(false, e.getMessage());
- }
- }
- return result;
- }
-
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageConsumableInArrearDetail.java b/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageConsumableInArrearDetail.java
index 927836a..8d690bb 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageConsumableInArrearDetail.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageConsumableInArrearDetail.java
@@ -20,12 +20,8 @@ package org.killbill.billing.invoice.usage.details;
import java.math.BigDecimal;
import java.util.List;
-import org.killbill.billing.util.jackson.ObjectMapper;
-
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.google.common.base.Preconditions;
public class UsageConsumableInArrearDetail implements UsageInArrearDetail {
@@ -47,19 +43,6 @@ public class UsageConsumableInArrearDetail implements UsageInArrearDetail {
return amount;
}
- @Override
- public String toJson(final ObjectMapper objectMapper) {
- String result = null;
- if (tierDetails != null && tierDetails.size() > 0){
- try {
- result = objectMapper.writeValueAsString(this);
- } catch (JsonProcessingException e) {
- Preconditions.checkState(false, e.getMessage());
- }
- }
- return result;
- }
-
public List<UsageConsumableInArrearTierUnitDetail> getTierDetails() {
return tierDetails;
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageInArrearDetail.java b/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageInArrearDetail.java
index a9dfdba..c04ed95 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageInArrearDetail.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/usage/details/UsageInArrearDetail.java
@@ -19,11 +19,7 @@ package org.killbill.billing.invoice.usage.details;
import java.math.BigDecimal;
-import org.killbill.billing.util.jackson.ObjectMapper;
-
public interface UsageInArrearDetail {
BigDecimal getAmount();
-
- String toJson(ObjectMapper mapper);
}
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalCapacityInArrear.java b/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalCapacityInArrear.java
index ee8131f..8ffd615 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalCapacityInArrear.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalCapacityInArrear.java
@@ -359,7 +359,7 @@ public class TestContiguousIntervalCapacityInArrear extends TestUsageInArrearBas
final List<UsageInArrearTierUnitDetail> existingUsage = ImmutableList.of(existingFooUsageTier1, existingBarUsageTier2);
- final String existingUsageJson = new UsageCapacityInArrearDetail(existingUsage, BigDecimal.TEN).toJson(objectMapper);
+ final String existingUsageJson = objectMapper.writeValueAsString(new UsageCapacityInArrearDetail(existingUsage, BigDecimal.TEN));
final List<InvoiceItem> existingItems = new ArrayList<InvoiceItem>();
final InvoiceItem ii1 = new UsageInvoiceItem(invoiceId, accountId, bundleId, subscriptionId, planName, phaseName, usageName, new LocalDate(2014, 03, 20), new LocalDate(2014, 04, 15), BigDecimal.TEN, null, currency, null, existingUsageJson);
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalConsumableInArrear.java b/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalConsumableInArrear.java
index 9d15f4d..c7ebfa4 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalConsumableInArrear.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalConsumableInArrear.java
@@ -450,7 +450,7 @@ public class TestContiguousIntervalConsumableInArrear extends TestUsageInArrearB
}
@Test(groups = "fast")
- public void testTobeBilledForUnit() throws CatalogApiException {
+ public void testBilledUsage() throws CatalogApiException {
final DefaultTieredBlock block1 = createDefaultTieredBlock("cell-phone-minutes", 1000, 10000, new BigDecimal("0.5"));
final DefaultTieredBlock block2 = createDefaultTieredBlock("Mbytes", 512, 512000, new BigDecimal("0.3"));
@@ -463,12 +463,14 @@ public class TestContiguousIntervalConsumableInArrear extends TestUsageInArrearB
BillingPeriod.MONTHLY,
Collections.<Usage>emptyList())
);
- List<UsageConsumableInArrearTierUnitDetail> results = Lists.newArrayList();
- results.addAll(intervalConsumableInArrear.computeToBeBilledConsumableInArrear(new DefaultRolledUpUnit("cell-phone-minutes", 1000L), ImmutableList.<UsageConsumableInArrearTierUnitDetail>of(), true));
- results.addAll(intervalConsumableInArrear.computeToBeBilledConsumableInArrear(new DefaultRolledUpUnit("Mbytes", 30720L), ImmutableList.<UsageConsumableInArrearTierUnitDetail>of(), true));
- assertEquals(results.size(), 2);
+ final List<UsageConsumableInArrearTierUnitDetail> tierUnitDetails = Lists.newArrayList();
+ tierUnitDetails.addAll(intervalConsumableInArrear.computeToBeBilledConsumableInArrear(new DefaultRolledUpUnit("cell-phone-minutes", 1000L), ImmutableList.<UsageConsumableInArrearTierUnitDetail>of(), true));
+ tierUnitDetails.addAll(intervalConsumableInArrear.computeToBeBilledConsumableInArrear(new DefaultRolledUpUnit("Mbytes", 30720L), ImmutableList.<UsageConsumableInArrearTierUnitDetail>of(), true));
+ assertEquals(tierUnitDetails.size(), 2);
- assertEquals(intervalConsumableInArrear.toBeBilledForUnit(results, UsageType.CONSUMABLE), new BigDecimal("18.5"));
+ final UsageConsumableInArrearDetail details = new UsageConsumableInArrearDetail(tierUnitDetails);
+
+ assertEquals(details.getAmount().compareTo(new BigDecimal("18.5")), 0);
}
@Test(groups = "fast")
@@ -786,9 +788,9 @@ public class TestContiguousIntervalConsumableInArrear extends TestUsageInArrearB
final List<UsageConsumableInArrearTierUnitDetail> existingUsage = ImmutableList.of(existingFooUsageTier1, existingFooUsageTier2, existingBarUsageTier1);
- final UsageConsumableInArrearDetail tmp = new UsageConsumableInArrearDetail(existingUsage);
+ final UsageConsumableInArrearDetail usageConsumableInArrearDetail = new UsageConsumableInArrearDetail(existingUsage);
- final String existingUsageJson = tmp.toJson(objectMapper);
+ final String existingUsageJson = objectMapper.writeValueAsString(usageConsumableInArrearDetail);
//
// Create usage data points (will include already billed + add new usage data)