Sunday 19 May 2013

IS2 - JSP Pages and Servlet - Examples

Napomena!
JSP stranice zbog ustede na prostoru ubacicemo samo tag "body", jedan primjer zaglavlja i kod nece biti fino formatiran

Iz servleta cemo izbaciti import i dio generickog koda

Zaglavlje JSP stranica...
If you want to translate this code to HTML 5 you need to write Docture type like this <!DOCTYPE html> 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" %>
    <%@ page isELIgnored="false"  %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>

ZADUZENJE CLANA JSP

 <body>
<c:if test="${!empty clan}">
<form action="/library/GetSlobodniPrimerciZaNaslov">
<table>
<tr><td>Clanski broj:</td><td>${clan.clanskiBroj}</td></tr>
<tr><td>Ime:</td><td>${clan.ime}</td></tr>
<tr><td>Prezime:</td><td>${clan.prezime}</td></tr>
<tr><td>Kategorija:</td><td>${clan.kategorija.nazivkategorije}</td></tr>
</table>
<br><br><br>
Naslov knjige za zaduzenje: <input name="naslovFind" type="text"> <input type="submit" value="Nadji">
</form>
<c:if test="${!empty primerci}">
<table>
<thead><td>Naslov</td><td>Autor</td><td>Godina izdanja</td><td>Inventarni broj</td><td>Zaduzi</td></thead>
<c:forEach var="primerak" items="${primerci}">
<tr><td>${primerak.knjiga.naslov}</td><td>${primerak.knjiga.autor}</td><td>${primerak.knjiga.godinaIzdanja}</td>
<td>${primerak.invBroj}</td><td><a href="/library/ZaduziClana?invBroj=${primerak.invBroj}">Zaduzi</a></td></tr>
</c:forEach </table> </c:if> </c:if> </body>

RAZDUZI CLANA JSP

<body>
<c:if test="${!empty clan}">
<table>
<tr><td>Clanski broj:</td><td>${clan.clanskiBroj}</td></tr>
<tr><td>Ime:</td><td>${clan.ime}</td></tr>
<tr><td>Prezime:</td><td>${clan.prezime}</td></tr>
<tr><td>Kategorija:</td><td>${clan.kategorija.nazivkategorije}</td></tr>
</table> <br> Nerazduzena zaduzenja <br><br>
<table border=1>
<thead><td>Datum zaduzenja</td><td>Inventarni broj</td><td>Naslov knjige</td></thead>
<c:forEach var="zaduzenje" items="${clan.zaduzenjes}" >
<c:if test="${empty zaduzenje.datumVracanja}">
<tr><td>${zaduzenje.datumZaduzenja}</td><td>${zaduzenje.primerak.invBroj}</td>
<td>${zaduzenje.primerak.knjiga.naslov}</td><td><a href="/library/RazduziClana?idZad=${zaduzenje.id}">Razduzi</a></td></tr>
</c:if> </c:forEach> </table> </c:if> </body>

FIND CLANA JSP

<body>
<form action="/library/ReturnClanForClanskiBroj?action=zaduzi" method="post">
Clanski broj: <input name="clanskiBroj" type="text">
<input type="submit">
</form> </body>

SHOW SVE KNJIGE JSP

<body>
<table border=1>
<thead><td>Naslov</td><td>Autor</td><td>Izdavac</td><td>Godina</td></thead>
<c:forEach var="knjiga" items="${sveKnjige}">
<tr><td>${knjiga.naslov}</td>
    <td>${knjiga.autor}</td>
    <td>${knjiga.izdavac}</td>
    <td>${knjiga.godinaIzdanja}</td></tr>
</c:forEach> </table> </body>

PRINT MESSAGE JSP

<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head> <body>
${poruka}
</body> </html>

SHOW ZADUZENJA JSP

<body> <table>
    <tr><td>ID Clana</td><td><input value="${clbroj}" name="id2" type="text"></td></tr>
    <tr><td>Ime</td><td><input value="${ime}" name="ime" type="text"></td></tr>
    <tr><td>Prezime</td><td><input value="${prz}" name="prezime" type="text"></td></tr>
</table> ${poruka} <table>
    <tr><td>Inv. Broj</td><td>Naslov</td><td>Autor</td><td>Razduzi</td><tr>
    <c:forEach var="zad" items="${zaduzenja}">
    <tr><td><div>${zad.primerak.invBroj}</div></td><td><div>${zad.primerak.knjiga.naslov}</div></td><td><div>${zad.primerak.knjiga.autor}</div></td><td><a href="/library/RazduziClana?id=${zad.id}">Link</a></td><tr>
    </c:forEach> </table> </body>


SERVLET


GET SVE KNJIGE / GET BOOKS

@WebServlet("/GetSveKnjigeServlet")

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        KnjigaManager kmg = new KnjigaManager();
        List<Knjiga> sveKnjige = kmg.listKnjige();
        request.setAttribute("sveKnjige", sveKnjige);
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/izvestaji/prikaziSveKnjige.jsp");
        rd.forward(request, response);       
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

RAZDUZI CLANA

@WebServlet("/RazduziClana")

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String idZaduzenja = request.getParameter("idZad");
        ZaduzenjeManager zm = new ZaduzenjeManager();
        Zaduzenje z = zm.getZaduzenjeForId(Integer.parseInt(idZaduzenja));       
        boolean ok = zm.razduziZaduzenje(z);
        ClanManager cmg = new ClanManager();
        Clan clan = cmg.getClanAndZaduzenjesForId(z.getClan().getClanskiBroj());
        request.setAttribute("clan", clan);
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/zaduzenja/RazduzivanjeClana.jsp");
        rd.forward(request, response);
  }



SNIMANJE CLANA / SAVE CLAN (USER)

 @WebServlet("/SnimanjeClanaServlet")

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String clanskiBroj = request.getParameter("clanskiBroj");
        String ime = request.getParameter("ime");
        String prezime = request.getParameter("prezime");
        String adresa = request.getParameter("adresa");
        //datumi
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String datumRodjenjaStr = request.getParameter("datumRodjenja");
        String datumUpisaStr = request.getParameter("datumUpisa");
        String idKategorije = request.getParameter("kategorija");
        KategorijaManager kmg = (KategorijaManager)request.getSession().getAttribute("kategorijaManager");
           String poruka;
            try {
            Date datumRodjenja = sdf.parse(datumRodjenjaStr);
            Date datumUpisa = sdf.parse(datumUpisaStr);
            ClanManager cmg = new ClanManager();
            Kategorija kat = kmg.getKategorijaForId(Integer.parseInt(idKategorije));
            boolean ok = cmg.saveClan(Integer.parseInt(clanskiBroj), ime, prezime, adresa, datumRodjenja, datumUpisa, kat);
            if(ok)
                poruka = "Clan je uspesno sacuvan.";
            else
                poruka = "Doslo je do greske. Clan nije sacuvan.";           
          } catch (ParseException e) {
            poruka="Clan nije sacuvan. Neispravan format datuma.";
        }catch(NumberFormatException ex){
            poruka = "Clan nije sacuvan. Neispravan format broja.";
        }
        request.setAttribute("poruka", poruka);
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/unos/unosClana.jsp");
        rd.forward(request, response);
    }

SNIMANJE KNJIGE / SAVE BOOK IN DATABASE

@WebServlet("/SnimanjeKnjigeServlet")

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String idKnjige = request.getParameter("idKnjige");
        String naslov = request.getParameter("naslov");
        String autor = request.getParameter("autor");       
        String izdavac = request.getParameter("izdavac");
        String godinaIzdanja = request.getParameter("godinaIzdanja");
        KnjigaManager kmg = new KnjigaManager();
        Knjiga k = kmg.createAndStoreKnjiga(Integer.parseInt(idKnjige), naslov, autor, godinaIzdanja, izdavac);       
        String forwardPageURL= "/unos/unosKnjigeJSP.jsp";;
        if(k!=null){
            request.setAttribute("poruka", "Knjiga je uspesno sacuvana.");           
          }else{           
            request.setAttribute("poruka","Doslo je do greske, knjiga nije sacuvana.");
          }
         RequestDispatcher rd = getServletContext().getRequestDispatcher(forwardPageURL);
        rd.forward(request, response);   
        }

UNOS PRIMJERKA / INSERT NEW COPY OF SINGLE BOOK

@WebServlet("/UnesiPrimjerak")

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String broj = request.getParameter("broj");
        int idK = (int) request.getSession().getAttribute("idKnjige");
        int br = Integer.parseInt(broj);
        KnjigaManager k = new KnjigaManager();
        List p = k.addPrimeraks(idK, br);
        String poruka = "";
        if (p.size() > 0) {
            poruka = "Success...";
        }
        else {
            poruka = "Error";
        }
        request.setAttribute("poruka", poruka);
        request.setAttribute("lista", p);
        request.setAttribute("brojInv", p.size());
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/UnosPodataka/Izvjestaj.jsp");
        rd.forward(request, response);
    }



NOVI KOD


 JavaBEAN - Vraca sve kategorije / GET ALL CATEGORIES

public class SveKategorijeBean  {
    private List<Kategorija> sveKategorije = null;
    public SveKategorijeBean() {
        try {
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            sveKategorije = session.createQuery("from Kategorija").list();
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }    public List<Kategorija> getSveKategorije() {
        return sveKategorije;
    } public void setSveKategorije(List<Kategorija> sveKategorije) {
        this.sveKategorije = sveKategorije;
    }
}

PRIMJER HTML - 5 Komponenta za DATUM ujedno i UNOS CLANA JSP stranica, Poziv SveKateforijeBEAN klasa koju smo napravili da bi njenim pozivom vec iz baze izvadili sve kategorije...
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Unos Clana</title>
</head>
<jsp:useBean id="sveKategorije" class="rs.ac.uns.dmi.is2.managers.SveKategorijeBean" scope="session"></jsp:useBean>
<body>
<form action="../SnimajClana" method="post">
<table>
    <tr><td>Ime</td><td><input name="ime" type="text"></td></tr>
    <tr><td>Prezime</td><td><input name="prezime" type="text"></td></tr>
    <tr><td>Adresa</td><td><input name="adresa" type="text"></td></tr>
    <tr><td>Kategorija</td>
        <td><select name="Kategorije">
        <c:forEach items="${sveKategorije.sveKategorije}" var="kat">
        <option value="${kat.idkategorije}">${kat.nazivkategorije} </option>
        </c:forEach>
        </select></td></tr>
    <tr><td>Datum upisa</td><td><input type="date" name="datumUpisa"></input> </td></tr>
    <tr><td>Datum rodjenja</td><td><input type="date" name="datumRodjenja"></input> </td></tr>
</table>
<input type="submit" value="Sacuvaj">
</form> ${poruka} </body> </html>


 INSERT NEW BOOK JSP

<body>
<form action="../SnimanjeKnjige" method="post">
    <table> <tr>
    <td>Naslov</td><td><input name="naslov" type="text"></td></tr>
    <tr><td>Autor</td><td><input name="autor" type="text"></td></tr>
    <tr><td>Izdavac</td><td><input name="izdavac" type="text"></td></tr>
    <tr><td>Godina Izdanja</td><td><input name="godinaIzdanja" type="text"></td></tr>
    </table>    <input type="submit" value="Sacuvaj">
</form> </body>

 SERVLET

AZURIRAJ CLANA Servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String idString = request.getParameter("id");
        int id = Integer.parseInt(idString);
        ClanManager cr = new ClanManager();
        Clan c = cr.getClan(id);
        request.setAttribute("clbroj", id);
        request.setAttribute("clan", c);
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/UnosPodataka/AzurirajClana.jsp");
        rd.forward(request, response);
    }

Example using SESSION! // EXAMPLE HOW TO USE SESSION

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String idString = request.getParameter("id");
        int clBr = Integer.parseInt(idString);
        ClanManager cm = new ClanManager();
        List<Zaduzenje> lista = cm.getNerazduzenaZaClanskiBroj(clBr);
        Clan c = cm.getClan(clBr);
        request.getSession().setAttribute("clbroj", clBr);
        request.getSession().setAttribute("ime", c.getIme());
        request.getSession().setAttribute("prz", c.getPrezime());   
        request.setAttribute("zaduzenja", lista);
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/UnosPodataka/PrikazZaduzenja.jsp");
        rd.forward(request, response);     
    }

UPDATA CLANA // UPDATE USER

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String cl = request.getParameter("id2");
        int clanskiBroj = Integer.parseInt(cl);
        String Ime = request.getParameter("ime");
        String Prezime = request.getParameter("prezime");
        String Adresa = request.getParameter("adresa");
        String kat = request.getParameter("Kategorije");
        int br = Integer.parseInt(kat);
        String datumcic = request.getParameter("datumRodjenja");
        System.out.println(datumcic);
        Date datum1 = null;
        try {
            datum1 = sdf.parse(datumcic);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        ClanManager cc = new ClanManager();
        Kategorija kategorija = cc.getKategorija(br);
        int rez = cc.updateClan(clanskiBroj, Ime, Prezime, Adresa, kategorija, datum1);
        String poruka = "";
        if (rez == 0) {
            poruka = "Clan nije updejtovan";
        }
        else {
            poruka = "Clan je updejtovan!";
        }
        request.setAttribute("poruka", poruka);
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/UnosPodataka/AzurirajClana.jsp");
        rd.forward(request, response);
    }


COMBO BOX!!! Profesorica je rekla da moze da dodje nesto da moramo da stavimo npr. da je nesto oznaceno u Combo Box-u i evo jedan primjer JSP stranice koja to radi...
Pitamo da li je to sto nama treba ako jeste postavi ga na selected.

<body>
<form action="/library/AzurirajClana" method="post">
<table>
<tr><td>ID Clana</td><td><input name="id" type="text"></td></tr>
</table>
<input type="submit" value="Uzmi Clana">
</form>
<form action="/library/UpdateClana" method="post">
<table>
    <tr><td>ID Clana</td><td><input value="${clbroj}" name="id2" type="text"></td></tr>
    <tr><td>Ime</td><td><input value="${clan.ime }" name="ime" type="text"></td></tr>
    <tr><td>Prezime</td><td><input value="${clan.prezime }" name="prezime" type="text"></td></tr>
    <tr><td>Adresa</td><td><input value="${clan.adresa }" name="adresa" type="text"></td></tr>
    <tr><td>Kategorija</td>
        <td><select name="Kategorije">
        <c:forEach items="${sveKategorije.sveKategorije}" var="kat">
        <c:choose>
              <c:when test="${clan.kategorija.idkategorije == kat.idkategorije}">
                <option selected="selected" value="${kat.idkategorije}">${kat.nazivkategorije} </option>
              </c:when>
              <c:otherwise>
                  <option value="${kat.idkategorije}">${kat.nazivkategorije} </option>
              </c:otherwise>
        </c:choose>
        </c:forEach>
        </select></td></tr>

    <tr><td>Datum upisa</td><td><input value="${clan.datumUpisa}" type="date" name="datumUpisa"></input> </td></tr>
    <tr><td>Datum rodjenja</td><td><input value="${clan.datumRodjenja}" type="date" name="datumRodjenja"></input> </td></tr>
</table>
<input type="submit" value="Sacuvajte Clana">
</form>
${poruka}
</body>




Novi DIO



<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="/library/GetZaduzenje?by=invBroj">
<input type="text" name="invBroj">
<input type="submit" value="Ucitaj">
</form>
<c:if test="${!empty zaduzenja}">
<table border=1>
<thead><td>Datum zaduzenja</td><td>Inventarni broj</td><td>Naslov</td><td>Ime i prezime</td></thead>
<c:forEach var="zad" items="${zaduzenja}">
<tr><td>${zad.datumZaduzenja}</td><td>${zad.primerak.invBroj}</td><td>${zad.primerak.knjiga.naslov}</td>
<td>${zad.clan.ime} ${zad.clan.prezime}</td></tr>
</c:forEach>
</table>
<br><br>
<form action="/library/RazduziZaduzenja">
<input type="text" name="datumRazduzenja" value='<fmt:formatDate pattern="yyyy-MM-dd" value="<%= new java.util.Date() %>"/>'>
<input type="submit" value="Razduzi">
</form>
</c:if>
</body>
</html>


JOS JEDAN


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isELIgnored="false"%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <jsp:useBean id="kategorijaManager" class="rs.ac.uns.dmi.is2.manager.KategorijaManager" scope="session"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="/library/ReturnClanForClanskiBroj?action=promenaKategorije" method="post">
Clanski broj: <input name="clanskiBroj" type="text">
<input type="submit" value="Nadji clana">
</form>
Selektovani clanovi: <br><br>
<table border=1>
<thead><td>Ime</td><td>Prezime</td><td>Kategorija</td></thead>
<c:forEach var="clan" items="${clanovi}">
<tr><td>${clan.ime}</td><td>${clan.prezime}</td><td>${clan.kategorija.nazivkategorije}</td></tr>
</c:forEach>
</table>
<br>
Nova kategorija: <br>
<form action="/library/PromenaKategorija">
<select name="kategorija">
<c:forEach var="kat" items="${kategorijaManager.sveKategorije}">
<option value="${kat.idkategorije}" >${kat.nazivkategorije}</option>
</c:forEach>
</select>
<input type="submit" value="Promeni">
</form>

</body>
</html>


JOS JEDAN


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>  
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sve knjige</title>
</head>
<body>
<table border=1>
<thead><td>Naslov</td><td>Autor</td><td>Izdavac</td><td>Godina</td></thead>
<c:forEach var="knjiga" items="${sveKnjige}">
<tr><td>${knjiga.naslov}</td>
<td>${knjiga.autor}</td>
<td>${knjiga.izdavac}</td>
<td>${knjiga.godinaIzdanja}</td></tr>
</c:forEach>
</table>
</body>
</html>

NOVI


<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
Primerci:<br>
<c:forEach var="primerak" items="${knjiga.primeraks}">
${primerak.invBroj}<br>

</c:forEach>

</body>
</html>

UNOS PRIMJERKA


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Unos primeraka knjige</title>
</head>
<body>
${message}
<table>
<tr><td>Naslov:</td><td>${knjiga.naslov}</td></tr>
<tr><td>Autor:</td><td>${knjiga.autor}</td></tr>
<tr><td>Izdavanje:</td><td>${knjiga.izdavac} (${knjiga.godinaIzdanja})</td></tr>
</table>
<br>

<form action="/library/DodajPrimerakKnjiga" method="post">
Dodaj primerak <br><br>
Inventarni broj <input name="invBroj" type="text">
<input type="submit" value="Dodaj">
</form>
<br><br>
<%@ include file="../izvestaji/prikaziPrimerkeKnjige.jsp" %>
</body>
</html>

NADJI CLANA



<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isELIgnored="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="/library/ReturnClanForClanskiBroj?action=${param.action}" method="post">
Clanski broj: <input name="clanskiBroj" type="text">
<input type="submit">
</form>

</body>
</html>


Servlet for Jasper reports!

// This is a list of values that I want to send to servlet
List<Radnik> radnici = RadnikManager.getSviRadnici();
        HashMap<String, Object> params = new HashMap<String, Object>();
        ServletContext context = this.getServletContext();       
        String reportsDirectory = context.getRealPath("/") + "/WEB-INF/classes/reports/";
        String jasperFile = reportsDirectory+"SviRadnici.jasper";
        JasperPrint jasperPrint = null;
        try{
        if(radnici.size()==0){ // ask is list have nothing inside
            JREmptyDataSource dataSource = new JREmptyDataSource();
            jasperPrint = JasperFillManager.fillReport(jasperFile,params, dataSource);
        }else{ // create a repoert
            JRDataSource dataSource = new JRBeanCollectionDataSource(radnici);
            jasperPrint = JasperFillManager.fillReport(jasperFile,params, dataSource);
        }
        ServletOutputStream servletOutputStream = response.getOutputStream();
// this will create pdf report
        JRPdfExporter pdfExporter = new JRPdfExporter();
           
        pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        pdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,servletOutputStream);
           
           
        pdfExporter.exportReport();
           
            response.setContentType("application/pdf");
           
            servletOutputStream.flush();
            servletOutputStream.close();
        }catch(Exception e){
            e.printStackTrace();
        }



Monday 1 April 2013

IS2 - HQL Query and Criteria - Examples


HQL Query and Criteria - Examples


HQL doc. - dokumentacija

two examples - dva primjera

Criterium doc. - kriterijumi dokumentacija

Criteria - kriterija


Vrati zaduzene Primjerke

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
       
            List<Primerak> lista = new ArrayList<Primerak>();
            Query upit = sesija.createQuery("select p from Primerak as p join p.knjiga as k join p.zaduzenjes as z"
            + " where z.datumVracanja is null");
            lista = upit.list();
            sesija.getTransaction().commit();

List<Knjiga> getKnjigeForZaduzenjeKategorija(Date od, Date doK, Kategorija kat)

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
       
            List<Knjiga> lista = new ArrayList<Knjiga>();
           
            Query upit = sesija.createQuery("select k from Knjiga as k " +
                    "join k.primeraks as p join p.zaduzenjes as z where z.clan.kategorija = :kat " +
                    "and z.datumZaduzenja >= :od and z.datumZaduzenja <= :doK");
            upit.setParameter("kat", kat);
            upit.setParameter("od", od);
            upit.setParameter("doK", doK);
            lista = upit.list();
            sesija.getTransaction().commit();

List<Knjiga> findKnjigeby (String izdavac, String godinaIzdanja)

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
            List<Knjiga> lista = new ArrayList<Knjiga>();
            Criteria crit = sesija.createCriteria(Knjiga.class);
            if (izdavac != null){
                crit.add(Restrictions.like("izdavac", izdavac).ignoreCase());
            }
            if (godinaIzdanja != null){
                crit.add(Restrictions.like("godinaIzdanja", godinaIzdanja).ignoreCase());
            }
            lista = crit.list();
            sesija.getTransaction().commit();



List<Clan> getPrezaduzeniClanovi(int maxZaduzenje)

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
       
            List<Clan> lista = new ArrayList<Clan>();
            Query upit = sesija.createQuery("select c from Clan c join c.zaduzenjes as z " +
                    "where z.datumVracanja is null " +
                    "group by c having count(z) > :maxZ");
           
            upit.setInteger("maxZ", maxZaduzenje);
            lista = upit.list();
            sesija.getTransaction().commit();

List<Zaduzenje> getNerazduzenaZaClanskiBroj(int clanskiBroj)

Session sesija = HibernateUtil.getSessionFactory().getCurrentSession();
            sesija.beginTransaction();
       
            List<Zaduzenje> lista = new ArrayList<Zaduzenje>();
            Query upit = sesija.createQuery("from Zaduzenje z where z.datumVracanja is null and " +
             "z.clan.clanskiBroj = :clbroj");
            upit.setParameter("clbroj", clanskiBroj);
            lista = upit.list();
            sesija.getTransaction().commit();


         * TODO Zadatak 3 (10 poena)
         * Implementirati operaciju koja vraca sve knjige
         * koje su u periodu @param datumOd do @param datumDo
         * zaduzivane vise od @param minBrZaduzenja puta

       
        public List<Knjiga> getKnjigeBrojZaduzenja(Date datumOd, Date datumDo, int minBrZaduzenja){           
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            Query q = session.createQuery("select k from Knjiga k join k.primeraks p join p.zaduzenjes z " +
                    "where z.datumZaduzenja > :datumOd and z.datumZaduzenja < :datumDo group by k having count(z)>:minBr");
           
            q.setDate("datumOd", datumOd);
            q.setDate("datumDo", datumDo);
            q.setInteger("minBr", minBrZaduzenja);
            List<Knjiga> knjige = q.list();      
            session.getTransaction().commit();
            return knjige;
        }

*TODO Zadatak 1 (5 poena)
     * Implementirati operaciju koja pronalazi clana sa zadatim clanskim brojem
     * i zaduzuje ga za primerak @param p
     * Operacija treba da vrati true ako je clan zaduzen,
     * odnosno false ako nije

   
    public boolean zaduziClana(int clanskiBroj, Primerak p){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Clan c = (Clan) session.get(Clan.class, clanskiBroj);
        session.getTransaction().commit();       
        if(c==null || !isSlobodanPrimerak(p.getInvBroj())) return false;
        session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Zaduzenje z = new Zaduzenje();
        z.setId(446);
        z.setClan(c);
        z.setPrimerak(p);
        z.setDatumZaduzenja(new Date());
        session.save(z);   
        session.getTransaction().commit();  
        return true;
    }
   

     * TODO Zadatak 2 (5 poena)
     * @param invBroj
     * @return


    public boolean isSlobodanPrimerak(String invBroj){
           Session session = HibernateUtil.getSessionFactory().getCurrentSession();
           session.beginTransaction();
           Query q = session.createQuery("from Zaduzenje z where z.primerak.invBroj like :invBroj and z.datumVracanja is null");
           q.setString("invBroj",invBroj);
           if(q.list().isEmpty()){
               session.getTransaction().commit();
               return true; 
           }else{
               session.getTransaction().commit();
               return false;
           }          
       }


     * Vraca sve clanove cije prezime je jednako  @param prezime
     * i koji su rodeni u periodu @param datumOd @param datumDo
     * @return

   
    public List<Clan> getClanoviPrezimeRodjenje(String prezime, Date datumOd, Date datumDo){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Criteria criteria = session.createCriteria(Clan.class);
        criteria.add(Restrictions.like("prezime", prezime));
        criteria.add(Restrictions.between("datumRodjenja", datumOd, datumDo));
       
        List<Clan> clanovi = criteria.list();
        session.getTransaction().commit();
        return clanovi;       
    }
   

     * Vraca clanove koji imaju nerazduzenih zaduzenja
     * pre @param datumDo
     * @return


      public List<Clan> getZaduzeniClanovi(Date datumDo){
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery("select c from Clan c join c.zaduzenjes z where " +
                "z.datumZaduzenja< :datumDo and z.datumVracanja is null");
        query.setDate("datumDo", datumDo);
        List<Clan> clanovi = query.list();       
        session.getTransaction().commit();   
        return clanovi;
    }
   

     * TODO Zadatak 2 (10 poena)
     * Implementirati operaciju koja vraca sve clanove kategorije
     * @param kat koji su u periodu @param datumOd do @param datumDo
     * imali vise od  @param minBrZaduzenja zaduzenja

   
    public List<Clan> getClanoviBrojZaduzenja(Kategorija kat, Date datumOd, Date datumDo, int minBrZaduzenja){      
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery("select c from Clan c join c.zaduzenjes z where c.kategorija = :kat " +
                "and z.datumZaduzenja> :d1 and z.datumZaduzenja < :d2 group by c having count(z) > :min ");
        query.setEntity("kat", kat);
        query.setDate("d1", datumOd);
        query.setDate("d2", datumDo);
        query.setInteger("min", minBrZaduzenja);
        List<Clan> result = query.list();       
        return result;
    }


* TODO Zadatak 1 (10 poena)
     * Implementirati operaciju koja pronalazi primerak sa inventarnim brojem
     * @param invBroj
     * i zaduzuje ga za clana @param c
     * pri tome treba voditi racuna
     * da primerak ne moze biti dva puta zaduzen i
     * da clan ne moze imati vise od tri nerazduzena zaduzenja
     * Operacija treba da vrati true ako je clan zaduzen,
     * odnosno false ako nije

   
    public boolean zaduziClana(String invBroj, Clan c){       
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Primerak p = (Primerak)session.get(Primerak.class, invBroj);
        if(p==null){
            session.getTransaction().commit();
            return false;
        }
        Query queryZaduzenjaPrimerak = session.createQuery(
                        "select z from Zaduzenje z where z.primerak = :primerak and z.datumVracanja is null");
        queryZaduzenjaPrimerak.setEntity("primerak", p);       
        Query queryZaduzenjaClan = session.createQuery(
                        "select z from Zaduzenje z where z.clan = :clan and z.datumVracanja is null");
        queryZaduzenjaClan.setEntity("clan", c);       
        if((queryZaduzenjaPrimerak.list().size() > 0) || (queryZaduzenjaClan.list().size() > 3)){
            session.getTransaction().commit();
            return false;
        }       
        else{           
            Zaduzenje zaduzenje = new Zaduzenje();
            zaduzenje.setId(9990);
            zaduzenje.setPrimerak(p);
            zaduzenje.setClan(c);
            zaduzenje.setDatumZaduzenja(new Date());           
            session.saveOrUpdate(zaduzenje);
            session.getTransaction().commit();
            return true;
        }   
    }


      * TODO 2. (12 poena) Implementirati operaciju
* koja vraca sve clanove koji su knjigu sa istim autorom i naslovom
* zaduzili vise od @param brZaduzenja puta

public static List<Clan> getClanoviForBrojZaduzenja(int brZaduzenja){
try{
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery("select c from Clan c join c.zaduzenjes z " +
                                                                        "group by c,z.primerak.knjiga.naslov,z.primerak.knjiga.autor having count(z) > :min ");
        query.setInteger("min", brZaduzenja);
        List<Clan> result = query.list();
        return result;
}catch(Exception e){
        return null;
}
}

* TODO 1. (8 poena) Koriscenjem upita prema kriterijumu
* implementirati operaciju koja vraca sve knjige koje imaju
* primerke i ciji naslov sadrzi podstring @param naslov deo
* Rezultujuce knjige sortirati po naslovu

public static List<Knjiga> getKnjigeZaDeoNaslova(String naslovDeo){
try{
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Criteria crit = session.createCriteria(Knjiga.class);
        crit.add(Restrictions.like("naslov", naslovDeo, MatchMode.ANYWHERE));
        crit.add(Restrictions.sizeGt("primeraks", 0));
        List<Knjiga> knjigas = crit.list();
        session.getTransaction().commit();
        return knjigas;
}catch(Exception e){
        return null;
}
}


List<Primerak> list = getZaduzeniPrimerci();
        for (Primerak p:list){
            System.out.println(p.getInvBroj() + " " + p.getKnjiga().getNaslov());
        }



        <set name="primeraks" table="PRIMERAK" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="ID_KNJIGE" />
            </key>
            <one-to-many class="rs.ac.uns.dmi.is2.dbmodel.Primerak" />
        </set>




<many-to-one name="knjiga" class="rs.ac.uns.dmi.is2.dbmodel.Knjiga" fetch="select" lazy="false">
            <column name="ID_KNJIGE" />
        </many-to-one> 



PARSIRANJE DATUMA 


 static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    static Date date = new Date();
    static Date datumod;
    static Date datumdo;



try{
            datumod = sdf.parse("2013-03-03");
            datumdo = sdf.parse("2013-03-12");
        }catch(Exception e){
            e.printStackTrace();
        }




public static int updateClan(int clanskiBroj, String ime, String prezime, String adresa, Kategorija kategorija, Date datum1){

try{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

Clan c = new Clan();
c.setClanskiBroj(clanskiBroj);
c.setIme(ime);
c.setPrezime(prezime);
c.setAdresa(adresa);
c.setDatumRodjenja(datum1);
c.setDatumUpisa(date);
c.setKategorija(kategorija);
c.setZaduzenjes(null);
session.save(c);
session.getTransaction().commit();
return clanskiBroj;
} catch(Exception e) {
e.printStackTrace();
return 0;
}
}



public static int createAndStoreClan(String ime, String prezime, String adresa, Kategorija kategorija, Date datum1){

try{
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

Clan c = new Clan();
c.setIme(ime);
c.setPrezime(prezime);
c.setAdresa(adresa);
c.setDatumRodjenja(datum1);
c.setDatumUpisa(date);
c.setKategorija(kategorija);
c.setZaduzenjes(null);
Integer clanskiBroj = (Integer) session.save(c);
session.getTransaction().commit();
return clanskiBroj;
} catch(Exception e) {
e.printStackTrace();
return 0;
}
}

KOLOKVIJUM ODRZAN 04.02.2013 GRUPA 1
Resenje prvog zadatka ne radi ako budete pokusavali da pokrenete u eclipse-u jer se to sada radi na drugi nacin ali je profesorica prihvatila jer nam to ona nije pokazala kako treba ustvari, greska je boldirana i podvucena.


     * TODO 1. (8 poena) Koriscenjem upita prema kriterijumu implementirati
     * operaciju koja vraca sva razduzena zaduzenja za koje vazi barem jedan od
     * dva uslova: - zaduzenje se odnosi na knjige koja u naslovu sadrze @param
     * naslovDeo - zaduzenje je izvrseno u periodu @param datumOd - @param
     * datumDo


    public static List<Zaduzenje> getZaduzenjaZaNaslov(String naslovDeo,
            Date datumOd, Date datumDo) {

        try {
            Session session = HibernateUtil.getSessionFactory()
                    .getCurrentSession();
            session.beginTransaction();

            List<Zaduzenje> lista = new ArrayList<Zaduzenje>();

            Criteria crit = session.createCriteria(Zaduzenje.class);

            Criterion lhs = Restrictions.like("primerak.knjiga.naslov",
                    naslovDeo, MatchMode.ANYWHERE);



            Criterion rhs = Restrictions.between("datumZaduzenja", datumOd,
                    datumDo);

            crit.add(Restrictions.isNotNull("datumVracanja"));
            crit.add(Restrictions.or(lhs, rhs));
           
           
            lista = crit.list();

            if (lista.isEmpty()) {
                System.out.println("Rezultat upita je prazan!");
                return null;
            }

            session.getTransaction().commit();
            return lista;
        } catch (Exception e) {
            System.out.println("Doslo je do greske!");
            e.printStackTrace();
            return null;
        }

    }

     * TODO 2. (12 poena) Implementirati operaciju koja vraca sve primerke koji
     * su istog dana bili greskom zaduzeni vise puta


    public static List<Primerak> pronadjiGreskomZaduzene() {

        try {
            Session session = HibernateUtil.getSessionFactory()
                    .getCurrentSession();
            session.beginTransaction();

            List<Primerak> result = new ArrayList<Primerak>();

            Query query = session
                    .createQuery("select p from Primerak p join p.zaduzenjes z where z.datumVracanja is null"
                            + " or (z.datumZaduzenja != z.datumVracanja)"
                            + " group by p, z.datumZaduzenja, z.datumVracanja having count(z) > 1");
           
           
            result = query.list();

            if (result.isEmpty()) {
                System.out.println("Rezultat upita je prazan!");
                return null;
            }

            return result;

        } catch (Exception e) {
            System.out.println("Doslo je do greske!");
            e.printStackTrace();
            return null;
        }

    }

Kolokvijum odrzan 05.04.2013 god, zadaci su bez resenja to je za vjezbu ukoliko ko bude isao na porpavni ako ko ima resenja neka postavi u komentaru dole...



* TODO 2. (14 poena)

* Implementirati operaciju
* koja zaduzuje clana sa clanskim brojem @param clanskiBroj
* za vise primeraka datih u listi @param invBrojevi pri tom izvrsiti sledece provere:
*
* - clan kategorije student moze zaduziti maksimalno 5 primeraka
* - clanovi ostalih kategorija mogu da zaduze najvise 3 primerka
* - da bi se primerak zaduzio on mora biti slobodan
*
* Ukoliko su ispunjeni uslovi, zaduzenja sacuvati u bazi i vratiti izgenerisane primarne kljuceve


public static List<Integer> zaduzi(int clanskiBroj, List<Integer> invBrojevi){ return null; }


* TODO 1. (6 poena)

* Koriscenjem upita prema kriterijumu
* implementirati operaciju koja vraca sve knjige
* za koje vazi barem jedan od dva uslova:
* - izdavac im se nalazi u listi @param izdavaci
* - naslov ne sadrzi string @param naslovDeo


public static List<Knjiga> getKnjigeZaIzdavace(List<String> izdavaci, String naslovDeo){ return null; }