de.jost_net.JVerein.gui.control.BuchungsartControl.java Source code

Java tutorial

Introduction

Here is the source code for de.jost_net.JVerein.gui.control.BuchungsartControl.java

Source

/**********************************************************************
 * Copyright (c) by Heiner Jostkleigrewe
 * This program is free software: you can redistribute it and/or modify it under the terms of the 
 * GNU General Public License as published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without 
 *  even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
 *  the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program.  If not, 
 * see <http://www.gnu.org/licenses/>.
 * 
 * heiner@jverein.de
 * www.jverein.de
 **********************************************************************/
package de.jost_net.JVerein.gui.control;

import java.io.File;
import java.io.FileOutputStream;
import java.rmi.RemoteException;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Element;

import de.jost_net.JVerein.Einstellungen;
import de.jost_net.JVerein.gui.action.BuchungsartAction;
import de.jost_net.JVerein.gui.formatter.JaNeinFormatter;
import de.jost_net.JVerein.gui.menu.BuchungsartMenu;
import de.jost_net.JVerein.io.FileViewer;
import de.jost_net.JVerein.io.Reporter;
import de.jost_net.JVerein.keys.ArtBuchungsart;
import de.jost_net.JVerein.keys.BuchungsartSort;
import de.jost_net.JVerein.rmi.Buchungsart;
import de.jost_net.JVerein.rmi.Buchungsklasse;
import de.jost_net.JVerein.util.Dateiname;
import de.willuhn.datasource.GenericObject;
import de.willuhn.datasource.pseudo.PseudoIterator;
import de.willuhn.datasource.rmi.DBIterator;
import de.willuhn.datasource.rmi.DBService;
import de.willuhn.jameica.gui.AbstractControl;
import de.willuhn.jameica.gui.AbstractView;
import de.willuhn.jameica.gui.Action;
import de.willuhn.jameica.gui.GUI;
import de.willuhn.jameica.gui.Part;
import de.willuhn.jameica.gui.formatter.Formatter;
import de.willuhn.jameica.gui.input.CheckboxInput;
import de.willuhn.jameica.gui.input.Input;
import de.willuhn.jameica.gui.input.IntegerInput;
import de.willuhn.jameica.gui.input.SelectInput;
import de.willuhn.jameica.gui.input.TextInput;
import de.willuhn.jameica.gui.parts.Button;
import de.willuhn.jameica.gui.parts.Column;
import de.willuhn.jameica.gui.parts.TablePart;
import de.willuhn.jameica.system.Application;
import de.willuhn.jameica.system.BackgroundTask;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;
import de.willuhn.util.ProgressMonitor;

public class BuchungsartControl extends AbstractControl {
    private de.willuhn.jameica.system.Settings settings;

    private TablePart buchungsartList;

    private IntegerInput nummer;

    private Input bezeichnung;

    private SelectInput art;

    private SelectInput buchungsklasse;

    private CheckboxInput spende;

    private TextInput suchtext;

    private Buchungsart buchungsart;

    public BuchungsartControl(AbstractView view) {
        super(view);
        settings = new de.willuhn.jameica.system.Settings(this.getClass());
        settings.setStoreWhenRead(true);
    }

    private Buchungsart getBuchungsart() {
        if (buchungsart != null) {
            return buchungsart;
        }
        buchungsart = (Buchungsart) getCurrentObject();
        return buchungsart;
    }

    public IntegerInput getNummer(boolean withFocus) throws RemoteException {
        if (nummer != null) {
            return nummer;
        }
        nummer = new IntegerInput(getBuchungsart().getNummer());
        if (withFocus) {
            nummer.focus();
        }
        return nummer;
    }

    public Input getBezeichnung() throws RemoteException {
        if (bezeichnung != null) {
            return bezeichnung;
        }
        bezeichnung = new TextInput(getBuchungsart().getBezeichnung(), 80);
        return bezeichnung;
    }

    public SelectInput getArt() throws RemoteException {
        if (art != null) {
            return art;
        }
        art = new SelectInput(ArtBuchungsart.getArray(), new ArtBuchungsart(getBuchungsart().getArt()));
        return art;
    }

    public CheckboxInput getSpende() throws RemoteException {
        if (spende != null) {
            return spende;
        }
        spende = new CheckboxInput(getBuchungsart().getSpende());
        return spende;
    }

    public Input getBuchungsklasse() throws RemoteException {
        if (buchungsklasse != null) {
            return buchungsklasse;
        }
        DBIterator<Buchungsklasse> list = Einstellungen.getDBService().createList(Buchungsklasse.class);
        if (Einstellungen.getEinstellung().getBuchungsartSort() == BuchungsartSort.NACH_NUMMER) {
            list.setOrder("ORDER BY nummer");
        } else {
            list.setOrder("ORDER BY bezeichnung");
        }
        buchungsklasse = new SelectInput(list, getBuchungsart().getBuchungsklasse());
        buchungsklasse.setValue(getBuchungsart().getBuchungsklasse());
        switch (Einstellungen.getEinstellung().getBuchungsartSort()) {
        case BuchungsartSort.NACH_NUMMER:
            buchungsklasse.setAttribute("nrbezeichnung");
            break;
        case BuchungsartSort.NACH_BEZEICHNUNG_NR:
            buchungsklasse.setAttribute("bezeichnungnr");
            break;
        default:
            buchungsklasse.setAttribute("bezeichnung");
            break;
        }

        buchungsklasse.setPleaseChoose("Bitte auswhlen");
        return buchungsklasse;
    }

    /**
     * This method stores the project using the current values.
     */
    public void handleStore() {
        try {
            Buchungsart b = getBuchungsart();
            try {
                b.setNummer(((Integer) getNummer(false).getValue()).intValue());
            } catch (NullPointerException e) {
                GUI.getStatusBar().setErrorText("Nummer fehlt");
                return;
            }
            b.setBezeichnung((String) getBezeichnung().getValue());
            ArtBuchungsart ba = (ArtBuchungsart) getArt().getValue();
            b.setArt(ba.getKey());
            GenericObject o = (GenericObject) getBuchungsklasse().getValue();
            if (o != null) {
                b.setBuchungsklasse(new Integer(o.getID()));
            } else {
                b.setBuchungsklasse(null);
            }
            b.setSpende((Boolean) spende.getValue());

            try {
                b.store();
                GUI.getStatusBar().setSuccessText("Buchungsart gespeichert");
            } catch (ApplicationException e) {
                GUI.getStatusBar().setErrorText(e.getMessage());
            }
        } catch (RemoteException e) {
            String fehler = "Fehler bei speichern der Buchungsart";
            Logger.error(fehler, e);
            GUI.getStatusBar().setErrorText(fehler);
        }
    }

    public TextInput getSuchtext() {
        if (suchtext != null) {
            return suchtext;
        }
        suchtext = new TextInput(settings.getString("suchtext", ""), 35);
        return suchtext;
    }

    @SuppressWarnings("unchecked")
    public Part getBuchungsartList() throws RemoteException {

        DBService service = Einstellungen.getDBService();
        DBIterator<Buchungsart> buchungsarten = service.createList(Buchungsart.class);
        buchungsarten.addFilter("nummer >= 0");
        if (!getSuchtext().getValue().equals("")) {
            String text = "%" + ((String) getSuchtext().getValue()).toUpperCase() + "%";
            buchungsarten.addFilter("(UPPER(bezeichnung) like ? or nummer like ?)", new Object[] { text, text });
        }
        buchungsarten.setOrder("ORDER BY nummer");

        if (buchungsartList == null) {

            buchungsartList = new TablePart(buchungsarten, new BuchungsartAction());
            buchungsartList.addColumn("Nummer", "nummer");
            buchungsartList.addColumn("Bezeichnung", "bezeichnung");
            buchungsartList.addColumn("Art", "art", new Formatter() {
                @Override
                public String format(Object o) {
                    if (o == null) {
                        return "";
                    }
                    if (o instanceof Integer) {
                        Integer art = (Integer) o;
                        switch (art.intValue()) {
                        case 0:
                            return "Einnahme";
                        case 1:
                            return "Ausgabe";
                        case 2:
                            return "Umbuchung";
                        }
                    }
                    return "ungltig";
                }
            }, false, Column.ALIGN_LEFT);
            buchungsartList.addColumn("Buchungsklasse", "buchungsklasse");
            buchungsartList.addColumn("Spende", "spende", new JaNeinFormatter());
            buchungsartList.setContextMenu(new BuchungsartMenu());
            buchungsartList.setRememberColWidths(true);
            buchungsartList.setRememberOrder(true);
            buchungsartList.setRememberState(true);
            buchungsartList.setSummary(true);
        } else {
            buchungsartList.removeAll();

            for (Buchungsart bu : (List<Buchungsart>) PseudoIterator.asList(buchungsarten)) {
                buchungsartList.addItem(bu);
            }
            buchungsartList.sort();
        }
        return buchungsartList;
    }

    public Button getPDFAusgabeButton() {
        Button b = new Button("PDF-Ausgabe", new Action() {
            @Override
            public void handleAction(Object context) throws ApplicationException {
                try {
                    starteAuswertung();
                } catch (RemoteException e) {
                    Logger.error(e.getMessage());
                    throw new ApplicationException("Fehler beim Start der PDF-Ausgabe der Buchungsarten");
                }
            }
        }, null, true, "file-pdf.png");
        return b;
    }

    private void starteAuswertung() throws RemoteException {
        FileDialog fd = new FileDialog(GUI.getShell(), SWT.SAVE);
        fd.setText("Ausgabedatei whlen.");
        String path = settings.getString("lastdir", System.getProperty("user.home"));
        if (path != null && path.length() > 0) {
            fd.setFilterPath(path);
        }
        fd.setFileName(
                new Dateiname("buchungsarten", "", Einstellungen.getEinstellung().getDateinamenmuster(), "PDF")
                        .get());
        fd.setFilterExtensions(new String[] { "*.PDF" });

        String s = fd.open();
        if (s == null || s.length() == 0) {
            return;
        }
        if (!s.endsWith(".PDF")) {
            s = s + ".PDF";
        }
        final File file = new File(s);
        final DBIterator<Buchungsart> it = Einstellungen.getDBService().createList(Buchungsart.class);
        it.setOrder("ORDER BY nummer");
        settings.setAttribute("lastdir", file.getParent());
        BackgroundTask t = new BackgroundTask() {
            @Override
            public void run(ProgressMonitor monitor) throws ApplicationException {
                try {
                    FileOutputStream fos = new FileOutputStream(file);
                    Reporter reporter = new Reporter(fos, "Buchungsarten", "", it.size());
                    reporter.addHeaderColumn("Nummer", Element.ALIGN_LEFT, 20, BaseColor.LIGHT_GRAY);
                    reporter.addHeaderColumn("Bezeichnung", Element.ALIGN_LEFT, 80, BaseColor.LIGHT_GRAY);
                    reporter.addHeaderColumn("Art", Element.ALIGN_LEFT, 25, BaseColor.LIGHT_GRAY);
                    reporter.addHeaderColumn("Buchungsklasse", Element.ALIGN_LEFT, 80, BaseColor.LIGHT_GRAY);
                    reporter.addHeaderColumn("Spende", Element.ALIGN_CENTER, 20, BaseColor.LIGHT_GRAY);
                    reporter.createHeader();
                    while (it.hasNext()) {
                        Buchungsart b = it.next();
                        reporter.addColumn(b.getNummer() + "", Element.ALIGN_RIGHT);
                        reporter.addColumn(b.getBezeichnung(), Element.ALIGN_LEFT);
                        String arttxt = "";
                        switch (b.getArt()) {
                        case 0:
                            arttxt = "Einnahme";
                            break;
                        case 1:
                            arttxt = "Ausgabe";
                            break;
                        case 2:
                            arttxt = "Umbuchung";
                            break;
                        }
                        reporter.addColumn(arttxt, Element.ALIGN_LEFT);
                        if (b.getBuchungsklasse() != null) {
                            reporter.addColumn(b.getBuchungsklasse().getBezeichnung(), Element.ALIGN_LEFT);
                        } else {
                            reporter.addColumn("", Element.ALIGN_LEFT);
                        }
                        reporter.addColumn(b.getSpende());
                    }
                    reporter.closeTable();
                    reporter.close();
                    fos.close();
                    GUI.getStatusBar().setSuccessText("Auswertung gestartet");
                    GUI.getCurrentView().reload();
                } catch (Exception e) {
                    Logger.error("Fehler", e);
                    GUI.getStatusBar().setErrorText(e.getMessage());
                    throw new ApplicationException(e);
                }
                FileViewer.show(file);
            }

            @Override
            public void interrupt() {
                //
            }

            @Override
            public boolean isInterrupted() {
                return false;
            }
        };
        Application.getController().start(t);

    }
}