java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.java
changeset 2 3df37f25b286
parent 0 4858f952774d
child 4 6223b4e5de77
     1.1 --- a/java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.java	Sun Nov 23 23:10:04 2008 +0100
     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