Skip to content

Instantly share code, notes, and snippets.

@SrdjanCoric
Created June 10, 2018 12:18
Show Gist options
  • Save SrdjanCoric/3824bb71d34801e6448e37c9c889bdf5 to your computer and use it in GitHub Desktop.
Save SrdjanCoric/3824bb71d34801e6448e37c9c889bdf5 to your computer and use it in GitHub Desktop.
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