Java tutorial
/********************************************************************** * 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.text.ParseException; import java.util.Date; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Listener; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Element; import de.jost_net.JVerein.Einstellungen; import de.jost_net.JVerein.gui.action.KursteilnehmerDetailAction; import de.jost_net.JVerein.gui.input.BICInput; import de.jost_net.JVerein.gui.input.EmailInput; import de.jost_net.JVerein.gui.input.GeschlechtInput; import de.jost_net.JVerein.gui.input.IBANInput; import de.jost_net.JVerein.gui.input.PersonenartInput; import de.jost_net.JVerein.gui.menu.KursteilnehmerMenu; import de.jost_net.JVerein.io.FileViewer; import de.jost_net.JVerein.io.Reporter; import de.jost_net.JVerein.rmi.Kursteilnehmer; import de.jost_net.JVerein.util.Dateiname; import de.jost_net.JVerein.util.JVDateFormatTTMMJJJJ; import de.willuhn.datasource.rmi.DBIterator; 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.CurrencyFormatter; import de.willuhn.jameica.gui.formatter.DateFormatter; import de.willuhn.jameica.gui.input.DateInput; import de.willuhn.jameica.gui.input.DecimalInput; import de.willuhn.jameica.gui.input.Input; import de.willuhn.jameica.gui.input.TextInput; import de.willuhn.jameica.gui.parts.Button; import de.willuhn.jameica.gui.parts.TablePart; import de.willuhn.jameica.system.Application; import de.willuhn.jameica.system.BackgroundTask; import de.willuhn.jameica.system.Settings; import de.willuhn.logging.Logger; import de.willuhn.util.ApplicationException; import de.willuhn.util.ProgressMonitor; public class KursteilnehmerControl extends AbstractControl { private PersonenartInput personenart; private TextInput anrede; private TextInput titel; private TextInput name; private TextInput vorname; private TextInput strasse; private TextInput adressierungszusatz; private TextInput plz; private TextInput ort; private TextInput staat; private EmailInput email; private DecimalInput betrag; private Input vzweck1; private DateInput mandatdatum; private BICInput bic; private IBANInput iban; private DateInput geburtsdatum = null; private GeschlechtInput geschlecht; private Kursteilnehmer ktn; private TablePart part; // Elemente fr die Auswertung private DateInput eingabedatumvon = null; private DateInput eingabedatumbis = null; private DateInput abbuchungsdatumvon = null; private DateInput abbuchungsdatumbis = null; private TextInput suchname = null; private Settings settings = null; public KursteilnehmerControl(AbstractView view) { super(view); settings = new Settings(this.getClass()); settings.setStoreWhenRead(true); } public Kursteilnehmer getKursteilnehmer() { if (ktn != null) { return ktn; } ktn = (Kursteilnehmer) getCurrentObject(); return ktn; } public PersonenartInput getPersonenart() throws RemoteException { if (personenart != null) { return personenart; } personenart = new PersonenartInput(getKursteilnehmer().getPersonenart()); personenart.addListener(new Listener() { @Override public void handleEvent(Event event) { String pa = (String) personenart.getValue(); if (pa.startsWith("n")) { name.setName("Name"); vorname.setName("Vorname"); } else { name.setName("Zeile 1"); vorname.setName("Zeile 2"); } } }); personenart.setName("Personenart"); return personenart; } public TextInput getAnrede() throws RemoteException { if (anrede != null) { return anrede; } anrede = new TextInput(getKursteilnehmer().getAnrede(), 10); anrede.setName("Anrede"); return anrede; } public TextInput getTitel() throws RemoteException { if (titel != null) { return titel; } titel = new TextInput(getKursteilnehmer().getTitel(), 40); titel.setName("Titel"); return titel; } public TextInput getName() throws RemoteException { if (name != null) { return name; } name = new TextInput(getKursteilnehmer().getName(), 40); name.setName("Name"); name.setMandatory(true); return name; } public TextInput getVorname() throws RemoteException { if (vorname != null) { return vorname; } vorname = new TextInput(getKursteilnehmer().getVorname(), 40); vorname.setName("Vorname"); return vorname; } public Input getStrasse() throws RemoteException { if (strasse != null) { return strasse; } strasse = new TextInput(getKursteilnehmer().getStrasse(), 40); strasse.setName("Strae"); return strasse; } public TextInput getAdressierungszusatz() throws RemoteException { if (adressierungszusatz != null) { return adressierungszusatz; } adressierungszusatz = new TextInput(getKursteilnehmer().getAdressierungszusatz(), 40); adressierungszusatz.setName("Adressierungszusatz"); return adressierungszusatz; } public Input getPLZ() throws RemoteException { if (plz != null) { return plz; } plz = new TextInput(getKursteilnehmer().getPlz(), 10); plz.setName("PLZ"); return plz; } public Input getOrt() throws RemoteException { if (ort != null) { return ort; } ort = new TextInput(getKursteilnehmer().getOrt(), 40); ort.setName("Ort"); return ort; } public TextInput getStaat() throws RemoteException { if (staat != null) { return staat; } staat = new TextInput(getKursteilnehmer().getStaat(), 50); staat.setName("Staat"); return staat; } public EmailInput getEmail() throws RemoteException { if (email != null) { return email; } email = new EmailInput(getKursteilnehmer().getEmail()); return email; } public Input getVZweck1() throws RemoteException { if (vzweck1 != null) { return vzweck1; } vzweck1 = new TextInput(getKursteilnehmer().getVZweck1(), 140); vzweck1.setName("Verwendungszweck"); vzweck1.setMandatory(true); return vzweck1; } public DateInput getMandatDatum() throws RemoteException { if (mandatdatum != null) { return mandatdatum; } Date d = getKursteilnehmer().getMandatDatum(); if (d.equals(Einstellungen.NODATE)) { d = null; } this.mandatdatum = new DateInput(d, new JVDateFormatTTMMJJJJ()); this.mandatdatum.setTitle("Datum des Mandats"); this.mandatdatum.setName("Datum des Mandats"); this.mandatdatum.setText("Bitte Datum des Mandats whlen"); mandatdatum.setName("Datum des Mandats"); return mandatdatum; } public BICInput getBIC() throws RemoteException { if (bic != null) { return bic; } bic = new BICInput(getKursteilnehmer().getBic()); bic.setName("BIC"); bic.setMandatory(true); return bic; } public IBANInput getIBAN() throws RemoteException { if (iban != null) { return iban; } iban = new IBANInput(getKursteilnehmer().getIban(), getBIC()); iban.setName("IBAN"); iban.setMandatory(true); return iban; } public DecimalInput getBetrag() throws RemoteException { if (betrag != null) { return betrag; } betrag = new DecimalInput(getKursteilnehmer().getBetrag(), Einstellungen.DECIMALFORMAT); betrag.setName("Betrag"); betrag.setMandatory(true); return betrag; } public DateInput getGeburtsdatum() throws RemoteException { if (geburtsdatum != null) { return geburtsdatum; } Date d = getKursteilnehmer().getGeburtsdatum(); this.geburtsdatum = new DateInput(d, new JVDateFormatTTMMJJJJ()); this.geburtsdatum.setTitle("Geburtsdatum"); this.geburtsdatum.setText(("Bitte Geburtsdatum whlen")); this.geburtsdatum.setMandatory(true); return geburtsdatum; } public GeschlechtInput getGeschlecht() throws RemoteException { if (geschlecht != null) { return geschlecht; } geschlecht = new GeschlechtInput(getKursteilnehmer().getGeschlecht()); geschlecht.setName("Geschlecht"); geschlecht.setPleaseChoose("Bitte auswhlen"); geschlecht.setMandatory(true); return geschlecht; } public TextInput getSuchname() { if (suchname != null) { return suchname; } String tmp = settings.getString("name", ""); this.suchname = new TextInput(tmp, 30); suchname.addListener(new FilterListener()); return suchname; } public DateInput getEingabedatumvon() { if (eingabedatumvon != null) { return eingabedatumvon; } Date d = null; String tmp = settings.getString("eingabedatum.von", null); if (tmp != null) { try { d = new JVDateFormatTTMMJJJJ().parse(tmp); } catch (ParseException e) { // } } this.eingabedatumvon = new DateInput(d, new JVDateFormatTTMMJJJJ()); this.eingabedatumvon.setTitle("Eingabedatum"); this.eingabedatumvon.setText("Beginn des Eingabe-Zeitraumes"); eingabedatumvon.addListener(new FilterListener()); return eingabedatumvon; } public DateInput getEingabedatumbis() { if (eingabedatumbis != null) { return eingabedatumbis; } Date d = null; String tmp = settings.getString("eingabedatum.bis", null); if (tmp != null) { try { d = new JVDateFormatTTMMJJJJ().parse(tmp); } catch (ParseException e) { // } } this.eingabedatumbis = new DateInput(d, new JVDateFormatTTMMJJJJ()); this.eingabedatumbis.setTitle("Eingabedatum"); this.eingabedatumbis.setText("Ende des Eingabe-Zeitraumes"); eingabedatumbis.addListener(new FilterListener()); return eingabedatumbis; } public DateInput getAbbuchungsdatumvon() { if (abbuchungsdatumvon != null) { return abbuchungsdatumvon; } Date d = null; String tmp = settings.getString("abbuchungsdatum.von", null); if (tmp != null) { try { d = new JVDateFormatTTMMJJJJ().parse(tmp); } catch (ParseException e) { // } } this.abbuchungsdatumvon = new DateInput(d, new JVDateFormatTTMMJJJJ()); this.abbuchungsdatumvon.setTitle("Abbuchungsdatum"); this.abbuchungsdatumvon.setText("Beginn des Abbuchungszeitraumes"); return abbuchungsdatumvon; } public DateInput getAbbuchungsdatumbis() { if (abbuchungsdatumbis != null) { return abbuchungsdatumbis; } Date d = null; String tmp = settings.getString("abbuchungsdatum.bis", null); if (tmp != null) { try { d = new JVDateFormatTTMMJJJJ().parse(tmp); } catch (ParseException e) { // } } this.abbuchungsdatumbis = new DateInput(d, new JVDateFormatTTMMJJJJ()); this.abbuchungsdatumbis.setTitle("Abbuchungsdatum"); this.abbuchungsdatumbis.setText("Ende des Abbuchungszeitraumes"); return abbuchungsdatumbis; } public Part getKursteilnehmerTable() throws RemoteException { saveDefaults(); DBIterator<Kursteilnehmer> kursteilnehmer = getIterator(); part = new TablePart(kursteilnehmer, new KursteilnehmerDetailAction()); part.addColumn("Name", "name"); part.addColumn("Vorname", "vorname"); part.addColumn("Strae", "strasse"); part.addColumn("PLZ", "plz"); part.addColumn("Ort", "ort"); part.addColumn("Verwendungszweck", "vzweck1"); part.addColumn("BIC", "bic"); part.addColumn("IBAN", "iban"); part.addColumn("Betrag", "betrag", new CurrencyFormatter("", Einstellungen.DECIMALFORMAT)); part.addColumn("Mandats-ID", "mandatid"); part.addColumn("Eingabedatum", "eingabedatum", new DateFormatter(new JVDateFormatTTMMJJJJ())); part.addColumn("Abbuchungsdatum", "abbudatum", new DateFormatter(new JVDateFormatTTMMJJJJ())); part.setContextMenu(new KursteilnehmerMenu(part)); return part; } private void refresh() { try { saveDefaults(); if (part == null) { return; } part.removeAll(); DBIterator<Kursteilnehmer> kursteilnehmer = getIterator(); while (kursteilnehmer.hasNext()) { Kursteilnehmer kt = kursteilnehmer.next(); part.addItem(kt); } } catch (RemoteException e1) { Logger.error("Fehler", e1); } } public Button getStartAuswertungButton() { Button b = new Button("starten", new Action() { @Override public void handleAction(Object context) { starteAuswertung(); } }, null, true, "walking.png"); // "true" defines this button as the default // button return b; } /** * Default-Werte speichern. * * @throws RemoteException */ public void saveDefaults() { if (this.suchname != null) { settings.setAttribute("name", (String) getSuchname().getValue()); } if (this.eingabedatumvon != null) { Date tmp = (Date) getEingabedatumvon().getValue(); if (tmp != null) { settings.setAttribute("eingabedatum.von", new JVDateFormatTTMMJJJJ().format(tmp)); } else { settings.setAttribute("eingabedatum.von", ""); } } if (this.eingabedatumbis != null) { Date tmp = (Date) getEingabedatumbis().getValue(); if (tmp != null) { settings.setAttribute("eingabedatum.bis", new JVDateFormatTTMMJJJJ().format(tmp)); } else { settings.setAttribute("eingabedatum.bis", ""); } } if (this.abbuchungsdatumvon != null) { Date tmp = (Date) getAbbuchungsdatumvon().getValue(); if (tmp != null) { settings.setAttribute("abbuchungsdatum.von", new JVDateFormatTTMMJJJJ().format(tmp)); } else { settings.setAttribute("abbuchungsdatum.von", ""); } } if (this.abbuchungsdatumbis != null) { Date tmp = (Date) getAbbuchungsdatumbis().getValue(); if (tmp != null) { settings.setAttribute("abbuchungsdatum.bis", new JVDateFormatTTMMJJJJ().format(tmp)); } else { settings.setAttribute("abbuchungsdatum.bis", ""); } } } public void handleStore() { try { Kursteilnehmer k = getKursteilnehmer(); String p = (String) getPersonenart().getValue(); p = p.substring(0, 1); k.setPersonenart(p); k.setAnrede((String) getAnrede().getValue()); k.setTitel((String) getTitel().getValue()); k.setName((String) getName().getValue()); k.setVorname((String) getVorname().getValue()); k.setStrasse((String) getStrasse().getValue()); k.setAdressierungszuatz((String) getAdressierungszusatz().getValue()); k.setPlz((String) getPLZ().getValue()); k.setOrt((String) getOrt().getValue()); k.setStaat((String) getStaat().getValue()); k.setEmail((String) getEmail().getValue()); k.setVZweck1((String) getVZweck1().getValue()); k.setMandatDatum((Date) getMandatDatum().getValue()); k.setIban((String) getIBAN().getValue()); k.setBic((String) getBIC().getValue()); k.setBetrag((Double) getBetrag().getValue()); if (Einstellungen.getEinstellung().getGeburtsdatumPflicht()) { k.setGeburtsdatum((Date) getGeburtsdatum().getValue()); k.setGeschlecht((String) getGeschlecht().getValue()); } if (k.getID() == null) { k.setEingabedatum(); } k.store(); GUI.getStatusBar().setSuccessText("Kursteilnehmer gespeichert"); } catch (ApplicationException e) { GUI.getStatusBar().setErrorText(e.getMessage()); } catch (RemoteException e) { String fehler = "Fehler bei Speichern des Kursteilnehmers"; Logger.error(fehler, e); GUI.getStatusBar().setErrorText(fehler); } } private void starteAuswertung() { // Alle Kursteilnehmer lesen final DBIterator<Kursteilnehmer> list; try { saveDefaults(); String subtitle = ""; list = Einstellungen.getDBService().createList(Kursteilnehmer.class); if (abbuchungsdatumvon.getValue() != null) { Date d = (Date) abbuchungsdatumvon.getValue(); subtitle += "Abbuchungsdatum von" + " " + new JVDateFormatTTMMJJJJ().format(d) + " "; list.addFilter("abbudatum >= ?", new Object[] { new java.sql.Date(d.getTime()) }); } if (abbuchungsdatumbis.getValue() != null) { Date d = (Date) abbuchungsdatumbis.getValue(); subtitle += " " + "bis" + " " + new JVDateFormatTTMMJJJJ().format(d) + " "; list.addFilter("abbudatum <= ?", new Object[] { new java.sql.Date(d.getTime()) }); } FileDialog fd = new FileDialog(GUI.getShell(), SWT.SAVE); fd.setText("Ausgabedatei whlen."); Settings settings = new Settings(this.getClass()); String path = settings.getString("lastdir", System.getProperty("user.home")); if (path != null && path.length() > 0) { fd.setFilterPath(path); } fd.setFileName( new Dateiname("kursteilnehmer", "", Einstellungen.getEinstellung().getDateinamenmuster(), "PDF") .get()); final String s = fd.open(); if (s == null || s.length() == 0) { // close(); return; } final File file = new File(s); settings.setAttribute("lastdir", file.getParent()); final String subtitle2 = subtitle; BackgroundTask t = new BackgroundTask() { @Override public void run(ProgressMonitor monitor) throws ApplicationException { try { Reporter rpt = new Reporter(new FileOutputStream(file), "Kursteilnehmer", subtitle2, list.size()); GUI.getCurrentView().reload(); rpt.addHeaderColumn("Datum", Element.ALIGN_LEFT, 50, BaseColor.LIGHT_GRAY); rpt.addHeaderColumn("Name", Element.ALIGN_LEFT, 80, BaseColor.LIGHT_GRAY); rpt.addHeaderColumn("Verwendungszweck", Element.ALIGN_LEFT, 80, BaseColor.LIGHT_GRAY); rpt.addHeaderColumn("Betrag", Element.ALIGN_CENTER, 40, BaseColor.LIGHT_GRAY); rpt.createHeader(); while (list.hasNext()) { Kursteilnehmer kt = list.next(); rpt.addColumn(kt.getAbbudatum(), Element.ALIGN_LEFT); rpt.addColumn(kt.getName(), Element.ALIGN_LEFT); rpt.addColumn(kt.getVZweck1(), Element.ALIGN_LEFT); rpt.addColumn(kt.getBetrag()); } rpt.close(); FileViewer.show(file); } catch (ApplicationException ae) { Logger.error("Fehler", ae); GUI.getStatusBar().setErrorText(ae.getMessage()); throw ae; } catch (Exception re) { Logger.error("Fehler", re); GUI.getStatusBar().setErrorText(re.getMessage()); throw new ApplicationException(re); } } @Override public void interrupt() { // } @Override public boolean isInterrupted() { return false; } }; Application.getController().start(t); } catch (RemoteException e) { Logger.error("Fehler", e); } } private class FilterListener implements Listener { @Override public void handleEvent(Event event) { if (event.type != SWT.Selection && event.type != SWT.FocusOut) { return; } refresh(); } } private DBIterator<Kursteilnehmer> getIterator() throws RemoteException { DBIterator<Kursteilnehmer> kursteilnehmer = Einstellungen.getDBService().createList(Kursteilnehmer.class); String suchN = (String) getSuchname().getValue(); if (suchN != null && suchN.length() > 0) { kursteilnehmer.addFilter("name like ?", new Object[] { "%" + suchN + "%" }); } if (getEingabedatumvon().getValue() != null) { kursteilnehmer.addFilter("eingabedatum >= ?", new Object[] { (Date) getEingabedatumvon().getValue() }); } if (getEingabedatumbis().getValue() != null) { kursteilnehmer.addFilter("eingabedatum <= ?", new Object[] { (Date) getEingabedatumbis().getValue() }); } return kursteilnehmer; } }