package it.html.ejb.entity.cmp.controller;
import it.html.ejb.entity.cmp.LoginException;
import it.html.ejb.entity.cmp.UserLocal;
import it.html.ejb.entity.cmp.UserLocalHome;
import java.io.IOException;
import java.util.Collection;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//Classe controller: tutte le operazioni vengono richieste a questa classe
public class Controller extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
//Il context, utilizzato per recuperare informazioni dall'ambiente di esecuzione
private Context context;
//La classe factory, utilizzata per recuperare gli ejb di tipo UserLocal
private UserLocalHome ulh;
//Inizializziamo le variabili necessarie all'esecuzione del controller
public void init(){
try {
context=new InitialContext();
ulh=(UserLocalHome) context.lookup("UserLocal");
} catch (NamingException e) {
e.printStackTrace();
}
}
//Il metodo funge da dispatcher
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String op=request.getParameter("op");
if(op.equalsIgnoreCase("create")){
doCreate(request,response);
}else if(op.equalsIgnoreCase("remove")){
doRemove(request,response);
}else if(op.equalsIgnoreCase("search")){
doSearch(request,response);
}else if(op.equalsIgnoreCase("load")){
doLoad(request,response);
}else if(op.equalsIgnoreCase("update")){
doUpdate(request,response);
}
}
//Metodo utilizzato per l'inserimento di un utente nel database
private void doCreate(HttpServletRequest request, HttpServletResponse response) throws IOException {
//Recupero i parametri provenienti dalla form
String login=request.getParameter("login");
String nome=request.getParameter("nome");
String cognome=request.getParameter("cognome");
String email=request.getParameter("email");
String telefono=request.getParameter("telefono");
//Effettuo l'inserimento, la gestione dei singoli errori fornisce un output diverso
try {
ulh.create(login, nome, cognome, email, telefono);
response.getOutputStream().println("Utente "+nome+" "+cognome+" inserito correttamente.");
} catch (CreateException e) {
response.getOutputStream().println("Errore nell'operazione di inserimento: "+e.getMessage());
} catch (LoginException e) {
response.getOutputStream().println("Errore. Login troppo corto!");
}
}
//Metodo utilizzato per la rimozione di un utente dal database
private void doRemove(HttpServletRequest request, HttpServletResponse response) throws IOException {
//Recupero il parametro di identificazione
String login=request.getParameter("login");
//Recupero l'istanza corretta del bean, tramite una ricerca
UserLocal user;
try {
user = ulh.findByPrimaryKey(login);
//Recupero alcuni parametri che voglio mostrare all'utente
String nome=user.getNome();
String cognome=user.getCognome();
//Effettuo l'eliminazione
try {
user.remove();
response.getOutputStream().println("Utente "+nome+" "+cognome+" rimosso correttamente.");
} catch (EJBException e) {
response.getOutputStream().println("Errore nell'operazione di rimozione: "+e.getMessage());
} catch (RemoveException e) {
response.getOutputStream().println("Errore nell'operazione di rimozione: "+e.getMessage());
}
} catch (FinderException e1) {
response.getOutputStream().println("L'utente non esiste.");
}
}
//Il metodo recupera l'istanza associata all'utente, e la restituisce alla vista corretta
private void doLoad(HttpServletRequest request, HttpServletResponse response) throws IOException {
//Recupero il parametro di identificazione
String login=request.getParameter("login");
String type=request.getParameter("type");
//cerco l'utente
try {
UserLocal user=ulh.findByPrimaryKey(login);
//l'utente esiste, quindi procediamo ad inoltrarlo verso la vista
//Scelta della vista
String page="detail.jsp";
if (type!=null && type.equals("update"))
page="update.jsp";
//inoltro
RequestDispatcher rd=this.getServletContext().getRequestDispatcher("/"+page);
request.setAttribute("user",user);
rd.forward(request,response);
} catch (FinderException e) {
response.getOutputStream().println("L'utente non esiste.");
} catch (ServletException e) {
response.getOutputStream().println("Eccezione: "+e.getMessage());
}
}
//Il metodo effettua la ricerca di tutti gli utenti
private void doSearch(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
Collection list=ulh.findAll();
//Inoltriamo la lista alla vista
RequestDispatcher rd=this.getServletContext().getRequestDispatcher("/result.jsp");
request.setAttribute("list",list);
rd.forward(request,response);
} catch (FinderException e) {
response.getOutputStream().println("Non esistono utenti.");
} catch (ServletException e) {
response.getOutputStream().println("Eccezione: "+e.getMessage());
}
}
//Metodo utilizzato per la modifica dei dati
private void doUpdate(HttpServletRequest request, HttpServletResponse response) throws IOException {
//Recupero i parametri provenienti dalla form
String login=request.getParameter("login");
String nome=request.getParameter("nome");
String cognome=request.getParameter("cognome");
String email=request.getParameter("email");
String telefono=request.getParameter("telefono");
//Effettuo l'inserimento, la gestione dei singoli errori fornisce un output diverso
try {
UserLocal user=ulh.findByPrimaryKey(login);
//Settiamo le proprietà dell'utente
user.setNome(nome);
user.setCognome(cognome);
user.setEmail(email);
user.setTelefono(telefono);
response.getOutputStream().println("Utente "+nome+" "+cognome+" modificato correttamente.");
} catch (FinderException e) {
response.getOutputStream().println("Nessun utente trovato!");
}
}
}