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