1.1 --- a/java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.java Mon Oct 06 09:36:27 2008 +0200
1.2 +++ b/java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.java Wed Feb 11 22:23:22 2009 +0100
1.3 @@ -21,7 +21,7 @@
1.4 private static Map<Class, Properties> sql = Collections.synchronizedMap(new HashMap<Class, Properties>());
1.5 private static Map<Class, Properties> vlastnosti = Collections.synchronizedMap(new HashMap<Class, Properties>());
1.6
1.7 - private enum SQL {
1.8 + private enum VLASTNOSTI {
1.9
1.10 AHOJ
1.11 }
1.12 @@ -29,24 +29,43 @@
1.13 /**
1.14 * Načítá SQL dotazy ze souboru, který se jmenuje stejně jako třída a má příponu sql.xml
1.15 * Do těchto souborů patří pouze SQL dotazy - všechny ostatní parametry dáme do .xml souboru.
1.16 + * <p><strong>Pozor</strong> na použití v <em>protected</em> metodách, které mohou být volány z potomků –
1.17 + * pak se použije XML soubor daného potomka a ne XML soubor třídy, ve které se <em>protected</em> metoda nachází.
1.18 + * V takovém případě je potřeba použít parametr <em>trida</em></p>
1.19 * @param klic Enum konstnanta z dané třídy
1.20 + * @param trida třída, jejíž XML soubor budeme hledat.
1.21 * @return SQL dotaz nebo null v případě chyby
1.22 */
1.23 + protected String getSQL(Enum klic, Class trida) {
1.24 + return getHodnota(sql, "sql.xml", klic, trida);
1.25 + }
1.26 +
1.27 + /**
1.28 + * @see getSQL(Enum klic, Class trida)
1.29 + */
1.30 protected String getSQL(Enum klic) {
1.31 -
1.32 -
1.33 -
1.34 - return getHodnota(sql, "sql.xml", klic);
1.35 + return getSQL(klic, null);
1.36 }
1.37
1.38 /**
1.39 * Načítá textové hodnoty (vlastnosti) ze souboru, který se jmenuje stejně jako třída a má příponu xml
1.40 * Sem patří všechny parametry tříd kromě SQL dotazů.
1.41 + * <p><strong>Pozor</strong> na použití v <em>protected</em> metodách, které mohou být volány z potomků –
1.42 + * pak se použije XML soubor daného potomka a ne XML soubor třídy, ve které se <em>protected</em> metoda nachází.
1.43 + * V takovém případě je potřeba použít parametr <em>trida</em></p>
1.44 * @param klic Enum konstnanta z dané třídy
1.45 + * @param trida třída, jejíž XML soubor budeme hledat.
1.46 * @return textová hodnota nebo null v případě chyby
1.47 */
1.48 + protected String getVlastnost(Enum klic, Class trida) {
1.49 + return getHodnota(vlastnosti, "xml", klic, trida);
1.50 + }
1.51 +
1.52 + /**
1.53 + * @see getVlastnost(Enum klic, Class trida)
1.54 + */
1.55 protected String getVlastnost(Enum klic) {
1.56 - return getHodnota(vlastnosti, "xml", klic);
1.57 + return getVlastnost(klic, null);
1.58 }
1.59
1.60 /**
1.61 @@ -54,23 +73,27 @@
1.62 * @param klic Enum konstnanta z dané třídy
1.63 * @return textová hodnota nebo null v případě chyby
1.64 */
1.65 - private String getHodnota(Map<Class, Properties> mezipamet, String pripona, Enum klic) {
1.66 + private String getHodnota(Map<Class, Properties> mezipamet, String pripona, Enum klic, Class trida) {
1.67
1.68 - if (mezipamet.get(getClass()) == null) {
1.69 + if (trida == null) {
1.70 + trida = getClass();
1.71 + }
1.72 +
1.73 + if (mezipamet.get(trida) == null) {
1.74 /** Ještě nemáme načteno ze souboru */
1.75 - mezipamet.put(getClass(), getHodnoty(pripona));
1.76 + mezipamet.put(trida, getHodnoty(pripona, trida));
1.77
1.78 - if (mezipamet.get(getClass()) == null) {
1.79 + if (mezipamet.get(trida) == null) {
1.80 /** Došlo k chybě --> už to příště nebudeme zkoušet načítat */
1.81 - mezipamet.put(getClass(), new Properties());
1.82 + mezipamet.put(trida, new Properties());
1.83 }
1.84 }
1.85
1.86 - return mezipamet.get(getClass()).getProperty(klic.toString());
1.87 + return mezipamet.get(trida).getProperty(klic.toString());
1.88 }
1.89
1.90 public static void main(String[] args) {
1.91 - System.out.println(new SuperDAO().getSQL(SQL.AHOJ));
1.92 + System.out.println(new SuperDAO().getSQL(VLASTNOSTI.AHOJ));
1.93
1.94 }
1.95
1.96 @@ -80,20 +103,18 @@
1.97 * @param pripona přípona souboru - obvykle "sql.xml" nebo "xml" (bez tečky)
1.98 * @return načtené vlastnosti nebo null v případě chyby
1.99 */
1.100 - private Properties getHodnoty(String pripona) {
1.101 - Class trida = getClass();
1.102 + private Properties getHodnoty(String pripona, Class trida) {
1.103 String soubor = trida.getSimpleName() + "." + pripona;
1.104
1.105 - Properties hodnoty = null;
1.106 try {
1.107 + Properties hodnoty = new Properties();
1.108 InputStream fis = trida.getResourceAsStream(soubor);
1.109 - hodnoty = new Properties();
1.110 hodnoty.loadFromXML(fis);
1.111 + return hodnoty;
1.112 } catch (Exception e) {
1.113 log.log(Level.SEVERE, "Chyba při načítání vlastností: " + soubor, e);
1.114 + return null;
1.115 }
1.116 -
1.117 - return hodnoty;
1.118 }
1.119
1.120 /**
1.121 @@ -102,7 +123,7 @@
1.122 * @param prikaz DB dotaz
1.123 * @param vysledek DB výsledek
1.124 */
1.125 - protected void zavri(Connection spojeni, Statement prikaz, ResultSet vysledek) {
1.126 + protected static void zavri(Connection spojeni, Statement prikaz, ResultSet vysledek) {
1.127 if (vysledek != null) {
1.128 try {
1.129 vysledek.close();
1.130 @@ -122,4 +143,16 @@
1.131 }
1.132 }
1.133 }
1.134 +
1.135 + /**
1.136 + * @param jndi původní řetězec
1.137 + * @return U JNDI jmen nemá smysl, aby měli na začátku nebo na konci bílé znaky (mezery…)
1.138 + */
1.139 + public static String orizniJNDI(String jndi) {
1.140 + if (jndi == null) {
1.141 + return null;
1.142 + } else {
1.143 + return jndi.trim();
1.144 + }
1.145 + }
1.146 }
1.147 \ No newline at end of file