Subversion Repositories bacoAlunos

Rev

Rev 186 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.web.controllers.profile;

import java.io.Serializable;

import pt.estgp.estgweb.web.controllers.AddRolesController;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.form.profile.ProfileForm;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.domain.views.RecordView;
import pt.estgp.estgweb.Globals;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.*;
import org.apache.log4j.Logger;
import org.apache.struts.action.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.util.List;
import java.util.ArrayList;

import pt.estgp.estgweb.web.form.AddRolesForm;

/**
 * @author Jorge Machado
 * @date 26/Fev/2008
 * @time 18:01:54
 * @see pt.estgp.estgweb.web
 */

public class ProfileController extends AddRolesController
{

    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(ProfileController.class);
    private static final 1.5.0/docs/api/java/lang/String.html">String TARGET_ROLES_KEY = AddRolesForm.TARGET_ROLES_KEY;


    public ActionForward editUser(ActionMapping mapping,
                                  ActionForm form,
                                  HttpServletRequest request,
                                  HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        ProfileForm profileForm = (ProfileForm) form;
        ActionErrors errors = profileForm.validate(mapping, request);
        if (!errors.isEmpty())
        {
            UserView uV = loadUser(profileForm.getUserView().getId(), request, response);
            profileForm.getUserView().setPasswordLocal(uV.isPasswordLocal());
            saveMessages(request, errors);
            return mapping.getInputForward();
        }
        UserView userView = profileForm.getUserView();
        try
        {
            UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
            userView.setUserRoles((List<String>) userSession.get(TARGET_ROLES_KEY));
            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"object"};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{userView, profileForm.getTypeClass()};
            userView = (UserView) sm.execute(RequestUtils.getRequester(request, response), "SubmitUser", args, names);
            profileForm.setUserView(userView);
            if (userSession.getUser().getId() == userView.getId())
            {
                userSession.setUser(userView.getUser());
                request.setAttribute(Globals.USER_SESSION_KEY, userSession);
                logger.info("Puting new user info in session:" + userView.getId());
            }
            addMessage(request, "profile.edited.sucess");
            return mapping.findForward("success");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            throw e;
        }
    }

    public ActionForward newTeacher(ActionMapping mapping,
                                    ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        return newGenericUser(mapping, form, request, response, DomainObjectFactory.createTeacherImpl());
    }

    public ActionForward newStudent(ActionMapping mapping,
                                    ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        return newGenericUser(mapping, form, request, response, DomainObjectFactory.createStudentImpl());
    }

    public ActionForward newUser(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        return newGenericUser(mapping, form, request, response, DomainObjectFactory.createUserImpl());
    }

    public ActionForward newGenericUser(ActionMapping mapping,
                                        ActionForm form,
                                        HttpServletRequest request,
                                        HttpServletResponse response,
                                        User u)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm pF = (ProfileForm) form;
            UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);

            UserView uV = new UserView(u);
            pF.setUserView(uV);
            pF.setTypeClass(u.getClass().getName());
            pF.setSelectedRoles(uV.getUserRoles());
            userSession.put(TARGET_ROLES_KEY, (1.5.0/docs/api/java/io/Serializable.html">Serializable) uV.getUserRoles());
            userSession.serialize(request, response);
            return mapping.findForward("personalData");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            throw e;
        }
    }

    public ActionForward changeProfile(ActionMapping mapping,
                                       ActionForm form,
                                       HttpServletRequest request,
                                       HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm pF = (ProfileForm) form;
            UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
            1.5.0/docs/api/java/lang/String.html">String id = request.getParameter("id");
            long userToLoad;

            if (id != null)
                userToLoad = 1.5.0/docs/api/java/lang/Long.html">Long.valueOf(id);
            else
                userToLoad = userSession.getUser().getId();
            UserView uV = loadUser(userToLoad, request, response);
            pF.setUserView(uV);
            pF.setSelectedRoles(uV.getUserRoles());
            userSession.put(TARGET_ROLES_KEY, (1.5.0/docs/api/java/io/Serializable.html">Serializable) uV.getUserRoles());
            userSession.serialize(request, response);
            return mapping.findForward("personalData");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            throw e;
        }
    }
    public ActionForward home(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm pF = (ProfileForm) form;
            UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
            long userToLoad;
            if(pF.getUserView().getId() > 0)
                userToLoad = pF.getUserView().getId();
            else
                userToLoad = userSession.getUser().getId();
            UserView uV = loadUserWithRecords(userToLoad, request, response);
            pF.setUserView(uV);
            return mapping.findForward("home");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            throw e;
        }
    }

    public ActionForward homeCode(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm pF = (ProfileForm) form;
            UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
            int userToLoad = pF.getUserView().getCode();
            UserView uV = loadUserWithRecordsCode(userToLoad, request, response);
            pF.setUserView(uV);
            return mapping.findForward("home");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            throw e;
        }
    }

    public ActionForward curriculum(ActionMapping mapping,
                                    ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm pF = (ProfileForm) form;
            UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);
            long userToLoad = userSession.getUser().getId();
            UserView uV = loadUserWithRecords(userToLoad, request, response);
            pF.setUserView(uV);
            return mapping.findForward("curriculum");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            throw e;
        }
    }

    private UserView loadUser(long id, HttpServletRequest request, HttpServletResponse response) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
    {
        IServiceManager sm = ServiceManager.getInstance();
        1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
        5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{id};
        UserView uV = (UserView) sm.execute(RequestUtils.getRequester(request, response), "LoadUserById", args, names);
        return uV;
    }

    private UserView loadUserWithRecords(long id, HttpServletRequest request, HttpServletResponse response) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
    {
        IServiceManager sm = ServiceManager.getInstance();
        1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
        5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{id};
        UserView uV = (UserView) sm.execute(RequestUtils.getRequester(request, response), "LoadUserWithRecordsById", args, names);
        return uV;
    }
    public UserView loadUserWithRecordsCode(int code, HttpServletRequest request, HttpServletResponse response) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
    {
        IServiceManager sm = ServiceManager.getInstance();
        1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
        5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{code};
        UserView uV = (UserView) sm.execute(RequestUtils.getRequester(request, response), "LoadUserWithRecordsByCode", args, names);
        return uV;
    }

    public ActionForward search(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm fromRequest = (ProfileForm) form;
            ProfileForm profileForm = new ProfileForm();
            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{fromRequest.getTextToSearch(),fromRequest.getTypeToSearch()};
            List<UserView> uVs = (List<UserView>) sm.execute(RequestUtils.getRequester(request, response), "SearchUser", args, names);
            profileForm.setUsersFind(uVs);
            request.setAttribute("ProfileForm", profileForm);
            if (uVs.size() != 0)
                addMessage(request, "profile.search.user.find", "" + uVs.size());
            else
                addMessage(request, "profile.search.user.not.find");
            return mapping.findForward("search");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            throw e;
        }
    }

    public ActionForward delete(ActionMapping mapping,
                                ActionForm form ,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {

            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{new 1.5.0/docs/api/java/lang/Long.html">Long(request.getParameter("id"))};
            1.5.0/docs/api/java/lang/Boolean.html">Boolean status= (1.5.0/docs/api/java/lang/Boolean.html">Boolean) sm.execute(RequestUtils.getRequester(request, response),"DeleteUser",args,names);
            if(status)
            {
                addMessage(request,"user.deleted.sucess");
                return mapping.findForward("success");
            }
            else
            {
                addMessage(request,"user.deleted.fail");
                return mapping.findForward("success");
            }
        }
        catch(FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e,e);
            throw e;
        }
    }

    public ActionForward createRecord(ActionMapping mapping,
                                ActionForm form ,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm profileForm = (ProfileForm) form;
            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"object"};

            5+0%2Fdocs%2Fapi+Object">Object[] args;
            if(profileForm.getUploadFile() != null)
                args = new 5+0%2Fdocs%2Fapi+Object">Object[]{profileForm.getRecordView(),profileForm.getUploadFile().getInputStream(),profileForm.getUploadFile().getFileName(),profileForm.getUploadFile().getContentType(),profileForm.getUploadFile().getFileSize()};
            else
                args = new 5+0%2Fdocs%2Fapi+Object">Object[]{profileForm.getRecordView(),null,null,null,0};

            UserView userView;
                if(profileForm.getRecordView().getId() > 0)
                    userView = (UserView) sm.execute(RequestUtils.getRequester(request, response),"CreateUserProfileRecord",args,names);
                else
                    userView = (UserView) sm.execute(RequestUtils.getRequester(request, response),"EditUserProfileRecord",args,names);

            addMessage(request,"profile.record.add.sucess",profileForm.getRecordView().getTitle());
            profileForm.setUserView(userView);
            return mapping.findForward("home");
        }
        catch(FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e,e);
            throw e;
        }
    }

    public ActionForward deleteRecord(ActionMapping mapping,
                                ActionForm form ,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm profileForm = (ProfileForm) form;
            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
            5+0%2Fdocs%2Fapi+Object">Object[] args;
                args = new 5+0%2Fdocs%2Fapi+Object">Object[]{profileForm.getRecordView().getId()};

            UserView userView = (UserView) sm.execute(RequestUtils.getRequester(request, response),"DeleteUserProfileRecord",args,names);
            addMessage(request,"profile.record.deleted.sucess");
            profileForm.setUserView(userView);
            return mapping.findForward("home");
        }
        catch(FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e,e);
            throw e;
        }
    }

    public ActionForward loadEditRecord(ActionMapping mapping,
                                ActionForm form ,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException
    {
        try
        {
            ProfileForm profileForm = (ProfileForm) form;
            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
            5+0%2Fdocs%2Fapi+Object">Object[] args;
                args = new 5+0%2Fdocs%2Fapi+Object">Object[]{profileForm.getRecordView().getId()};

            RecordView recordView = (RecordView) sm.execute(RequestUtils.getRequester(request, response),"LoadEditUserProfileRecord",args,names);
            UserView uV = recordView.getOwnerUserView();
            addMessage(request,"profile.record.deleted.sucess");
            profileForm.setUserView(uV);
            profileForm.setRecordView(recordView);
            return mapping.findForward("curriculum");
        }
        catch(FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e,e);
            throw e;
        }
    }

}