/* * This file is part of jHaushalt. * jHaushalt 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. * jHaushalt 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 jHaushalt; if not, see <http://www.gnu.org/licenses/>. * (C)opyright 2002-2010 Dr. Lars H. Hahn */ package haushalt.auswertung; import haushalt.daten.Datenbasis; import haushalt.gui.Haushalt; import haushalt.gui.TextResource; import java.awt.Graphics; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.lang.reflect.Constructor; import java.util.logging.Logger; import javax.swing.JPanel; /** * Abstrakte Klasse für alle Auswertungen.<br> * Eine Auswertung ist ein Panel und kann gedruckt werden. * In den abgeleiteten Klassen werden alle Parameter einer * Auswertung gekapselt. * Die Parameter werden in einem generischen Dialog * ("Eigenschaften") angezeigt und können verändert werden. * Die Parameter können gespeichert und wieder geladen werden. * * @author Dr. Lars H. Hahn * @version 2.5/2008.01.17 * @since 2.0 */ /* * 2008.01.17 Internationalisierung * 2004.08.22 Erste Version */ public abstract class AbstractAuswertung extends JPanel implements Printable { private static final long serialVersionUID = 1L; private static final boolean DEBUG = false; private static final Logger LOGGER = Logger.getLogger(AbstractAuswertung.class.getName()); private static final TextResource RES = TextResource.get(); private static int nr = 1; private String name; private final Datenbasis db; private String[][] tabelle = null; public AbstractAuswertung(final Datenbasis db, final String name) { this.db = db; if (name == null) { this.name = RES.getString("unnamed") + " (" + nr + ")"; nr++; } else { this.name = name; } } @Override public final String toString() { return this.name; } /** * Setzt den Namen der Auswertung neu. * * @param name * neuer Name der Auswertung */ public final void setAuswertungName(final String name) { if (name != null) { if (DEBUG) { LOGGER.info("AbstractAuswertung: " + this.name + "->" + name); } this.name = name; } } /** * Liefert die zentrale Tabelle der Auswertung. * Viele Auswertungen werden in Tabellenform ausgegeben, um den * CSV-Export der Tabelle zu ermöglichen. Wird die Tabelle in der * Super-Klasse verwaltet und kann mit dieser Methode abgefragt * werden. * * @return zentrale Tabelle */ public String[][] getTabelle() { return this.tabelle; } protected void setTabelle(final String[][] tabelle) { this.tabelle = tabelle; } protected void setTabelleContent(final int x, final int y, final String content) { tabelle[x][y] = content; } protected void setTabelleLine(final int x, final String[] content) { tabelle[x] = content; } protected Datenbasis getDb() { return db; } public abstract int print(Graphics g, PageFormat pageFormat, int seite) throws PrinterException; /** * Ermöglicht die Auswertung bei Bedarf neu zu berechnen. Es wird so * verhindert, * dass ständig (z.B. bei Größenänderungen des Fensters) die Auswertung neu * berechnet werden muss. */ public abstract String berechneAuswertung(); /** * Zeigt einen Dialog in dem die Parameter der Auswertungen änderbar sind. * * @return <code>false</code> Benutzer hat 'Abbruch' gewählt */ public abstract boolean zeigeEigenschaften(); public abstract void laden(DataInputStream in) throws IOException; public abstract void speichern(DataOutputStream out) throws IOException; /** * Erzeugt eine neue Instanz einer Auswertung. * * @param klassenname * Klasse der Auswertung * @param haushalt * Parameter an die Auswertung * @param db * Parameter an die Auswertung * @param auswertungname * Parameter an die Auswertung * @return erzeugte Auswertung */ public static AbstractAuswertung erzeugeAuswertung(final String klassenname, final Haushalt haushalt, final Datenbasis db, final String auswertungname) { AbstractAuswertung auswertung = null; final Object[] parameters = { haushalt, db, auswertungname }; final Class<?>[] parameterTyp = { Haushalt.class, Datenbasis.class, String.class }; try { final Class<?> klasse = Class.forName(klassenname); final Constructor<?> constructor = klasse.getConstructor(parameterTyp); auswertung = (AbstractAuswertung) constructor.newInstance(parameters); } catch (final Exception e) { LOGGER.info("-E- Fehler beim Erzeugen der Auswertung: " + klassenname); LOGGER.warning(e.getMessage()); } if (DEBUG) { LOGGER.info("Auswertung " + klassenname + " erzeugt."); } return auswertung; } }