/*
* Copyright 2010-2013 Ning, Inc.
*
* Ning licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.killbill.billing.subscription.engine.dao.model;
import java.util.UUID;
import org.joda.time.DateTime;
import org.killbill.billing.catalog.api.ProductCategory;
import org.killbill.billing.subscription.api.user.SubscriptionBuilder;
import org.killbill.billing.subscription.api.user.DefaultSubscriptionBase;
import org.killbill.billing.subscription.api.SubscriptionBase;
import org.killbill.billing.util.dao.TableName;
import org.killbill.billing.util.entity.dao.EntityModelDao;
import org.killbill.billing.util.entity.dao.EntityModelDaoBase;
public class SubscriptionModelDao extends EntityModelDaoBase implements EntityModelDao<SubscriptionBase> {
private UUID bundleId;
private ProductCategory category;
private DateTime startDate;
private DateTime bundleStartDate;
private DateTime chargedThroughDate;
private boolean migrated;
public SubscriptionModelDao() { /* For the DAO mapper */ }
public SubscriptionModelDao(final UUID id, final UUID bundleId, final ProductCategory category, final DateTime startDate, final DateTime bundleStartDate,
final DateTime chargedThroughDate, final boolean migrated, final DateTime createdDate, final DateTime updateDate) {
super(id, createdDate, updateDate);
this.bundleId = bundleId;
this.category = category;
this.startDate = startDate;
this.bundleStartDate = bundleStartDate;
this.chargedThroughDate = chargedThroughDate;
this.migrated = migrated;
}
public SubscriptionModelDao(final DefaultSubscriptionBase src) {
this(src.getId(), src.getBundleId(), src.getCategory(), src.getAlignStartDate(), src.getBundleStartDate(),
src.getChargedThroughDate(), src.isMigrated(), src.getCreatedDate(), src.getUpdatedDate());
}
public UUID getBundleId() {
return bundleId;
}
public ProductCategory getCategory() {
return category;
}
public DateTime getStartDate() {
return startDate;
}
public DateTime getBundleStartDate() {
return bundleStartDate;
}
public DateTime getChargedThroughDate() {
return chargedThroughDate;
}
public void setBundleId(final UUID bundleId) {
this.bundleId = bundleId;
}
public void setCategory(final ProductCategory category) {
this.category = category;
}
public void setStartDate(final DateTime startDate) {
this.startDate = startDate;
}
public void setBundleStartDate(final DateTime bundleStartDate) {
this.bundleStartDate = bundleStartDate;
}
public void setChargedThroughDate(final DateTime chargedThroughDate) {
this.chargedThroughDate = chargedThroughDate;
}
public boolean isMigrated() {
return migrated;
}
public void setMigrated(final boolean migrated) {
this.migrated = migrated;
}
public static SubscriptionBase toSubscription(final SubscriptionModelDao src, final String externalKey) {
if (src == null) {
return null;
}
return new DefaultSubscriptionBase(new SubscriptionBuilder()
.setId(src.getId())
.setBundleId(src.getBundleId())
.setBundleExternalKey(externalKey)
.setCategory(src.getCategory())
.setCreatedDate(src.getCreatedDate())
.setUpdatedDate(src.getUpdatedDate())
.setBundleStartDate(src.getBundleStartDate())
.setAlignStartDate(src.getStartDate())
.setChargedThroughDate(src.getChargedThroughDate())
.setMigrated(src.isMigrated())
.setCreatedDate(src.getCreatedDate())
.setUpdatedDate(src.getUpdatedDate()));
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("SubscriptionModelDao");
sb.append("{bundleId=").append(bundleId);
sb.append(", category=").append(category);
sb.append(", startDate=").append(startDate);
sb.append(", bundleStartDate=").append(bundleStartDate);
sb.append(", chargedThroughDate=").append(chargedThroughDate);
sb.append(", migrated=").append(migrated);
sb.append('}');
return sb.toString();
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (!super.equals(o)) {
return false;
}
final SubscriptionModelDao that = (SubscriptionModelDao) o;
if (bundleId != null ? !bundleId.equals(that.bundleId) : that.bundleId != null) {
return false;
}
if (bundleStartDate != null ? !bundleStartDate.equals(that.bundleStartDate) : that.bundleStartDate != null) {
return false;
}
if (category != that.category) {
return false;
}
if (chargedThroughDate != null ? !chargedThroughDate.equals(that.chargedThroughDate) : that.chargedThroughDate != null) {
return false;
}
if (migrated != that.migrated) {
return false;
}
if (startDate != null ? !startDate.equals(that.startDate) : that.startDate != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (bundleId != null ? bundleId.hashCode() : 0);
result = 31 * result + (category != null ? category.hashCode() : 0);
result = 31 * result + (startDate != null ? startDate.hashCode() : 0);
result = 31 * result + (bundleStartDate != null ? bundleStartDate.hashCode() : 0);
result = 31 * result + (chargedThroughDate != null ? chargedThroughDate.hashCode() : 0);
result = 31 * result + Boolean.valueOf(migrated).hashCode();
return result;
}
@Override
public TableName getTableName() {
return TableName.SUBSCRIPTIONS;
}
@Override
public TableName getHistoryTableName() {
return null;
}
}