java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java
author František Kučera <franta-hg@frantovo.cz>
Tue Mar 23 16:11:07 2010 +0100 (2010-03-23)
changeset 85 063871cec626
parent 81 4dddecffde5c
child 145 0efefbf5f8b6
permissions -rw-r--r--
Lepší logování – e-mail
franta-hg@50
     1
package cz.frantovo.nekurak.ejb;
franta-hg@50
     2
franta-hg@50
     3
import cz.frantovo.nekurak.dao.UzivatelDAO;
franta-hg@55
     4
import cz.frantovo.nekurak.dto.PozadavekNaRegistraciUzivatele;
franta-hg@50
     5
import cz.frantovo.nekurak.dto.Uzivatel;
franta-hg@81
     6
import cz.frantovo.nekurak.email.Adresa;
franta-hg@81
     7
import cz.frantovo.nekurak.email.Postak;
franta-hg@52
     8
import cz.frantovo.nekurak.util.Hash;
franta-hg@52
     9
import cz.frantovo.nekurak.vyjimky.NecekanaVyjimka;
franta-hg@52
    10
import cz.frantovo.nekurak.vyjimky.NekurakVyjimka;
franta-hg@52
    11
import java.io.UnsupportedEncodingException;
franta-hg@52
    12
import java.security.NoSuchAlgorithmException;
franta-hg@81
    13
import java.text.MessageFormat;
franta-hg@81
    14
import java.util.HashMap;
franta-hg@81
    15
import java.util.Locale;
franta-hg@81
    16
import java.util.Map;
franta-hg@81
    17
import java.util.ResourceBundle;
franta-hg@81
    18
import java.util.logging.Level;
franta-hg@81
    19
import java.util.logging.Logger;
franta-hg@50
    20
import javax.ejb.EJB;
franta-hg@50
    21
import javax.ejb.Stateless;
franta-hg@50
    22
franta-hg@50
    23
/**
franta-hg@50
    24
 *
franta-hg@50
    25
 * @author fiki
franta-hg@50
    26
 */
franta-hg@50
    27
@Stateless
franta-hg@50
    28
public class UzivatelEJB implements UzivatelRemote {
franta-hg@50
    29
franta-hg@50
    30
    @EJB
franta-hg@50
    31
    private UzivatelDAO uzivatelDao;
franta-hg@81
    32
    @EJB
franta-hg@81
    33
    private Postak postak;
franta-hg@81
    34
    private static final Logger log = Logger.getLogger(UzivatelEJB.class.getSimpleName());
franta-hg@81
    35
    private Map<Locale, ResourceBundle> lokalizace = new HashMap<Locale, ResourceBundle>();
franta-hg@50
    36
franta-hg@50
    37
    /** Uživatele může zakládat kdokoli – uživatel se registruje sám. */
franta-hg@55
    38
    public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka {
franta-hg@52
    39
	try {
franta-hg@55
    40
	    Uzivatel u = p.getUzivatel();
franta-hg@52
    41
	    /** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */
franta-hg@52
    42
	    u.setHeslo(Hash.hashuj(u.getHeslo()));
franta-hg@56
    43
	    uzivatelDao.zaloz(u);
franta-hg@81
    44
	    posliRegistracniEmail(p);
franta-hg@52
    45
	} catch (NoSuchAlgorithmException e) {
franta-hg@52
    46
	    /** Nemělo by nastat */
franta-hg@52
    47
	    throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e);
franta-hg@52
    48
	} catch (UnsupportedEncodingException e) {
franta-hg@52
    49
	    /** Nemělo by nastat */
franta-hg@52
    50
	    throw new NecekanaVyjimka("Nepodporované kódování znaků.", e);
franta-hg@52
    51
	}
franta-hg@50
    52
    }
franta-hg@81
    53
franta-hg@81
    54
    private ResourceBundle getLokalizace(Locale jazyk) {
franta-hg@81
    55
	if (jazyk == null) {
franta-hg@81
    56
	    jazyk = Locale.getDefault();
franta-hg@81
    57
	}
franta-hg@81
    58
franta-hg@81
    59
	if (lokalizace.get(jazyk) == null) {
franta-hg@81
    60
	    lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk));
franta-hg@81
    61
	}
franta-hg@81
    62
franta-hg@81
    63
	return lokalizace.get(jazyk);
franta-hg@81
    64
    }
franta-hg@81
    65
franta-hg@81
    66
    private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) {
franta-hg@81
    67
	try {
franta-hg@81
    68
	    String email = p.getEmail();
franta-hg@81
    69
	    if (Postak.isAdresaOk(email)) {
franta-hg@81
    70
		ResourceBundle rb = getLokalizace(p.getJazyk());
franta-hg@81
    71
		String jmeno = p.getJmeno() + " " + p.getPrijmeni();
franta-hg@81
    72
		String predmet = rb.getString("registrace.email.predmet");
franta-hg@81
    73
		Object[] hodnotyTextu = {jmeno, p.getPrezdivka()};
franta-hg@81
    74
		String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu);
franta-hg@81
    75
		postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text);
franta-hg@81
    76
	    } else {
franta-hg@81
    77
		log.log(Level.WARNING, "E-mailová adresa buď chybí nebo je chybná → neodesíláme registrační e-mail. Uživatel: " + p.getPrezdivka());
franta-hg@81
    78
	    }
franta-hg@81
    79
	} catch (NekurakVyjimka e) {
franta-hg@81
    80
	    /** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */
franta-hg@85
    81
	    log.log(Level.WARNING, "Chyba při posílání registračního e-mailu. Uživatel: " + p.getPrezdivka(), e);
franta-hg@81
    82
	}
franta-hg@81
    83
    }
franta-hg@50
    84
}