
package org.apache.struts.webapp.example;


import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Locale;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.util.MessageResources;
import org.apache.struts.util.PropertyUtils;

import org.apache.struts.webapp.example.*;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.util.* ;
import java.sql.* ;

import ueclass.utils.datasource.database.* ;
import ueclass.utils.exception.*;
import ueclass.utils.general.*;
import ueclass.* ;

/**
 * Implementation of <strong>Action</strong> that populates an instance of
 * <code>ProjectForm</code>.
 *
 * @author Sudhir
 * @version $Revision: 1.2 $ $Date: 2002/05/14 12:53:07 $
 */

public final class EditProjectAction extends Action {


    // --------------------------------------------------------- Public Methods


    /**
     * Process the specified HTTP request, and create the corresponding HTTP
     * response (or forward to another web component that will create it).
     * Return an <code>ActionForward</code> instance describing where and how
     * control should be forwarded, or <code>null</code> if the response has
     * already been completed.
     *
     * @param mapping The ActionMapping used to select this instance
     * @param actionForm The optional ActionForm bean for this request (if any)
     * @param request The HTTP request we are processing
     * @param response The HTTP response we are creating
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet exception occurs
     */
    public ActionForward perform(ActionMapping mapping,
				 ActionForm form,
				 HttpServletRequest request,
				 HttpServletResponse response)
	throws IOException, ServletException {

System.out.println("Entered Action Class ..............");
	// Extract attributes we will need
	Locale locale = getLocale(request);
	MessageResources messages = getResources();
	HttpSession session = request.getSession();
	String action = request.getParameter("action");
System.out.println("action ... "+action);
	if (action == null)
	    action = "Create";
        if (servlet.getDebug() >= 1)
            servlet.log("EditProjectAction:  Processing " + action +
                        " action");

	// Is there a currently logged on user?
	Project project = null;
	if (!"Create".equals(action)) {
	    project = (Project) session.getAttribute(Constants.PROJECT_KEY);
	    if (project == null) {
System.out.println("Null Project ...");
		if (servlet.getDebug() >= 1)
		    servlet.log(" User is not logged on in session "
	                        + session.getId());
		return (servlet.findForward("logon"));
	    }
	}

	// Populate the user project form
	if (form == null) {
System.out.println("Null 'form' ...");
            if (servlet.getDebug() >= 1)
                servlet.log(" Creating new ProjectForm bean under key "
                            + mapping.getAttribute());
	    form = new ProjectForm();
System.out.println("ProjectForm assigned to 'form' ...");
            if ("request".equals(mapping.getScope()))
                request.setAttribute(mapping.getAttribute(), form);
            else
                session.setAttribute(mapping.getAttribute(), form);
	}
	ProjectForm prjform = (ProjectForm) form;
	Vector vector_projects=this.getProjects();
session.setAttribute("projects",vector_projects);

System.out.println("Got Vector ...size - "+vector_projects.size());
	if(project == null)
System.out.println("Null project .... (2)");
	if (project != null) {
System.out.println("Inside project not null ...");
            if (servlet.getDebug() >= 1)
                servlet.log(" Populating form from " + project);
            try {
                PropertyUtils.copyProperties(prjform, project);
System.out.println("Properties Copied ...");
				for(int i=0;i<vector_projects.size();i++)
				{
					Vector temp_project=(Vector)vector_projects.elementAt(i);
					prjform.setAction(action);
System.out.println((String)temp_project.elementAt(1));
					prjform.setPrjId((String)temp_project.elementAt(0));
					prjform.setPrjName((String)temp_project.elementAt(1));
					prjform.setModId((String)temp_project.elementAt(2));
				}
            //    prjform.setAction(action);
            //    prjform.setPrjId(null);
            //    prjform.setPrjName(null);

            } catch (InvocationTargetException e) {
                Throwable t = e.getTargetException();
                if (t == null)
                    t = e;
                servlet.log("ProjectForm.populate", t);
                throw new ServletException("ProjectForm.populate", t);
            } catch (Throwable t) {
                servlet.log("ProjectForm.populate", t);
                throw new ServletException("ProjectForm.populate", t);
            }

            if ("request".equals(mapping.getScope()))
                request.setAttribute(mapping.getAttribute(), prjform);
            else
                session.setAttribute(mapping.getAttribute(), prjform);
	}
System.out.println("Data Settled ...");
        // Set a transactional control token to prevent double posting
        if (servlet.getDebug() >= 1)
            servlet.log(" Setting transactional control token");
        saveToken(request);

	// Forward control to the edit user projects page
        if (servlet.getDebug() >= 1)
            servlet.log(" Forwarding to 'success' page");
	return (mapping.findForward("success"));

    }

	public Vector getProjects()
	{
		Vector project_details = new Vector();

		try{
			String driver = "org.gjt.mm.mysql.Driver";
			String dsn = "jdbc:mysql://java.ectu.com/unidux";
			String duser = "sqladmin";
			String dpwd = "java2001";

			Class.forName(driver);
			Connection con=DriverManager.getConnection(dsn,duser,dpwd);
	
			Statement st=con.createStatement();
			String sql="select prj_id,prj_name,mod_id from projects";
			ResultSet rs=st.executeQuery(sql);
			while(rs.next())
			{		
					Vector inner_project = new Vector();
					inner_project.addElement(rs.getString("prj_id"));
					inner_project.addElement(rs.getString("prj_name"));
					inner_project.addElement(rs.getString("mod_id"));
					
					project_details.addElement((Vector)inner_project);			
			}
		}catch(Exception e){
			System.err.print("Exception: ");
            System.err.println(e.getMessage());
            e.printStackTrace() ;
		}
        return project_details;
	}
	public Vector getModules(int prj_id)
	{
		Vector module_details = new Vector();
		String sql = "select mod_id,mod_name,sub_mod_id from module where prj_id='"+prj_id+"'";
		ConnectDB db = new ConnectDB() ;
		
	    try
		{
			QueryData qd = db.executeQuery(sql) ;
			Enumeration enum = qd.getAllRows();

		
			while ( enum.hasMoreElements() )
            {
    	    	Vector module = (Vector)enum.nextElement() ;

				Vector inner_module = new Vector();
				inner_module.addElement((String)(""+module.elementAt(0)));
				inner_module.addElement((String)module.elementAt(1));
				inner_module.addElement((String)(""+module.elementAt(2)));

				module_details.addElement((Vector)inner_module);			
	   	    }
			
		}catch(UniduxException e){
			System.err.print("Exception: ");
            System.err.println(e.getMessage());
            e.printStackTrace() ;
		}
        return module_details;
	}
	public Vector getSubModules(int mod_id)
	{
		Vector sub_module_details = new Vector();
		String sql = "select * from sub_module where mod_id='"+mod_id+"'";
		ConnectDB db = new ConnectDB() ;
		
	    try
		{
			QueryData qd = db.executeQuery(sql) ;
			Enumeration enum = qd.getAllRows();

		
			while ( enum.hasMoreElements() )
            {
    	    	Vector sub_module = (Vector)enum.nextElement() ;

				Vector inner_sub_module = new Vector();
	
				inner_sub_module.addElement(""+sub_module.elementAt(0));			//Id
				inner_sub_module.addElement((String)sub_module.elementAt(1));		//Name
				inner_sub_module.addElement((String)sub_module.elementAt(2));		//Type
				inner_sub_module.addElement((String)sub_module.elementAt(3));		//User
				inner_sub_module.addElement((String)sub_module.elementAt(4));		//Specification
				inner_sub_module.addElement((String)sub_module.elementAt(5));		//Prototype
				inner_sub_module.addElement((String)sub_module.elementAt(6));		//dev
				inner_sub_module.addElement((String)sub_module.elementAt(7));		//tst
				inner_sub_module.addElement((String)sub_module.elementAt(8));		//prod
				inner_sub_module.addElement((String)sub_module.elementAt(9));		//announced

				sub_module_details.addElement((Vector)inner_sub_module);		
	   	    }
			
		}catch(UniduxException e){
			System.err.print("Exception: ");
            System.err.println(e.getMessage());
            e.printStackTrace() ;
		}
        return sub_module_details;
	}

}

