franta-hg@28: package cz.frantovo.nekurak.ejb; franta-hg@28: franta-hg@39: import cz.frantovo.nekurak.dao.PodnikDAO; franta-hg@170: import cz.frantovo.nekurak.dto.Kategorie; franta-hg@130: import cz.frantovo.nekurak.dto.Komentar; franta-hg@171: import cz.frantovo.nekurak.dto.Kurackost; franta-hg@28: import cz.frantovo.nekurak.dto.Podnik; franta-hg@107: import cz.frantovo.nekurak.dto.VysledekHlasovani; franta-hg@119: import cz.frantovo.nekurak.ext.Geo; franta-hg@119: import cz.frantovo.nekurak.ext.Geo.Souradnice; franta-hg@197: import cz.frantovo.nekurak.ext.WikiSyntaxProcesor; franta-hg@130: import cz.frantovo.nekurak.util.Komentare; franta-hg@132: import cz.frantovo.nekurak.vyjimky.KomentarovaVyjimka; franta-hg@197: import cz.frantovo.nekurak.vyjimky.WikiSyntaxVyjimka; franta-hg@28: import java.util.Collection; franta-hg@107: import java.util.logging.Logger; franta-hg@63: import javax.annotation.Resource; franta-hg@40: import javax.annotation.security.RolesAllowed; franta-hg@39: import javax.ejb.EJB; franta-hg@63: import javax.ejb.SessionContext; franta-hg@28: import javax.ejb.Stateless; franta-hg@28: franta-hg@28: /** franta-hg@28: * franta-hg@28: * @author fiki franta-hg@28: */ franta-hg@28: @Stateless franta-hg@39: public class PodnikEJB implements PodnikRemote { franta-hg@28: franta-hg@145: private static final Logger log = Logger.getLogger(PodnikEJB.class.getSimpleName()); franta-hg@145: @EJB franta-hg@145: private PodnikDAO podnikDAO; franta-hg@145: @Resource franta-hg@145: private SessionContext ctx; franta-hg@197: franta-hg@197: private WikiSyntaxProcesor wikiSyntaxProcesor = new WikiSyntaxProcesor(); franta-hg@28: franta-hg@192: @Override franta-hg@145: public Collection getPodniky() { franta-hg@145: Collection vysledek = podnikDAO.getPodniky(); franta-hg@145: return vysledek; franta-hg@100: } franta-hg@100: franta-hg@192: @Override franta-hg@170: public Collection getPodniky(Kategorie kategorie) { franta-hg@170: Collection vysledek = podnikDAO.getPodniky(kategorie); franta-hg@170: return vysledek; franta-hg@170: } franta-hg@170: franta-hg@192: @Override franta-hg@171: public Collection getPodniky(Kurackost kurackost) { franta-hg@171: Collection vysledek = podnikDAO.getPodniky(kurackost); franta-hg@171: return vysledek; franta-hg@171: } franta-hg@171: franta-hg@192: @Override franta-hg@145: public Podnik getPodnik(int id) { franta-hg@145: return podnikDAO.getPodnik(id); franta-hg@142: } franta-hg@142: franta-hg@192: @Override franta-hg@145: @RolesAllowed("opravneny") franta-hg@145: public void zalozPodnik(Podnik p) { franta-hg@173: /** franta-hg@173: * Podnik zakládáme jako neschválený a je potřeba ho dodatečně schválit, franta-hg@173: * to může udělat jen správce a ne uživatel (TODO) franta-hg@173: */ franta-hg@173: p.setSchvaleny(false); franta-hg@145: p.setSpravce(ctx.getCallerPrincipal().getName()); franta-hg@145: podnikDAO.zaloz(p); franta-hg@176: /** TODO: asynchronní počítání */ franta-hg@176: dopocitejSouradnice(p, new Geo()); franta-hg@130: } franta-hg@130: franta-hg@192: @Override franta-hg@145: @RolesAllowed("opravneny") franta-hg@145: public void upravPodnik(Podnik p) { franta-hg@145: podnikDAO.uloz(p); franta-hg@145: } franta-hg@130: franta-hg@192: @Override franta-hg@145: public int dopocitejSouradnice() { franta-hg@145: /** franta-hg@145: * TODO: refaktorovat, změnit datové typy, souřadnice… franta-hg@145: */ franta-hg@145: Geo g = new Geo(); franta-hg@145: int pocetAktualizovanych = 0; franta-hg@145: franta-hg@145: for (Podnik p : podnikDAO.getPodnikyBezSouradnic()) { franta-hg@176: if (dopocitejSouradnice(p, g)) { franta-hg@145: pocetAktualizovanych++; franta-hg@145: } franta-hg@145: } franta-hg@145: franta-hg@145: return pocetAktualizovanych; franta-hg@142: } franta-hg@145: franta-hg@176: /** franta-hg@176: * Na základě adresy (ulice, číslo, město) se pokusí zjistit souřadnice a uloží je k podniku. franta-hg@176: * @param p podnik franta-hg@176: * @param g poskytovatel geografických služeb franta-hg@176: * @return zda se souřadnice podařilo dopočítat franta-hg@176: */ franta-hg@176: private boolean dopocitejSouradnice(Podnik p, Geo g) { franta-hg@176: Souradnice s = g.getSouradnice(p.getUlice() + " " + p.getCisloPopisne() + ", " + p.getMesto()); franta-hg@176: if (s != null) { franta-hg@176: p.setSirka(s.getSirka()); franta-hg@176: p.setDelka(s.getDelka()); franta-hg@176: podnikDAO.uloz(p); franta-hg@176: return true; franta-hg@176: } else { franta-hg@176: return false; franta-hg@176: } franta-hg@176: } franta-hg@176: franta-hg@192: @Override franta-hg@145: public void hlasuj(int podnik, boolean hlas, String ipAdresa) { franta-hg@145: franta-hg@145: podnikDAO.hlasuj(podnik, hlas, ipAdresa); franta-hg@145: } franta-hg@145: franta-hg@192: @Override franta-hg@164: public VysledekHlasovani getVysledekHlasovani(Podnik podnik) { franta-hg@145: return podnikDAO.getVysledekHlasovani(podnik); franta-hg@145: } franta-hg@145: franta-hg@197: private void kontrolaKomentare(Komentar k) throws WikiSyntaxVyjimka, KomentarovaVyjimka { franta-hg@145: k.setUzivatel(ctx.getCallerPrincipal().getName()); franta-hg@145: k.setDatum(null); franta-hg@145: franta-hg@145: if (k.getKomentar() == null || k.getKomentar().length() < 1) { franta-hg@145: throw new KomentarovaVyjimka("Nechceme prázdné komentáře.", null); franta-hg@145: } franta-hg@145: franta-hg@145: /** Převedeme na XML */ franta-hg@145: switch (k.getTyp()) { franta-hg@145: case PROSTY_TEXT: franta-hg@145: k.setKomentar(Komentare.upravProstyText(k.getKomentar())); franta-hg@145: break; franta-hg@197: case MARKDOWN: franta-hg@197: k.setKomentar(wikiSyntaxProcesor.převeď(k.getKomentar(), Komentar.TYP.MARKDOWN)); franta-hg@197: break; franta-hg@145: case TEXY: franta-hg@197: k.setKomentar(wikiSyntaxProcesor.převeď(k.getKomentar(), Komentar.TYP.TEXY)); franta-hg@145: break; franta-hg@145: case XHTML: franta-hg@145: k.setKomentar(Komentare.upravXHTML(k.getKomentar())); franta-hg@145: break; franta-hg@145: } franta-hg@145: /** Přidáme kořenový element */ franta-hg@145: k.setKomentar(Komentare.obal(k.getKomentar())); franta-hg@145: franta-hg@145: /** Zkontrolujeme XML */ franta-hg@145: Komentare.zkontroluj(k.getKomentar()); franta-hg@145: } franta-hg@145: franta-hg@192: @Override franta-hg@145: @RolesAllowed("opravneny") franta-hg@197: public Komentar komentuj(Komentar k, boolean uloz) throws KomentarovaVyjimka, WikiSyntaxVyjimka { franta-hg@145: kontrolaKomentare(k); franta-hg@145: if (uloz) { franta-hg@145: podnikDAO.zaloz(k); franta-hg@145: } franta-hg@145: return k; franta-hg@145: } franta-hg@28: }