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.XmlRootElement; 025import javax.xml.bind.annotation.XmlTransient; 026 027@XmlRootElement(name = "add_on") 028public class AddOn extends AbstractAddOn { 029 030 @XmlTransient 031 public static final String ADDONS_RESOURCE = "/add_ons"; 032 033 @XmlElement(name = "name") 034 private String name; 035 036 @XmlElement(name = "display_quantity_on_hosted_page") 037 private Boolean displayQuantityOnHostedPage; 038 039 @XmlElement(name = "default_quantity") 040 private Integer defaultQuantity; 041 042 @XmlElement(name = "unit_amount_in_cents") 043 private RecurlyUnitCurrency unitAmountInCents; 044 045 @XmlElement(name = "created_at") 046 private DateTime createdAt; 047 048 @XmlElement(name = "updated_at") 049 private DateTime updatedAt; 050 051 @XmlElement(name = "measured_unit") 052 private MeasuredUnit measuredUnit; 053 054 @XmlElement(name = "add_on_type") 055 private String addOnType; 056 057 @XmlElement(name = "tax_code") 058 private String taxCode; 059 060 @XmlElement(name = "accounting_code") 061 private String accountingCode; 062 063 @XmlElement(name = "optional") 064 private Boolean optional; 065 066 public String getName() { 067 return name; 068 } 069 070 public void setName(final Object name) { 071 this.name = stringOrNull(name); 072 } 073 074 public Boolean getDisplayQuantityOnHostedPage() { 075 return displayQuantityOnHostedPage; 076 } 077 078 public void setDisplayQuantityOnHostedPage(final Object displayQuantityOnHostedPage) { 079 this.displayQuantityOnHostedPage = booleanOrNull(displayQuantityOnHostedPage); 080 } 081 082 public Integer getDefaultQuantity() { 083 return defaultQuantity; 084 } 085 086 public void setDefaultQuantity(final Object defaultQuantity) { 087 this.defaultQuantity = integerOrNull(defaultQuantity); 088 } 089 090 public RecurlyUnitCurrency getUnitAmountInCents() { 091 return unitAmountInCents; 092 } 093 094 public void setUnitAmountInCents(final RecurlyUnitCurrency unitAmountInCents) { 095 this.unitAmountInCents = unitAmountInCents; 096 } 097 098 public DateTime getCreatedAt() { 099 return createdAt; 100 } 101 102 public void setCreatedAt(final Object createdAt) { 103 this.createdAt = dateTimeOrNull(createdAt); 104 } 105 106 public DateTime getUpdatedAt() { 107 return updatedAt; 108 } 109 110 public void setUpdatedAt(final Object updatedAt) { 111 this.updatedAt = dateTimeOrNull(updatedAt); 112 } 113 114 public MeasuredUnit getMeasuredUnit() { 115 if (measuredUnit != null && measuredUnit.getHref() != null && !measuredUnit.getHref().isEmpty()) { 116 measuredUnit = fetch(measuredUnit, MeasuredUnit.class); 117 } 118 return measuredUnit; 119 } 120 121 public void setMeasuredUnit(final MeasuredUnit measuredUnit) { 122 this.measuredUnit = measuredUnit; 123 } 124 125 public String getAddOnType() { 126 return addOnType; 127 } 128 129 public void setAddOnType(final Object addOnType) { 130 this.addOnType = stringOrNull(addOnType); 131 } 132 133 public String getTaxCode() { 134 return taxCode; 135 } 136 137 public void setTaxCode(final Object taxCode) { 138 this.taxCode = stringOrNull(taxCode); 139 } 140 141 public String getAccountingCode() { 142 return accountingCode; 143 } 144 145 public void setAccountingCode(final Object accountingCode) { 146 this.accountingCode = stringOrNull(accountingCode); 147 } 148 149 public Boolean getOptional() { 150 return optional; 151 } 152 153 public void setOptional(final Object optional) { 154 this.optional = booleanOrNull(optional); 155 } 156 157 @Override 158 public String toString() { 159 final StringBuilder sb = new StringBuilder("AddOn{"); 160 sb.append("name='").append(name).append('\''); 161 sb.append(", measuredUnit='").append(measuredUnit).append('\''); 162 sb.append(", addOnType='").append(addOnType).append('\''); 163 sb.append(", displayQuantityOnHostedPage=").append(displayQuantityOnHostedPage); 164 sb.append(", defaultQuantity=").append(defaultQuantity); 165 sb.append(", unitAmountInCents=").append(unitAmountInCents); 166 sb.append(", createdAt=").append(createdAt); 167 sb.append(", updatedAt=").append(updatedAt); 168 sb.append(", taxCode=").append(taxCode); 169 sb.append(", accountingCode=").append(accountingCode); 170 sb.append(", optional=").append(optional); 171 sb.append('}'); 172 return sb.toString(); 173 } 174 175 @Override 176 public boolean equals(final Object o) { 177 if (this == o) return true; 178 if (o == null || getClass() != o.getClass()) return false; 179 180 final AddOn addOn = (AddOn) o; 181 182 if (createdAt != null ? createdAt.compareTo(addOn.createdAt) != 0 : addOn.createdAt != null) { 183 return false; 184 } 185 if (measuredUnit != null ? !measuredUnit.equals(addOn.measuredUnit) : addOn.measuredUnit != null) { 186 return false; 187 } 188 if (addOnType != null ? !addOnType.equals(addOn.addOnType) : addOn.addOnType != null) { 189 return false; 190 } 191 if (updatedAt != null ? updatedAt.compareTo(addOn.updatedAt) != 0 : addOn.updatedAt != null) { 192 return false; 193 } 194 if (defaultQuantity != null ? !defaultQuantity.equals(addOn.defaultQuantity) : addOn.defaultQuantity != null) { 195 return false; 196 } 197 if (displayQuantityOnHostedPage != null ? !displayQuantityOnHostedPage.equals(addOn.displayQuantityOnHostedPage) : addOn.displayQuantityOnHostedPage != null) { 198 return false; 199 } 200 if (name != null ? !name.equals(addOn.name) : addOn.name != null) { 201 return false; 202 } 203 if (unitAmountInCents != null ? !unitAmountInCents.equals(addOn.unitAmountInCents) : addOn.unitAmountInCents != null) { 204 return false; 205 } 206 if (taxCode != null ? !taxCode.equals(addOn.taxCode) : addOn.taxCode != null) { 207 return false; 208 } 209 if (accountingCode != null ? !accountingCode.equals(addOn.accountingCode) : addOn.accountingCode != null) { 210 return false; 211 } 212 if (optional != null ? !optional.equals(addOn.optional) : addOn.optional != null) { 213 return false; 214 } 215 216 return true; 217 } 218 219 @Override 220 public int hashCode() { 221 return Objects.hashCode( 222 name, 223 measuredUnit, 224 addOnType, 225 displayQuantityOnHostedPage, 226 defaultQuantity, 227 unitAmountInCents, 228 createdAt, 229 updatedAt, 230 taxCode, 231 accountingCode, 232 optional 233 ); 234 } 235}