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 public String getPlanCode() { 120 return planCode; 121 } 122 123 public void setPlanCode(final Object planCode) { 124 this.planCode = stringOrNull(planCode); 125 } 126 127 public String getName() { 128 return name; 129 } 130 131 public void setName(final Object name) { 132 this.name = stringOrNull(name); 133 } 134 135 public String getDescription() { 136 return description; 137 } 138 139 public void setDescription(final Object description) { 140 this.description = stringOrNull(description); 141 } 142 143 public String getSuccessLink() { 144 return successLink; 145 } 146 147 public void setSuccessLink(final Object link) { 148 this.successLink = stringOrNull(link); 149 } 150 151 public String getCancelLink() { 152 return cancelLink; 153 } 154 155 public void setCancelLink(final Object link) { 156 this.cancelLink = stringOrNull(link); 157 } 158 159 public Boolean getDisplayDonationAmounts() { 160 return displayDonationAmounts; 161 } 162 163 public void setDisplayDonationAmounts(final Object displayAmounts) { 164 this.displayDonationAmounts = booleanOrNull(displayAmounts); 165 } 166 167 public Boolean getDisplayQuantity() { 168 return displayQuantity; 169 } 170 171 public void setDisplayQuantity(final Object displayQuantity) { 172 this.displayQuantity = booleanOrNull(displayQuantity); 173 } 174 175 public Boolean getDisplayPhoneNumber() { 176 return displayPhoneNumber; 177 } 178 179 public void setDisplayPhoneNumber(final Object displayPhoneNumber) { 180 this.displayPhoneNumber = booleanOrNull(displayPhoneNumber); 181 } 182 183 public Boolean getBypassHostedConfirmation() { 184 return bypassHostedConfirmation; 185 } 186 187 public void setBypassHostedConfirmation(final Object bypassHostedConfirmation) { 188 this.bypassHostedConfirmation = booleanOrNull(bypassHostedConfirmation); 189 } 190 191 public String getUnitName() { 192 return unitName; 193 } 194 195 public void setUnitName(final Object unitName) { 196 this.unitName = stringOrNull(unitName); 197 } 198 199 public String getPlanIntervalUnit() { 200 return planIntervalUnit; 201 } 202 203 public void setPlanIntervalUnit(final Object planIntervalUnit) { 204 this.planIntervalUnit = stringOrNull(planIntervalUnit); 205 } 206 207 public Integer getPlanIntervalLength() { 208 return planIntervalLength; 209 } 210 211 public void setPlanIntervalLength(final Object planIntervalLength) { 212 this.planIntervalLength = integerOrNull(planIntervalLength); 213 } 214 215 public String getTrialIntervalUnit() { 216 return trialIntervalUnit; 217 } 218 219 public void setTrialIntervalUnit(final Object trialIntervalUnit) { 220 this.trialIntervalUnit = stringOrNull(trialIntervalUnit); 221 } 222 223 public Integer getTotalBillingCycles() { 224 return totalBillingCycles; 225 } 226 227 public void setTotalBillingCycles(final Object totalBillingCycles) { 228 this.totalBillingCycles = integerOrNull(totalBillingCycles); 229 } 230 231 public Boolean getTrialRequiresBillingInfo() { 232 return this.trialRequiresBillingInfo; 233 } 234 235 public void setTrialRequiresBillingInfo(final Object trialRequiresBillingInfo) { 236 this.trialRequiresBillingInfo = booleanOrNull(trialRequiresBillingInfo); 237 } 238 239 public Integer getTrialIntervalLength() { 240 return trialIntervalLength; 241 } 242 243 public void setTrialIntervalLength(final Object trialIntervalLength) { 244 this.trialIntervalLength = integerOrNull(trialIntervalLength); 245 } 246 247 public String getAccountingCode() { 248 return accountingCode; 249 } 250 251 public void setAccountingCode(final Object accountingCode) { 252 this.accountingCode = stringOrNull(accountingCode); 253 } 254 255 public String getSetupFeeAccountingCode() { 256 return setupFeeAccountingCode; 257 } 258 259 public void setSetupFeeAccountingCode(final Object setupFeeAccountingCode) { 260 this.setupFeeAccountingCode = stringOrNull(setupFeeAccountingCode); 261 } 262 263 public DateTime getCreatedAt() { 264 return createdAt; 265 } 266 267 public void setCreatedAt(final Object createdAt) { 268 this.createdAt = dateTimeOrNull(createdAt); 269 } 270 271 public DateTime getUpdatedAt() { 272 return updatedAt; 273 } 274 275 public void setUpdatedAt(final Object updatedAt) { 276 this.updatedAt = dateTimeOrNull(updatedAt); 277 } 278 279 public RecurlyUnitCurrency getUnitAmountInCents() { 280 return unitAmountInCents; 281 } 282 283 public void setUnitAmountInCents(final Object unitAmountInCents) { 284 this.unitAmountInCents = RecurlyUnitCurrency.build(unitAmountInCents); 285 } 286 287 public RecurlyUnitCurrency getSetupFeeInCents() { 288 return setupFeeInCents; 289 } 290 291 public void setSetupFeeInCents(final Object setupFeeInCents) { 292 this.setupFeeInCents = RecurlyUnitCurrency.build(setupFeeInCents); 293 } 294 295 public AddOns getAddOns() { 296 return this.addOns; 297 } 298 299 public void setAddOns(final AddOns addOns) { 300 this.addOns = addOns; 301 } 302 303 public RevenueScheduleType getSetupFeeRevenueScheduleType() { 304 return setupFeeRevenueScheduleType; 305 } 306 307 public void setSetupFeeRevenueScheduleType(final Object setupFeeRevenueScheduleType) { 308 this.setupFeeRevenueScheduleType = enumOrNull(RevenueScheduleType.class, setupFeeRevenueScheduleType, true); 309 } 310 311 public RevenueScheduleType getRevenueScheduleType() { 312 return revenueScheduleType; 313 } 314 315 public void setRevenueScheduleType(final Object revenueScheduleType) { 316 this.revenueScheduleType = enumOrNull(RevenueScheduleType.class, revenueScheduleType, true); 317 } 318 319 public Boolean getAutoRenew() { 320 return this.autoRenew; 321 } 322 323 public void setAutoRenew(final Object autoRenew) { 324 this.autoRenew = booleanOrNull(autoRenew); 325 } 326 327 public Boolean getTaxExempt() { 328 return this.taxExempt; 329 } 330 331 public void setTaxExempt(final Object taxExempt) { 332 this.taxExempt = booleanOrNull(taxExempt); 333 } 334 335 public String getTaxCode() { 336 return this.taxCode; 337 } 338 339 public void setTaxCode(final Object taxCode) { 340 this.taxCode = stringOrNull(taxCode); 341 } 342 343 @Override 344 public String toString() { 345 final StringBuilder sb = new StringBuilder(); 346 sb.append("Plan"); 347 sb.append("{addOns=").append(addOns); 348 sb.append(", planCode='").append(planCode).append('\''); 349 sb.append(", name='").append(name).append('\''); 350 sb.append(", description='").append(description).append('\''); 351 sb.append(", successLink='").append(successLink).append('\''); 352 sb.append(", cancelLink='").append(cancelLink).append('\''); 353 sb.append(", displayDonationAmounts=").append(displayDonationAmounts); 354 sb.append(", displayQuantity=").append(displayQuantity); 355 sb.append(", displayPhoneNumber=").append(displayPhoneNumber); 356 sb.append(", bypassHostedConfirmation=").append(bypassHostedConfirmation); 357 sb.append(", unitName='").append(unitName).append('\''); 358 sb.append(", planIntervalUnit='").append(planIntervalUnit).append('\''); 359 sb.append(", planIntervalLength=").append(planIntervalLength); 360 sb.append(", trialIntervalLength=").append(trialIntervalLength); 361 sb.append(", trialIntervalUnit='").append(trialIntervalUnit).append('\''); 362 sb.append(", totalBillingCycles").append(totalBillingCycles); 363 sb.append(", trialRequiresBillingInfo='").append(trialRequiresBillingInfo).append('\''); 364 sb.append(", accountingCode='").append(accountingCode).append('\''); 365 sb.append(", setupFeeAccountingCode='").append(setupFeeAccountingCode).append('\''); 366 sb.append(", createdAt=").append(createdAt); 367 sb.append(", updatedAt=").append(updatedAt); 368 sb.append(", unitAmountInCents=").append(unitAmountInCents); 369 sb.append(", setupFeeInCents=").append(setupFeeInCents); 370 sb.append(", revenueScheduleType=").append(revenueScheduleType); 371 sb.append(", setupFeeRevenueScheduleType=").append(setupFeeRevenueScheduleType); 372 sb.append(", autoRenew=").append(autoRenew); 373 sb.append(", taxExempt=").append(taxExempt); 374 sb.append(", taxCode=").append(taxCode); 375 sb.append('}'); 376 return sb.toString(); 377 } 378 379 @Override 380 public boolean equals(final Object o) { 381 if (this == o) return true; 382 if (o == null || getClass() != o.getClass()) return false; 383 384 final Plan plan = (Plan) o; 385 386 if (bypassHostedConfirmation != plan.bypassHostedConfirmation) { 387 return false; 388 } 389 if (displayPhoneNumber != plan.displayPhoneNumber) { 390 return false; 391 } 392 if (accountingCode != null ? !accountingCode.equals(plan.accountingCode) : plan.accountingCode != null) { 393 return false; 394 } 395 if (addOns != null ? !addOns.equals(plan.addOns) : plan.addOns != null) { 396 return false; 397 } 398 if (autoRenew != null ? !autoRenew.equals(plan.autoRenew) : plan.autoRenew != null) { 399 return false; 400 } 401 if (cancelLink != null ? !cancelLink.equals(plan.cancelLink) : plan.cancelLink != null) { 402 return false; 403 } 404 if (createdAt != null ? createdAt.compareTo(plan.createdAt) != 0: plan.createdAt != null) { 405 return false; 406 } 407 if (description != null ? !description.equals(plan.description) : plan.description != null) { 408 return false; 409 } 410 if (displayDonationAmounts != null ? !displayDonationAmounts.equals(plan.displayDonationAmounts) : plan.displayDonationAmounts != null) { 411 return false; 412 } 413 if (displayQuantity != null ? !displayQuantity.equals(plan.displayQuantity) : plan.displayQuantity != null) { 414 return false; 415 } 416 if (name != null ? !name.equals(plan.name) : plan.name != null) { 417 return false; 418 } 419 if (planCode != null ? !planCode.equals(plan.planCode) : plan.planCode != null) { 420 return false; 421 } 422 if (planIntervalLength != null ? !planIntervalLength.equals(plan.planIntervalLength) : plan.planIntervalLength != null) { 423 return false; 424 } 425 if (planIntervalUnit != null ? !planIntervalUnit.equals(plan.planIntervalUnit) : plan.planIntervalUnit != null) { 426 return false; 427 } 428 if (revenueScheduleType != null ? !revenueScheduleType.equals(plan.revenueScheduleType) : plan.revenueScheduleType != null) { 429 return false; 430 } 431 if (setupFeeInCents != null ? !setupFeeInCents.equals(plan.setupFeeInCents) : plan.setupFeeInCents != null) { 432 return false; 433 } 434 if (setupFeeRevenueScheduleType != null ? !setupFeeRevenueScheduleType.equals(plan.setupFeeRevenueScheduleType) : plan.setupFeeRevenueScheduleType != null) { 435 return false; 436 } 437 if (successLink != null ? !successLink.equals(plan.successLink) : plan.successLink != null) { 438 return false; 439 } 440 if (trialIntervalLength != null ? !trialIntervalLength.equals(plan.trialIntervalLength) : plan.trialIntervalLength != null) { 441 return false; 442 } 443 if (trialIntervalUnit != null ? !trialIntervalUnit.equals(plan.trialIntervalUnit) : plan.trialIntervalUnit != null) { 444 return false; 445 } 446 if (trialRequiresBillingInfo != null ? !trialRequiresBillingInfo.equals(plan.trialRequiresBillingInfo) : plan.trialRequiresBillingInfo != null) { 447 return false; 448 } 449 if (unitAmountInCents != null ? !unitAmountInCents.equals(plan.unitAmountInCents) : plan.unitAmountInCents != null) { 450 return false; 451 } 452 if (unitName != null ? !unitName.equals(plan.unitName) : plan.unitName != null) { 453 return false; 454 } 455 if (updatedAt != null ? updatedAt.compareTo(plan.updatedAt) != 0: plan.updatedAt != null) { 456 return false; 457 } 458 if (totalBillingCycles != null ? totalBillingCycles.compareTo(plan.totalBillingCycles) != 0: plan.totalBillingCycles != null) { 459 return false; 460 } 461 if (setupFeeAccountingCode != null ? setupFeeAccountingCode.compareTo(plan.setupFeeAccountingCode) != 0: plan.setupFeeAccountingCode != null) { 462 return false; 463 } 464 if (taxExempt != null ? taxExempt.compareTo(plan.taxExempt) != 0: plan.taxExempt != null) { 465 return false; 466 } 467 if (taxCode != null ? taxCode.compareTo(plan.taxCode) != 0: plan.taxCode != null) { 468 return false; 469 } 470 471 return true; 472 } 473 474 @Override 475 public int hashCode() { 476 return Objects.hashCode( 477 addOns, 478 planCode, 479 name, 480 description, 481 successLink, 482 cancelLink, 483 displayDonationAmounts, 484 displayQuantity, 485 displayPhoneNumber, 486 bypassHostedConfirmation, 487 unitName, 488 planIntervalUnit, 489 planIntervalLength, 490 trialIntervalUnit, 491 trialIntervalLength, 492 totalBillingCycles, 493 accountingCode, 494 setupFeeAccountingCode, 495 createdAt, 496 updatedAt, 497 unitAmountInCents, 498 setupFeeInCents, 499 revenueScheduleType, 500 setupFeeRevenueScheduleType, 501 trialRequiresBillingInfo, 502 autoRenew, 503 taxExempt, 504 taxCode 505 ); 506 } 507}