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 ExchangeRateProvider. 021 */ 022public class TestRateProvider3 implements ExchangeRateProvider { 023 024 public static final int FACTOR = 3; 025 private static ProviderContext PC = ProviderContextBuilder.of("TestRateProvider3", 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 query) { 071 Objects.requireNonNull(query); 072 Objects.requireNonNull(query.getBaseCurrency()); 073 Objects.requireNonNull(query.getCurrency()); 074 return "USD".equals(query.getBaseCurrency().getCurrencyCode()); 075 } 076 077 @Override 078 public ExchangeRate getExchangeRate(ConversionQuery query) { 079 if (isAvailable(query)) { 080 return new TestExchangeRate.Builder(PC.getProviderName(), RateType.OTHER).setFactor(new TestNumberValue(FACTOR)) 081 .setBase(query.getBaseCurrency()).setTerm(query.getCurrency()).build(); 082 } 083 return null; 084 } 085 086 @Override 087 public CurrencyConversion getCurrencyConversion(ConversionQuery conversionQuery) { 088 Objects.requireNonNull(conversionQuery); 089 Objects.requireNonNull(conversionQuery.getCurrency()); 090 return new Conversion(conversionQuery.getCurrency()); 091 } 092 093}