1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.java Mon Oct 06 09:36:27 2008 +0200
1.3 @@ -0,0 +1,125 @@
1.4 +package cz.frantovo.superDAO;
1.5 +
1.6 +import java.io.InputStream;
1.7 +import java.sql.Connection;
1.8 +import java.sql.ResultSet;
1.9 +import java.sql.Statement;
1.10 +import java.util.Collections;
1.11 +import java.util.HashMap;
1.12 +import java.util.Map;
1.13 +import java.util.Properties;
1.14 +import java.util.logging.Level;
1.15 +import java.util.logging.Logger;
1.16 +
1.17 +/**
1.18 + * Předek všech DTOček
1.19 + * @author fiki
1.20 + */
1.21 +public class SuperDAO {
1.22 +
1.23 + protected Logger log = Logger.getLogger(getClass().getName());
1.24 + private static Map<Class, Properties> sql = Collections.synchronizedMap(new HashMap<Class, Properties>());
1.25 + private static Map<Class, Properties> vlastnosti = Collections.synchronizedMap(new HashMap<Class, Properties>());
1.26 +
1.27 + private enum SQL {
1.28 +
1.29 + AHOJ
1.30 + }
1.31 +
1.32 + /**
1.33 + * Načítá SQL dotazy ze souboru, který se jmenuje stejně jako třída a má příponu sql.xml
1.34 + * Do těchto souborů patří pouze SQL dotazy - všechny ostatní parametry dáme do .xml souboru.
1.35 + * @param klic Enum konstnanta z dané třídy
1.36 + * @return SQL dotaz nebo null v případě chyby
1.37 + */
1.38 + protected String getSQL(Enum klic) {
1.39 +
1.40 +
1.41 +
1.42 + return getHodnota(sql, "sql.xml", klic);
1.43 + }
1.44 +
1.45 + /**
1.46 + * Načítá textové hodnoty (vlastnosti) ze souboru, který se jmenuje stejně jako třída a má příponu xml
1.47 + * Sem patří všechny parametry tříd kromě SQL dotazů.
1.48 + * @param klic Enum konstnanta z dané třídy
1.49 + * @return textová hodnota nebo null v případě chyby
1.50 + */
1.51 + protected String getVlastnost(Enum klic) {
1.52 + return getHodnota(vlastnosti, "xml", klic);
1.53 + }
1.54 +
1.55 + /**
1.56 + * Nečte hodnoty přímo ze souboru, ale snaží se je nejprve najít ve statické mezipaměti.
1.57 + * @param klic Enum konstnanta z dané třídy
1.58 + * @return textová hodnota nebo null v případě chyby
1.59 + */
1.60 + private String getHodnota(Map<Class, Properties> mezipamet, String pripona, Enum klic) {
1.61 +
1.62 + if (mezipamet.get(getClass()) == null) {
1.63 + /** Ještě nemáme načteno ze souboru */
1.64 + mezipamet.put(getClass(), getHodnoty(pripona));
1.65 +
1.66 + if (mezipamet.get(getClass()) == null) {
1.67 + /** Došlo k chybě --> už to příště nebudeme zkoušet načítat */
1.68 + mezipamet.put(getClass(), new Properties());
1.69 + }
1.70 + }
1.71 +
1.72 + return mezipamet.get(getClass()).getProperty(klic.toString());
1.73 + }
1.74 +
1.75 + public static void main(String[] args) {
1.76 + System.out.println(new SuperDAO().getSQL(SQL.AHOJ));
1.77 +
1.78 + }
1.79 +
1.80 + /**
1.81 + * Načte vlastnosti dané třídy z XML souboru.
1.82 + * Soubory se dávají do stejného balíčku jako třída, akorát mají jinou příponu.
1.83 + * @param pripona přípona souboru - obvykle "sql.xml" nebo "xml" (bez tečky)
1.84 + * @return načtené vlastnosti nebo null v případě chyby
1.85 + */
1.86 + private Properties getHodnoty(String pripona) {
1.87 + Class trida = getClass();
1.88 + String soubor = trida.getSimpleName() + "." + pripona;
1.89 +
1.90 + Properties hodnoty = null;
1.91 + try {
1.92 + InputStream fis = trida.getResourceAsStream(soubor);
1.93 + hodnoty = new Properties();
1.94 + hodnoty.loadFromXML(fis);
1.95 + } catch (Exception e) {
1.96 + log.log(Level.SEVERE, "Chyba při načítání vlastností: " + soubor, e);
1.97 + }
1.98 +
1.99 + return hodnoty;
1.100 + }
1.101 +
1.102 + /**
1.103 + * Zavře všechno
1.104 + * @param spojeni DB spojení
1.105 + * @param prikaz DB dotaz
1.106 + * @param vysledek DB výsledek
1.107 + */
1.108 + protected void zavri(Connection spojeni, Statement prikaz, ResultSet vysledek) {
1.109 + if (vysledek != null) {
1.110 + try {
1.111 + vysledek.close();
1.112 + } catch (Exception e) {
1.113 + }
1.114 + }
1.115 + if (prikaz != null) {
1.116 + try {
1.117 + prikaz.close();
1.118 + } catch (Exception e) {
1.119 + }
1.120 + }
1.121 + if (spojeni != null) {
1.122 + try {
1.123 + spojeni.close();
1.124 + } catch (Exception e) {
1.125 + }
1.126 + }
1.127 + }
1.128 +}
1.129 \ No newline at end of file