java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/dao/PodnikDAO.java
author František Kučera <franta-hg@frantovo.cz>
Sat Jan 15 14:27:02 2011 +0100 (2011-01-15)
changeset 173 2b458ac09044
parent 171 e619057bad66
permissions -rw-r--r--
Zobrazování jen schválených podniků, SQL (kategorie, kuřáckost).
     1 package cz.frantovo.nekurak.dao;
     2 
     3 import cz.frantovo.nekurak.dto.Kategorie;
     4 import cz.frantovo.nekurak.dto.Komentar;
     5 import cz.frantovo.nekurak.dto.Kurackost;
     6 import cz.frantovo.nekurak.dto.Podnik;
     7 import cz.frantovo.nekurak.dto.VysledekHlasovani;
     8 import cz.frantovo.superDAO.SuperDAO;
     9 import java.util.Collection;
    10 import java.util.Date;
    11 import java.util.List;
    12 import javax.ejb.LocalBean;
    13 import javax.ejb.Stateless;
    14 import javax.persistence.EntityManager;
    15 import javax.persistence.PersistenceContext;
    16 import javax.persistence.Query;
    17 
    18 /**
    19  *
    20  * @author fiki
    21  */
    22 @Stateless
    23 @LocalBean
    24 public class PodnikDAO extends SuperDAO {
    25 
    26 	@PersistenceContext(unitName = DAO.PU)
    27 	private EntityManager em;
    28 
    29 	private enum SQL {
    30 
    31 		HLASOVANI_INSERT,
    32 		HLASOVANI_SELECT
    33 	}
    34 
    35 	/**
    36 	 * @return schválené podniky
    37 	 */
    38 	public Collection<Podnik> getPodniky() {
    39 		Query dotaz = em.createQuery("FROM " + DAO.t(Podnik.class) + " p WHERE p.schvaleny = true ORDER BY datum DESC");
    40 		return dotaz.getResultList();
    41 	}
    42 
    43 	/**
    44 	 * @return podniky, které nemají souřadnice (null, null), včetně neschválených
    45 	 */
    46 	public Collection<Podnik> getPodnikyBezSouradnic() {
    47 		Query dotaz = em.createQuery("FROM " + DAO.t(Podnik.class) + " p WHERE sirka IS NULL AND delka IS NULL");
    48 		return dotaz.getResultList();
    49 	}
    50 
    51 	/**
    52 	 * @param kategorie jedna kategorie
    53 	 * @return podniky určité kategorie (jen schválené)
    54 	 */
    55 	public Collection<Podnik> getPodniky(Kategorie kategorie) {
    56 		Query dotaz = em.createQuery("SELECT p FROM " + DAO.t(Podnik.class) + " p INNER JOIN p.kategorie k WHERE k = :kategorie AND p.schvaleny = true ORDER BY datum DESC");
    57 		dotaz.setParameter("kategorie", kategorie);
    58 		return dotaz.getResultList();
    59 	}
    60 
    61 	public Collection<Podnik> getPodniky(Kurackost kurackost) {
    62 		Query dotaz = em.createQuery("FROM " + DAO.t(Podnik.class) + " p WHERE p.kurackost = :kurackost AND p.schvaleny = true ORDER BY datum DESC");
    63 		dotaz.setParameter("kurackost", kurackost);
    64 		return dotaz.getResultList();
    65 	}
    66 
    67 
    68 	public Podnik getPodnik(int id) {
    69 		return em.find(Podnik.class, id);
    70 	}
    71 
    72 	public void zaloz(Podnik p) {
    73 		if (p.getDatum() == null) {
    74 			p.setDatum(new Date());
    75 		}
    76 
    77 		em.persist(p);
    78 	}
    79 
    80 	public void uloz(Podnik p) {
    81 		if (p.getDatum() == null) {
    82 			p.setDatum(new Date());
    83 		}
    84 
    85 		em.merge(p);
    86 	}
    87 
    88 	public void zaloz(Komentar k) {
    89 		if (k.getDatum() == null) {
    90 			k.setDatum(new Date());
    91 		}
    92 
    93 		em.persist(k);
    94 	}
    95 
    96 	/**
    97 	 * Zaznamená hlas uživatele, zda se v podniku má nebo nemá kouřit
    98 	 * @param podnik podnik o kterém se hlasuje
    99 	 * @param hlas true = kouřit | false = nekouřit
   100 	 * @param ipAdresa identifikujeme pomocí ní uživatele
   101 	 */
   102 	public void hlasuj(int podnik, boolean hlas, String ipAdresa) {
   103 		Query insert = em.createNativeQuery(getSQL(SQL.HLASOVANI_INSERT));
   104 		insert.setParameter("podnik", podnik);
   105 		insert.setParameter("hlas", hlas);
   106 		insert.setParameter("ip_adresa", ipAdresa);
   107 		insert.executeUpdate();
   108 	}
   109 
   110 	public VysledekHlasovani getVysledekHlasovani(Podnik podnik) {
   111 		VysledekHlasovani vysledek = new VysledekHlasovani(podnik);
   112 		Query select = em.createNativeQuery(getSQL(SQL.HLASOVANI_SELECT));
   113 		select.setParameter("podnik", podnik.getId());
   114 		List<Object[]> vysledekDotazu = select.getResultList();
   115 
   116 		for (Object[] radek : vysledekDotazu) {
   117 			/** Transponujeme výsledek dotazu */
   118 			if ((Boolean) radek[0]) {
   119 				vysledek.setHlasuAno((Integer) radek[1]);
   120 			} else {
   121 				vysledek.setHlasuNe((Integer) radek[1]);
   122 			}
   123 		}
   124 
   125 		return vysledek;
   126 	}
   127 }