본문 바로가기

Framework/__Spring

Spring2.5 Session WebUtils적용


package web;
import bus.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.validation.Validator;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.servlet.view.RedirectView;
import org.springframework.web.util.WebUtils;
import util.PropertyEditorUtils;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;

public class UpdateMemberMultiController extends MultiActionController {
    /** Logger for this class and subclasses */
    private final Log logger = LogFactory.getLog(getClass());

    private MemberManager memberManager;
    private AppointmentManager appointmentManager;
    private String formView;
    private String successView;
    private Validator updateMemberValidator;
    private Validator addAppointmentValidator;
    private Validator removeAppointmentValidator;

    public ModelAndView defaultAction(HttpServletRequest request, HttpServletResponse response, UpdateMember updateMember) {
        logger.info("defaultAction()");

        Member member = memberManager.getMemberById(updateMember.getMemberId());
        if (member == null) {
            member = new Member();
        }

        updateMember.setMember(member);
        List<Appointment>appointments = member.getAppointments();

        WebUtils.setSessionAttribute(request, "memberAppointments", appointments);

        Map model = referenceData(request);
        model.put("updateMember", updateMember);
        return new ModelAndView(getFormView(), model);
    }

    protected Map referenceData(HttpServletRequest request) {
        Map model = new HashMap();
        List<Appointment> appointments = appointmentManager.getAppointments();
        
        List<Appointment> memberAppointments = (List<Appointment>)WebUtils.getSessionAttribute(request, "memberAppointments");
        if (memberAppointments != null) {
            List<Appointment> appointmentsNotToShowInSelection = new ArrayList<Appointment>();
            for (Appointment appointment : appointments) {
                for (Appointment memberAppointment : memberAppointments) {
                    if (appointment.getAppointmentId().equals(memberAppointment.getAppointmentId())) {
                        appointmentsNotToShowInSelection.add(appointment);
                    }
                }
            }
            appointments.removeAll(appointmentsNotToShowInSelection);
        }

        model.put("appointments", appointments);
        model.put("popupMsg", request.getParameter("popupMsg"));
        return model;
    }

    public ModelAndView addAppointment(HttpServletRequest request, HttpServletResponse response, UpdateMember updateMember) {
        logger.info("addAppointment()");

        Appointment appointment = appointmentManager.getAppointment(updateMember.getAppointmentIdToAdd());
        List<Appointment> appointments = (List<Appointment>)request.getSession().getAttribute("memberAppointments");
        appointments.add(appointment);

        WebUtils.setSessionAttribute(request, "memberAppointments", appointments);
        updateMember.getMember().setAppointments(appointments);

        Map model = referenceData(request);
        model.put("updateMember", updateMember);
        return new ModelAndView(getFormView(), model);
    }

    public ModelAndView removeAppointment(HttpServletRequest request, HttpServletResponse response, UpdateMember updateMember) {
        logger.info("removeAppointment()");

        Appointment appointmentToRemove = appointmentManager.getAppointment(updateMember.getAppointmentIdToRemove());
        List<Appointment> appointments = (List<Appointment>)WebUtils.getSessionAttribute(request, "memberAppointments");

        List<Appointment> appointmentsToRemove = new ArrayList<Appointment>();
        for (Appointment appointment : appointments) {
            if (appointment.getAppointmentId().equals(appointmentToRemove.getAppointmentId())) {
                appointmentsToRemove.add(appointment);
            }
        }
        appointments.removeAll(appointmentsToRemove);

        WebUtils.setSessionAttribute(request, "memberAppointments", appointments);
        updateMember.getMember().setAppointments(appointments);

        Map model = referenceData(request);
        model.put("updateMember", updateMember);
        return new ModelAndView(getFormView(), model);
    }

    public ModelAndView updateMember(HttpServletRequest request, HttpServletResponse response, UpdateMember updateMember) {
        logger.info("updateMember()");

        Member member = updateMember.getMember();
        member.setAppointments((List<Appointment>)WebUtils.getSessionAttribute(request, "memberAppointments"));
        memberManager.updateMember(member);

        WebUtils.setSessionAttribute(request, "memberAppointments", null);

        Map model = referenceData(request);
        model.put("memberId", member.getMemberId());
        model.put("popupMsg", "Member was updated Successfully.");
        return new ModelAndView(new RedirectView(getSuccessView()), model);
    }

    protected void initBinder(ServletRequest servletRequest, ServletRequestDataBinder binder) {
        binder.registerCustomEditor(Date.class, PropertyEditorUtils.getCustomDateEditor());
    }

    public void setMemberManager(MemberManager memberManager) {
        this.memberManager = memberManager;
    }

    public void setAppointmentManager(AppointmentManager appointmentManager) {
        this.appointmentManager = appointmentManager;
    }

    public String getFormView() {
        return formView;
    }

    public void setFormView(String formView) {
        this.formView = formView;
    }

    public String getSuccessView() {
        return successView;
    }

    public void setSuccessView(String successView) {
        this.successView = successView;
    }

    public Validator getUpdateMemberValidator() {
        return updateMemberValidator;
    }

    public void setUpdateMemberValidator(Validator updateMemberValidator) {
        this.updateMemberValidator = updateMemberValidator;
    }

    public Validator getAddAppointmentValidator() {
        return addAppointmentValidator;
    }

    public void setAddAppointmentValidator(Validator addAppointmentValidator) {
        this.addAppointmentValidator = addAppointmentValidator;
    }

    public Validator getRemoveAppointmentValidator() {
        return removeAppointmentValidator;
    }

    public void setRemoveAppointmentValidator(Validator removeAppointmentValidator) {
        this.removeAppointmentValidator = removeAppointmentValidator;
    }
}