org.killbill.billing.overdue.wrapper.OverdueWrapperFactory Maven / Gradle / Ivy
/*
* Copyright 2010-2013 Ning, Inc.
* Copyright 2014-2017 Groupon, Inc
* Copyright 2014-2017 The Billing Project, LLC
*
* The Billing Project 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.overdue.wrapper;
import java.util.UUID;
import org.joda.time.Period;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.AccountInternalApi;
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.junction.BlockingInternalApi;
import org.killbill.billing.overdue.api.OverdueApiException;
import org.killbill.billing.overdue.api.OverdueConfig;
import org.killbill.billing.overdue.applicator.OverdueStateApplicator;
import org.killbill.billing.overdue.caching.OverdueConfigCache;
import org.killbill.billing.overdue.calculator.BillingStateCalculator;
import org.killbill.billing.overdue.config.DefaultOverdueConfig;
import org.killbill.billing.overdue.config.DefaultOverdueState;
import org.killbill.billing.overdue.config.DefaultOverdueStateSet;
import org.killbill.billing.overdue.config.api.OverdueException;
import org.killbill.billing.overdue.config.api.OverdueStateSet;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.clock.Clock;
import org.killbill.commons.locker.GlobalLocker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
public class OverdueWrapperFactory {
private static final Logger log = LoggerFactory.getLogger(OverdueWrapperFactory.class);
private final AccountInternalApi accountApi;
private final BillingStateCalculator billingStateCalculator;
private final OverdueStateApplicator overdueStateApplicator;
private final BlockingInternalApi api;
private final GlobalLocker locker;
private final Clock clock;
private final OverdueConfigCache overdueConfigCache;
private final InternalCallContextFactory internalCallContextFactory;
@Inject
public OverdueWrapperFactory(final BlockingInternalApi api,
final GlobalLocker locker,
final Clock clock,
final BillingStateCalculator billingStateCalculator,
final OverdueStateApplicator overdueStateApplicatorBundle,
final OverdueConfigCache overdueConfigCache,
final AccountInternalApi accountApi,
final InternalCallContextFactory internalCallContextFactory) {
this.billingStateCalculator = billingStateCalculator;
this.overdueStateApplicator = overdueStateApplicatorBundle;
this.accountApi = accountApi;
this.api = api;
this.locker = locker;
this.clock = clock;
this.overdueConfigCache = overdueConfigCache;
this.internalCallContextFactory = internalCallContextFactory;
}
public OverdueWrapper createOverdueWrapperFor(final Account blockable, final InternalTenantContext context) throws OverdueException {
return new OverdueWrapper(blockable, api, getOverdueStateSet(context), locker, clock, billingStateCalculator, overdueStateApplicator, internalCallContextFactory);
}
public OverdueWrapper createOverdueWrapperFor(final UUID id, final InternalTenantContext context) throws OverdueException {
try {
final Account account = accountApi.getAccountById(id, context);
return new OverdueWrapper(account, api, getOverdueStateSet(context), locker, clock, billingStateCalculator, overdueStateApplicator, internalCallContextFactory);
} catch (final AccountApiException e) {
throw new OverdueException(e);
}
}
private OverdueStateSet getOverdueStateSet(final InternalTenantContext context) throws OverdueException {
final OverdueConfig overdueConfig;
try {
overdueConfig = overdueConfigCache.getOverdueConfig(context);
if (overdueConfig == null || overdueConfig.getOverdueStatesAccount() == null) {
return new DefaultOverdueStateSet() {
@SuppressWarnings("unchecked")
@Override
public DefaultOverdueState[] getStates() {
return new DefaultOverdueState[0];
}
@Override
public Period getInitialReevaluationInterval() {
return null;
}
};
} else {
return ((DefaultOverdueConfig) overdueConfig).getOverdueStatesAccount();
}
} catch (final OverdueApiException e) {
throw new OverdueException(e);
}
}
}