org.kuali.kra.iacuc.procedures.IacucProtocolProceduresAction.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.kra.iacuc.procedures.IacucProtocolProceduresAction.java

Source

/*
 * Kuali Coeus, a comprehensive research administration system for higher education.
 * 
 * Copyright 2005-2015 Kuali, Inc.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.kuali.kra.iacuc.procedures;

import org.apache.commons.lang3.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.kuali.coeus.sys.framework.service.KcServiceLocator;
import org.kuali.kra.iacuc.*;
import org.kuali.kra.iacuc.infrastructure.IacucConstants;
import org.kuali.kra.iacuc.procedures.rule.AddProcedureLocationEvent;
import org.kuali.kra.iacuc.procedures.rule.AddProtocolStudyGroupEvent;
import org.kuali.kra.infrastructure.Constants;
import org.kuali.kra.infrastructure.KeyConstants;
import org.kuali.rice.krad.util.KRADConstants;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class IacucProtocolProceduresAction extends IacucProtocolAction {

    private static final String BEAN_FIND_PARAM_START = "iacucProtocolStudyGroupBeans[";
    private static final String BEAN_STUDY_GROUP_FIND_PARAM_START = "iacucProtocolStudyGroups[";
    private static final String BEAN_STUDY_GROUP_SPECIES_FIND_PARAM_START = "iacucProtocolSpeciesStudyGroups[";
    private static final String BEAN_PERSON_FIND_PARAM_START = "iacucProcedurePersonResponsibleList[";
    private static final String BEAN_LOCATION_FIND_PARAM_START = "iacucProcedureLocationResponsibleList[";
    private static final String FIND_PARAM_END = "].";
    private static final String CONFIRM_DELETE_PROCEDURE_LOCATION_KEY = "confirmDeleteProcedureLocation";
    private static final String CONFIRM_DELETE_PROCEDURE_GROUP_LOCATION_KEY = "confirmDeleteProcedureGroupLocation";
    private static final String CONFIRM_DELETE_PROCEDURE_STUDY_GROUP_KEY = "confirmDeleteProcedureStudyGroup";
    private static final String CONFIRM_DELETE_PROCEDURE_SPECIES_STUDY_GROUP_KEY = "confirmDeleteProcedureSpeciesStudyGroup";

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        ActionForward forward = super.execute(mapping, form, request, response);
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        protocolForm.getIacucProtocolProceduresHelper().prepareView();
        return forward;
    }

    @SuppressWarnings("deprecation")
    public ActionForward addProtocolStudyGroup(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        int groupBeanIndex = getSelectedLine(request);
        IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getIacucProtocol(form)
                .getIacucProtocolStudyGroupBeans().get(groupBeanIndex);
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        if (applyRules(new AddProtocolStudyGroupEvent(protocolForm.getIacucProtocolDocument(),
                selectedIacucProtocolStudyGroupBean, groupBeanIndex))) {
            getIacucProtocolProcedureService().addProtocolStudyGroup(selectedIacucProtocolStudyGroupBean,
                    getIacucProtocol(form));
            selectedIacucProtocolStudyGroupBean.initializeStudyGroupItems();
        }
        return mapping.findForward(Constants.MAPPING_BASIC);
    }

    public ActionForward deleteProtocolStudyGroup(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                protocolForm.getIacucProtocolDocument());
        IacucProtocolStudyGroup selectedStudyGroup = getSelectedStudyGroup(request,
                selectedIacucProtocolStudyGroupBean);
        String speciesAndGroups = selectedStudyGroup.getIacucProtocolSpecies().getGroupAndSpecies();
        return deleteProcedureStudyGroup(mapping, protocolForm, request, response, speciesAndGroups, false);
    }

    public ActionForward deleteProtocolSpeciesStudyGroup(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                protocolForm.getIacucProtocolDocument());
        IacucProtocolSpeciesStudyGroup selectedStudyGroup = getSelectedSpeciesStudyGroup(request,
                selectedIacucProtocolStudyGroupBean);
        String speciesAndGroups = selectedStudyGroup.getGroupAndSpecies();
        return deleteProcedureStudyGroup(mapping, protocolForm, request, response, speciesAndGroups, true);
    }

    private ActionForward deleteProcedureStudyGroup(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response, String speciesAndGroups,
            boolean procedureGroupedBySpecies) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                protocolForm.getIacucProtocolDocument());
        String procedureCategory = selectedIacucProtocolStudyGroupBean.getIacucProcedureCategory()
                .getProcedureCategory();
        String procedure = selectedIacucProtocolStudyGroupBean.getIacucProcedure().getProcedureDescription();
        String confirmDeleteKey = procedureGroupedBySpecies ? CONFIRM_DELETE_PROCEDURE_SPECIES_STUDY_GROUP_KEY
                : CONFIRM_DELETE_PROCEDURE_STUDY_GROUP_KEY;
        return confirm(buildParameterizedConfirmationQuestion(mapping, form, request, response, confirmDeleteKey,
                KeyConstants.QUESTION_PROCEDURE_STUDY_GROUP_DELETE_CONFIRMATION,
                new String[] { procedureCategory, procedure, speciesAndGroups }), confirmDeleteKey, "");
    }

    public ActionForward confirmDeleteProcedureStudyGroup(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        Object question = request.getParameter(KRADConstants.QUESTION_INST_ATTRIBUTE_NAME);
        if (CONFIRM_DELETE_PROCEDURE_STUDY_GROUP_KEY.equals(question)) {
            IacucProtocolForm protocolForm = (IacucProtocolForm) form;
            IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                    protocolForm.getIacucProtocolDocument());
            IacucProtocolStudyGroup selectedStudyGroup = getSelectedStudyGroup(request,
                    selectedIacucProtocolStudyGroupBean);
            getIacucProtocolProcedureService().deleteProtocolStudyGroup(selectedIacucProtocolStudyGroupBean,
                    selectedStudyGroup, getIacucProtocol(form));
        }
        return mapping.findForward(Constants.MAPPING_BASIC);
    }

    public ActionForward confirmDeleteProcedureSpeciesStudyGroup(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        Object question = request.getParameter(KRADConstants.QUESTION_INST_ATTRIBUTE_NAME);
        if (CONFIRM_DELETE_PROCEDURE_SPECIES_STUDY_GROUP_KEY.equals(question)) {
            IacucProtocolForm protocolForm = (IacucProtocolForm) form;
            IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                    protocolForm.getIacucProtocolDocument());
            IacucProtocolSpeciesStudyGroup selectedStudyGroup = getSelectedSpeciesStudyGroup(request,
                    selectedIacucProtocolStudyGroupBean);
            getIacucProtocolProcedureService().deleteProtocolStudyGroup(selectedIacucProtocolStudyGroupBean,
                    selectedStudyGroup);
        }
        return mapping.findForward(Constants.MAPPING_BASIC);
    }

    public ActionForward addProcedureLocation(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocolStudyGroupLocation newIacucProtocolStudyGroupLocation = protocolForm
                .getIacucProtocolProceduresHelper().getNewIacucProtocolStudyGroupLocation();
        if (applyRules(new AddProcedureLocationEvent(protocolForm.getIacucProtocolDocument(),
                newIacucProtocolStudyGroupLocation))) {
            getIacucProtocolProcedureService().addProcedureLocation(newIacucProtocolStudyGroupLocation,
                    getIacucProtocol(form));
            protocolForm.getIacucProtocolProceduresHelper()
                    .setNewIacucProtocolStudyGroupLocation(new IacucProtocolStudyGroupLocation());
        }
        return mapping.findForward(IacucConstants.PROCEDURE_LOCATION);
    }

    public ActionForward addProcedureGroupLocation(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                protocolForm.getIacucProtocolDocument());
        IacucProtocolStudyGroup selectedStudyGroup = getSelectedStudyGroup(request,
                selectedIacucProtocolStudyGroupBean);
        IacucProtocolStudyGroupLocation newStudyGroupLocation = selectedStudyGroup
                .getNewIacucProtocolStudyGroupLocation();
        if (applyRules(
                new AddProcedureLocationEvent(protocolForm.getIacucProtocolDocument(), newStudyGroupLocation))) {
            getIacucProtocolProcedureService().addProcedureGroupLocation(newStudyGroupLocation, selectedStudyGroup,
                    getIacucProtocol(protocolForm));
        }
        return mapping.findForward(Constants.MAPPING_BASIC);
    }

    public ActionForward updateIacucProtocolStudyGroupCategory(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        return mapping.findForward(Constants.MAPPING_BASIC);
    }

    @Override
    public void preSave(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        super.preSave(mapping, form, request, response);
        getIacucProtocolProcedureService().synchronizeProtocolStudyGroups(getIacucProtocol(form));
    }

    @Override
    public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        super.save(mapping, form, request, response);
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        return mapping.findForward(getProcedureActionForward(protocolForm));
    }

    public ActionForward deleteProcedureLocation(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocolStudyGroupLocation procedureLocation = getSelectedProcedureLocation(protocolForm, request);
        String locationName = procedureLocation.getIacucLocationName().getLocationName();
        return confirm(buildParameterizedConfirmationQuestion(mapping, form, request, response,
                CONFIRM_DELETE_PROCEDURE_LOCATION_KEY, KeyConstants.QUESTION_PROCEDURE_LOCATION_DELETE_CONFIRMATION,
                new String[] { locationName }), CONFIRM_DELETE_PROCEDURE_LOCATION_KEY, "");
    }

    public ActionForward deleteProcedureGroupPersonResponsible(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                protocolForm.getIacucProtocolDocument());
        IacucProtocolStudyGroup selectedStudyGroup = getSelectedStudyGroup(request,
                selectedIacucProtocolStudyGroupBean);
        int selectedPersonIndex = getSelectedBeanIndex(request, BEAN_PERSON_FIND_PARAM_START, FIND_PARAM_END);
        IacucProcedurePersonResponsible selectedPersonResponsible = selectedStudyGroup
                .getIacucProcedurePersonResponsibleList().get(selectedPersonIndex);
        getIacucProtocolProcedureService().deleteProcedureGroupPersonResponsible(selectedStudyGroup,
                selectedPersonResponsible, getIacucProtocol(form));
        return mapping.findForward(Constants.MAPPING_BASIC);
    }

    public ActionForward deleteProcedureGroupLocation(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                protocolForm.getIacucProtocolDocument());
        IacucProtocolStudyGroup selectedStudyGroup = getSelectedStudyGroup(request,
                selectedIacucProtocolStudyGroupBean);
        int selectedLocationIndex = getSelectedBeanIndex(request, BEAN_LOCATION_FIND_PARAM_START, FIND_PARAM_END);
        IacucProtocolStudyGroupLocation selectedStudyGroupLocation = selectedStudyGroup
                .getIacucProcedureLocationResponsibleList().get(selectedLocationIndex);
        String groupName = selectedStudyGroup.getIacucProtocolSpecies().getGroupAndSpecies();
        String locationName = selectedStudyGroupLocation.getIacucLocationName().getLocationName();
        return confirm(buildParameterizedConfirmationQuestion(mapping, form, request, response,
                CONFIRM_DELETE_PROCEDURE_GROUP_LOCATION_KEY,
                KeyConstants.QUESTION_PROCEDURE_GROUP_LOCATION_DELETE_CONFIRMATION,
                new String[] { groupName, locationName }), CONFIRM_DELETE_PROCEDURE_GROUP_LOCATION_KEY, "");
    }

    public ActionForward confirmDeleteProcedureGroupLocation(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        Object question = request.getParameter(KRADConstants.QUESTION_INST_ATTRIBUTE_NAME);
        if (CONFIRM_DELETE_PROCEDURE_GROUP_LOCATION_KEY.equals(question)) {
            IacucProtocolForm protocolForm = (IacucProtocolForm) form;
            IacucProtocolStudyGroupBean selectedIacucProtocolStudyGroupBean = getSelectedProcedureBean(request,
                    protocolForm.getIacucProtocolDocument());
            IacucProtocolStudyGroup selectedStudyGroup = getSelectedStudyGroup(request,
                    selectedIacucProtocolStudyGroupBean);
            int selectedLocationIndex = getSelectedBeanIndex(request, BEAN_LOCATION_FIND_PARAM_START,
                    FIND_PARAM_END);
            IacucProtocolStudyGroupLocation selectedStudyGroupLocation = selectedStudyGroup
                    .getIacucProcedureLocationResponsibleList().get(selectedLocationIndex);
            getIacucProtocolProcedureService().deleteProcedureGroupLocation(selectedStudyGroup,
                    selectedStudyGroupLocation, getIacucProtocol(form));
        }
        return mapping.findForward(IacucConstants.PROCEDURE_LOCATION);
    }

    public ActionForward confirmDeleteProcedureLocation(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        Object question = request.getParameter(KRADConstants.QUESTION_INST_ATTRIBUTE_NAME);
        if (CONFIRM_DELETE_PROCEDURE_LOCATION_KEY.equals(question)) {
            IacucProtocolForm protocolForm = (IacucProtocolForm) form;
            IacucProtocolStudyGroupLocation procedureLocation = getSelectedProcedureLocation(protocolForm, request);
            getIacucProtocolProcedureService().deleteProcedureLocation(procedureLocation,
                    getIacucProtocol(protocolForm));
        }
        return mapping.findForward(IacucConstants.PROCEDURE_LOCATION);
    }

    /**
     * This method is to get the selected procedure location.
     * @param protocolForm
     * @param request
     * @return
     */
    @SuppressWarnings("deprecation")
    private IacucProtocolStudyGroupLocation getSelectedProcedureLocation(IacucProtocolForm protocolForm,
            HttpServletRequest request) {
        IacucProtocolDocument document = protocolForm.getIacucProtocolDocument();
        IacucProtocolStudyGroupLocation procedureLocation = document.getIacucProtocol()
                .getIacucProtocolStudyGroupLocations().get(getLineToDelete(request));
        return procedureLocation;
    }

    protected IacucProtocolProcedureService getIacucProtocolProcedureService() {
        return (IacucProtocolProcedureService) KcServiceLocator.getService("iacucProtocolProcedureService");
    }

    protected IacucProtocolStudyGroup getSelectedStudyGroup(HttpServletRequest request,
            IacucProtocolStudyGroupBean selectedProtocolStudyGroupBean) {
        int selectedStudyGroupIndex = getSelectedBeanIndex(request, BEAN_STUDY_GROUP_FIND_PARAM_START,
                FIND_PARAM_END);
        return selectedProtocolStudyGroupBean.getIacucProtocolStudyGroups().get(selectedStudyGroupIndex);
    }

    protected IacucProtocolSpeciesStudyGroup getSelectedSpeciesStudyGroup(HttpServletRequest request,
            IacucProtocolStudyGroupBean selectedProtocolStudyGroupBean) {
        int selectedStudyGroupIndex = getSelectedBeanIndex(request, BEAN_STUDY_GROUP_SPECIES_FIND_PARAM_START,
                FIND_PARAM_END);
        return selectedProtocolStudyGroupBean.getIacucProtocolSpeciesStudyGroups().get(selectedStudyGroupIndex);
    }

    /**
     * This method is to get the selected procedure bean.
     * @param request
     * @param document
     * @return
     */
    protected IacucProtocolStudyGroupBean getSelectedProcedureBean(HttpServletRequest request,
            IacucProtocolDocument document) {
        int selectedBeanIndex = getSelectedBeanIndex(request, BEAN_FIND_PARAM_START, FIND_PARAM_END);
        return document.getIacucProtocol().getIacucProtocolStudyGroupBeans().get(selectedBeanIndex);
    }

    protected int getSelectedBeanIndex(HttpServletRequest request, String beanNameOpen, String beanNameClose) {
        int selectedBeanIndex = -1;
        String parameterName = (String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE);
        if (StringUtils.isNotBlank(parameterName)) {
            selectedBeanIndex = Integer
                    .parseInt(StringUtils.substringBetween(parameterName, beanNameOpen, beanNameClose));
        }
        return selectedBeanIndex;
    }

    protected IacucProtocol getIacucProtocol(ActionForm form) {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        return protocolForm.getIacucProtocolDocument().getIacucProtocol();
    }

    public ActionForward updateProcedures(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        if (protocolForm.getIacucProtocolProceduresHelper().isModifyProtocolProcedures()) {
            super.save(mapping, form, request, response);
        }
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.PROCEDURES);
        return mapping.findForward(Constants.MAPPING_BASIC);
    }

    public ActionForward updatePersonnel(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        ActionForward forward = mapping.findForward(IacucConstants.PROCEDURE_PERSONNEL);
        if (protocolForm.getIacucProtocolProceduresHelper().isModifyProtocolProcedures()) {
            if (isSaveProcedureValid(form)) {
                super.save(mapping, form, request, response);
            } else {
                return mapping.findForward(Constants.MAPPING_BASIC);
            }
        }
        getIacucProtocolProcedureService().populateIacucSpeciesPersonProcedures(getIacucProtocol(protocolForm));
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.PERSONNEL);
        return forward;
    }

    public ActionForward updateLocation(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        ActionForward forward = mapping.findForward(IacucConstants.PROCEDURE_LOCATION);
        if (protocolForm.getIacucProtocolProceduresHelper().isModifyProtocolProcedures()) {
            if (isSaveProcedureValid(form)) {
                super.save(mapping, form, request, response);
            } else {
                return mapping.findForward(Constants.MAPPING_BASIC);
            }
        }
        getIacucProtocolProcedureService().populateIacucSpeciesLocationProcedures(getIacucProtocol(protocolForm));
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.LOCATION);
        return forward;
    }

    public ActionForward updateSummary(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        ActionForward forward = mapping.findForward(IacucConstants.PROCEDURE_SUMMARY);
        if (protocolForm.getIacucProtocolProceduresHelper().isModifyProtocolProcedures()) {
            if (isSaveProcedureValid(form)) {
                super.save(mapping, form, request, response);
            } else {
                return mapping.findForward(Constants.MAPPING_BASIC);
            }
        }
        getIacucProtocolProcedureService().setProcedureSummaryBySpeciesGroup(getIacucProtocol(form));
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.SUMMARY);
        protocolForm.getIacucProtocolProceduresHelper().setSummaryGroupedBySpecies(false);
        return forward;
    }

    public ActionForward setEditLocationProcedures(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocol iacucProtocol = getIacucProtocol(protocolForm);
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.LOCATION);
        getIacucProtocolProcedureService().addLocationResponsibleProcedures(iacucProtocol);
        super.save(mapping, form, request, response);
        return mapping.findForward(IacucConstants.PROCEDURE_LOCATION);
    }

    public ActionForward setEditPersonProcedures(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        IacucProtocol iacucProtocol = getIacucProtocol(protocolForm);
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.PERSONNEL);
        getIacucProtocolProcedureService().addPersonResponsibleProcedures(iacucProtocol);
        super.save(mapping, form, request, response);
        return mapping.findForward(IacucConstants.PROCEDURE_PERSONNEL);
    }

    private boolean isSaveProcedureValid(ActionForm form) {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.PROCEDURES);
        IacucProtocolDocument protocolDocument = protocolForm.getIacucProtocolDocument();
        IacucProtocolDocumentRule protocolDocumentRule = new IacucProtocolDocumentRule();
        return protocolDocumentRule.isProtocolStudyGroupValid(protocolDocument);
    }

    public ActionForward summaryBySpecies(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        getIacucProtocolProcedureService().setProcedureSummaryGroupedBySpecies(getIacucProtocol(form));
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.SUMMARY);
        protocolForm.getIacucProtocolProceduresHelper().setSummaryGroupedBySpecies(true);
        return mapping.findForward(IacucConstants.PROCEDURE_SUMMARY);
    }

    public ActionForward summaryByGroup(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        getIacucProtocolProcedureService().setProcedureSummaryBySpeciesGroup(getIacucProtocol(form));
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.SUMMARY);
        protocolForm.getIacucProtocolProceduresHelper().setSummaryGroupedBySpecies(false);
        return mapping.findForward(IacucConstants.PROCEDURE_SUMMARY);
    }

    @Override
    public ActionForward reload(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        IacucProtocolForm protocolForm = (IacucProtocolForm) form;
        ActionForward actionForward = super.reload(mapping, form, request, response);
        protocolForm.getIacucProtocolProceduresHelper()
                .setCurrentProcedureDetailTab(IacucProcedureNavigation.PROCEDURES);
        return actionForward;
    }

    private String getProcedureActionForward(IacucProtocolForm protocolForm) {
        IacucProcedureNavigation currentProcedureTab = protocolForm.getIacucProtocolProceduresHelper()
                .getCurrentProcedureDetailTab();
        String procedureActionForwardName = Constants.MAPPING_BASIC;
        switch (currentProcedureTab) {
        case PERSONNEL:
            procedureActionForwardName = IacucConstants.PROCEDURE_PERSONNEL;
            break;
        case LOCATION:
            procedureActionForwardName = IacucConstants.PROCEDURE_LOCATION;
            break;
        case SUMMARY:
            procedureActionForwardName = IacucConstants.PROCEDURE_SUMMARY;
            break;
        }
        return procedureActionForwardName;
    }

}