/*
 * HelpHandler.java
 *
 * Created on 20 de septiembre de 2004, 11:59
 */

package com.fenalco.servlets.sysmanager;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.fenalco.entities.HelpItem;
import com.fenalco.entities.User;
import com.fenalco.utilities.MessageBuilder;
import com.fenalco.utilities.database.Transaction;

/**
 * Este servlet se encarga de realizar las operaciones de actualización,
 * creación y borrado de items de ayuda del sistema.
 * 
 * @author Mario Linares Vásquez
 * @version
 */
public class HelpHandler extends HttpServlet
{

	/**
	 * Inicializa el servlet.
	 */
	public void init( ServletConfig config ) throws ServletException
	{
		super.init(config);

	}

	/**
	 * Método destructor
	 */
	public void destroy( )
	{

	}

	/**
	 * Procesa solicitudes para los métodos HTTP <code>GET</code> y
	 * <code>POST</code>. Este servlet de acuerdo con el valor del parámetro
	 * operationType ejecuta las acciones de actualización, borrado o creación
	 * de items de ayuda en la base de datos:
	 *  - operationType = update Crea una instancia de HelpItem con el parámetro
	 * id, actualiza con los métodos modificadores los datos que toma del
	 * request, guarda los cambios con la función update y su respectivo
	 * transaction.
	 *  - operationType = delete Crea una instancia de HelpItem con el parámetro
	 * id, y elimina el registro con la función delete y su respectivo
	 * transaction.
	 *  - oprationType = new Crea una instancia de HelpItem con el constructor
	 * vacío, fija con los métodos modificadores los datos que toma del request,
	 * guarda los cambios con la función saveData y su respectivo transaction.
	 * 
	 * El flujo es redireccionado al final al servlet /administrador/itemsayuda
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 */
	protected void processRequest( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{
		String url = "/administrador/itemsayuda";
		String message = "";

		HttpSession session = request.getSession(false);
	    try
	    {
	        if( session != null && ( User )session.getAttribute( "user" ) != null && ( ( User )session.getAttribute( "user" ) ).getRoleId() == 1 )
			{
				String operationType = request.getParameter("operationType");
	
				Transaction transaction = new Transaction();
	
				if( operationType.equals("new") )
				{
					String content = request.getParameter("content");
					String title = request.getParameter("title");
					String pageUrl = request.getParameter("pageUrl");
					HelpItem item = new HelpItem();
	
					String content2 = content.replaceAll("\\n", "<br>");
					content2 = content2.replaceAll("\\r", "");
	
					item.setContent(content2);
					item.setTitle(title);
					item.setPageUrl(pageUrl);
	
					item.saveData(transaction);
	
				}
				else
					if( operationType.equals("update") )
					{
						int id = Integer.parseInt(request.getParameter("id"));
						String content = request.getParameter("content");
						String title = request.getParameter("title");
						String pageUrl = request.getParameter("pageUrl");
	
						String content2 = content.replaceAll("\\n", "<br>");
						content2 = content2.replaceAll("\\r", "");
	
						HelpItem item = new HelpItem(id);
						item.setContent(content2);
						item.setTitle(title);
						item.setPageUrl(pageUrl);
	
						item.update(transaction);
	
					}
					else
						if( operationType.equals("delete") )
						{
	
							String[] items = request.getParameterValues("item");
							if( items != null )
							{
	
								for( int i = 0; i < items.length; i++ )
								{
									HelpItem item = new HelpItem(Integer
											.parseInt(items[i]));
									item.delete(transaction);
								}
	
							}
	
						}
	
				transaction.execute();
	
			}
			else
			{
				message = MessageBuilder.buildMessage(15);
				url = "/index.jsp";
			}
	    }
	    catch( Exception e )
	    {
                System.out.println("Error-> "+e);
	        url="/logout";
	        message = MessageBuilder.buildMessage(15);
	    }

		request.setAttribute("message", message);
		RequestDispatcher dispatcher = getServletContext()
				.getRequestDispatcher(url);
		dispatcher.forward(request, response);

	}

	/**
	 * Handles the HTTP <code>GET</code> method.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 */
	protected void doGet( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{
		processRequest(request, response);
	}

	/**
	 * Handles the HTTP <code>POST</code> method.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 */
	protected void doPost( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{
		processRequest(request, response);
	}

	/**
	 * Returns a short description of the servlet.
	 */
	public String getServletInfo( )
	{
		return "Short description";
	}

}