Created
June 10, 2018 12:18
-
-
Save SrdjanCoric/3824bb71d34801e6448e37c9c889bdf5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package controllers; | |
import beans.Status; | |
import java.sql.Connection; | |
import java.sql.DriverManager; | |
import java.sql.PreparedStatement; | |
import java.sql.ResultSet; | |
import java.sql.SQLException; | |
import java.sql.Statement; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.logging.Level; | |
import java.util.logging.Logger; | |
import javax.faces.application.FacesMessage; | |
import javax.faces.bean.ManagedBean; | |
import javax.faces.bean.SessionScoped; | |
import javax.faces.context.FacesContext; | |
@ManagedBean | |
@SessionScoped | |
public class StatusController { | |
// Ovde deklarisemo varijable idStatus, status_type a ispod su geteri i seteti za njih. | |
private int idStatus; | |
private String status_type; | |
public StatusController() { | |
} | |
public int getIdStatus() { | |
return idStatus; | |
} | |
public void setIdStatus(int idStatus) { | |
this.idStatus = idStatus; | |
} | |
public String getStatus_type() { | |
return status_type; | |
} | |
public void setStatus_type(String status_type) { | |
this.status_type = status_type; | |
} | |
// deklarisemo varijablu allStatus koja sadrzi listu objekata tipa Status. Ispod su geter i seter za tu varijablu. | |
private List<Status> allStatus; | |
public List<Status> getAllStatus() { | |
return allStatus; | |
} | |
public void setAllStatus(List<Status> allStatus) { | |
this.allStatus = allStatus; | |
} | |
// ova metoda ocigledno treba da se zove sortStatuses. Poenta metode je da sortira statuse tako da je status sa IDom idStatus | |
// koji je ubacen kao parametar metoda (linija 56) bude prvi, a svi ostali da budu posle njega. | |
public List<Status> sortRequestTypes(List<Status> statuses, int idStatus) { | |
// inicijalizujemo varijablu result koja sadrzi listu statusa i trenutno je prazna | |
List<Status> result = new ArrayList(); | |
// koristeci for petlju idemo kroz listu statusa i ako je id konkretnog statusa u listi jednak id-u statusa koji smo ubacili kao argument | |
// kad smo pozvali metodu dodajemo taj status(objekat klase Status) u listu result. I sad nasa lista result ima samo jedan status. | |
for (int i = 0; i < statuses.size(); i++) { | |
if (idStatus == statuses.get(i).getIdStatus()) { | |
result.add(statuses.get(i)); | |
} | |
} | |
// koristimo for petlju da dodamo preostale elemente u listu (ciji id nije jednak idStatus) | |
for (int i = 0; i < statuses.size(); i++) { | |
if (idStatus != statuses.get(i).getIdStatus()) { | |
result.add(statuses.get(i)); | |
} | |
} | |
// ova metoda vraca listu statusa | |
return result; | |
} | |
// ova metoda je potpuno nepotrebna, tj. radi manje vise isto kao ova gore metoda sortRequestType. Duplirali smo kod bzvz | |
public List<Status> takeAllForUser(int idStatus) { | |
List<Status> result; | |
result = sortRequestTypes(allStatus, idStatus); | |
return result; | |
} | |
// ova metoda uzima sve statuse iz databaze | |
public String takeAllStatus() { | |
// kreiramo konekciju i dole se konektujemo na databazu (to posle necu pisati) | |
Connection conn = null; | |
try { | |
conn = DriverManager.getConnection(db.DB.connectionString, db.DB.user, db.DB.password); | |
Statement stmt = conn.createStatement(); | |
// selektujemo sve statuse iz databaze | |
ResultSet rs = stmt.executeQuery("select * from status"); | |
// inicijalizujemo listu allStatus i ona sada sadrzi praznu listu. | |
allStatus = new ArrayList<>(); | |
while (rs.next()) { | |
// dok postoji sledeci red u bazi kreira se objekat klase status i setuju mu se id i tip i na kraju na | |
// liniji 98 se dodaje u listu allStatus. | |
Status status = new Status(); | |
status.setIdStatus(rs.getInt("idStatus")); | |
status.setStatus_type(rs.getString("status_type")); | |
allStatus.add(status); | |
} | |
} catch (SQLException ex) { | |
Logger.getLogger(CityController.class.getName()).log(Level.SEVERE, null, ex); | |
} finally { | |
// zatvaramo konekciju na kraju metode (ni ovo necu pisati kasnije) | |
try { conn.close(); } catch (Exception e) { /* ignored */ } | |
} | |
return null; | |
} | |
// kreiramo listu oneStatus i getere i setere za nju (ovo bi trebalo da bude na vrhu koda, ovako je nepregledno) | |
private List<Status> oneStatus; | |
public List<Status> getOneStatus() { | |
return oneStatus; | |
} | |
public void setOneStatus(List<Status> oneStatus) { | |
this.oneStatus = oneStatus; | |
} | |
//ova metoda uzima status iz baze sa odredjenim id | |
public String takeStatusById(int id) { | |
Connection conn = null; | |
try { | |
conn = DriverManager.getConnection(db.DB.connectionString, db.DB.user, db.DB.password); | |
Statement stmt = conn.createStatement(); | |
//upit da se uzme status sa odredjenim id | |
ResultSet rs = stmt.executeQuery("select * from status where idStatus=" + id); | |
// inicijalizuje se gore pomenuta lista statusa koja je trenutno prazna | |
oneStatus = new ArrayList<>(); | |
while (rs.next()) { | |
// dok postoji naredni upit (ukupno bi morao biti samo jedan ali ovako smo radili) kreira se status objekat, | |
// setuju mu se id i tip i dodaje se u listu oneStatus. (Nema opet nikakvog smisla da ovo bude lista jer sadrzi uvek samo jedan status | |
// al jbg odradjen je copy paste nisam obracao paznju). oneStatus je trebao da bude samo objekat tipa status i to je to, a ne lista. | |
Status status = new Status(); | |
status.setIdStatus(rs.getInt("idStatus")); | |
status.setStatus_type(rs.getString("status_type")); | |
oneStatus.add(status); | |
} | |
} catch (SQLException ex) { | |
Logger.getLogger(CityController.class.getName()).log(Level.SEVERE, null, ex); | |
} finally { | |
try { conn.close(); } catch (Exception e) { /* ignored */ } | |
} | |
return null; | |
} | |
// clear metoda koja resetuje tip statusa | |
public void clear() { | |
status_type = null; | |
} | |
// metoda koja uzima tip statusa iz baze po idu | |
public String takeStatusNameById(int id) { | |
Connection conn = null; | |
try { | |
conn = DriverManager.getConnection(db.DB.connectionString, db.DB.user, db.DB.password); | |
Statement stmt = conn.createStatement(); | |
// upit | |
ResultSet rs = stmt.executeQuery("select * from status where idStatus=" + id); | |
while (rs.next()) { | |
// dodeljujemo varijabli status_type ono sto je u bazi u koloni status_type | |
status_type = rs.getString("status_type"); | |
} | |
//vracamo taj string | |
return status_type; | |
} catch (SQLException ex) { | |
Logger.getLogger(CityController.class.getName()).log(Level.SEVERE, null, ex); | |
} finally { | |
try { conn.close(); } catch (Exception e) { /* ignored */ } | |
} | |
return null; | |
} | |
// INSERT STATUS | |
// ubacujemo status u databazu | |
public String insertStatus() { | |
Connection conn = null; | |
try { | |
conn = DriverManager.getConnection(db.DB.connectionString, db.DB.user, db.DB.password); | |
String query = "insert into status (status_type) values (?)"; | |
PreparedStatement ps = conn.prepareStatement(query); | |
// prepared statement, na mesto 1 stavljamo vrednost koja je u varijabli status_type | |
ps.setString(1, status_type); | |
// izvrsavamo update | |
ps.executeUpdate(); | |
// 4 liniji ispod su kod za poruku (koja se recimo u admin.xhtml nalazi na 29 liniji), uvek je isti kod, prekopiran sa neta, samo se poruka menja. | |
FacesContext context = FacesContext.getCurrentInstance(); | |
context.getExternalContext().getFlash().setKeepMessages(true); | |
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Status created", null); | |
FacesContext.getCurrentInstance().addMessage(null, msg); | |
} catch (SQLException ex) { | |
Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex); | |
} finally { | |
clear(); | |
try { conn.close(); } catch (Exception e) { /* ignored */ } | |
} | |
return "admin?faces-redirect=true"; | |
} | |
// DELETE TICKET TYPE | |
// brisemo status iz baze( metoda prima jedan parametar - id statusa) | |
public void deleteStatus(int id) { | |
Connection conn = null; | |
try { | |
conn = DriverManager.getConnection(db.DB.connectionString, db.DB.user, db.DB.password); | |
Statement stmt = conn.createStatement(); | |
//izvrsavamo brisanje u bazi | |
stmt.executeUpdate("delete from status where idstatus = " + id); | |
//s obzirom da se status nalazi i u listi allStatus, moramo i odatle da izbrisemo pa kod ispod i to radi. | |
// inicijalizuje se idx varijabla da bude 0. Idemo kroz listu allStatus koristeci for petlju i kada je id objekta status | |
// u listi allStatus jednak id-u koji smo ubacili kao argument kad smo pozvali metodu deleteStatus smestamo da idx varijabla bude jednaka i (tj. | |
// da bude jednaka indexu na kom se nalazi taj objekat da bismo ga obrisali iz liste) | |
int idx = 0; | |
for (int i = 0; i < allStatus.size(); i++) { | |
if (allStatus.get(i).getIdStatus() == id) { | |
idx = i; | |
} | |
} | |
// brisemo ga iz liste i ispisujemo poruku. Nemam pojma zasto sada poruka ima 2 reda, nekad ima 2 nekad 4, nekad je htelo da radi sa 2 a nekad nije. | |
allStatus.remove(idx); | |
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Status deleted", null); | |
FacesContext.getCurrentInstance().addMessage(null, msg); | |
} catch (SQLException ex) { | |
Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex); | |
} finally { | |
clear(); | |
try { conn.close(); } catch (Exception e) { /* ignored */ } | |
} | |
} | |
// UPDATE TICKET TYPE | |
// updateujemo status | |
public void updateStatus() { | |
Connection conn = null; | |
try { | |
conn = DriverManager.getConnection(db.DB.connectionString, db.DB.user, db.DB.password); | |
Statement stmt = conn.createStatement(); | |
// s obzirom da moze vise statusa odjednom da se updateuje (kad kliknes edit, promenis i kliknes opet edit u aplikaciji on nista ne menja u databazi | |
// nego samo promeni vrednost koja je u allStatus listi. Tek kad kliknes veliko update poziva se ova metoda i posto su vrednosti promenjene u | |
// allStatus listi onda radimo for loop idemo kroz tu listu i za svaki objekat Status u toj listi updateujemo vrednosti u databazi jer ne znamo koje | |
// su tacno promenjene koje nisu, pa updateujemo sve. | |
for (int i = 0; i < allStatus.size(); i++) { | |
String currentStatusType = allStatus.get(i).getStatus_type(); | |
int currentId = allStatus.get(i).getIdStatus(); | |
String query = "update status set status_type='" + currentStatusType + "' where idstatus= " + currentId; | |
stmt.executeUpdate(query); | |
} | |
FacesContext context = FacesContext.getCurrentInstance(); | |
context.getExternalContext().getFlash().setKeepMessages(true); | |
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Statuses updated", null); | |
FacesContext.getCurrentInstance().addMessage(null, msg); | |
} catch (SQLException ex) { | |
Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex); | |
} finally { | |
clear(); | |
try { conn.close(); } catch (Exception e) { /* ignored */ } | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment