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