Thursday, 4 July 2013

Usteda energije! - Kako smanjiti rasipanje elektricne energije?



Da li se razbacujemo sa energijom? 

Slika preuzeta sa linka.

Predlog kako smanjiti rasipanje električne energije kada je ona jedan od vaznijih faktora priliva srestava u budzet Republike Srbije kako njenim izvozom tako i potrošnjom gradjana.

Moj predlog se zasniva na tome da smanjimo potrošnju električne energije tamo gdje se zaista rasipa i samim tim taj višak električne energije da se proslijedi na izvoz. Ne znam da li ste primijetili to rasipanje ali evo vam jedan primjer zbog kojeg sam morao da vam se obratim. Živim u zgradi od 8 spratova u Novom Sadu, ta zgrada je projektovana tako da u hodnik gdje se nalazi lift ne ulazi ni "trunka" svjetlosti tako da se taj nedostatak svjetlosti dobija iz sijalica. Pritiskom na prekidač za svjetlo se pale sijalice i to je uredu, ali zašto se one pale na svim spratovima? Da li je potrebno da ako ja čekam lift na 6om spratu sijalice gore na ostalim spratovima?

Taj problem naravno ne smatram da je EPS prouzrokovao ili bilo ko u vezi sa njim. Problem je sama zgrada. U zgradi na svakom spratu imaju po 2 sijalice osim u prizemlju gdje ih ima 4 tako da prizemlje u ovom primjeru neću ni pominjati. Znači u zgradi od 8 spratova imamo 16 sijalica tako da ja kada želim da izadjem ili da se vratim u stan moram da palim svih 16 sijalica odjednom iako su mi potrebne samo 2 sijalice. Ako pretpostavimo da su sijalice od 100W znaci da one troše otprilike 0.1kWh i ako ih imamo 16 to znači da one ukupno troše 1.6kW na čas. Otprilike 100 ljudi živi u jednom ulazu u zgradu i samim tim svako od njih bar 1 mora izaći i ući u stan. Ako sijalice u nasem primjeru se gase posle 1 minute od pritiska prekidača znači da ćemo mi bar 100 puta pritisnuti prekidač za izlazak i 100 puta za ponovni ulazak u stan, ukupno 200 puta. Ako svakim tim pritiskom nama sijalice gore po 1 minut znači da ćemo imati 200 radnih minuta sijalica ili u prevodu 3 sata i 20 minuta. Da bi bilo lakše za računati zaokružićemo na 3 sata. Dolazimo do tih 3 sata * 1.6kWh sto dolazi do dnevne potrošnje od 4.8kWh ili na mjesecnom nivou od 144 kWh što nije puno da budemo iskreni ali je ogromno u poredjenju sa tim ako bi gorile samo 2 sijalice.

Ukoliko bi gorijele samo 2 sijalice po 100W znaci da bi one trosile 0.2 kW po času. I po računici od gore dobijamo 3 sata dnevne upotrebe sto je ukupno 0.6 kWh potrosene električne energije. Na mjesečnom nivou ta potrošnja bi iznosila 18 kWh sto je dosta dosta manje nego 144. Ukupna mjesečna usteda bi bila 144 kWh - 18 kWh = 126 kWh električne energije. Ovdje već možete da se zapitate pa zašto vam ja to govorim kada je to samo nekih 500-1000 dinara više na našim računima na godišnjem nivou, ne pišem vam ovaj post zbog toga da će na mom računu mjesečno biti manje ili više od 50 dinara nego zbog uštede u energiji ako se to primijeni na više zgrada.

Zaista nemam podatak a sumnjam da i vi imate koliko tačno zgrada funkcioniše na ovakav način tako da se stalno pale sve sijalice na svim spratovima ali po nekom mom dosadašnjem iskustvu u svakoj zgradi kojoj sam bio do sada princip je isti. Ako stavimo za primjer da 1 000 zgrada ima sličan princip i ako na svakom od njih se promijeni način paljenja svjetla u hodniku dolazimo do uštede od 1 000 * 126 kWh (koliko se uštedi po gruboj računici samo u jednoj zgradi) = 126 MWh mjesečno u svim zgradama što je zaista ogromna energija koja bi lako mogla da se proslijedi u neke druge grane a ne da se troši uzalud.

Jedna od opcija jeste da bar zamijenimo postojeće sijalice štedljivim i tako dođemo do uštede električne energije. I druga opcija je da  se ugrade senzori na pokret ili prekidači koji bi palili svjetlo na samo jednom spratu i tako značajno uštedi struju, ta ušteđena energija bi mogla da se usmjeri na izvoz koji je prijeko potreban ekonomiji Republike Srbije.

Nadam se da će te ovu ideju analizirati malo bolje od mene, pokušao sam da ukažem na to koliko se energije rasipa a kako bi tu energiju mogli da iskoristimo na drugim mjestima.

Ovo su moja licna zapažanja i neki moji proracuni možda ima i grešaka u njima ako ima molim da me ispravite u komentaru i ja cu to promijeniti u tekstu. Ukoliko imate drugacija razmišljanja, komentarišite post.

Pozdrav, sastavio M. L.

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; }