package org.javamoney.examples.fxdemo.exchange;
import java.io.PrintWriter;
import java.io.StringWriter;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javax.money.CurrencyUnit;
import javax.money.convert.ExchangeRate;
import javax.money.convert.ExchangeRateProvider;
import javax.money.convert.MonetaryConversions;
import org.javamoney.examples.fxdemo.widgets.AbstractExamplePane;
import org.javamoney.examples.fxdemo.widgets.AbstractSingleSamplePane;
import org.javamoney.examples.fxdemo.widgets.CurrencySelector;
/**
* @author Werner Keil
* @author Anatole Tresch
*
*/
public class GetExchangeRate extends AbstractExamplePane {
public GetExchangeRate() {
super(new ExamplePane());
setExampleTitle("Access Exchange Rates");
setExampleDescription("This example shows how to access exchange rates for different conversions.");
setExampleCode(loadExample("/samples/ExchangeRates.javatxt"));
}
public final static class ExamplePane extends AbstractSingleSamplePane {
private VBox exPane = new VBox();
private CurrencySelector currencySelector1 = new CurrencySelector(
"Base Currency");
private CurrencySelector currencySelector2 = new CurrencySelector(
"Term Currency");
private TextField rateProvider = new TextField();
public ExamplePane() {
final Button swapButton = new Button("Swap");
swapButton.setDisable(true);
exPane.getChildren().addAll(currencySelector1, currencySelector2, new Label("Rate Provider(s)"), rateProvider);
this.inputPane.getChildren().add(exPane);
AnchorPane.setLeftAnchor(exPane, 10d);
AnchorPane.setTopAnchor(exPane, 10d);
Button actionButton = new Button("Create");
actionButton
.setOnAction(new javafx.event.EventHandler<ActionEvent>() {
public void handle(ActionEvent action) {
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw);
try {
ExchangeRateProvider prov = null;
String rp = rateProvider.getText();
if(rp==null || rp.trim().isEmpty()){
prov = MonetaryConversions
.getExchangeRateProvider();
}
else{
String[] rps = rp.split(",");
prov = MonetaryConversions
.getExchangeRateProvider(rps);
}
ExchangeRate rate = prov.getExchangeRate(
currencySelector1.getCurrency(),
currencySelector2.getCurrency());
pw.println("Exchange Rate");
pw.println("--------------");
pw.println();
if (rate == null) {
pw.println("N/A (null).");
} else {
printSummary(rate, pw);
}
} catch (Exception e) {
e.printStackTrace(pw);
}
pw.flush();
ExamplePane.this.outputArea.setText(sw.toString());
}
private void printSummary(ExchangeRate rate,
PrintWriter pw) {
pw.println("Class: " + rate.getClass().getName());
pw.println("Base Currency: " + rate.getBaseCurrency());
pw.println("Term Currency: " + rate.getCurrency());
pw.println("Factor: " + rate.getFactor());
pw.println("Context: " + rate.getContext());
pw.println("Derived: " + rate.isDerived());
if (rate.isDerived()) {
pw.println("Chain: "
+ rate.getExchangeRateChain());
}
}
});
swapButton
.setOnAction(new javafx.event.EventHandler<ActionEvent>() {
public void handle(ActionEvent action) {
logger.debug("Swapping...");
final CurrencyUnit tmpCurrency = currencySelector1.getCurrency();
currencySelector1.setCurrency(currencySelector2.getCurrency());
currencySelector2.setCurrency(tmpCurrency);
}
});
buttonPane.getChildren().addAll(actionButton, swapButton);
}
}
}