001/* 002 * Copyright (c) 2012, 2013, Werner Keil, Credit Suisse (Anatole Tresch). Licensed under the Apache 003 * License, Version 2.0 (the "License"); you may not use this file except in compliance with the 004 * License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 005 * Unless required by applicable law or agreed to in writing, software distributed under the License 006 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 007 * or implied. See the License for the specific language governing permissions and limitations under 008 * the License. Contributors: Anatole Tresch - initial version. 009 */ 010package org.javamoney.tck.tests.internal; 011 012import org.javamoney.tck.tests.conversion.TestExchangeRate; 013 014import javax.money.CurrencyUnit; 015import javax.money.MonetaryAmount; 016import javax.money.convert.*; 017import java.util.Objects; 018 019/** 020 * Test ExchangeProvider. Created by Anatole on 26.04.2014. 021 */ 022public class TestRateProvider02 implements ExchangeRateProvider { 023 024 public static final double FACTOR = 0.2; 025 private static ProviderContext PC = ProviderContextBuilder.of("TestRateProvider02", RateType.OTHER).build(); 026 private static ConversionContext CC = ConversionContextBuilder.create(PC, RateType.OTHER).build(); 027 028 private static final class Conversion implements CurrencyConversion { 029 030 private CurrencyUnit term; 031 032 private Conversion(CurrencyUnit term) { 033 Objects.requireNonNull(term); 034 this.term = term; 035 } 036 037 @Override 038 public CurrencyUnit getCurrency() { 039 return term; 040 } 041 042 @Override 043 public ConversionContext getContext() { 044 return CC; 045 } 046 047 @Override 048 public ExchangeRate getExchangeRate(MonetaryAmount sourceAmount) { 049 return new TestExchangeRate.Builder(CC).setFactor(new TestNumberValue(FACTOR)) 050 .setBase(sourceAmount.getCurrency()).setTerm(term).build(); 051 } 052 053 @Override 054 public MonetaryAmount apply(MonetaryAmount value) { 055 return value.multiply(FACTOR).getFactory().setCurrency(term).create(); 056 } 057 058 @Override 059 public ExchangeRateProvider getExchangeRateProvider() { 060 return null; 061 } 062 } 063 064 @Override 065 public ProviderContext getContext() { 066 return PC; 067 } 068 069 @Override 070 public boolean isAvailable(ConversionQuery conversionQuery) { 071 Objects.requireNonNull(conversionQuery); 072 Objects.requireNonNull(conversionQuery.getCurrency()); 073 return true; 074 } 075 076 @Override 077 public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { 078 Objects.requireNonNull(conversionQuery.getBaseCurrency()); 079 if (isAvailable(conversionQuery)) { 080 return new TestExchangeRate.Builder(getContext().getProviderName(), RateType.OTHER) 081 .setFactor(new TestNumberValue(FACTOR)).setBase(conversionQuery.getBaseCurrency()) 082 .setTerm(conversionQuery.getCurrency()).build(); 083 } 084 return null; 085 } 086 087 @Override 088 public CurrencyConversion getCurrencyConversion(ConversionQuery conversionQuery) { 089 if (isAvailable(conversionQuery)) { 090 return new Conversion(conversionQuery.getCurrency()); 091 } 092 return null; 093 } 094 095}