<file_sep>/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modeli;

import domen.Plesac;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Nada
 */
public class ModelTabelePlesac extends AbstractTableModel{

    private List<Plesac> lista;
    private final String[] kolone;

    public ModelTabelePlesac(List<Plesac> lista) {
        this.lista = lista;
        this.kolone = new String[] {"id", "ime", "prezime", "broj godina", "pozicija"};
    }
    
        
    @Override
    public int getRowCount() {
        return lista.size();
    }

    @Override
    public int getColumnCount() {
        return kolone.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Plesac pl = lista.get(rowIndex);
        switch(columnIndex){
            case 0: return pl.getPlesacID()+"";
            case 1: return pl.getIme();
            case 2: return pl.getPrezime();
            case 3: return pl.getBrojGodina()+"";
            case 4: return pl.getPozicija();
            default: return "N/A";
        }
    }

    @Override
    public String getColumnName(int column) {
        return kolone[column];
    }

    
    
    public Plesac getRed(int i) {
        return lista.get(i);
    }

    public void setLista(List<Plesac> lista) {
        this.lista = lista;
        fireTableDataChanged();
    }
    
}
<file_sep>/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package db;

import domen.IOpstiDomenskiObjekat;
import helpers.PropertyReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import konstante.Konstante;

/**
 *
 * @author Nada
 */
public class DBBroker {
    Connection konekcija;
    PropertyReader pr;
    
    private static DBBroker instance;

    private DBBroker() {
        pr = new PropertyReader();
    }

    public static DBBroker getInstance() {
        if(instance == null)
            instance = new DBBroker();
        return instance;
    }
    
    
    
    public void ucitajDrajver() throws ClassNotFoundException{
        Class.forName(pr.readForKey(Konstante.DRIVER));
    }
    public void otvoriKonekciju() throws SQLException{
        konekcija = DriverManager.getConnection(pr.readForKey(Konstante.URL), pr.readForKey(Konstante.USER), pr.readForKey(Konstante.PASSWORD));
        konekcija.setAutoCommit(false);
    }
    public void zatvoriKonekciju() throws SQLException{
        konekcija.close();
    }
    
    public void commit() throws SQLException{
        konekcija.commit();
    }
    public void rollback() throws SQLException{
        konekcija.rollback();
    }

    public List<IOpstiDomenskiObjekat> select(IOpstiDomenskiObjekat odo) throws SQLException{
        String upit = "SELECT * FROM "+odo.nazivTabele()+" "+odo.alijas()+" "+odo.join()+" "+odo.selectWhere();
        System.out.println(upit);
        Statement s = konekcija.createStatement();
        ResultSet rs = s.executeQuery(upit);
        return odo.ucitajListu(rs);
    }
    public void insert(IOpstiDomenskiObjekat odo) throws SQLException{
        String upit = "INSERT INTO "+odo.nazivTabele()+" "+odo.koloneInsert()+" VALUES("+odo.vrednostiInsert()+")";
        System.out.println(upit);
        Statement s = konekcija.createStatement();
        s.executeUpdate(upit);
    }
    public void update(IOpstiDomenskiObjekat odo) throws SQLException{
        String upit = "UPDATE "+odo.nazivTabele()+" SET "+odo.vrednostiUpdate()+" WHERE "+odo.vrednostPrimarniKljuc();
        System.out.println(upit);
        Statement s = konekcija.createStatement();
        s.executeUpdate(upit);
    }
    public void delete(IOpstiDomenskiObjekat odo) throws SQLException{
        String upit = "DELETE FROM "+odo.nazivTabele()+" WHERE "+odo.vrednostPrimarniKljuc();
        System.out.println(upit);
        Statement s = konekcija.createStatement();
        s.executeUpdate(upit);
    }
    public long max(IOpstiDomenskiObjekat odo) throws SQLException{
        String upit ="SELECT max("+odo.vratiMax()+") as max from "+odo.nazivTabele();
        System.out.println(upit);
        Statement s = konekcija.createStatement();
        ResultSet rs = s.executeQuery(upit);
        long max = 0l;
        while (rs.next()) {            
            max = rs.getLong("max");
        }
        return max;
    }
}
<file_sep>/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package niti;

import domen.IOpstiDomenskiObjekat;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import konstante.Operacije;
import kontroler.Kontroler;
import transfer.KlijentskiZahtev;
import transfer.ServerskiOdgovor;

/**
 *
 * @author Nada
 */
public class ObradaZahtevaNit extends Thread {

    Socket s;
    boolean kraj = false;

    public ObradaZahtevaNit(Socket s) {
        this.s = s;
    }

    @Override
    public void run() {
        while (!kraj) {
            KlijentskiZahtev kz = primiZahtev();
            ServerskiOdgovor so = new ServerskiOdgovor();
            System.out.println("Operacija: " + kz.getOperacija());            
            switch (kz.getOperacija()) {
                case Operacije.PRIJAVA:
                    so = Kontroler.getInstance().prijava((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.NOVI_PLESAC:
                    so = Kontroler.getInstance().noviPlesac((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.IZMENA_PLESACA:
                    so = Kontroler.getInstance().izmenaPlesaca((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.BRISANJE_PLESACA:
                    so = Kontroler.getInstance().brisanjePlesaca((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.PRETRAGA_PLESACA:
                    so = Kontroler.getInstance().pretragaPlesaca((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.UCITAVANJE_PLESACA:
                    so = Kontroler.getInstance().ucitavanjePlesaca((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.NOVO_TAKMICENJE:
                    so = Kontroler.getInstance().novoTakmicenje((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.IZMENA_TAKMICENJA:
                    so = Kontroler.getInstance().izmenaTakmicenja((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.BRISANJE_TAKMICENJA:
                    so = Kontroler.getInstance().brisanjeTakmicenja((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.PRETRAGA_TAKMICENJA:
                    so = Kontroler.getInstance().pretragaTakmicenja((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.UCITAVANJE_TAKMICENJA:
                    so = Kontroler.getInstance().ucitavanjeTakmicenja((IOpstiDomenskiObjekat)kz.getParametar());
                    break;
                case Operacije.UCITAVANJE_POZICIJA:
                    so = Kontroler.getInstance().ucitavanjePozicija();
            }

            posaljiOdgovor(so);
        }
    }

    private KlijentskiZahtev primiZahtev() {
        KlijentskiZahtev kz = new KlijentskiZahtev();

        try {
            ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
            kz = (KlijentskiZahtev) ois.readObject();
        } catch (Exception ex) {
            Logger.getLogger(ObradaZahtevaNit.class.getName()).log(Level.SEVERE, null, ex);
        }

        return kz;
    }

    private void posaljiOdgovor(ServerskiOdgovor so) {
        ObjectOutputStream oos;
        try {
            oos = new ObjectOutputStream(s.getOutputStream());
            oos.writeObject(so);
        } catch (IOException ex) {
            Logger.getLogger(ObradaZahtevaNit.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}
<file_sep>•	Client-Server application, socket communication
•	Application allows logged-in users to manipulate with data about dancer and competition (enter new, delete, edit, search)
