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 = "plan") 029public class Plan extends RecurlyObject { 030 031 @XmlTransient 032 public static final String PLANS_RESOURCE = "/plans"; 033 034 @XmlElementWrapper(name = "add_ons") 035 @XmlElement(name = "add_on") 036 private AddOns addOns; 037 038 @XmlElement(name = "plan_code") 039 private String planCode; 040 041 @XmlElement(name = "name") 042 private String name; 043 044 @XmlElement(name = "description") 045 private String description; 046 047 @XmlElement(name = "success_url") 048 private String successLink; 049 050 @XmlElement(name = "cancel_url") 051 private String cancelLink; 052 053 @XmlElement(name = "display_donation_amounts") 054 private Boolean displayDonationAmounts; 055 056 @XmlElement(name = "display_quantity") 057 private Boolean displayQuantity; 058 059 @XmlElement(name = "display_phone_number") 060 private Boolean displayPhoneNumber; 061 062 @XmlElement(name = "bypass_hosted_confirmation") 063 private Boolean bypassHostedConfirmation; 064 065 @XmlElement(name = "unit_name") 066 private String unitName; 067 068 @XmlElement(name = "plan_interval_unit") 069 private String planIntervalUnit; 070 071 @XmlElement(name = "plan_interval_length") 072 private Integer planIntervalLength; 073 074 @XmlElement(name = "trial_interval_length") 075 private Integer trialIntervalLength; 076 077 @XmlElement(name = "trial_interval_unit") 078 private String trialIntervalUnit; 079 080 @XmlElement(name = "total_billing_cycles") 081 private Integer totalBillingCycles; 082 083 @XmlElement(name = "trial_requires_billing_info") 084 private Boolean trialRequiresBillingInfo; 085 086 @XmlElement(name = "accounting_code") 087 private String accountingCode; 088 089 @XmlElement(name = "setup_fee_accounting_code") 090 private String setupFeeAccountingCode; 091 092 @XmlElement(name = "revenue_schedule_type") 093 private RevenueScheduleType revenueScheduleType; 094 095 @XmlElement(name = "setup_fee_revenue_schedule_type") 096 private RevenueScheduleType setupFeeRevenueScheduleType; 097 098 @XmlElement(name = "created_at") 099 private DateTime createdAt; 100 101 @XmlElement(name = "updated_at") 102 private DateTime updatedAt; 103 104 @XmlElement(name = "unit_amount_in_cents") 105 private RecurlyUnitCurrency unitAmountInCents; 106 107 @XmlElement(name = "setup_fee_in_cents") 108 private RecurlyUnitCurrency setupFeeInCents; 109 110 @XmlElement(name = "auto_renew") 111 private Boolean autoRenew; 112 113 @XmlElement(name = "tax_exempt") 114 private Boolean taxExempt; 115 116 @XmlElement(name = "tax_code") 117 private String taxCode; 118 119 @XmlElement(name = "allow_any_item_on_subscriptions") 120 private Boolean allowAnyItemOnSubscriptions; 121 122 public String getPlanCode() { 123 return planCode; 124 } 125 126 public void setPlanCode(final Object planCode) { 127 this.planCode = stringOrNull(planCode); 128 } 129 130 public String getName() { 131 return name; 132 } 133 134 public void setName(final Object name) { 135 this.name = stringOrNull(name); 136 } 137 138 public String getDescription() { 139 return description; 140 } 141 142 public void setDescription(final Object description) { 143 this.description = stringOrNull(description); 144 } 145 146 public String getSuccessLink() { 147 return successLink; 148 } 149 150 public void setSuccessLink(final Object link) { 151 this.successLink = stringOrNull(link); 152 } 153 154 public String getCancelLink() { 155 return cancelLink; 156 } 157 158 public void setCancelLink(final Object link) { 159 this.cancelLink = stringOrNull(link); 160 } 161 162 public Boolean getDisplayDonationAmounts() { 163 return displayDonationAmounts; 164 } 165 166 public void setDisplayDonationAmounts(final Object displayAmounts) { 167 this.displayDonationAmounts = booleanOrNull(displayAmounts); 168 } 169 170 public Boolean getDisplayQuantity() { 171 return displayQuantity; 172 } 173 174 public void setDisplayQuantity(final Object displayQuantity) { 175 this.displayQuantity = booleanOrNull(displayQuantity); 176 } 177 178 public Boolean getDisplayPhoneNumber() { 179 return displayPhoneNumber; 180 } 181 182 public void setDisplayPhoneNumber(final Object displayPhoneNumber) { 183 this.displayPhoneNumber = booleanOrNull(displayPhoneNumber); 184 } 185 186 public Boolean getBypassHostedConfirmation() { 187 return bypassHostedConfirmation; 188 } 189 190 public void setBypassHostedConfirmation(final Object bypassHostedConfirmation) { 191 this.bypassHostedConfirmation = booleanOrNull(bypassHostedConfirmation); 192 } 193 194 public String getUnitName() { 195 return unitName; 196 } 197 198 public void setUnitName(final Object unitName) { 199 this.unitName = stringOrNull(unitName); 200 } 201 202 public String getPlanIntervalUnit() { 203 return planIntervalUnit; 204 } 205 206 public void setPlanIntervalUnit(final Object planIntervalUnit) { 207 this.planIntervalUnit = stringOrNull(planIntervalUnit); 208 } 209 210 public Integer getPlanIntervalLength() { 211 return planIntervalLength; 212 } 213 214 public void setPlanIntervalLength(final Object planIntervalLength) { 215 this.planIntervalLength = integerOrNull(planIntervalLength); 216 } 217 218 public String getTrialIntervalUnit() { 219 return trialIntervalUnit; 220 } 221 222 public void setTrialIntervalUnit(final Object trialIntervalUnit) { 223 this.trialIntervalUnit = stringOrNull(trialIntervalUnit); 224 } 225 226 public Integer getTotalBillingCycles() { 227 return totalBillingCycles; 228 } 229 230 public void setTotalBillingCycles(final Object totalBillingCycles) { 231 this.totalBillingCycles = integerOrNull(totalBillingCycles); 232 } 233 234 public Boolean getTrialRequiresBillingInfo() { 235 return this.trialRequiresBillingInfo; 236 } 237 238 public void setTrialRequiresBillingInfo(final Object trialRequiresBillingInfo) { 239 this.trialRequiresBillingInfo = booleanOrNull(trialRequiresBillingInfo); 240 } 241 242 public Integer getTrialIntervalLength() { 243 return trialIntervalLength; 244 } 245 246 public void setTrialIntervalLength(final Object trialIntervalLength) { 247 this.trialIntervalLength = integerOrNull(trialIntervalLength); 248 } 249 250 public String getAccountingCode() { 251 return accountingCode; 252 } 253 254 public void setAccountingCode(final Object accountingCode) { 255 this.accountingCode = stringOrNull(accountingCode); 256 } 257 258 public String getSetupFeeAccountingCode() { 259 return setupFeeAccountingCode; 260 } 261 262 public void setSetupFeeAccountingCode(final Object setupFeeAccountingCode) { 263 this.setupFeeAccountingCode = stringOrNull(setupFeeAccountingCode); 264 } 265 266 public DateTime getCreatedAt() { 267 return createdAt; 268 } 269 270 public void setCreatedAt(final Object createdAt) { 271 this.createdAt = dateTimeOrNull(createdAt); 272 } 273 274 public DateTime getUpdatedAt() { 275 return updatedAt; 276 } 277 278 public void setUpdatedAt(final Object updatedAt) { 279 this.updatedAt = dateTimeOrNull(updatedAt); 280 } 281 282 public RecurlyUnitCurrency getUnitAmountInCents() { 283 return unitAmountInCents; 284 } 285 286 public void setUnitAmountInCents(final Object unitAmountInCents) { 287 this.unitAmountInCents = RecurlyUnitCurrency.build(unitAmountInCents); 288 } 289 290 public RecurlyUnitCurrency getSetupFeeInCents() { 291 return setupFeeInCents; 292 } 293 294 public void setSetupFeeInCents(final Object setupFeeInCents) { 295 this.setupFeeInCents = RecurlyUnitCurrency.build(setupFeeInCents); 296 } 297 298 public AddOns getAddOns() { 299 return this.addOns; 300 } 301 302 public void setAddOns(final AddOns addOns) { 303 this.addOns = addOns; 304 } 305 306 public RevenueScheduleType getSetupFeeRevenueScheduleType() { 307 return setupFeeRevenueScheduleType; 308 } 309 310 public void setSetupFeeRevenueScheduleType(final Object setupFeeRevenueScheduleType) { 311 this.setupFeeRevenueScheduleType = enumOrNull(RevenueScheduleType.class, setupFeeRevenueScheduleType, true); 312 } 313 314 public RevenueScheduleType getRevenueScheduleType() { 315 return revenueScheduleType; 316 } 317 318 public void setRevenueScheduleType(final Object revenueScheduleType) { 319 this.revenueScheduleType = enumOrNull(RevenueScheduleType.class, revenueScheduleType, true); 320 } 321 322 public Boolean getAutoRenew() { 323 return this.autoRenew; 324 } 325 326 public void setAutoRenew(final Object autoRenew) { 327 this.autoRenew = booleanOrNull(autoRenew); 328 } 329 330 public Boolean getTaxExempt() { 331 return this.taxExempt; 332 } 333 334 public void setTaxExempt(final Object taxExempt) { 335 this.taxExempt = booleanOrNull(taxExempt); 336 } 337 338 public String getTaxCode() { 339 return this.taxCode; 340 } 341 342 public void setTaxCode(final Object taxCode) { 343 this.taxCode = stringOrNull(taxCode); 344 } 345 346 public Boolean getAllowAnyItemOnSubscriptions() { 347 return this.allowAnyItemOnSubscriptions; 348 } 349 350 public void setAllowAnyItemOnSubscriptions(final Object allowAnyItemOnSubscriptions) { 351 this.allowAnyItemOnSubscriptions = booleanOrNull(allowAnyItemOnSubscriptions); 352 } 353 354 @Override 355 public String toString() { 356 final StringBuilder sb = new StringBuilder(); 357 sb.append("Plan"); 358 sb.append("{addOns=").append(addOns); 359 sb.append(", planCode='").append(planCode).append('\''); 360 sb.append(", name='").append(name).append('\''); 361 sb.append(", description='").append(description).append('\''); 362 sb.append(", successLink='").append(successLink).append('\''); 363 sb.append(", cancelLink='").append(cancelLink).append('\''); 364 sb.append(", displayDonationAmounts=").append(displayDonationAmounts); 365 sb.append(", displayQuantity=").append(displayQuantity); 366 sb.append(", displayPhoneNumber=").append(displayPhoneNumber); 367 sb.append(", bypassHostedConfirmation=").append(bypassHostedConfirmation); 368 sb.append(", unitName='").append(unitName).append('\''); 369 sb.append(", planIntervalUnit='").append(planIntervalUnit).append('\''); 370 sb.append(", planIntervalLength=").append(planIntervalLength); 371 sb.append(", trialIntervalLength=").append(trialIntervalLength); 372 sb.append(", trialIntervalUnit='").append(trialIntervalUnit).append('\''); 373 sb.append(", totalBillingCycles").append(totalBillingCycles); 374 sb.append(", trialRequiresBillingInfo='").append(trialRequiresBillingInfo).append('\''); 375 sb.append(", accountingCode='").append(accountingCode).append('\''); 376 sb.append(", setupFeeAccountingCode='").append(setupFeeAccountingCode).append('\''); 377 sb.append(", createdAt=").append(createdAt); 378 sb.append(", updatedAt=").append(updatedAt); 379 sb.append(", unitAmountInCents=").append(unitAmountInCents); 380 sb.append(", setupFeeInCents=").append(setupFeeInCents); 381 sb.append(", revenueScheduleType=").append(revenueScheduleType); 382 sb.append(", setupFeeRevenueScheduleType=").append(setupFeeRevenueScheduleType); 383 sb.append(", autoRenew=").append(autoRenew); 384 sb.append(", taxExempt=").append(taxExempt); 385 sb.append(", taxCode=").append(taxCode); 386 sb.append(", allowAnyItemOnSubscriptions=").append(allowAnyItemOnSubscriptions); 387 sb.append('}'); 388 return sb.toString(); 389 } 390 391 @Override 392 public boolean equals(final Object o) { 393 if (this == o) return true; 394 if (o == null || getClass() != o.getClass()) return false; 395 396 final Plan plan = (Plan) o; 397 398 if (bypassHostedConfirmation != plan.bypassHostedConfirmation) { 399 return false; 400 } 401 if (displayPhoneNumber != plan.displayPhoneNumber) { 402 return false; 403 } 404 if (accountingCode != null ? !accountingCode.equals(plan.accountingCode) : plan.accountingCode != null) { 405 return false; 406 } 407 if (addOns != null ? !addOns.equals(plan.addOns) : plan.addOns != null) { 408 return false; 409 } 410 if (autoRenew != null ? !autoRenew.equals(plan.autoRenew) : plan.autoRenew != null) { 411 return false; 412 } 413 if (cancelLink != null ? !cancelLink.equals(plan.cancelLink) : plan.cancelLink != null) { 414 return false; 415 } 416 if (createdAt != null ? createdAt.compareTo(plan.createdAt) != 0: plan.createdAt != null) { 417 return false; 418 } 419 if (description != null ? !description.equals(plan.description) : plan.description != null) { 420 return false; 421 } 422 if (displayDonationAmounts != null ? !displayDonationAmounts.equals(plan.displayDonationAmounts) : plan.displayDonationAmounts != null) { 423 return false; 424 } 425 if (displayQuantity != null ? !displayQuantity.equals(plan.displayQuantity) : plan.displayQuantity != null) { 426 return false; 427 } 428 if (name != null ? !name.equals(plan.name) : plan.name != null) { 429 return false; 430 } 431 if (planCode != null ? !planCode.equals(plan.planCode) : plan.planCode != null) { 432 return false; 433 } 434 if (planIntervalLength != null ? !planIntervalLength.equals(plan.planIntervalLength) : plan.planIntervalLength != null) { 435 return false; 436 } 437 if (planIntervalUnit != null ? !planIntervalUnit.equals(plan.planIntervalUnit) : plan.planIntervalUnit != null) { 438 return false; 439 } 440 if (revenueScheduleType != null ? !revenueScheduleType.equals(plan.revenueScheduleType) : plan.revenueScheduleType != null) { 441 return false; 442 } 443 if (setupFeeInCents != null ? !setupFeeInCents.equals(plan.setupFeeInCents) : plan.setupFeeInCents != null) { 444 return false; 445 } 446 if (setupFeeRevenueScheduleType != null ? !setupFeeRevenueScheduleType.equals(plan.setupFeeRevenueScheduleType) : plan.setupFeeRevenueScheduleType != null) { 447 return false; 448 } 449 if (successLink != null ? !successLink.equals(plan.successLink) : plan.successLink != null) { 450 return false; 451 } 452 if (trialIntervalLength != null ? !trialIntervalLength.equals(plan.trialIntervalLength) : plan.trialIntervalLength != null) { 453 return false; 454 } 455 if (trialIntervalUnit != null ? !trialIntervalUnit.equals(plan.trialIntervalUnit) : plan.trialIntervalUnit != null) { 456 return false; 457 } 458 if (trialRequiresBillingInfo != null ? !trialRequiresBillingInfo.equals(plan.trialRequiresBillingInfo) : plan.trialRequiresBillingInfo != null) { 459 return false; 460 } 461 if (unitAmountInCents != null ? !unitAmountInCents.equals(plan.unitAmountInCents) : plan.unitAmountInCents != null) { 462 return false; 463 } 464 if (unitName != null ? !unitName.equals(plan.unitName) : plan.unitName != null) { 465 return false; 466 } 467 if (updatedAt != null ? updatedAt.compareTo(plan.updatedAt) != 0: plan.updatedAt != null) { 468 return false; 469 } 470 if (totalBillingCycles != null ? totalBillingCycles.compareTo(plan.totalBillingCycles) != 0: plan.totalBillingCycles != null) { 471 return false; 472 } 473 if (setupFeeAccountingCode != null ? setupFeeAccountingCode.compareTo(plan.setupFeeAccountingCode) != 0: plan.setupFeeAccountingCode != null) { 474 return false; 475 } 476 if (taxExempt != null ? taxExempt.compareTo(plan.taxExempt) != 0: plan.taxExempt != null) { 477 return false; 478 } 479 if (taxCode != null ? taxCode.compareTo(plan.taxCode) != 0: plan.taxCode != null) { 480 return false; 481 } 482 if (allowAnyItemOnSubscriptions != null ? allowAnyItemOnSubscriptions.compareTo(plan.allowAnyItemOnSubscriptions) != 0: plan.allowAnyItemOnSubscriptions != null) { 483 return false; 484 } 485 486 return true; 487 } 488 489 @Override 490 public int hashCode() { 491 return Objects.hashCode( 492 addOns, 493 planCode, 494 name, 495 description, 496 successLink, 497 cancelLink, 498 displayDonationAmounts, 499 displayQuantity, 500 displayPhoneNumber, 501 bypassHostedConfirmation, 502 unitName, 503 planIntervalUnit, 504 planIntervalLength, 505 trialIntervalUnit, 506 trialIntervalLength, 507 totalBillingCycles, 508 accountingCode, 509 setupFeeAccountingCode, 510 createdAt, 511 updatedAt, 512 unitAmountInCents, 513 setupFeeInCents, 514 revenueScheduleType, 515 setupFeeRevenueScheduleType, 516 trialRequiresBillingInfo, 517 autoRenew, 518 taxExempt, 519 taxCode, 520 allowAnyItemOnSubscriptions 521 ); 522 } 523}