franta-hg@50: package cz.frantovo.nekurak.ejb; franta-hg@50: franta-hg@50: import cz.frantovo.nekurak.dao.UzivatelDAO; franta-hg@55: import cz.frantovo.nekurak.dto.PozadavekNaRegistraciUzivatele; franta-hg@50: import cz.frantovo.nekurak.dto.Uzivatel; franta-hg@81: import cz.frantovo.nekurak.email.Adresa; franta-hg@81: import cz.frantovo.nekurak.email.Postak; franta-hg@52: import cz.frantovo.nekurak.util.Hash; franta-hg@52: import cz.frantovo.nekurak.vyjimky.NecekanaVyjimka; franta-hg@52: import cz.frantovo.nekurak.vyjimky.NekurakVyjimka; franta-hg@52: import java.io.UnsupportedEncodingException; franta-hg@52: import java.security.NoSuchAlgorithmException; franta-hg@81: import java.text.MessageFormat; franta-hg@81: import java.util.HashMap; franta-hg@81: import java.util.Locale; franta-hg@81: import java.util.Map; franta-hg@81: import java.util.ResourceBundle; franta-hg@81: import java.util.logging.Level; franta-hg@81: import java.util.logging.Logger; franta-hg@50: import javax.ejb.EJB; franta-hg@50: import javax.ejb.Stateless; franta-hg@50: franta-hg@50: /** franta-hg@50: * franta-hg@50: * @author fiki franta-hg@50: */ franta-hg@50: @Stateless franta-hg@50: public class UzivatelEJB implements UzivatelRemote { franta-hg@50: franta-hg@145: @EJB franta-hg@145: private UzivatelDAO uzivatelDao; franta-hg@145: @EJB franta-hg@145: private Postak postak; franta-hg@145: private static final Logger log = Logger.getLogger(UzivatelEJB.class.getSimpleName()); franta-hg@145: private Map lokalizace = new HashMap(); franta-hg@50: franta-hg@145: /** Uživatele může zakládat kdokoli – uživatel se registruje sám. */ franta-hg@145: public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka { franta-hg@145: try { franta-hg@145: Uzivatel u = p.getUzivatel(); franta-hg@145: /** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */ franta-hg@145: u.setHeslo(Hash.hashuj(u.getHeslo())); franta-hg@145: uzivatelDao.zaloz(u); franta-hg@145: posliRegistracniEmail(p); franta-hg@145: } catch (NoSuchAlgorithmException e) { franta-hg@145: /** Nemělo by nastat */ franta-hg@145: throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e); franta-hg@145: } catch (UnsupportedEncodingException e) { franta-hg@145: /** Nemělo by nastat */ franta-hg@145: throw new NecekanaVyjimka("Nepodporované kódování znaků.", e); franta-hg@145: } franta-hg@81: } franta-hg@81: franta-hg@145: private ResourceBundle getLokalizace(Locale jazyk) { franta-hg@145: if (jazyk == null) { franta-hg@145: jazyk = Locale.getDefault(); franta-hg@145: } franta-hg@145: franta-hg@145: if (lokalizace.get(jazyk) == null) { franta-hg@145: lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk)); franta-hg@145: } franta-hg@145: franta-hg@145: return lokalizace.get(jazyk); franta-hg@81: } franta-hg@81: franta-hg@145: private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) { franta-hg@145: try { franta-hg@145: String email = p.getEmail(); franta-hg@145: if (Postak.isAdresaOk(email)) { franta-hg@145: ResourceBundle rb = getLokalizace(p.getJazyk()); franta-hg@145: String jmeno = p.getJmeno() + " " + p.getPrijmeni(); franta-hg@145: String predmet = rb.getString("registrace.email.predmet"); franta-hg@145: Object[] hodnotyTextu = {jmeno, p.getPrezdivka()}; franta-hg@145: String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu); franta-hg@145: postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text); franta-hg@145: } else { franta-hg@145: log.log(Level.WARNING, "E-mailová adresa buď chybí nebo je chybná → neodesíláme registrační e-mail. Uživatel: {0}", p.getPrezdivka()); franta-hg@145: } franta-hg@145: } catch (NekurakVyjimka e) { franta-hg@145: /** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */ franta-hg@145: log.log(Level.WARNING, "Chyba při posílání registračního e-mailu. Uživatel: " + p.getPrezdivka(), e); franta-hg@145: } franta-hg@81: } franta-hg@50: }