java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java
author František Kučera <franta-hg@frantovo.cz>
Sun Jun 20 14:46:47 2010 +0200 (2010-06-20)
changeset 145 0efefbf5f8b6
parent 85 063871cec626
child 186 b0f7d9ab4a07
permissions -rw-r--r--
Formátování kódu, důsledné používání tabulátorů, drobné úpravy, StringBuilder
     1 package cz.frantovo.nekurak.ejb;
     2 
     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;
    16 import java.util.Map;
    17 import java.util.ResourceBundle;
    18 import java.util.logging.Level;
    19 import java.util.logging.Logger;
    20 import javax.ejb.EJB;
    21 import javax.ejb.Stateless;
    22 
    23 /**
    24  *
    25  * @author fiki
    26  */
    27 @Stateless
    28 public class UzivatelEJB implements UzivatelRemote {
    29 
    30 	@EJB
    31 	private UzivatelDAO uzivatelDao;
    32 	@EJB
    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>();
    36 
    37 	/** Uživatele může zakládat kdokoli – uživatel se registruje sám. */
    38 	public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka {
    39 		try {
    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()));
    43 			uzivatelDao.zaloz(u);
    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);
    51 		}
    52 	}
    53 
    54 	private ResourceBundle getLokalizace(Locale jazyk) {
    55 		if (jazyk == null) {
    56 			jazyk = Locale.getDefault();
    57 		}
    58 
    59 		if (lokalizace.get(jazyk) == null) {
    60 			lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk));
    61 		}
    62 
    63 		return lokalizace.get(jazyk);
    64 	}
    65 
    66 	private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) {
    67 		try {
    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);
    76 			} else {
    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());
    78 			}
    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);
    82 		}
    83 	}
    84 }