package labsis.usuario.managers;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import labsis.usuario.dao.DaoLogUsuario;
import labsis.usuario.dao.DaoTipoUsuario;
import labsis.usuario.dao.DaoUsuario;
import labsis.usuario.model.LogUsuario;
import labsis.usuario.model.Operacao;
import labsis.usuario.model.TipoUsuario;
import labsis.usuario.model.Usuario;
public class Manager {
private static Manager manager;
public static Manager getInstace() {
if (manager == null)
manager = new Manager();
return manager;
}
// a seguir metodos que representam operacoes de usuarios
public Usuario login(String username, String password) {
DaoUsuario du = null;
try {
du = new DaoUsuario();
Usuario u = (Usuario) du.find(username);
if (u != null && u.getSenha().equals(password)) {
return u;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
du.close();
addLog(username, 1);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
public boolean logoff(String username) {
boolean b = false;
try {
b = addLog(username, 2);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return b;
}
public List<Usuario> retrieveUsers(String username) {
DaoUsuario du = null;
List<Usuario> ulist = new ArrayList<Usuario>();
try {
du = new DaoUsuario();
List l = du.retrieve();
for (Object o : l) {
Usuario u = (Usuario) o;
ulist.add(u);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
du.close();
addLog(username, 3);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return ulist;
}
public List<Usuario> retrieveUsers(String username, int pageNum) {
DaoUsuario du = null;
List<Usuario> ulist = new ArrayList<Usuario>();
try {
du = new DaoUsuario();
List l = du.retrieve(pageNum, 5);
Integer totalPages = (Integer) l.remove(l.size() - 1);
for (Object o : l) {
Usuario u = (Usuario) o;
ulist.add(u);
}
ulist.add(new Usuario(totalPages + "", null, null, null));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
du.close();
addLog(username, 3);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return ulist;
}
public String deleteUser(String delusername, String username) {
DaoUsuario du = null;
String msg = "Usuario " + delusername + " deletado com sucesso!";
try {
du = new DaoUsuario();
du.delete(new Usuario(delusername, null, null, null));
} catch (ClassNotFoundException e) {
msg = "Erro no driver SQL!";
e.printStackTrace();
} catch (SQLException e) {
msg = "Erro de consulta SQL!";
e.printStackTrace();
} finally {
try {
du.close();
if (!delusername.equals(username))
addLog(username, 5);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return msg;
}
public String updateUser(String updateusername, String nome, String senha,
int tipousuarioid, String username) {
DaoUsuario du = null;
String msg = "Usuario " + updateusername + " alterado com sucesso!";
try {
du = new DaoUsuario();
du.update(new Usuario(updateusername, senha, nome, new TipoUsuario(
tipousuarioid, "", null)));
} catch (ClassNotFoundException e) {
msg = "Erro no driver SQL!";
e.printStackTrace();
} catch (SQLException e) {
msg = "Erro de consulta SQL!";
e.printStackTrace();
} finally {
try {
du.close();
addLog(username, 4);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return msg;
}
public String createUser(String newusername, String senha, String nome,
int tipousuarioid, String username) {
DaoUsuario du = null;
String msg = "";
try {
du = new DaoUsuario();
if(du.create(new Usuario(newusername, senha, nome, new TipoUsuario(
tipousuarioid, "", null)))){
msg = "Usuario '" + newusername + "' criado com sucesso!";
}else{
msg = "Usuario '" + newusername + "' ja existe";
}
} catch (ClassNotFoundException e) {
msg = "Erro no driver SQL!";
e.printStackTrace();
} catch (SQLException e) {
msg = "Erro de consulta SQL!";
e.printStackTrace();
} finally {
try {
du.close();
addLog(username, 6);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return msg;
}
public List<LogUsuario> retrieveLogs(int pageNum) {
DaoLogUsuario dl = null;
List<LogUsuario> l = new ArrayList<LogUsuario>();
try {
dl = new DaoLogUsuario();
List<Object> list = dl.retrieve(pageNum, 15);
Integer totalPages = (Integer) list.remove(list.size() - 1);
for (Object o : list) {
LogUsuario lu = (LogUsuario) o;
l.add(lu);
}
l.add(new LogUsuario(totalPages, null, null, null));
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
dl.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return l;
}
// metodos usados para formularios
public List<TipoUsuario> getTipoUsuarios() {
List<TipoUsuario> l = new ArrayList<TipoUsuario>();
DaoTipoUsuario dt = null;
try {
dt = new DaoTipoUsuario();
for (Object o : dt.retrieve()) {
TipoUsuario tu = (TipoUsuario) o;
l.add(tu);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
dt.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return l;
}
public Usuario getUser(String username) {
DaoUsuario du = null;
Usuario u = null;
try {
du = new DaoUsuario();
u = (Usuario) du.find(username);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
du.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return u;
}
// metodo usado apenas para registrar log de usuarios
private boolean addLog(String username, int operacaoid)
throws SQLException, ClassNotFoundException {
DaoLogUsuario dl = null;
dl = new DaoLogUsuario();
boolean b = dl.create(new LogUsuario(0, new Operacao(operacaoid, null,null),
new Usuario(username, null, null, null), null));
dl.close();
return b;
}
}