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.Monetary; 017import javax.money.convert.ConversionContext; 018import javax.money.convert.ConversionContextBuilder; 019import javax.money.convert.ConversionQuery; 020import javax.money.convert.CurrencyConversion; 021import javax.money.convert.ExchangeRate; 022import javax.money.convert.ExchangeRateProvider; 023import javax.money.convert.ProviderContext; 024import javax.money.convert.ProviderContextBuilder; 025import javax.money.convert.RateType; 026import java.util.Objects; 027 028/** 029 * Test ExchangeProvider. Created by Anatole on 26.04.2014. 030 */ 031public class TestRateProvider implements ExchangeRateProvider { 032 033 private ProviderContext PC = ProviderContextBuilder.of("TestRateProvider", RateType.OTHER).build(); 034 private ConversionContext CC = ConversionContextBuilder.create(PC, RateType.OTHER).build(); 035 private CurrencyUnit TERM = new TestCurrencyUnit("FOO"); 036 037 private CurrencyConversion CONVERSION = new CurrencyConversion() { 038 039 @Override 040 public CurrencyUnit getCurrency() { 041 return TERM; 042 } 043 044 @Override 045 public ConversionContext getContext() { 046 return CC; 047 } 048 049 @Override 050 public ExchangeRate getExchangeRate(MonetaryAmount sourceAmount) { 051 return new TestExchangeRate.Builder(CC).setFactor(new TestNumberValue(2)) 052 .setBase(sourceAmount.getCurrency()).setTerm(TERM).build(); 053 } 054 055 @Override 056 public ExchangeRateProvider getExchangeRateProvider() { 057 return TestRateProvider.this; 058 } 059 060 @Override 061 public MonetaryAmount apply(MonetaryAmount value) { 062 return value.multiply(2).getFactory().setCurrency(TERM).create(); 063 } 064 }; 065 066 @Override 067 public ProviderContext getContext() { 068 return PC; 069 } 070 071 @Override 072 public boolean isAvailable(CurrencyUnit base, CurrencyUnit term) { 073 Objects.requireNonNull(base); 074 Objects.requireNonNull(term); 075 return "FOO".equals(term.getCurrencyCode()) || "XXX".equals(term.getCurrencyCode()); 076 } 077 078 @Override 079 public boolean isAvailable(ConversionQuery conversionContext) { 080 Objects.requireNonNull(conversionContext); 081 Objects.requireNonNull(conversionContext.getCurrency()); 082 return "FOO".equals(conversionContext.getCurrency().getCurrencyCode()) || 083 "XXX".equals(conversionContext.getCurrency().getCurrencyCode()); 084 } 085 086 @Override 087 public boolean isAvailable(String baseCode, String termCode) { 088 return "Foo".equals(termCode) || "XXX".equals(termCode); 089 } 090 091 092 @Override 093 public ExchangeRate getExchangeRate(CurrencyUnit base, CurrencyUnit term) { 094 if (isAvailable(base, term)) { 095 return new TestExchangeRate.Builder(CC).setFactor(new TestNumberValue(2)).setBase(base).setTerm(term) 096 .build(); 097 } 098 return null; 099 } 100 101 @Override 102 public ExchangeRate getExchangeRate(ConversionQuery conversionQuery) { 103 if (isAvailable(conversionQuery)) { 104 return new TestExchangeRate.Builder( 105 ConversionContextBuilder.create(getContext(), RateType.OTHER).importContext(conversionQuery) 106 .build()).setFactor(new TestNumberValue(2)).setBase(conversionQuery.getBaseCurrency()) 107 .setTerm(conversionQuery.getCurrency()).build(); 108 } 109 return null; 110 } 111 112 @Override 113 public ExchangeRate getExchangeRate(String baseCode, String termCode) { 114 if (isAvailable(baseCode, termCode)) { 115 return getExchangeRate(Monetary.getCurrency(baseCode), TERM); 116 } 117 return null; 118 } 119 120 @Override 121 public ExchangeRate getReversed(ExchangeRate rate) { 122 return null; 123 } 124 125 @Override 126 public CurrencyConversion getCurrencyConversion(CurrencyUnit term) { 127 return CONVERSION; 128 } 129 130 @Override 131 public CurrencyConversion getCurrencyConversion(ConversionQuery conversionQuery) { 132 if (isAvailable(conversionQuery)) { 133 return CONVERSION; 134 } 135 return null; 136 } 137 138 @Override 139 public CurrencyConversion getCurrencyConversion(String termCode) { 140 if (TERM.getCurrencyCode().equals(termCode)) { 141 return CONVERSION; 142 } 143 return null; 144 } 145 146}