java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/UzivatelEJB.java
author František Kučera <franta-hg@frantovo.cz>
Fri Jul 15 22:25:39 2011 +0200 (2011-07-15)
changeset 186 b0f7d9ab4a07
parent 145 0efefbf5f8b6
permissions -rw-r--r--
Glassfish 3.1.1
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@186
    38
	@Override
franta-hg@145
    39
	public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka {
franta-hg@145
    40
		try {
franta-hg@145
    41
			Uzivatel u = p.getUzivatel();
franta-hg@145
    42
			/** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */
franta-hg@145
    43
			u.setHeslo(Hash.hashuj(u.getHeslo()));
franta-hg@145
    44
			uzivatelDao.zaloz(u);
franta-hg@145
    45
			posliRegistracniEmail(p);
franta-hg@145
    46
		} catch (NoSuchAlgorithmException e) {
franta-hg@145
    47
			/** Nemělo by nastat */
franta-hg@145
    48
			throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e);
franta-hg@145
    49
		} catch (UnsupportedEncodingException e) {
franta-hg@145
    50
			/** Nemělo by nastat */
franta-hg@145
    51
			throw new NecekanaVyjimka("Nepodporované kódování znaků.", e);
franta-hg@145
    52
		}
franta-hg@81
    53
	}
franta-hg@81
    54
franta-hg@145
    55
	private ResourceBundle getLokalizace(Locale jazyk) {
franta-hg@145
    56
		if (jazyk == null) {
franta-hg@145
    57
			jazyk = Locale.getDefault();
franta-hg@145
    58
		}
franta-hg@145
    59
franta-hg@145
    60
		if (lokalizace.get(jazyk) == null) {
franta-hg@145
    61
			lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk));
franta-hg@145
    62
		}
franta-hg@145
    63
franta-hg@145
    64
		return lokalizace.get(jazyk);
franta-hg@81
    65
	}
franta-hg@81
    66
franta-hg@145
    67
	private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) {
franta-hg@145
    68
		try {
franta-hg@145
    69
			String email = p.getEmail();
franta-hg@145
    70
			if (Postak.isAdresaOk(email)) {
franta-hg@145
    71
				ResourceBundle rb = getLokalizace(p.getJazyk());
franta-hg@145
    72
				String jmeno = p.getJmeno() + " " + p.getPrijmeni();
franta-hg@145
    73
				String predmet = rb.getString("registrace.email.predmet");
franta-hg@145
    74
				Object[] hodnotyTextu = {jmeno, p.getPrezdivka()};
franta-hg@145
    75
				String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu);
franta-hg@145
    76
				postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text);
franta-hg@145
    77
			} else {
franta-hg@145
    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());
franta-hg@145
    79
			}
franta-hg@145
    80
		} catch (NekurakVyjimka e) {
franta-hg@145
    81
			/** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */
franta-hg@145
    82
			log.log(Level.WARNING, "Chyba při posílání registračního e-mailu. Uživatel: " + p.getPrezdivka(), e);
franta-hg@145
    83
		}
franta-hg@81
    84
	}
franta-hg@50
    85
}