1 package cz.frantovo.nekurak.ejb;
3 import cz.frantovo.nekurak.dao.UzivatelDAO;
4 import cz.frantovo.nekurak.dto.PozadavekNaRegistraciUzivatele;
5 import cz.frantovo.nekurak.dto.Uzivatel;
6 import cz.frantovo.nekurak.email.Adresa;
7 import cz.frantovo.nekurak.email.Postak;
8 import cz.frantovo.nekurak.util.Hash;
9 import cz.frantovo.nekurak.vyjimky.NecekanaVyjimka;
10 import cz.frantovo.nekurak.vyjimky.NekurakVyjimka;
11 import java.io.UnsupportedEncodingException;
12 import java.security.NoSuchAlgorithmException;
13 import java.text.MessageFormat;
14 import java.util.HashMap;
15 import java.util.Locale;
17 import java.util.ResourceBundle;
18 import java.util.logging.Level;
19 import java.util.logging.Logger;
21 import javax.ejb.Stateless;
28 public class UzivatelEJB implements UzivatelRemote {
31 private UzivatelDAO uzivatelDao;
33 private Postak postak;
34 private static final Logger log = Logger.getLogger(UzivatelEJB.class.getSimpleName());
35 private Map<Locale, ResourceBundle> lokalizace = new HashMap<Locale, ResourceBundle>();
37 /** Uživatele může zakládat kdokoli – uživatel se registruje sám. */
38 public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka {
40 Uzivatel u = p.getUzivatel();
41 /** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */
42 u.setHeslo(Hash.hashuj(u.getHeslo()));
44 posliRegistracniEmail(p);
45 } catch (NoSuchAlgorithmException e) {
46 /** Nemělo by nastat */
47 throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e);
48 } catch (UnsupportedEncodingException e) {
49 /** Nemělo by nastat */
50 throw new NecekanaVyjimka("Nepodporované kódování znaků.", e);
54 private ResourceBundle getLokalizace(Locale jazyk) {
56 jazyk = Locale.getDefault();
59 if (lokalizace.get(jazyk) == null) {
60 lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk));
63 return lokalizace.get(jazyk);
66 private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) {
68 String email = p.getEmail();
69 if (Postak.isAdresaOk(email)) {
70 ResourceBundle rb = getLokalizace(p.getJazyk());
71 String jmeno = p.getJmeno() + " " + p.getPrijmeni();
72 String predmet = rb.getString("registrace.email.predmet");
73 Object[] hodnotyTextu = {jmeno, p.getPrezdivka()};
74 String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu);
75 postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text);
77 log.log(Level.WARNING, "E-mailová adresa buď chybí nebo je chybná → neodesíláme registrační e-mail. Uživatel: {0}", p.getPrezdivka());
79 } catch (NekurakVyjimka e) {
80 /** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */
81 log.log(Level.WARNING, "Chyba při posílání registračního e-mailu. Uživatel: " + p.getPrezdivka(), e);