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