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;