001/*
002  Copyright (c) 2012, 2018, Anatole Tresch, Werner Keil and others by the @author tag.
003
004  Licensed under the Apache License, Version 2.0 (the "License"); you may not
005  use this file except in compliance with the License. You may obtain a copy of
006  the License at
007
008  http://www.apache.org/licenses/LICENSE-2.0
009
010  Unless required by applicable law or agreed to in writing, software
011  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013  License for the specific language governing permissions and limitations under
014  the License.
015 */
016package org.javamoney.moneta.convert;
017
018import java.util.Objects;
019
020import javax.money.CurrencyUnit;
021import javax.money.MonetaryAmount;
022import javax.money.MonetaryOperator;
023
024/**
025 * MonetaryOperator class that applies an exchange rate to an amount.
026 */
027public class ExchangeCurrencyOperator implements MonetaryOperator {
028        /** The target currency. */
029        private final CurrencyUnit currency;
030
031        /**
032         * Constructor.
033         * @param currency the target currency, not null.
034     */
035        ExchangeCurrencyOperator(CurrencyUnit currency) {
036                this.currency = Objects.requireNonNull(currency);
037        }
038
039        @Override
040        public MonetaryAmount apply(MonetaryAmount amount) {
041                Objects.requireNonNull(amount, "Amount required.");
042                return amount.getFactory().setCurrency(currency).create();
043        }
044}