diff -r 000000000000 -r 4858f952774d java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.java Mon Oct 06 09:36:27 2008 +0200 @@ -0,0 +1,125 @@ +package cz.frantovo.superDAO; + +import java.io.InputStream; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Předek všech DTOček + * @author fiki + */ +public class SuperDAO { + + protected Logger log = Logger.getLogger(getClass().getName()); + private static Map sql = Collections.synchronizedMap(new HashMap()); + private static Map vlastnosti = Collections.synchronizedMap(new HashMap()); + + private enum SQL { + + AHOJ + } + + /** + * Načítá SQL dotazy ze souboru, který se jmenuje stejně jako třída a má příponu sql.xml + * Do těchto souborů patří pouze SQL dotazy - všechny ostatní parametry dáme do .xml souboru. + * @param klic Enum konstnanta z dané třídy + * @return SQL dotaz nebo null v případě chyby + */ + protected String getSQL(Enum klic) { + + + + return getHodnota(sql, "sql.xml", klic); + } + + /** + * Načítá textové hodnoty (vlastnosti) ze souboru, který se jmenuje stejně jako třída a má příponu xml + * Sem patří všechny parametry tříd kromě SQL dotazů. + * @param klic Enum konstnanta z dané třídy + * @return textová hodnota nebo null v případě chyby + */ + protected String getVlastnost(Enum klic) { + return getHodnota(vlastnosti, "xml", klic); + } + + /** + * Nečte hodnoty přímo ze souboru, ale snaží se je nejprve najít ve statické mezipaměti. + * @param klic Enum konstnanta z dané třídy + * @return textová hodnota nebo null v případě chyby + */ + private String getHodnota(Map mezipamet, String pripona, Enum klic) { + + if (mezipamet.get(getClass()) == null) { + /** Ještě nemáme načteno ze souboru */ + mezipamet.put(getClass(), getHodnoty(pripona)); + + if (mezipamet.get(getClass()) == null) { + /** Došlo k chybě --> už to příště nebudeme zkoušet načítat */ + mezipamet.put(getClass(), new Properties()); + } + } + + return mezipamet.get(getClass()).getProperty(klic.toString()); + } + + public static void main(String[] args) { + System.out.println(new SuperDAO().getSQL(SQL.AHOJ)); + + } + + /** + * Načte vlastnosti dané třídy z XML souboru. + * Soubory se dávají do stejného balíčku jako třída, akorát mají jinou příponu. + * @param pripona přípona souboru - obvykle "sql.xml" nebo "xml" (bez tečky) + * @return načtené vlastnosti nebo null v případě chyby + */ + private Properties getHodnoty(String pripona) { + Class trida = getClass(); + String soubor = trida.getSimpleName() + "." + pripona; + + Properties hodnoty = null; + try { + InputStream fis = trida.getResourceAsStream(soubor); + hodnoty = new Properties(); + hodnoty.loadFromXML(fis); + } catch (Exception e) { + log.log(Level.SEVERE, "Chyba při načítání vlastností: " + soubor, e); + } + + return hodnoty; + } + + /** + * Zavře všechno + * @param spojeni DB spojení + * @param prikaz DB dotaz + * @param vysledek DB výsledek + */ + protected void zavri(Connection spojeni, Statement prikaz, ResultSet vysledek) { + if (vysledek != null) { + try { + vysledek.close(); + } catch (Exception e) { + } + } + if (prikaz != null) { + try { + prikaz.close(); + } catch (Exception e) { + } + } + if (spojeni != null) { + try { + spojeni.close(); + } catch (Exception e) { + } + } + } +} \ No newline at end of file