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;
}
}