java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/PodnikEJB.java
author František Kučera <franta-hg@frantovo.cz>
Mon Nov 07 20:31:44 2011 +0100 (2011-11-07)
changeset 197 40b7aa9126d0
parent 192 f106b3043c0c
permissions -rw-r--r--
Podpora Markdown syntaxe pro komentáře.
     1 package cz.frantovo.nekurak.ejb;
     2 
     3 import cz.frantovo.nekurak.dao.PodnikDAO;
     4 import cz.frantovo.nekurak.dto.Kategorie;
     5 import cz.frantovo.nekurak.dto.Komentar;
     6 import cz.frantovo.nekurak.dto.Kurackost;
     7 import cz.frantovo.nekurak.dto.Podnik;
     8 import cz.frantovo.nekurak.dto.VysledekHlasovani;
     9 import cz.frantovo.nekurak.ext.Geo;
    10 import cz.frantovo.nekurak.ext.Geo.Souradnice;
    11 import cz.frantovo.nekurak.ext.WikiSyntaxProcesor;
    12 import cz.frantovo.nekurak.util.Komentare;
    13 import cz.frantovo.nekurak.vyjimky.KomentarovaVyjimka;
    14 import cz.frantovo.nekurak.vyjimky.WikiSyntaxVyjimka;
    15 import java.util.Collection;
    16 import java.util.logging.Logger;
    17 import javax.annotation.Resource;
    18 import javax.annotation.security.RolesAllowed;
    19 import javax.ejb.EJB;
    20 import javax.ejb.SessionContext;
    21 import javax.ejb.Stateless;
    22 
    23 /**
    24  *
    25  * @author fiki
    26  */
    27 @Stateless
    28 public class PodnikEJB implements PodnikRemote {
    29 
    30 	private static final Logger log = Logger.getLogger(PodnikEJB.class.getSimpleName());
    31 	@EJB
    32 	private PodnikDAO podnikDAO;
    33 	@Resource
    34 	private SessionContext ctx;
    35 	
    36 	private WikiSyntaxProcesor wikiSyntaxProcesor = new WikiSyntaxProcesor();
    37 
    38 	@Override
    39 	public Collection<Podnik> getPodniky() {
    40 		Collection<Podnik> vysledek = podnikDAO.getPodniky();
    41 		return vysledek;
    42 	}
    43 
    44 	@Override
    45 	public Collection<Podnik> getPodniky(Kategorie kategorie) {
    46 		Collection<Podnik> vysledek = podnikDAO.getPodniky(kategorie);
    47 		return vysledek;
    48 	}
    49 
    50 	@Override
    51 	public Collection<Podnik> getPodniky(Kurackost kurackost) {
    52 		Collection<Podnik> vysledek = podnikDAO.getPodniky(kurackost);
    53 		return vysledek;
    54 	}
    55 
    56 	@Override
    57 	public Podnik getPodnik(int id) {
    58 		return podnikDAO.getPodnik(id);
    59 	}
    60 
    61 	@Override
    62 	@RolesAllowed("opravneny")
    63 	public void zalozPodnik(Podnik p) {
    64 		/**
    65 		 * Podnik zakládáme jako neschválený a je potřeba ho dodatečně schválit,
    66 		 * to může udělat jen správce a ne uživatel (TODO)
    67 		 */
    68 		p.setSchvaleny(false);
    69 		p.setSpravce(ctx.getCallerPrincipal().getName());
    70 		podnikDAO.zaloz(p);
    71 		/** TODO: asynchronní počítání */
    72 		dopocitejSouradnice(p, new Geo());
    73 	}
    74 
    75 	@Override
    76 	@RolesAllowed("opravneny")
    77 	public void upravPodnik(Podnik p) {
    78 		podnikDAO.uloz(p);
    79 	}
    80 
    81 	@Override
    82 	public int dopocitejSouradnice() {
    83 		/**
    84 		 * TODO: refaktorovat, změnit datové typy, souřadnice…
    85 		 */
    86 		Geo g = new Geo();
    87 		int pocetAktualizovanych = 0;
    88 
    89 		for (Podnik p : podnikDAO.getPodnikyBezSouradnic()) {
    90 			if (dopocitejSouradnice(p, g)) {
    91 				pocetAktualizovanych++;
    92 			}
    93 		}
    94 
    95 		return pocetAktualizovanych;
    96 	}
    97 
    98 	/**
    99 	 * Na základě adresy (ulice, číslo, město) se pokusí zjistit souřadnice a uloží je k podniku.
   100 	 * @param p podnik
   101 	 * @param g poskytovatel geografických služeb
   102 	 * @return zda se souřadnice podařilo dopočítat
   103 	 */
   104 	private boolean dopocitejSouradnice(Podnik p, Geo g) {
   105 		Souradnice s = g.getSouradnice(p.getUlice() + " " + p.getCisloPopisne() + ", " + p.getMesto());
   106 		if (s != null) {
   107 			p.setSirka(s.getSirka());
   108 			p.setDelka(s.getDelka());
   109 			podnikDAO.uloz(p);
   110 			return true;
   111 		} else {
   112 			return false;
   113 		}
   114 	}
   115 
   116 	@Override
   117 	public void hlasuj(int podnik, boolean hlas, String ipAdresa) {
   118 
   119 		podnikDAO.hlasuj(podnik, hlas, ipAdresa);
   120 	}
   121 
   122 	@Override
   123 	public VysledekHlasovani getVysledekHlasovani(Podnik podnik) {
   124 		return podnikDAO.getVysledekHlasovani(podnik);
   125 	}
   126 
   127 	private void kontrolaKomentare(Komentar k) throws WikiSyntaxVyjimka, KomentarovaVyjimka {
   128 		k.setUzivatel(ctx.getCallerPrincipal().getName());
   129 		k.setDatum(null);
   130 
   131 		if (k.getKomentar() == null || k.getKomentar().length() < 1) {
   132 			throw new KomentarovaVyjimka("Nechceme prázdné komentáře.", null);
   133 		}
   134 
   135 		/** Převedeme na XML */
   136 		switch (k.getTyp()) {
   137 			case PROSTY_TEXT:
   138 				k.setKomentar(Komentare.upravProstyText(k.getKomentar()));
   139 				break;
   140 			case MARKDOWN:
   141 				k.setKomentar(wikiSyntaxProcesor.převeď(k.getKomentar(), Komentar.TYP.MARKDOWN));
   142 				break;
   143 			case TEXY:
   144 				k.setKomentar(wikiSyntaxProcesor.převeď(k.getKomentar(), Komentar.TYP.TEXY));
   145 				break;
   146 			case XHTML:
   147 				k.setKomentar(Komentare.upravXHTML(k.getKomentar()));
   148 				break;
   149 		}
   150 		/** Přidáme kořenový element */
   151 		k.setKomentar(Komentare.obal(k.getKomentar()));
   152 
   153 		/** Zkontrolujeme XML */
   154 		Komentare.zkontroluj(k.getKomentar());
   155 	}
   156 
   157 	@Override
   158 	@RolesAllowed("opravneny")
   159 	public Komentar komentuj(Komentar k, boolean uloz) throws KomentarovaVyjimka, WikiSyntaxVyjimka {
   160 		kontrolaKomentare(k);
   161 		if (uloz) {
   162 			podnikDAO.zaloz(k);
   163 		}
   164 		return k;
   165 	}
   166 }