001/* 002 * Copyright 2010-2014 Ning, Inc. 003 * Copyright 2014-2015 The Billing Project, LLC 004 * 005 * The Billing Project licenses this file to you under the Apache License, version 2.0 006 * (the "License"); you may not use this file except in compliance with the 007 * License. You may obtain a copy of the License at: 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 013 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 014 * License for the specific language governing permissions and limitations 015 * under the License. 016 */ 017 018package com.ning.billing.recurly.model; 019 020import com.google.common.base.Objects; 021import org.joda.time.DateTime; 022 023import javax.xml.bind.annotation.XmlElement; 024import javax.xml.bind.annotation.XmlElementWrapper; 025import javax.xml.bind.annotation.XmlRootElement; 026import javax.xml.bind.annotation.XmlTransient; 027 028@XmlRootElement(name = "add_on") 029public class AddOn extends AbstractAddOn { 030 031 @XmlTransient 032 public static final String ADDONS_RESOURCE = "/add_ons"; 033 034 @XmlElement(name = "name") 035 private String name; 036 037 @XmlElement(name = "item_code") 038 private String itemCode; 039 040 @XmlElement(name = "item_state") 041 private String itemState; 042 043 @XmlElement(name = "external_sku") 044 private String externalSku; 045 046 @XmlElement(name = "display_quantity_on_hosted_page") 047 private Boolean displayQuantityOnHostedPage; 048 049 @XmlElement(name = "default_quantity") 050 private Integer defaultQuantity; 051 052 @XmlElement(name = "unit_amount_in_cents") 053 private RecurlyUnitCurrency unitAmountInCents; 054 055 @XmlElement(name = "created_at") 056 private DateTime createdAt; 057 058 @XmlElement(name = "updated_at") 059 private DateTime updatedAt; 060 061 @XmlElement(name = "measured_unit") 062 private MeasuredUnit measuredUnit; 063 064 @XmlElement(name = "add_on_type") 065 private String addOnType; 066 067 @XmlElement(name = "tax_code") 068 private String taxCode; 069 070 @XmlElement(name = "accounting_code") 071 private String accountingCode; 072 073 @XmlElement(name = "optional") 074 private Boolean optional; 075 076 @XmlElement(name = "tier_type") 077 private String tierType; 078 079 public String getName() { 080 return name; 081 } 082 083 public void setName(final Object name) { 084 this.name = stringOrNull(name); 085 } 086 087 public String getItemCode() { 088 return itemCode; 089 } 090 091 public void setItemCode(final Object itemCode) { 092 this.itemCode = stringOrNull(itemCode); 093 } 094 095 public String getItemState() { 096 return itemState; 097 } 098 099 public void setItemState(final Object itemState) { 100 this.itemState = stringOrNull(itemState); 101 } 102 103 public String getExternalSku() { 104 return externalSku; 105 } 106 107 public void setExternalSku(final Object externalSku) { 108 this.externalSku = stringOrNull(externalSku); 109 } 110 111 public Boolean getDisplayQuantityOnHostedPage() { 112 return displayQuantityOnHostedPage; 113 } 114 115 public void setDisplayQuantityOnHostedPage(final Object displayQuantityOnHostedPage) { 116 this.displayQuantityOnHostedPage = booleanOrNull(displayQuantityOnHostedPage); 117 } 118 119 public Integer getDefaultQuantity() { 120 return defaultQuantity; 121 } 122 123 public void setDefaultQuantity(final Object defaultQuantity) { 124 this.defaultQuantity = integerOrNull(defaultQuantity); 125 } 126 127 public RecurlyUnitCurrency getUnitAmountInCents() { 128 return unitAmountInCents; 129 } 130 131 public void setUnitAmountInCents(final Object unitAmountInCents) { 132 this.unitAmountInCents = RecurlyUnitCurrency.build(unitAmountInCents); 133 } 134 135 public DateTime getCreatedAt() { 136 return createdAt; 137 } 138 139 public void setCreatedAt(final Object createdAt) { 140 this.createdAt = dateTimeOrNull(createdAt); 141 } 142 143 public DateTime getUpdatedAt() { 144 return updatedAt; 145 } 146 147 public void setUpdatedAt(final Object updatedAt) { 148 this.updatedAt = dateTimeOrNull(updatedAt); 149 } 150 151 public MeasuredUnit getMeasuredUnit() { 152 if (measuredUnit != null && measuredUnit.getHref() != null && !measuredUnit.getHref().isEmpty()) { 153 measuredUnit = fetch(measuredUnit, MeasuredUnit.class); 154 } 155 return measuredUnit; 156 } 157 158 public void setMeasuredUnit(final MeasuredUnit measuredUnit) { 159 this.measuredUnit = measuredUnit; 160 } 161 162 public String getAddOnType() { 163 return addOnType; 164 } 165 166 public void setAddOnType(final Object addOnType) { 167 this.addOnType = stringOrNull(addOnType); 168 } 169 170 public String getTaxCode() { 171 return taxCode; 172 } 173 174 public void setTaxCode(final Object taxCode) { 175 this.taxCode = stringOrNull(taxCode); 176 } 177 178 public String getAccountingCode() { 179 return accountingCode; 180 } 181 182 public void setAccountingCode(final Object accountingCode) { 183 this.accountingCode = stringOrNull(accountingCode); 184 } 185 186 public Boolean getOptional() { 187 return optional; 188 } 189 190 public void setOptional(final Object optional) { 191 this.optional = booleanOrNull(optional); 192 } 193 194 public String getTierType() { 195 return tierType; 196 } 197 198 public void setTierType(final Object tierType) { 199 this.tierType = stringOrNull(tierType); 200 } 201 202 @Override 203 public String toString() { 204 final StringBuilder sb = new StringBuilder("AddOn{"); 205 sb.append("name='").append(name).append('\''); 206 sb.append(", itemCode='").append(itemCode).append('\''); 207 sb.append(", itemState='").append(itemState).append('\''); 208 sb.append(", externalSku='").append(externalSku).append('\''); 209 sb.append(", measuredUnit='").append(measuredUnit).append('\''); 210 sb.append(", addOnType='").append(addOnType).append('\''); 211 sb.append(", displayQuantityOnHostedPage=").append(displayQuantityOnHostedPage); 212 sb.append(", defaultQuantity=").append(defaultQuantity); 213 sb.append(", unitAmountInCents=").append(unitAmountInCents); 214 sb.append(", createdAt=").append(createdAt); 215 sb.append(", updatedAt=").append(updatedAt); 216 sb.append(", taxCode=").append(taxCode); 217 sb.append(", accountingCode=").append(accountingCode); 218 sb.append(", optional=").append(optional); 219 sb.append(", tierType=").append(tierType); 220 sb.append('}'); 221 return sb.toString(); 222 } 223 224 @Override 225 public boolean equals(final Object o) { 226 if (this == o) return true; 227 if (o == null || getClass() != o.getClass()) return false; 228 229 final AddOn addOn = (AddOn) o; 230 231 if (createdAt != null ? createdAt.compareTo(addOn.createdAt) != 0 : addOn.createdAt != null) { 232 return false; 233 } 234 if (measuredUnit != null ? !measuredUnit.equals(addOn.measuredUnit) : addOn.measuredUnit != null) { 235 return false; 236 } 237 if (addOnType != null ? !addOnType.equals(addOn.addOnType) : addOn.addOnType != null) { 238 return false; 239 } 240 if (updatedAt != null ? updatedAt.compareTo(addOn.updatedAt) != 0 : addOn.updatedAt != null) { 241 return false; 242 } 243 if (defaultQuantity != null ? !defaultQuantity.equals(addOn.defaultQuantity) : addOn.defaultQuantity != null) { 244 return false; 245 } 246 if (displayQuantityOnHostedPage != null ? !displayQuantityOnHostedPage.equals(addOn.displayQuantityOnHostedPage) : addOn.displayQuantityOnHostedPage != null) { 247 return false; 248 } 249 if (name != null ? !name.equals(addOn.name) : addOn.name != null) { 250 return false; 251 } 252 if (unitAmountInCents != null ? !unitAmountInCents.equals(addOn.unitAmountInCents) : addOn.unitAmountInCents != null) { 253 return false; 254 } 255 if (taxCode != null ? !taxCode.equals(addOn.taxCode) : addOn.taxCode != null) { 256 return false; 257 } 258 if (accountingCode != null ? !accountingCode.equals(addOn.accountingCode) : addOn.accountingCode != null) { 259 return false; 260 } 261 if (optional != null ? !optional.equals(addOn.optional) : addOn.optional != null) { 262 return false; 263 } 264 if (itemCode != null ? !itemCode.equals(addOn.itemCode) : addOn.itemCode != null) { 265 return false; 266 } 267 if (itemState != null ? !itemState.equals(addOn.itemState) : addOn.itemState != null) { 268 return false; 269 } 270 if (externalSku != null ? !externalSku.equals(addOn.externalSku) : addOn.externalSku != null) { 271 return false; 272 } 273 if (tierType != null ? !tierType.equals(addOn.tierType) : addOn.tierType != null) { 274 return false; 275 } 276 277 return true; 278 } 279 280 @Override 281 public int hashCode() { 282 return Objects.hashCode( 283 name, 284 itemCode, 285 itemState, 286 externalSku, 287 measuredUnit, 288 addOnType, 289 displayQuantityOnHostedPage, 290 defaultQuantity, 291 unitAmountInCents, 292 createdAt, 293 updatedAt, 294 taxCode, 295 accountingCode, 296 optional, 297 tierType 298 ); 299 } 300}