package org.appfuse.webapp.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.appfuse.Constants;
import org.appfuse.service.ResumeManager;
import org.appfuse.webapp.form.ResumeSkillForm;
public final class ResumeSkillAction extends BaseAction {
        private Log log = LogFactory.getLog(ResumeSkillAction.class);
    
    public ActionForward edit(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
    throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("Entering 'edit' method");
        }
        ResumeSkillForm skillForm = (ResumeSkillForm) form;
        if ((skillForm.getId() == null) || "".equals(skillForm.getId())) {
            ActionErrors errors = new ActionErrors();
            errors.add(ActionErrors.GLOBAL_ERROR,
                       new ActionError("errors.required", "resumeSkillForm.id"));
            saveErrors(request, errors);
            return mapping.getInputForward();
        }
        ResumeManager mgr = (ResumeManager) getBean("resumeManager");
        request.setAttribute(Constants.RESUME_SKILL_KEY,
                    mgr.getResumeSkill(skillForm.getId()));
        List skills = mgr.getResumeSkills(skillForm.getResumeId());
        request.setAttribute(Constants.RESUME_SKILLS, skills);
        request.setAttribute("menuUrl", "resumeSkills.do");
        
                return mapping.findForward("edit");
    }
    public ActionForward delete(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
    throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("Entering 'delete' method");
        }
        ResumeSkillForm skillForm = (ResumeSkillForm) form;
        if ((skillForm.getId() == null) || "".equals(skillForm.getId())) {
            ActionErrors errors = new ActionErrors();
            errors.add(ActionErrors.GLOBAL_ERROR,
                       new ActionError("errors.required", "resumeSkillForm.id"));
            saveErrors(request, errors);
            return mapping.getInputForward();
        }
        ResumeManager mgr = (ResumeManager) getBean("resumeManager");
        mgr.removeObject(convert(skillForm));
        ActionMessages messages = new ActionMessages();
        messages.add(ActionMessages.GLOBAL_MESSAGE,
                     new ActionMessage("skill.deleted"));
        saveMessages(request, messages);
        return setupList(mapping, request, skillForm.getResumeId());
    }
    public ActionForward save(ActionMapping mapping, ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
    throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("Entering 'save' method");
        }
        ResumeSkillForm skillForm = (ResumeSkillForm) form;
        boolean isNew = ("".equals(skillForm.getId()));
        ResumeManager mgr = (ResumeManager) getBean("resumeManager");
        mgr.saveObject(convert(skillForm));
        ActionMessages messages = new ActionMessages();
        String msg = (isNew) ? "skill.added" : "skill.updated";
        messages.add(ActionMessages.GLOBAL_MESSAGE,
                     new ActionMessage(msg, skillForm.getName()));
        saveMessages(request, messages);
        removeFormBean(mapping, request);
        return setupList(mapping, request, skillForm.getResumeId());
    }
    public ActionForward search(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
    throws Exception {
        if (log.isDebugEnabled()) {
            log.debug("Entering 'search' method");
        }
        ResumeSkillForm skill = (ResumeSkillForm) form;
        String resumeId = skill.getResumeId();
        return setupList(mapping, request, resumeId);
    }
    public ActionForward setupList(ActionMapping mapping,
                                   HttpServletRequest request, String resumeId)
    throws Exception {
        if (resumeId == null) {
            resumeId = getResumeId(request);
        }
        ResumeManager mgr = (ResumeManager) getBean("resumeManager");
        List skills = mgr.getResumeSkills(resumeId);
        request.setAttribute(Constants.RESUME_SKILLS, skills);
        ResumeSkillForm skillForm = new ResumeSkillForm();
        skillForm.setResumeId(resumeId);
        request.setAttribute(Constants.RESUME_SKILL_KEY, skillForm);
                request.setAttribute(Constants.RESUME_KEY, mgr.getResume(resumeId));
        request.setAttribute("menuUrl", "resumeSkills.do");
        
        return mapping.findForward("edit");
    }
}