001/*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *   http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied.  See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019package org.javamoney.moneta.internal;
020
021import org.javamoney.moneta.convert.*;
022import org.javamoney.moneta.spi.*;
023import org.javamoney.moneta.spi.loader.DefaultLoaderService;
024import org.osgi.framework.BundleActivator;
025import org.osgi.framework.BundleContext;
026
027import javax.money.convert.ExchangeRateProvider;
028import javax.money.spi.Bootstrap;
029import javax.money.spi.CurrencyProviderSpi;
030import javax.money.spi.MonetaryAmountFactoryProviderSpi;
031import javax.money.spi.MonetaryAmountFormatProviderSpi;
032import java.util.logging.Logger;
033
034/**
035 * A bundle activator that registers the OSGI services.
036 */
037public class OSGIActivator implements BundleActivator {
038
039    private static final Logger LOG = Logger.getLogger(OSGIActivator.class.getName());
040
041    private OSGIServiceProvider serviceProvider;
042
043    @Override
044    public void start(BundleContext context) {
045        // Register marker service
046        this.serviceProvider = new OSGIServiceProvider(context);
047        LOG.info("Registered OSGI ServiceProvider...");
048        Bootstrap.init(this.serviceProvider);
049        LOG.info("Registering JavaMoney services...");
050        OSGIServiceProvider.registerService(context.getBundle(), ExchangeRateProvider.class, ECBCurrentRateProvider.class);
051        OSGIServiceProvider.registerService(context.getBundle(), ExchangeRateProvider.class, ECBHistoricRateProvider.class);
052        OSGIServiceProvider.registerService(context.getBundle(), ExchangeRateProvider.class, ECBHistoric90RateProvider.class);
053        OSGIServiceProvider.registerService(context.getBundle(), ExchangeRateProvider.class, IMFRateProvider.class);
054        OSGIServiceProvider.registerService(context.getBundle(), ExchangeRateProvider.class, IdentityRateProvider.class);
055        OSGIServiceProvider.registerService(context.getBundle(), CurrencyProviderSpi.class, JDKCurrencyProvider.class);
056        OSGIServiceProvider.registerService(context.getBundle(), CurrencyProviderSpi.class, ConfigurableCurrencyUnitProvider.class);
057
058        OSGIServiceProvider.registerService(context.getBundle(), MonetaryAmountFactoryProviderSpi.class, FastMoneyAmountFactoryProvider.class);
059        OSGIServiceProvider.registerService(context.getBundle(), MonetaryAmountFactoryProviderSpi.class, MoneyAmountFactoryProvider.class);
060        OSGIServiceProvider.registerService(context.getBundle(), MonetaryAmountFactoryProviderSpi.class, RoundedMoneyAmountFactoryProvider.class);
061
062        OSGIServiceProvider.registerService(context.getBundle(), MonetaryAmountFormatProviderSpi.class, org.javamoney.moneta.spi.format.DefaultAmountFormatProviderSpi.class);
063
064        OSGIServiceProvider.registerService(context.getBundle(), javax.money.spi.MonetaryAmountsSingletonQuerySpi.class, DefaultMonetaryAmountsSingletonQuerySpi.class);
065
066        OSGIServiceProvider.registerService(context.getBundle(), javax.money.spi.MonetaryAmountsSingletonQuerySpi.class, DefaultMonetaryAmountsSingletonQuerySpi.class);
067        OSGIServiceProvider.registerService(context.getBundle(), javax.money.spi.MonetaryAmountsSingletonSpi.class, DefaultMonetaryAmountsSingletonSpi.class);
068        OSGIServiceProvider.registerService(context.getBundle(), javax.money.spi.MonetaryConversionsSingletonSpi.class, DefaultMonetaryConversionsSingletonSpi.class);
069        OSGIServiceProvider.registerService(context.getBundle(), javax.money.spi.MonetaryCurrenciesSingletonSpi.class, DefaultMonetaryCurrenciesSingletonSpi.class);
070        OSGIServiceProvider.registerService(context.getBundle(), javax.money.spi.RoundingProviderSpi.class, DefaultRoundingProvider.class);
071        OSGIServiceProvider.registerService(context.getBundle(), org.javamoney.moneta.spi.LoaderService.class, DefaultLoaderService.class);
072        LOG.info("Registered JavaMoney services...");
073    }
074
075    @Override
076    public void stop(BundleContext context) {
077        if(serviceProvider!=null) {
078            LOG.info("Unregistering JavaMoney services...");
079            OSGIServiceProvider.unregisterService(context.getBundle(), ExchangeRateProvider.class, ECBCurrentRateProvider.class);
080            OSGIServiceProvider.unregisterService(context.getBundle(), ExchangeRateProvider.class, ECBHistoricRateProvider.class);
081            OSGIServiceProvider.unregisterService(context.getBundle(), ExchangeRateProvider.class, ECBHistoric90RateProvider.class);
082            OSGIServiceProvider.unregisterService(context.getBundle(), ExchangeRateProvider.class, IMFRateProvider.class);
083            OSGIServiceProvider.unregisterService(context.getBundle(), ExchangeRateProvider.class, IdentityRateProvider.class);
084            OSGIServiceProvider.unregisterService(context.getBundle(), CurrencyProviderSpi.class, JDKCurrencyProvider.class);
085            OSGIServiceProvider.unregisterService(context.getBundle(), CurrencyProviderSpi.class, ConfigurableCurrencyUnitProvider.class);
086
087            OSGIServiceProvider.unregisterService(context.getBundle(), MonetaryAmountFactoryProviderSpi.class, FastMoneyAmountFactoryProvider.class);
088            OSGIServiceProvider.unregisterService(context.getBundle(), MonetaryAmountFactoryProviderSpi.class, MoneyAmountFactoryProvider.class);
089            OSGIServiceProvider.unregisterService(context.getBundle(), MonetaryAmountFactoryProviderSpi.class, RoundedMoneyAmountFactoryProvider.class);
090
091            OSGIServiceProvider.unregisterService(context.getBundle(), MonetaryAmountFormatProviderSpi.class, org.javamoney.moneta.spi.format.DefaultAmountFormatProviderSpi.class);
092
093            OSGIServiceProvider.unregisterService(context.getBundle(), javax.money.spi.MonetaryAmountsSingletonQuerySpi.class, DefaultMonetaryAmountsSingletonQuerySpi.class);
094
095            OSGIServiceProvider.unregisterService(context.getBundle(), javax.money.spi.MonetaryAmountsSingletonQuerySpi.class, DefaultMonetaryAmountsSingletonQuerySpi.class);
096            OSGIServiceProvider.unregisterService(context.getBundle(), javax.money.spi.MonetaryAmountsSingletonSpi.class, DefaultMonetaryAmountsSingletonSpi.class);
097            OSGIServiceProvider.unregisterService(context.getBundle(), javax.money.spi.MonetaryConversionsSingletonSpi.class, DefaultMonetaryConversionsSingletonSpi.class);
098            OSGIServiceProvider.unregisterService(context.getBundle(), javax.money.spi.MonetaryCurrenciesSingletonSpi.class, DefaultMonetaryCurrenciesSingletonSpi.class);
099            OSGIServiceProvider.unregisterService(context.getBundle(), javax.money.spi.RoundingProviderSpi.class, DefaultRoundingProvider.class);
100            OSGIServiceProvider.unregisterService(context.getBundle(), org.javamoney.moneta.spi.LoaderService.class, DefaultLoaderService.class);
101        }
102    }
103}