org.killbill.billing.plugin.analytics.dao.CurrencyConversionDao.java Source code

Java tutorial

Introduction

Here is the source code for org.killbill.billing.plugin.analytics.dao.CurrencyConversionDao.java

Source

/*
 * Copyright 2010-2014 Ning, Inc.
 * Copyright 2014 The Billing Project, LLC
 *
 * 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.plugin.analytics.dao;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.killbill.billing.plugin.analytics.dao.model.CurrencyConversionModelDao;
import org.killbill.killbill.osgi.libs.killbill.OSGIKillbillDataSource;
import org.killbill.killbill.osgi.libs.killbill.OSGIKillbillLogService;
import org.skife.jdbi.v2.DBI;

public class CurrencyConversionDao {

    private final OSGIKillbillLogService logService;
    private final CurrencyConversionSqlDao sqlDao;

    public CurrencyConversionDao(final OSGIKillbillLogService logService,
            final OSGIKillbillDataSource osgiKillbillDataSource) {
        this.logService = logService;
        final DBI dbi = BusinessDBIProvider.get(osgiKillbillDataSource.getDataSource());
        this.sqlDao = dbi.onDemand(CurrencyConversionSqlDao.class);
    }

    // Return a list of conversion rates over time per currency
    public Map<String, List<CurrencyConversionModelDao>> getCurrencyConversions(final String referenceCurrency) {
        final Map<String, List<CurrencyConversionModelDao>> currencyConversions = new HashMap<String, List<CurrencyConversionModelDao>>();
        for (final CurrencyConversionModelDao currencyConversionModelDao : sqlDao
                .getCurrencyConversions(referenceCurrency)) {
            if (currencyConversions.get(currencyConversionModelDao.getCurrency()) == null) {
                currencyConversions.put(currencyConversionModelDao.getCurrency(),
                        new LinkedList<CurrencyConversionModelDao>());
            }
            currencyConversions.get(currencyConversionModelDao.getCurrency()).add(currencyConversionModelDao);
        }
        return currencyConversions;
    }

    public CurrencyConversionModelDao getCurrencyConversion(final String referenceCurrency, final String currency,
            final DateTime effectiveDate) {
        return getCurrencyConversion(referenceCurrency, currency, effectiveDate.toLocalDate());
    }

    public CurrencyConversionModelDao getCurrencyConversion(final String referenceCurrency, final String currency,
            final LocalDate effectiveDate) {
        final CurrencyConversionModelDao currencyConversion = sqlDao
                .getCurrencyConversionForCurrencyAndDate(referenceCurrency, currency, effectiveDate);
        if (currencyConversion == null) {
            return new CurrencyConversionModelDao(currency, effectiveDate, effectiveDate, null, referenceCurrency);
        } else {
            return currencyConversion;
        }
    }

    public void addCurrencyConversion(final String currency, final LocalDate startDate, final LocalDate endDate,
            final BigDecimal referenceRate, final String referenceCurrency) {
        sqlDao.addCurrencyConversion(currency, startDate, endDate, referenceRate, referenceCurrency);
    }
}