package org.javamoney.examples.fxdemo.widgets;
import java.math.BigDecimal;
import java.util.Collections;
import javafx.fxml.FXML;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javax.money.CurrencyUnit;
import javax.money.MonetaryAmount;
import javax.money.Monetary;
import org.javamoney.examples.fxdemo.AbstractFXMLComponent;
import org.javamoney.moneta.FastMoney;
import org.javamoney.moneta.Money;
/**
* @author Anatole Tresch
* @author Werner Keil
*
*/
public class AmountEntry extends AbstractFXMLComponent {
@FXML
private ComboBox<String> codeBox;
@FXML
private ChoiceBox<String> numberType;
@FXML
private TextField numberValue;
@FXML
private Label amountTitle;
public AmountEntry(String title) {
super("AmountEntry.fxml");
amountTitle.setText(title);
numberType.getItems().add("BigDecimal");
numberType.getItems().add("Long");
for(CurrencyUnit cu: Monetary.getCurrencies()){
codeBox.getItems().add(cu.getCurrencyCode());
}
Collections.sort(codeBox.getItems());
codeBox.getSelectionModel().select("CHF");
}
public MonetaryAmount getAmount() {
String code = (String) codeBox.getSelectionModel().getSelectedItem();
String typeClass = (String) numberType.getSelectionModel()
.getSelectedItem();
CurrencyUnit currency = Monetary.getCurrency(code);
BigDecimal dec = new BigDecimal(numberValue.getText());
if (typeClass != null) {
if ("Long".equals(typeClass)) {
return FastMoney.of(dec,currency);
}
}
return Money.of(dec,currency);
}
public void setAmount(MonetaryAmount amount) {
if (amount != null) {
codeBox.getSelectionModel().select(
amount.getCurrency().getCurrencyCode());
if (FastMoney.class.equals(amount.getClass())) {
numberType.getSelectionModel().select("Long");
} else {
numberType.getSelectionModel().select("BigDecimal");
}
numberValue.setText(Money.from(amount).getNumber()
.toString());
} else {
codeBox.getSelectionModel().clearSelection();
numberType.getSelectionModel().clearSelection();
numberValue.setText("0");
}
}
public ComboBox<String> getCodeBox() {
return codeBox;
}
}