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
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@145
    30
	@EJB
franta-hg@145
    31
	private UzivatelDAO uzivatelDao;
franta-hg@145
    32
	@EJB
franta-hg@145
    33
	private Postak postak;
franta-hg@145
    34
	private static final Logger log = Logger.getLogger(UzivatelEJB.class.getSimpleName());
franta-hg@145
    35
	private Map<Locale, ResourceBundle> lokalizace = new HashMap<Locale, ResourceBundle>();
franta-hg@50
    36
franta-hg@145
    37
	/** Uživatele může zakládat kdokoli – uživatel se registruje sám. */
franta-hg@145
    38
	public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka {
franta-hg@145
    39
		try {
franta-hg@145
    40
			Uzivatel u = p.getUzivatel();
franta-hg@145
    41
			/** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */
franta-hg@145
    42
			u.setHeslo(Hash.hashuj(u.getHeslo()));
franta-hg@145
    43
			uzivatelDao.zaloz(u);
franta-hg@145
    44
			posliRegistracniEmail(p);
franta-hg@145
    45
		} catch (NoSuchAlgorithmException e) {
franta-hg@145
    46
			/** Nemělo by nastat */
franta-hg@145
    47
			throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e);
franta-hg@145
    48
		} catch (UnsupportedEncodingException e) {
franta-hg@145
    49
			/** Nemělo by nastat */
franta-hg@145
    50
			throw new NecekanaVyjimka("Nepodporované kódování znaků.", e);
franta-hg@145
    51
		}
franta-hg@81
    52
	}
franta-hg@81
    53
franta-hg@145
    54
	private ResourceBundle getLokalizace(Locale jazyk) {
franta-hg@145
    55
		if (jazyk == null) {
franta-hg@145
    56
			jazyk = Locale.getDefault();
franta-hg@145
    57
		}
franta-hg@145
    58
franta-hg@145
    59
		if (lokalizace.get(jazyk) == null) {
franta-hg@145
    60
			lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk));
franta-hg@145
    61
		}
franta-hg@145
    62
franta-hg@145
    63
		return lokalizace.get(jazyk);
franta-hg@81
    64
	}
franta-hg@81
    65
franta-hg@145
    66
	private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) {
franta-hg@145
    67
		try {
franta-hg@145
    68
			String email = p.getEmail();
franta-hg@145
    69
			if (Postak.isAdresaOk(email)) {
franta-hg@145
    70
				ResourceBundle rb = getLokalizace(p.getJazyk());
franta-hg@145
    71
				String jmeno = p.getJmeno() + " " + p.getPrijmeni();
franta-hg@145
    72
				String predmet = rb.getString("registrace.email.predmet");
franta-hg@145
    73
				Object[] hodnotyTextu = {jmeno, p.getPrezdivka()};
franta-hg@145
    74
				String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu);
franta-hg@145
    75
				postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text);
franta-hg@145
    76
			} else {
franta-hg@145
    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());
franta-hg@145
    78
			}
franta-hg@145
    79
		} catch (NekurakVyjimka e) {
franta-hg@145
    80
			/** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */
franta-hg@145
    81
			log.log(Level.WARNING, "Chyba při posílání registračního e-mailu. Uživatel: " + p.getPrezdivka(), e);
franta-hg@145
    82
		}
franta-hg@81
    83
	}
franta-hg@50
    84
}