Codice completo

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!");
    }
  }
}