killbill-aplcache

Add units list to CatalogJson.

5/15/2017 10:41:37 AM

Details

diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultUnit.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultUnit.java
index 9d3f148..fd63d8c 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultUnit.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultUnit.java
@@ -29,11 +29,14 @@ import org.killbill.xmlloader.ValidationErrors;
 
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultUnit extends ValidatingConfig<StandaloneCatalog> implements Unit {
-    
+
     @XmlAttribute(required = true)
     @XmlID
     private String name;
 
+    @XmlAttribute(required = false)
+    private String prettyName;
+
     /* (non-Javadoc)
      * @see org.killbill.billing.catalog.Unit#getName()
      */
@@ -44,7 +47,7 @@ public class DefaultUnit extends ValidatingConfig<StandaloneCatalog> implements 
 
     @Override
     public String getPrettyName() {
-        return name;
+        return prettyName;
     }
 
     @Override
@@ -57,6 +60,9 @@ public class DefaultUnit extends ValidatingConfig<StandaloneCatalog> implements 
     public void initialize(final StandaloneCatalog catalog, final URI sourceURI) {
         super.initialize(catalog, sourceURI);
         CatalogSafetyInitializer.initializeNonRequiredNullFieldsWithDefaultValue(this);
+        if(prettyName == null){
+            this.prettyName = name;
+        }
     }
 
 
@@ -65,6 +71,11 @@ public class DefaultUnit extends ValidatingConfig<StandaloneCatalog> implements 
         return this;
     }
 
+    public DefaultUnit setPrettyName(final String prettyName) {
+        this.prettyName = prettyName;
+        return this;
+    }
+
     @Override
     public boolean equals(final Object o) {
         if (this == o) {
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/VersionedCatalog.java b/catalog/src/main/java/org/killbill/billing/catalog/VersionedCatalog.java
index e52d6a8..6929ecc 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/VersionedCatalog.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/VersionedCatalog.java
@@ -274,6 +274,10 @@ public class VersionedCatalog extends ValidatingConfig<VersionedCatalog> impleme
         return versionForDate(requestedDate).getCurrentSupportedCurrencies();
     }
 
+    public Unit[] getUnits(final DateTime requestedDate) throws CatalogApiException {
+        return versionForDate(requestedDate).getCurrentUnits();
+    }
+
     @Override
     public Collection<Plan> getPlans(final DateTime requestedDate) throws CatalogApiException {
         return versionForDate(requestedDate).getCurrentPlans();
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
index 1fb466f..d5d36bf 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
@@ -28,8 +28,8 @@ import java.util.List;
 import java.util.Map;
 
 import org.joda.time.DateTime;
+import org.killbill.billing.catalog.VersionedCatalog;
 import org.killbill.billing.catalog.api.BillingPeriod;
-import org.killbill.billing.catalog.api.Catalog;
 import org.killbill.billing.catalog.api.CatalogApiException;
 import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.catalog.api.CurrencyValueNull;
@@ -45,6 +45,7 @@ import org.killbill.billing.catalog.api.Product;
 import org.killbill.billing.catalog.api.Tier;
 import org.killbill.billing.catalog.api.TieredBlock;
 import org.killbill.billing.catalog.api.TimeUnit;
+import org.killbill.billing.catalog.api.Unit;
 import org.killbill.billing.catalog.api.Usage;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
@@ -58,6 +59,7 @@ public class CatalogJson {
     private final String name;
     private final Date effectiveDate;
     private final List<Currency> currencies;
+    private final List<UnitJson> units;
     private final List<ProductJson> products;
     private final List<PriceListJson> priceLists;
 
@@ -65,22 +67,31 @@ public class CatalogJson {
     public CatalogJson(@JsonProperty("name") final String name,
                        @JsonProperty("effectiveDate") final Date effectiveDate,
                        @JsonProperty("currencies") final List<Currency> currencies,
+                       @JsonProperty("units") final List<UnitJson> units,
                        @JsonProperty("products") final List<ProductJson> products,
                        @JsonProperty("priceLists") final List<PriceListJson> priceLists) {
         this.name = name;
         this.effectiveDate = effectiveDate;
         this.currencies = currencies;
+        this.units = units;
         this.products = products;
         this.priceLists = priceLists;
     }
 
 
-    public CatalogJson(final Catalog catalog, final DateTime requestedDate) throws CatalogApiException {
+    public CatalogJson(final VersionedCatalog catalog, final DateTime requestedDate) throws CatalogApiException {
         name = catalog.getCatalogName();
         effectiveDate = catalog.getStandaloneCatalogEffectiveDate(requestedDate);
         currencies = Arrays.asList(catalog.getSupportedCurrencies(requestedDate));
         priceLists = new ArrayList<PriceListJson>();
 
+        List<UnitJson> units = new ArrayList<UnitJson>();
+        for (final Unit unit : catalog.getUnits(requestedDate)) {
+            final UnitJson unitJson = new UnitJson(unit.getName(), unit.getPrettyName());
+            units.add(unitJson);
+        }
+        this.units = units;
+
         final Collection<Plan> plans = catalog.getPlans(requestedDate);
         final Map<String, ProductJson> productMap = new HashMap<String, ProductJson>();
         for (final Plan plan : plans) {
@@ -220,6 +231,10 @@ public class CatalogJson {
         return currencies;
     }
 
+    public List<UnitJson> getUnits() {
+        return units;
+    }
+
     public List<PriceListJson> getPriceLists() {
         return priceLists;
     }
@@ -230,6 +245,7 @@ public class CatalogJson {
         sb.append("name='").append(name).append('\'');
         sb.append(", effectiveDate='").append(effectiveDate).append('\'');
         sb.append(", currencies='").append(currencies).append('\'');
+        sb.append(", units='").append(units).append('\'');
         sb.append(", products=").append(products);
         sb.append(", priceLists=").append(priceLists);
         sb.append('}');
@@ -256,6 +272,9 @@ public class CatalogJson {
         if (currencies != null ? !currencies.equals(that.currencies) : that.currencies != null) {
             return false;
         }
+        if (units != null ? !units.equals(that.units) : that.units != null) {
+            return false;
+        }
         if (products != null ? !products.equals(that.products) : that.products != null) {
             return false;
         }
@@ -271,10 +290,60 @@ public class CatalogJson {
         int result = name != null ? name.hashCode() : 0;
         result = 31 * result + (effectiveDate != null ? effectiveDate.hashCode() : 0);
         result = 31 * result + (currencies != null ? currencies.hashCode() : 0);
+        result = 31 * result + (units != null ? units.hashCode() : 0);
         result = 31 * result + (products != null ? products.hashCode() : 0);
         return result;
     }
 
+    public static class UnitJson {
+
+        private final String name;
+        private final String prettyName;
+
+        @JsonCreator
+        public UnitJson(@JsonProperty("name") final String name,
+                        @JsonProperty("prettyName") final String prettyName) {
+            this.name = name;
+            this.prettyName = prettyName;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getPrettyName() {
+            return prettyName;
+        }
+
+        @Override
+        public String toString() {
+            final StringBuilder sb = new StringBuilder("UnitJson{");
+            sb.append("name='").append(name).append('\'');
+            sb.append(", prettyName='").append(prettyName).append('\'');
+            sb.append('}');
+            return sb.toString();
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            UnitJson unitJson = (UnitJson) o;
+
+            if (name != null ? !name.equals(unitJson.name) : unitJson.name != null) return false;
+            return prettyName != null ? prettyName.equals(unitJson.prettyName) : unitJson.prettyName == null;
+        }
+
+        @Override
+        public int hashCode() {
+            int result = name != null ? name.hashCode() : 0;
+            result = 31 * result + (prettyName != null ? prettyName.hashCode() : 0);
+            return result;
+        }
+
+    }
+
     public static class ProductJson {
 
         private final String type;