package de.open4me.depot.gui.control;
import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import de.open4me.depot.Settings;
import de.open4me.depot.gui.DatumsSlider;
import de.open4me.depot.gui.action.OrderList;
import de.open4me.depot.gui.menu.BestandsListMenu;
import de.open4me.depot.gui.parts.PrintfColumn;
import de.open4me.depot.sql.GenericObjectSQL;
import de.open4me.depot.tools.Bestandsabfragen;
import de.willuhn.jameica.gui.AbstractControl;
import de.willuhn.jameica.gui.AbstractView;
import de.willuhn.jameica.gui.Part;
import de.willuhn.jameica.gui.formatter.DateFormatter;
import de.willuhn.jameica.gui.parts.TablePart;
import de.willuhn.logging.Logger;
public class BestandTableControl extends AbstractControl implements Listener
{
private TablePart bestandsList;
private DatumsSlider datumsSlider;
private Date currentdate;
public BestandTableControl(AbstractView view, DatumsSlider datumsSlider)
{
super(view);
currentdate = null;
this.datumsSlider = datumsSlider;
datumsSlider.addListener(this);
}
public void showForDate(Date d) throws RemoteException {
try {
List<GenericObjectSQL> list = Bestandsabfragen.getBestand(d);
bestandsList.removeAll();
for (GenericObjectSQL x : list) {
bestandsList.addItem(x);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@SuppressWarnings("rawtypes")
public Part getBestandsTabelle() throws Exception
{
if (bestandsList != null) {
return bestandsList;
}
bestandsList = new TablePart(Bestandsabfragen.getBestand(null),new OrderList()) {
@SuppressWarnings("unchecked")
@Override
protected String getSummary() {
try {
double sum = 0.0d;
for (GenericObjectSQL k: (List<GenericObjectSQL>) getItems())
{
if (k.getAttribute("wert") == null) {
continue;
}
if (k.getAttribute("wert") instanceof BigDecimal) {
sum += ((BigDecimal) k.getAttribute("wert")).doubleValue();
} else {
sum += (Double) k.getAttribute("wert");
}
}
return String.format("Gesamt-Saldo: %.2f", sum);
}
catch (Exception e)
{
Logger.error("Kann Gesamt-Saldo nicht berechnen",e);
}
return super.getSummary();
}
};
bestandsList.setRememberColWidths(true);
bestandsList.setRememberOrder(true);
bestandsList.addColumn(Settings.i18n().tr("Depot"), "bezeichnung");
bestandsList.addColumn(Settings.i18n().tr("WKN"),"wkn");
bestandsList.addColumn(Settings.i18n().tr("Name"),"wertpapiername");
bestandsList.addColumn(Settings.i18n().tr("Anzahl"),"anzahl");
bestandsList.addColumn(new PrintfColumn(Settings.i18n().tr("Kurs"), "kurs", "%.6f %s", "kurs", "kursw"));
bestandsList.addColumn(new PrintfColumn(Settings.i18n().tr("Wert"), "wert", "%.2f %s", "wert", "wertw"));
bestandsList.addColumn(Settings.i18n().tr("Bewertungsdatum"),"bewertungszeitpunkt", new DateFormatter(Settings.DATEFORMAT));
bestandsList.addColumn(Settings.i18n().tr("Abrufdatum"),"datum", new DateFormatter(Settings.DATEFORMAT));
bestandsList.setContextMenu(new BestandsListMenu(bestandsList));
showForDate(null);
return bestandsList;
}
@Override
public void handleEvent(Event event) {
if (currentdate != datumsSlider.getDate()) {
currentdate = datumsSlider.getDate();
try {
showForDate(currentdate);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}