killbill-uncached

Merge pull request #443 from maguero/ma-issue-158 #158:

12/4/2015 3:51:46 PM

Changes

jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJsonSimple.java 415(+0 -415)

Details

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 be9377e..4a0f4f2 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
@@ -34,12 +34,14 @@ 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;
+import org.killbill.billing.catalog.api.Duration;
 import org.killbill.billing.catalog.api.Plan;
 import org.killbill.billing.catalog.api.PlanPhase;
 import org.killbill.billing.catalog.api.Price;
 import org.killbill.billing.catalog.api.PriceList;
 import org.killbill.billing.catalog.api.PriceListSet;
 import org.killbill.billing.catalog.api.Product;
+import org.killbill.billing.catalog.api.TimeUnit;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -99,7 +101,15 @@ public class CatalogJson {
                     }
                 }
 
-                final PhaseJson phaseJson = new PhaseJson(phase.getPhaseType().toString(), prices);
+                final List<PriceJson> fixedPrices = new LinkedList<PriceJson>();
+                if (phase.getFixed() != null && phase.getFixed().getPrice() != null) {
+                    for (final Price price : phase.getFixed().getPrice().getPrices()) {
+                        fixedPrices.add(new PriceJson(price));
+                    }
+                }
+
+                final DurationJson durationJson = new DurationJson(phase.getDuration().getUnit(), phase.getDuration().getNumber());
+                final PhaseJson phaseJson = new PhaseJson(phase.getPhaseType().toString(), prices, fixedPrices, durationJson);
                 phases.add(phaseJson);
             }
 
@@ -369,12 +379,18 @@ public class CatalogJson {
 
         private final String type;
         private final List<PriceJson> prices;
+        private final List<PriceJson> fixedPrices;
+        private final DurationJson duration;
 
         @JsonCreator
         public PhaseJson(@JsonProperty("type") final String type,
-                         @JsonProperty("prices") final List<PriceJson> prices) {
+                         @JsonProperty("prices") final List<PriceJson> prices,
+                         @JsonProperty("fixedPrices") final List<PriceJson> fixedPrices,
+                         @JsonProperty("duration") final DurationJson duration) {
             this.type = type;
             this.prices = prices;
+            this.fixedPrices = fixedPrices;
+            this.duration = duration;
         }
 
         public String getType() {
@@ -383,12 +399,20 @@ public class CatalogJson {
         public List<PriceJson> getPrices() {
             return prices;
         }
+        public List<PriceJson> getFixedPrices() {
+            return fixedPrices;
+        }
+        public DurationJson getDuration() {
+            return duration;
+        }
 
         @Override
         public String toString() {
             final StringBuilder sb = new StringBuilder("PhaseJson{");
             sb.append("type='").append(type).append('\'');
             sb.append(", prices=").append(prices);
+            sb.append(", fixedPrices=").append(fixedPrices);
+            sb.append(", duration=").append(duration);
             sb.append('}');
             return sb.toString();
         }
@@ -407,9 +431,15 @@ public class CatalogJson {
             if (prices != null ? !prices.equals(phaseJson.prices) : phaseJson.prices != null) {
                 return false;
             }
+            if (fixedPrices != null ? !fixedPrices.equals(phaseJson.fixedPrices) : phaseJson.fixedPrices != null) {
+                return false;
+            }
             if (type != null ? !type.equals(phaseJson.type) : phaseJson.type != null) {
                 return false;
             }
+            if (duration != null ? !duration.equals(phaseJson.duration) : phaseJson.duration != null) {
+                return false;
+            }
 
             return true;
         }
@@ -418,6 +448,8 @@ public class CatalogJson {
         public int hashCode() {
             int result = type != null ? type.hashCode() : 0;
             result = 31 * result + (prices != null ? prices.hashCode() : 0);
+            result = 31 * result + (fixedPrices != null ? fixedPrices.hashCode() : 0);
+            result = 31 * result + (duration != null ? duration.hashCode() : 0);
             return result;
         }
     }
@@ -548,4 +580,64 @@ public class CatalogJson {
         }
 
     }
+
+    public static class DurationJson {
+
+        private final TimeUnit unit;
+        private final int number;
+
+        @JsonCreator
+        public DurationJson(@JsonProperty("unit") final TimeUnit unit,
+                            @JsonProperty("number") final int number) {
+            this.unit = unit;
+            this.number = number;
+        }
+
+        public DurationJson(final Duration duration) throws CurrencyValueNull {
+            this(duration.getUnit(), duration.getNumber());
+        }
+
+        public TimeUnit getUnit() {
+            return unit;
+        }
+
+        public int getNumber() {
+            return number;
+        }
+
+        @Override
+        public String toString() {
+            final StringBuilder sb = new StringBuilder("DurationJson{");
+            sb.append("unit='").append(unit).append('\'');
+            sb.append(", number=").append(number);
+            sb.append('}');
+            return sb.toString();
+        }
+
+        @Override
+        public boolean equals(final Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass()) {
+                return false;
+            }
+
+            final DurationJson that = (DurationJson) o;
+
+            if (unit != null ? !unit.equals(that.unit) : that.unit != null) {
+                return false;
+            }
+
+            return number == that.number;
+
+        }
+
+        @Override
+        public int hashCode() {
+            int result = unit != null ? unit.hashCode() : 0;
+            result = 31 * result + number;
+            return result;
+        }
+    }
 }
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PlanDetailJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PlanDetailJson.java
index dde8096..0b8249c 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PlanDetailJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PlanDetailJson.java
@@ -24,7 +24,7 @@ import org.killbill.billing.catalog.api.CurrencyValueNull;
 import org.killbill.billing.catalog.api.Listing;
 import org.killbill.billing.catalog.api.Plan;
 import org.killbill.billing.catalog.api.Price;
-import org.killbill.billing.jaxrs.json.CatalogJsonSimple.PriceJson;
+import org.killbill.billing.jaxrs.json.CatalogJson.PriceJson;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;