/*
* 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.catalog;
import javax.annotation.Nullable;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.PhaseType;
import org.killbill.billing.catalog.api.Plan;
import org.killbill.billing.catalog.api.TimeUnit;
public class MockPlanPhase extends DefaultPlanPhase {
public static MockPlanPhase create1USDMonthlyEvergreen() {
return (MockPlanPhase) new MockPlanPhase(BillingPeriod.MONTHLY,
PhaseType.EVERGREEN,
new DefaultDuration().setUnit(TimeUnit.UNLIMITED).setNumber(-1),
MockInternationalPrice.create1USD(),
null).setPlan(MockPlan.createBicycleNoTrialEvergreen1USD());
}
public static MockPlanPhase createUSDMonthlyEvergreen(final String reccuringUSDPrice, final String fixedPrice) {
return new MockPlanPhase(BillingPeriod.MONTHLY,
PhaseType.EVERGREEN,
new DefaultDuration().setUnit(TimeUnit.UNLIMITED).setNumber(-1),
(reccuringUSDPrice == null) ? null : MockInternationalPrice.createUSD(reccuringUSDPrice),
(fixedPrice == null) ? null : MockInternationalPrice.createUSD(fixedPrice));
}
public static MockPlanPhase createUSDMonthlyFixedTerm(final String reccuringUSDPrice, final String fixedPrice, final int durationInMonths) {
return new MockPlanPhase(BillingPeriod.MONTHLY,
PhaseType.FIXEDTERM,
new DefaultDuration().setUnit(TimeUnit.MONTHS).setNumber(durationInMonths),
(reccuringUSDPrice == null) ? null : MockInternationalPrice.createUSD(reccuringUSDPrice),
(fixedPrice == null) ? null : MockInternationalPrice.createUSD(fixedPrice));
}
public static MockPlanPhase create30DayTrial() {
return createTrial(30);
}
public static MockPlanPhase createTrial(final int days) {
return new MockPlanPhase(BillingPeriod.NO_BILLING_PERIOD,
PhaseType.TRIAL,
new DefaultDuration().setUnit(TimeUnit.DAYS).setNumber(days),
null,
MockInternationalPrice.create1USD()
);
}
public MockPlanPhase(
final BillingPeriod billingPeriod,
final PhaseType type,
final DefaultDuration duration,
final DefaultInternationalPrice recurringPrice,
final DefaultInternationalPrice fixedPrice) {
setPhaseType(type);
setDuration(duration);
setFixed(new MockFixed(fixedPrice));
setRecurring(new MockRecurring(billingPeriod, recurringPrice).setPhase(this));
}
public MockPlanPhase() {
this(new MockInternationalPrice(), null);
}
public MockPlanPhase(@Nullable final MockInternationalPrice recurringPrice,
@Nullable final MockInternationalPrice fixedPrice) {
this(recurringPrice, fixedPrice, BillingPeriod.MONTHLY);
}
public MockPlanPhase(@Nullable final MockInternationalPrice recurringPrice,
@Nullable final MockInternationalPrice fixedPrice,
final BillingPeriod billingPeriod) {
this(recurringPrice, fixedPrice, billingPeriod, PhaseType.EVERGREEN);
}
public MockPlanPhase(@Nullable final MockInternationalPrice recurringPrice,
@Nullable final MockInternationalPrice fixedPrice,
final BillingPeriod billingPeriod,
final PhaseType phaseType) {
setPhaseType(phaseType);
setDuration(new DefaultDuration().setNumber(-1).setUnit(TimeUnit.UNLIMITED));
setPlan(new MockPlan(this));
setFixed(new MockFixed(fixedPrice));
setRecurring(new MockRecurring(billingPeriod, recurringPrice));
}
public MockPlanPhase(final MockPlan mockPlan) {
setPhaseType(PhaseType.EVERGREEN);
setDuration(new DefaultDuration().setNumber(-1).setUnit(TimeUnit.UNLIMITED));
setPlan(mockPlan);
setFixed(new MockFixed(null));
setRecurring(new MockRecurring(BillingPeriod.MONTHLY, new MockInternationalPrice()));
}
public MockPlanPhase(final Plan plan, final PhaseType phaseType) {
setPhaseType(phaseType);
setDuration(new DefaultDuration().setNumber(-1).setUnit(TimeUnit.UNLIMITED));
setPlan(plan);
setFixed(new MockFixed(null));
setRecurring(new MockRecurring(BillingPeriod.MONTHLY, new MockInternationalPrice()));
}
}