java/SuperPostak/src/cz/frantovo/superPostak/Data.java
author František Kučera <franta-hg@frantovo.cz>
Tue Nov 29 17:16:47 2011 +0100 (2011-11-29)
changeset 13 b15d81be8af3
parent 3 03d27d3b3f7b
permissions -rw-r--r--
drobnosti: lgoování, formátování, netbeans…
franta-hg@0
     1
package cz.frantovo.superPostak;
franta-hg@0
     2
franta-hg@0
     3
import java.security.MessageDigest;
franta-hg@0
     4
import java.security.NoSuchAlgorithmException;
franta-hg@0
     5
import java.sql.Connection;
franta-hg@0
     6
import java.sql.DriverManager;
franta-hg@0
     7
import java.sql.SQLException;
franta-hg@0
     8
import java.util.Arrays;
franta-hg@0
     9
import java.util.logging.Level;
franta-hg@0
    10
import java.util.logging.Logger;
franta-hg@0
    11
franta-hg@0
    12
/**
franta-hg@0
    13
 * Vrstva pro připojení k databázi
franta-hg@0
    14
 * @author fiki
franta-hg@0
    15
 */
franta-hg@0
    16
public class Data {
franta-hg@0
    17
franta-hg@13
    18
    private static final Logger log = Logger.getLogger(Data.class.getName());
franta-hg@0
    19
    private static Connection spojeni;
franta-hg@0
    20
    private static byte[] hash;
franta-hg@0
    21
    private static MessageDigest sha;
franta-hg@0
    22
franta-hg@0
    23
    public static synchronized DataSQL getSpojeniSQL(String url, String jmeno, char[] heslo) throws SQLException {
franta-hg@0
    24
        return new DataSQL(getSpojeni(url, jmeno, heslo));
franta-hg@0
    25
    }
franta-hg@0
    26
franta-hg@0
    27
    private static synchronized Connection getSpojeni(String url, String jmeno, char[] heslo) throws SQLException {
franta-hg@0
    28
        if (Arrays.equals(hash, hashuj(url, jmeno, heslo)) && spojeni != null && !spojeni.isClosed()) {
franta-hg@0
    29
            log.log(Level.INFO, "Znovupoužívám DB spojení.");
franta-hg@0
    30
        } else {
franta-hg@0
    31
            spojeni = getNoveSpojeni(url, jmeno, heslo);
franta-hg@0
    32
        }
franta-hg@0
    33
franta-hg@0
    34
        return spojeni;
franta-hg@0
    35
    }
franta-hg@0
    36
franta-hg@0
    37
    private static Connection getNoveSpojeni(
franta-hg@0
    38
            String url, String jmeno, char[] heslo) throws SQLException {
franta-hg@0
    39
        /** Pokusíme se uzavřít staré spojení */
franta-hg@0
    40
        if (spojeni != null && !spojeni.isClosed()) {
franta-hg@0
    41
            try {
franta-hg@0
    42
                spojeni.close();
franta-hg@0
    43
            } catch (Exception e) {
franta-hg@0
    44
                log.log(Level.INFO, "Nepodařilo se uzavřít spojení", e);
franta-hg@0
    45
            }
franta-hg@0
    46
        }
franta-hg@0
    47
franta-hg@0
    48
        /** Vrátíme nové spojení */
franta-hg@0
    49
        hash = hashuj(url, jmeno, heslo);
franta-hg@0
    50
        spojeni = DriverManager.getConnection(url, jmeno, String.valueOf(heslo));
franta-hg@13
    51
        log.log(Level.INFO, "Otevřeno nové spoejní spojení k databázi: {0}", url);
franta-hg@0
    52
        return spojeni;
franta-hg@0
    53
    }
franta-hg@0
    54
franta-hg@0
    55
    private static byte[] hashuj(String url, String jmeno, char[] heslo) {
franta-hg@0
    56
        try {
franta-hg@0
    57
            if (sha == null) {
franta-hg@0
    58
                sha = MessageDigest.getInstance("SHA-256");
franta-hg@0
    59
            }
franta-hg@0
    60
            String text = url + "/" + jmeno + "/" + String.valueOf(heslo);
franta-hg@0
    61
            return sha.digest(text.getBytes());
franta-hg@0
    62
franta-hg@0
    63
        } catch (NoSuchAlgorithmException e) {
franta-hg@0
    64
            /** Tohle by nemělo nikdy nastat. V nouzovém případě použijeme součet hodnot místo hashe. */
franta-hg@0
    65
            log.log(Level.SEVERE, "Neexistující hashovací algoritmus", e);
franta-hg@0
    66
            String soucet = url + "/" + jmeno + String.valueOf(heslo).length();
franta-hg@0
    67
            return soucet.getBytes();
franta-hg@0
    68
        }
franta-hg@0
    69
    }
franta-hg@0
    70
}
franta-hg@0
    71
franta-hg@0
    72