package org.javamoney.examples.fxdemo.core;
import java.io.PrintWriter;
import java.io.StringWriter;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
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;
public class CalculateAmounts extends AbstractExamplePane {
public CalculateAmounts() {
super(new ExamplePane());
setExampleTitle("Monetary Amount Arithmethics");
setExampleDescription("This example shows how to perform arithemtic operations on monetary amounts.");
setExampleCode(loadExample("/samples/AmountArithmetics.javatxt"));
}
public final static class ExamplePane extends AbstractSingleSamplePane {
private HBox exPane = new HBox();
private AmountEntry amount1Pane = new AmountEntry("First Amount");
private AmountEntry amount2Pane = new AmountEntry("Second Amount");
private ChoiceBox<String> operationChoice = new ChoiceBox<String>();
private CheckBox addResultToAmount1 = new CheckBox(
"Set result to Amount 1.");
public ExamplePane() {
exPane.getChildren().add(amount1Pane);
exPane.getChildren().add(amount2Pane);
VBox amountBox = new VBox();
amountBox.getChildren().addAll(amount1Pane,
amount2Pane);
VBox opBox = new VBox();
opBox.getChildren().addAll(new Label("Operation"), operationChoice,
addResultToAmount1);
exPane.getChildren().addAll(amountBox, opBox);
this.inputPane.getChildren().add(exPane);
AnchorPane.setLeftAnchor(inputPane, 10d);
AnchorPane.setTopAnchor(inputPane, 10d);
operationChoice.getItems().addAll("add", "subtract", "multiply",
"divide", "divideToIntegralValue", "remainder");
Button actionButton = new Button("Perform");
actionButton
.setOnAction(new javafx.event.EventHandler<ActionEvent>() {
public void handle(ActionEvent action) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
// StringBuilder builder = new StringBuilder();
try {
MonetaryAmount amount1 = amount1Pane
.getAmount();
MonetaryAmount amount2 = amount2Pane
.getAmount();
MonetaryAmount amountResult = performOperation(
amount1, amount2,
(String) operationChoice
.getSelectionModel()
.getSelectedItem());
if (addResultToAmount1.isSelected()) {
amount1Pane.setAmount(amountResult);
}
pw.println("MonetaryAmount");
pw.println("--------------");
pw.println();
printSummary(amountResult, pw);
} catch (Exception e) {
e.printStackTrace(pw);
}
pw.flush();
ExamplePane.this.outputArea.setText(sw.toString());
}
private MonetaryAmount performOperation(
MonetaryAmount amount1, MonetaryAmount amount2,
String operation) {
if ("add".equals(operation)) {
return Money.from(amount1).add(amount2);
} else if ("subtract".equals(operation)) {
return Money.from(amount1).subtract(amount2);
} else if ("multiply".equals(operation)) {
return Money.from(amount1).multiply(
Money.from(amount2).getNumber().doubleValue());
} else if ("divide".equals(operation)) {
return Money.from(amount1).divide(
Money.from(amount2).getNumber().doubleValue());
} else if ("divideToIntegralValue"
.equals(operation)) {
return Money.from(amount1)
.divideToIntegralValue(
Money.from(amount2)
.getNumber().doubleValue());
// } else if ("max".equals(operation)) {
// return amount1.max(amount2);
// } else if ("min".equals(operation)) {
// return amount1.min(amount2);
} else if ("remainder".equals(operation)) {
return Money.from(amount1).remainder(
Money.from(amount2)
.getNumber().doubleValue());
}
return null;
}
private void printSummary(MonetaryAmount amount,
PrintWriter pw) {
pw.println("Class: " + amount.getClass().getName());
pw.println("Currency: " + amount.getCurrency());
pw.println("Value: "
+ amount);
}
});
buttonPane.getChildren().add(actionButton);
}
}
}