package com.changestuffs.kantor.client.core.home;
import java.util.List;
import com.changestuffs.kantor.shared.actions.AddSell;
import com.changestuffs.kantor.shared.dto.SellDto;
import com.google.gwt.cell.client.NumberCell;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.TextHeader;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.ViewImpl;
public class HomeView extends ViewImpl implements HomePresenter.MyView {
// Page to get the rates: http://rate-exchange.appspot.com/currency?from=USD&to=EUR
private HomeUiHandler uiHandlers;
private final Widget widget;
@UiField
CellTable<SellDto> table;
@UiField
ListBox sellBadge;
@UiField
ListBox buyBadge;
@UiField
TextBox commission;
@UiField
TextBox email;
@UiField
TextBox country;
@UiField
TextBox city;
@UiField
TextBox buyAmount;
private final TextHeader sellHeader = new TextHeader("Sell");
private final TextHeader buyHeader = new TextHeader("Buy");
private final TextHeader rateHeader = new TextHeader("Rate");
private final TextHeader commissionHeader = new TextHeader("Commission");
private final TextHeader cityHeader = new TextHeader("City");
private final TextHeader countryHeader = new TextHeader("Country");
private final TextHeader resultHeader = new TextHeader("Exchange");
private final TextHeader contactHeader = new TextHeader("Contact");
private final ListDataProvider<SellDto> dataProvider = new ListDataProvider<SellDto>();
private final NumberFormat decimalFormat = NumberFormat.getFormat("############.#############");
private final NumberFormat amountFormat = NumberFormat.getFormat("###,##0.00");
public interface Binder extends UiBinder<Widget, HomeView> {
}
@Inject
public HomeView(final Binder binder) {
widget = binder.createAndBindUi(this);
dataProvider.addDataDisplay(table);
GWT.log(getClass()+" instanced");
table.addColumn(new Column<SellDto,String>(new TextCell()){
@Override
public String getValue(SellDto object) {
return object.getBuyBadge();
}
}, buyHeader);
table.addColumn(new Column<SellDto,String>(new TextCell()){
@Override
public String getValue(SellDto object) {
return object.getSellBadge();
}
}, sellHeader);
table.addColumn(new Column<SellDto,Number>(new NumberCell(decimalFormat)){
@Override
public Double getValue(SellDto object) {
GWT.log("Rate: "+object.getRate());
return object.getRate();
}
}, rateHeader);
table.addColumn(new Column<SellDto,String>(new TextCell()){
@Override
public String getValue(SellDto object) {
return object.getCommission()+"%";
}
}, commissionHeader);
table.addColumn(new Column<SellDto,String>(new TextCell()){
@Override
public String getValue(SellDto object) {
return object.getEmail();
}
}, contactHeader);
table.addColumn(new Column<SellDto,String>(new TextCell()){
@Override
public String getValue(SellDto object) {
return object.getCity();
}
}, cityHeader);
table.addColumn(new Column<SellDto,String>(new TextCell()){
@Override
public String getValue(SellDto object) {
return object.getCountry();
}
}, countryHeader);
table.addColumn(new Column<SellDto,String>(new TextCell()){
@Override
public String getValue(SellDto object) {
Double amount = Double.parseDouble(buyAmount.getText());
object.setResult(getResult(object.getRate(), object.getCommission(), amount));
return amountFormat.format(amount)+" "+object.getBuyBadge()+" = "+amountFormat.format(object.getResult())+" "+object.getSellBadge();
}
}, resultHeader);
}
@Override
public Widget asWidget() {
return widget;
}
@UiHandler("submmit")
public void submmit(ClickEvent event) {
AddSell addSell = new AddSell(sellBadge.getValue(sellBadge.getSelectedIndex()),
buyBadge.getValue(buyBadge.getSelectedIndex()),
Float.parseFloat(commission.getText()),
city.getText(), country.getText(), email.getText());
uiHandlers.submmitSell(addSell);
}
@UiHandler("buyAmount")
public void buyAmount(KeyUpEvent event) {
try{
buyAmount.setText(buyAmount.getText().replace(",", "."));
Double.parseDouble(buyAmount.getText());
dataProvider.refresh();
}catch(NumberFormatException e){
GWT.log("buyAmount hasn't a double value");
}
}
private double getResult(double rate, double commission, double amount){
double rateValue = rate*amount;
double commissionValue = commission*amount;
double result = rateValue+commissionValue;
return result;
}
@Override
public void addDataInTable(List<SellDto> dtos) {
dataProvider.getList().addAll(dtos);
}
@Override
public void setUiHandlers(HomeUiHandler uiHandlers) {
this.uiHandlers = uiHandlers;
}
}