/* * Copyright 2010-2011 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.mock; import java.util.UUID; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.killbill.billing.account.api.Account; import org.killbill.billing.account.api.AccountData; import org.killbill.billing.account.api.MutableAccountData; import org.killbill.billing.catalog.api.Currency; import org.killbill.billing.util.account.AccountDateTimeUtils; public class MockAccountBuilder { private final UUID id; private String externalKey = ""; private String email = ""; private String name = ""; private int firstNameLength; private Currency currency = Currency.USD; private UUID parentAccountId; private boolean isPaymentDelegatedToParent = false; private int billingCycleDayLocal; private UUID paymentMethodId; private DateTimeZone timeZone = DateTimeZone.UTC; private String locale = ""; private String address1 = ""; private String address2 = ""; private String companyName = ""; private String city = ""; private String stateOrProvince = ""; private String country = ""; private String postalCode = ""; private String phone = ""; private String notes = ""; private boolean migrated; private boolean isNotifiedForInvoices; private DateTime createdDate = new DateTime(DateTimeZone.UTC); private DateTime updatedDate = new DateTime(DateTimeZone.UTC); public MockAccountBuilder() { this(UUID.randomUUID()); } public MockAccountBuilder(final UUID id) { this.id = id; } public MockAccountBuilder(final AccountData data) { this.address1(data.getAddress1()); this.address2(data.getAddress2()); this.billingCycleDayLocal(data.getBillCycleDayLocal()); this.city(data.getCity()); this.companyName(data.getCompanyName()); this.country(data.getCountry()); this.currency(data.getCurrency()); this.parentAccountId(data.getParentAccountId()); this.isPaymentDelegatedToParent(data.isPaymentDelegatedToParent()); this.email(data.getEmail()); this.externalKey(data.getExternalKey()); this.firstNameLength(data.getFirstNameLength()); this.isNotifiedForInvoices(data.isNotifiedForInvoices()); this.locale(data.getLocale()); this.migrated(data.isMigrated()); this.name(data.getName()); this.paymentMethodId(data.getPaymentMethodId()); this.phone(data.getPhone()); this.notes(data.getNotes()); this.postalCode(data.getPostalCode()); this.stateOrProvince(data.getStateOrProvince()); this.timeZone(data.getTimeZone()); if (data instanceof Account) { this.id = ((Account) data).getId(); this.createdDate(((Account) data).getCreatedDate()); this.updatedDate(((Account) data).getUpdatedDate()); } else { this.id = UUID.randomUUID(); } } public MockAccountBuilder externalKey(final String externalKey) { this.externalKey = externalKey; return this; } public MockAccountBuilder email(final String email) { this.email = email; return this; } public MockAccountBuilder name(final String name) { this.name = name; return this; } public MockAccountBuilder firstNameLength(final int firstNameLength) { this.firstNameLength = firstNameLength; return this; } public MockAccountBuilder billingCycleDayLocal(final int billingCycleDayLocal) { this.billingCycleDayLocal = billingCycleDayLocal; return this; } public MockAccountBuilder currency(final Currency currency) { this.currency = currency; return this; } public MockAccountBuilder parentAccountId(final UUID parentAccountId) { this.parentAccountId = parentAccountId; return this; } public MockAccountBuilder isPaymentDelegatedToParent(final boolean isPaymentDelegatedToParent) { this.isPaymentDelegatedToParent = isPaymentDelegatedToParent; return this; } public MockAccountBuilder paymentMethodId(final UUID paymentMethodId) { this.paymentMethodId = paymentMethodId; return this; } public MockAccountBuilder timeZone(final DateTimeZone timeZone) { this.timeZone = timeZone; return this; } public MockAccountBuilder locale(final String locale) { this.locale = locale; return this; } public MockAccountBuilder address1(final String address1) { this.address1 = address1; return this; } public MockAccountBuilder address2(final String address2) { this.address2 = address2; return this; } public MockAccountBuilder companyName(final String companyName) { this.companyName = companyName; return this; } public MockAccountBuilder city(final String city) { this.city = city; return this; } public MockAccountBuilder stateOrProvince(final String stateOrProvince) { this.stateOrProvince = stateOrProvince; return this; } public MockAccountBuilder postalCode(final String postalCode) { this.postalCode = postalCode; return this; } public MockAccountBuilder country(final String country) { this.country = country; return this; } public MockAccountBuilder phone(final String phone) { this.phone = phone; return this; } public MockAccountBuilder notes(final String notes) { this.notes = notes; return this; } public MockAccountBuilder migrated(final boolean migrated) { this.migrated = migrated; return this; } public MockAccountBuilder isNotifiedForInvoices(final boolean isNotifiedForInvoices) { this.isNotifiedForInvoices = isNotifiedForInvoices; return this; } public MockAccountBuilder createdDate(final DateTime createdDate) { this.createdDate = createdDate; return this; } public MockAccountBuilder updatedDate(final DateTime updatedDate) { this.updatedDate = updatedDate; return this; } public Account build() { return new Account() { @Override public DateTime getCreatedDate() { return createdDate; } @Override public DateTime getUpdatedDate() { return updatedDate; } @Override public String getExternalKey() { return externalKey; } @Override public String getName() { return name; } @Override public Integer getFirstNameLength() { return firstNameLength; } @Override public String getEmail() { return email; } @Override public Integer getBillCycleDayLocal() { return billingCycleDayLocal; } @Override public Currency getCurrency() { return currency; } @Override public UUID getPaymentMethodId() { return paymentMethodId; } @Override public DateTimeZone getTimeZone() { return timeZone; } @Override public DateTimeZone getFixedOffsetTimeZone() { return AccountDateTimeUtils.getFixedOffsetTimeZone(this); } @Override public DateTime getReferenceTime() { return AccountDateTimeUtils.getReferenceDateTime(this); } @Override public String getLocale() { return locale; } @Override public String getAddress1() { return address1; } @Override public String getAddress2() { return address2; } @Override public String getCompanyName() { return companyName; } @Override public String getCity() { return city; } @Override public String getStateOrProvince() { return stateOrProvince; } @Override public String getPostalCode() { return postalCode; } @Override public String getCountry() { return country; } @Override public String getPhone() { return phone; } @Override public String getNotes() { return notes; } @Override public Boolean isMigrated() { return migrated; } @Override public Boolean isNotifiedForInvoices() { return isNotifiedForInvoices; } @Override public UUID getParentAccountId() { return parentAccountId; } @Override public Boolean isPaymentDelegatedToParent() { return isPaymentDelegatedToParent; } @Override public UUID getId() { return id; } @Override public MutableAccountData toMutableAccountData() { throw new UnsupportedOperationException(); } @Override public Account mergeWithDelegate(final Account delegate) { throw new UnsupportedOperationException(); } }; } }