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