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 java.math.BigDecimal;
021
022import javax.xml.bind.annotation.XmlElement;
023import com.google.common.base.Objects;
024
025public class AbstractAddOn extends RecurlyObject {
026
027    @XmlElement(name = "add_on_code")
028    protected String addOnCode;
029
030    @XmlElement(name = "measured_unit_id")
031    protected Long measuredUnitId;
032
033    @XmlElement(name = "usage_type")
034    protected String usageType;
035
036    @XmlElement(name = "usage_percentage")
037    protected BigDecimal usagePercentage;
038
039    @XmlElement(name = "revenue_schedule_type")
040    private RevenueScheduleType revenueScheduleType;
041
042    public String getAddOnCode() {
043        return addOnCode;
044    }
045
046    public void setAddOnCode(final Object addOnCode) {
047        this.addOnCode = stringOrNull(addOnCode);
048    }
049
050    public Long getMeasuredUnitId() {
051        return measuredUnitId;
052    }
053
054    public void setMeasuredUnitId(final Object measuredUnitId) {
055        this.measuredUnitId = longOrNull(measuredUnitId);
056    }
057
058    public String getUsageType() {
059        return usageType;
060    }
061
062    public void setUsageType(final Object usageType) {
063        this.usageType = stringOrNull(usageType);
064    }
065
066    public BigDecimal getUsagePercentage() {
067        return usagePercentage;
068    }
069
070    public void setUsagePercentage(final Object usagePercentage) {
071        this.usagePercentage = bigDecimalOrNull(usagePercentage);
072    }
073
074    public RevenueScheduleType getRevenueScheduleType() {
075        return revenueScheduleType;
076    }
077
078    public void setRevenueScheduleType(final Object revenueScheduleType) {
079        this.revenueScheduleType = enumOrNull(RevenueScheduleType.class, revenueScheduleType, true);
080    }
081
082    @Override
083    public String toString() {
084        final StringBuilder sb = new StringBuilder("AbstractAddOn{");
085        sb.append("addOnCode='").append(addOnCode).append('\'');
086        sb.append("measuredUnitId='").append(measuredUnitId).append('\'');
087        sb.append("usageType='").append(usageType).append('\'');
088        sb.append("usagePercentage=").append(usagePercentage);
089        sb.append(", revenueScheduleType='").append(revenueScheduleType).append('\'');
090        sb.append('}');
091        return sb.toString();
092    }
093
094    @Override
095    public boolean equals(final Object o) {
096        if (this == o) return true;
097        if (o == null || getClass() != o.getClass()) return false;
098
099        final AbstractAddOn that = (AbstractAddOn) o;
100
101        if (addOnCode != null ? !addOnCode.equals(that.addOnCode) : that.addOnCode != null) {
102            return false;
103        }
104
105        if (measuredUnitId != null ? !measuredUnitId.equals(that.measuredUnitId) : that.measuredUnitId != null) {
106            return false;
107        }
108
109        if (usageType != null ? !usageType.equals(that.usageType) : that.usageType != null) {
110            return false;
111        }
112
113        if (usagePercentage != null ? !usagePercentage.equals(that.usagePercentage) : that.usagePercentage != null) {
114            return false;
115        }
116
117        if (revenueScheduleType != null ? !revenueScheduleType.equals(that.revenueScheduleType) : that.revenueScheduleType != null) {
118            return false;
119        }
120
121        return true;
122    }
123
124    @Override
125    public int hashCode() {
126        return Objects.hashCode(
127            addOnCode,
128            measuredUnitId,
129            usageType,
130            usagePercentage,
131            revenueScheduleType
132        );
133                
134    }
135}