package org.javamoney.examples.fxdemo.ext;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashSet;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javax.money.MonetaryAmount;
import org.javamoney.examples.fxdemo.widgets.AbstractExamplePane;
import org.javamoney.examples.fxdemo.widgets.AbstractSingleSamplePane;
import org.javamoney.examples.fxdemo.widgets.AmountEntry;
import org.javamoney.moneta.Money;
import org.javamoney.moneta.function.MonetaryFunctions;
public class MinMaxSample extends AbstractExamplePane {
public MinMaxSample() {
super(new ExamplePane());
setExampleTitle("Using a monetary extension for min/max.");
setExampleDescription("This example shows how to use a monetary extension to caluclate in/max for a list of values.");
setExampleCode(loadExample("/samples/Extensions.javatxt"));
}
public final static class ExamplePane extends AbstractSingleSamplePane {
private HBox exPane = new HBox();
private AmountEntry amount1 = new AmountEntry("Amount 1");
private AmountEntry amount2 = new AmountEntry("Amount 2");
private AmountEntry amount3 = new AmountEntry("Amount 3");
public ExamplePane() {
exPane.getChildren().addAll(amount1, amount2, amount3);
this.inputPane.getChildren().add(exPane);
AnchorPane.setLeftAnchor(exPane, 10d);
AnchorPane.setTopAnchor(exPane, 10d);
Button minButton = new Button("Calculate MIN");
minButton.setOnAction(new javafx.event.EventHandler<ActionEvent>() {
public void handle(ActionEvent action) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
try {
/*
MonetaryAmount min =MonetaryFunctions.min()
.apply(
new HashSet<MonetaryAmount>(Arrays
.asList(amount1.getAmount(),
amount2.getAmount(),
amount3.getAmount())));
pw.println("MonetaryAmount (Min)");
pw.println("--------------------");
pw.println();
printSummary(min, pw);
*/
} catch (Exception e) {
e.printStackTrace(pw);
}
pw.flush();
ExamplePane.this.outputArea.setText(sw.toString());
}
private void printSummary(MonetaryAmount amount, PrintWriter pw) {
pw.println("Class: " + amount.getClass().getName());
if (amount instanceof Money) {
Money asMoney = (Money) amount;
pw.println("Value (BD): " + asMoney.getNumber());
pw.println("Value (double): "
+ asMoney.getNumber().doubleValue());
pw.println("Precision: "
+ asMoney.getNumber().getPrecision());
pw.println("Scale: " + asMoney.getNumber().getScale());
}
}
});
Button maxButton = new Button("Calculate MAX");
maxButton.setOnAction(new javafx.event.EventHandler<ActionEvent>() {
public void handle(ActionEvent action) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
try {
/*
MonetaryAmount max = MonetaryFunctions.max()
.apply(
new HashSet<MonetaryAmount>(Arrays
.asList(amount1.getAmount(),
amount2.getAmount(),
amount3.getAmount())));
pw.println("MonetaryAmount (Max)");
pw.println("--------------------");
pw.println();
printSummary(max, pw);
*/
} catch (Exception e) {
e.printStackTrace(pw);
}
pw.flush();
ExamplePane.this.outputArea.setText(sw.toString());
}
private void printSummary(MonetaryAmount amount, PrintWriter pw) {
pw.println("Class: " + amount.getClass().getName());
if (amount instanceof Money) {
Money asMoney = (Money) amount;
pw.println("Value (BD): " + asMoney.getNumber());
pw.println("Value (double): "
+ asMoney.getNumber().doubleValue());
pw.println("Precision: "
+ asMoney.getNumber().getPrecision());
pw.println("Scale: " + asMoney.getNumber().getScale());
}
}
});
buttonPane.getChildren().addAll(minButton, new Label(" "),
maxButton);
}
}
}