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. */
39 public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka {
41 Uzivatel u = p.getUzivatel();
42 /** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */
43 u.setHeslo(Hash.hashuj(u.getHeslo()));
45 posliRegistracniEmail(p);
46 } catch (NoSuchAlgorithmException e) {
47 /** Nemělo by nastat */
48 throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e);
49 } catch (UnsupportedEncodingException e) {
50 /** Nemělo by nastat */
51 throw new NecekanaVyjimka("Nepodporované kódování znaků.", e);
55 private ResourceBundle getLokalizace(Locale jazyk) {
57 jazyk = Locale.getDefault();
60 if (lokalizace.get(jazyk) == null) {
61 lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk));
64 return lokalizace.get(jazyk);
67 private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) {
69 String email = p.getEmail();
70 if (Postak.isAdresaOk(email)) {
71 ResourceBundle rb = getLokalizace(p.getJazyk());
72 String jmeno = p.getJmeno() + " " + p.getPrijmeni();
73 String predmet = rb.getString("registrace.email.predmet");
74 Object[] hodnotyTextu = {jmeno, p.getPrezdivka()};
75 String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu);
76 postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text);
78 log.log(Level.WARNING, "E-mailová adresa buď chybí nebo je chybná → neodesíláme registrační e-mail. Uživatel: {0}", p.getPrezdivka());
80 } catch (NekurakVyjimka e) {
81 /** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */
82 log.log(Level.WARNING, "Chyba při posílání registračního e-mailu. Uživatel: " + p.getPrezdivka(), e);