# HG changeset patch # User František Kučera # Date 1223278587 -7200 # Node ID 4858f952774d9b4fdd2007bf9983b5774c16c94c SuperDAO - předek DAO tříd, umí snadno načítat SQL dotazy a další parametry z XML souborů, které se jmenují stejně jako daná třída. Je to lepší než používat konstanty v kódu. diff -r 000000000000 -r 4858f952774d .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Mon Oct 06 09:36:27 2008 +0200 @@ -0,0 +1,2 @@ +java/SuperDAO/dist/* +java/SuperDAO/build/* diff -r 000000000000 -r 4858f952774d java/SuperDAO/nbproject/build-impl.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/SuperDAO/nbproject/build-impl.xml Mon Oct 06 09:36:27 2008 +0200 @@ -0,0 +1,629 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + java -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r 4858f952774d java/SuperDAO/nbproject/genfiles.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/SuperDAO/nbproject/genfiles.properties Mon Oct 06 09:36:27 2008 +0200 @@ -0,0 +1,8 @@ +build.xml.data.CRC32=958f21fd +build.xml.script.CRC32=875a74e8 +build.xml.stylesheet.CRC32=be360661 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=958f21fd +nbproject/build-impl.xml.script.CRC32=196dbf97 +nbproject/build-impl.xml.stylesheet.CRC32=487672f9 diff -r 000000000000 -r 4858f952774d java/SuperDAO/nbproject/private/private.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/SuperDAO/nbproject/private/private.properties Mon Oct 06 09:36:27 2008 +0200 @@ -0,0 +1,2 @@ +jaxws.endorsed.dir=/usr/local/netbeans-6.1/java2/modules/ext/jaxws21/api +user.properties.file=/home/fiki/.netbeans/6.1/build.properties diff -r 000000000000 -r 4858f952774d java/SuperDAO/nbproject/project.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/SuperDAO/nbproject/project.properties Mon Oct 06 09:36:27 2008 +0200 @@ -0,0 +1,57 @@ +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/SuperDAO.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.source=1.5 +javac.target=1.5 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath}:\ + ${libs.junit_4.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff -r 000000000000 -r 4858f952774d java/SuperDAO/nbproject/project.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/SuperDAO/nbproject/project.xml Mon Oct 06 09:36:27 2008 +0200 @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + SuperDAO + 1.6.5 + + + + + + + + + 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 diff -r 000000000000 -r 4858f952774d java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.sql.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/SuperDAO/src/cz/frantovo/superDAO/SuperDAO.sql.xml Mon Oct 06 09:36:27 2008 +0200 @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file