package servlets;
/**
* Servlet de Controle
*
*
* @author aitelhaj
*
*/
import interfaces.catalogue.IMetierCatalogue;
import interfaces.clients.IMetierClients;
import interfaces.commandes.IMetierCommandes;
import interfaces.produits.IMetierProduits;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.HashMap;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import actions.Action;
import actions.CreationCompteAction;
import actions.LoginAction;
import actions.LogoutAction;
import actions.MenuAction;
import actions.MesCommandesAction;
import actions.MonProfilAction;
import actions.VuePanierAction;
import actions.VueProduitAction;
public class AdminServlet extends HttpServlet {
/**
* Auto Generated UID
*/
private static final long serialVersionUID = 2201880639118868111L;
//private HashMap catalogue;
private ServletContext context;
private HashMap<String,Action> actions;
private char SEP = File.separatorChar;
private static String PORT = "port";
private static String HOST_RMI = "host_rmi";
/**
*
*/
public void init(ServletConfig config)throws ServletException{
super.init();
//Récupération du contexte
context = config.getServletContext();
String pageErreur = "erreur.jsp";
//Initialisation de la hashmap des actions
actions = new HashMap<String,Action>();
actions.put("menu",new MenuAction("index.jsp",pageErreur));
//actions.put("vuePanier",new NullAction("vuePanier.jsp"));
actions.put("vuePanier",new VuePanierAction("vuePanier.jsp","login.jsp","message.jsp"));
//actions.put("login",new NullAction("login.jsp"));
actions.put("login",new LoginAction("login.jsp","login.jsp","vuePanier.jsp"));
actions.put("logout", new LogoutAction("message.jsp","index.jsp"));
//actions.put("creationCompte",new NullAction("creationCompte.jsp"));
actions.put("creationCompte",new CreationCompteAction("creationCompte.jsp","creationCompte.jsp","login.jsp"));
actions.put("vueProduit",new VueProduitAction("vueProduit.jsp",pageErreur));
actions.put("monProfil",new MonProfilAction("monProfil.jsp","login.jsp","monProfil.jsp"));
actions.put("mesCommandes", new MesCommandesAction("mesCommandes.jsp","mesCommandes.jsp"));
/*
* Implementation de la couche de communication RMI
* pour le metier.
*/
String host_rmi = "localhost";
int port = 1099;
// Lecture depuis properties
try {
String portStr = context.getInitParameter(PORT);
port = Integer.parseInt(portStr);
host_rmi = portStr = context.getInitParameter(HOST_RMI);
System.out.println("[PORT_RMI] ="+port);
System.out.println("[HOST_RMI] = "+host_rmi);
}catch(Exception e){
e.printStackTrace();
}
String URL_RMI = "rmi://"+host_rmi+":"+port+"/";
try {
System.out.println("Recuperation de la connexion RMI:");
Registry reg = LocateRegistry.getRegistry(host_rmi,port);
System.out.println("Registry trouve: "+reg.toString());
String urlCatalogue = URL_RMI+"MetierCatalogue";
String urlCommandes = URL_RMI+"MetierCommandes";
String urlProduits = URL_RMI+"MetierProduits";
String urlClients = URL_RMI+"MetierClients";
System.out.println("Lookup Catalogue");
IMetierCatalogue imCat = (IMetierCatalogue) Naming.lookup(urlCatalogue);
System.out.println("Lookup Commandes");
IMetierCommandes imCom = (IMetierCommandes) Naming.lookup(urlCommandes);
System.out.println("Lookup Produits");
IMetierProduits imPdts = (IMetierProduits) Naming.lookup(urlProduits);
System.out.println("Lookup Clients");
IMetierClients imCl = (IMetierClients) Naming.lookup(urlClients);
System.out.println("Mise du metier en contexte");
// On met le tout dans le servlet contexte
context.setAttribute("metierCatalogue", imCat);
context.setAttribute("metierCommandes", imCom);
context.setAttribute("metierProduits", imPdts);
context.setAttribute("metierClients", imCl);
System.out.println("Metier catalogue trouve : "+imCat);
//IMetierProduits imp = (IMetierProduits) reg.lookup("MetierProduits");
} catch (RemoteException e) {
e.printStackTrace();
throw new ServletException("Erreur de connexion au serveur RMI");
} catch (NotBoundException e) {
e.printStackTrace();
throw new ServletException("Erreur de recuperation d'une " +
"classe distante");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
System.out.println("URL mal formee");
e.printStackTrace();
}
/*MetierCatalogue mc = new MetierCatalogue();
ArrayList<Produit> catalogue = null;
// On récupére la liste des catégories
ArrayList<String> categories = null;
try{
categories = mc.getListeCategories();
context.setAttribute("categories", categories);
}catch(MetierException me){
me.printStackTrace();
//req.setAttribute(Message.MESSAGE_ERREUR, Message.PAS_DE_CATEGORIES);
//return erreur;
}catch(RemoteException re){
}*/
}
/**
*
*/
public void doGet( HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try{
String cmd = req.getParameter("cmd");
//if(action != null){
//On met le paramétre menu pour aller sur la page d'accueil
Action a = (Action)actions.get(cmd);
if(a == null){
throw new Exception("Commande Erronée !");
}
System.out.println("cmd = "+cmd);
String next = a.execute(req);
String suivant = SEP+next;
System.out.println("suivant = "+suivant);
RequestDispatcher rq = context.getRequestDispatcher(suivant);
rq.forward(req,res);
//}
}catch(Exception e){
System.out.println("BLEM");
e.printStackTrace();
// On retourne à la page d'accueil
RequestDispatcher rq = context.getRequestDispatcher("/index.jsp");
rq.forward(req,res);
}
}
public void doPost( HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req,res);
}
}