package org.javamoney.examples.console.simple.core;
import org.javamoney.examples.console.simple.util.ConsoleUtils;
import org.javamoney.moneta.Money;
import org.javamoney.moneta.function.MonetaryFunctions;
import org.javamoney.moneta.function.MonetaryOperators;
import org.javamoney.moneta.function.MonetaryQueries;
import javax.money.Monetary;
import javax.money.MonetaryAmount;
import javax.money.RoundingQueryBuilder;
import java.math.RoundingMode;
/**
* Showcase the usage of extension point mechanism.
*/
public class AmountsUseExtensionPoints {
public static void main(String... args){
MonetaryAmount amt = Money.of(1234.56234, "CHF");
ConsoleUtils.printDetails("Base", amt);
ConsoleUtils.printDetails("10.5 %", amt.with(MonetaryOperators.percent(10.5)));
ConsoleUtils.printDetails("10.5 o/oo", amt.with(MonetaryOperators.permil(10.5)));
ConsoleUtils.printDetails("Major Part", amt.with(MonetaryOperators.majorPart()));
ConsoleUtils.printDetails("Minor Part", amt.with(MonetaryOperators.minorPart()));
ConsoleUtils.printDetails("1/Base (Reciprocal)", amt.with(MonetaryOperators.reciprocal()));
System.out.println("Minor Part as long -> " + amt.query(MonetaryQueries.extractMinorPart()));
System.out.println("Major Part as long -> " + amt.query(MonetaryQueries.extractMajorPart()));
ConsoleUtils.printDetails("Rounded (default)", amt.with(Monetary.getDefaultRounding()));
ConsoleUtils.printDetails("Rounded (DOWN, 1 fraction digit)", amt.with(Monetary.getRounding(
RoundingQueryBuilder.of().set(RoundingMode.DOWN).setScale(1).build()
)));
}
}