org.kuali.kra.coi.lookup.CoiCustomSearchAction.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.kra.coi.lookup.CoiCustomSearchAction.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.coi.lookup;

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.common.framework.auth.perm.KcAuthorizationService;
import org.kuali.coeus.common.framework.auth.task.ApplicationTask;
import org.kuali.coeus.common.framework.auth.task.TaskAuthorizationService;
import org.kuali.coeus.sys.framework.service.KcServiceLocator;
import org.kuali.kra.coi.CoiDisclosure;
import org.kuali.kra.coi.CoiDisclosureDocument;
import org.kuali.kra.coi.CoiDispositionStatus;
import org.kuali.kra.coi.CoiReviewStatus;
import org.kuali.kra.coi.actions.CoiDisclosureActionService;
import org.kuali.kra.coi.lookup.dao.CoiDisclosureDao;
import org.kuali.kra.infrastructure.Constants;
import org.kuali.kra.infrastructure.KeyConstants;
import org.kuali.kra.infrastructure.PermissionConstants;
import org.kuali.kra.infrastructure.TaskName;
import org.kuali.rice.coreservice.framework.parameter.ParameterService;
import org.kuali.rice.kim.api.permission.PermissionService;
import org.kuali.rice.kns.web.struts.action.KualiAction;
import org.kuali.rice.krad.service.DocumentService;
import org.kuali.rice.krad.util.GlobalVariables;
import org.kuali.rice.krad.util.KRADConstants;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

@SuppressWarnings("deprecation")
public class CoiCustomSearchAction extends KualiAction {

    private CoiDisclosureDao coiDisclosureDao;
    private ParameterService parameterService;
    private CoiDisclosureActionService coiDisclosureActionService;
    private DocumentService documentService;
    private PermissionService permissionService;
    private KcAuthorizationService kraAuthorizationService;

    public ActionForward openCustomSearch(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        if (isAuthorizedForCoiLookups()) {
            CoiCustomSearchForm searchForm = (CoiCustomSearchForm) form;
            searchForm.setCanQuickApprove(
                    getPermissionService().hasPermission(GlobalVariables.getUserSession().getPrincipalId(),
                            "KC-COIDISCLOSURE", PermissionConstants.APPROVE_COI_DISCLOSURE));
            CustomAdminSearchHelper helper = searchForm.getCustomAdminSearchHelper();
            helper.setAllOpenReviews(getOpenReviews());
            helper.setPendingReviews(getPendingReviews());
            helper.setInProgressReviews(getInProgressReviews());
            return mapping.findForward(Constants.MAPPING_BASIC);
        } else {
            return mapping.findForward(KRADConstants.MAPPING_PORTAL);
        }
    }

    public ActionForward quickApproveDisclosure(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        CoiCustomSearchForm searchForm = (CoiCustomSearchForm) form;
        CustomAdminSearchHelper helper = searchForm.getCustomAdminSearchHelper();
        String coiDisclosureDocumentNumber = getCoiDisclosureDocumentNumber(request);
        CoiDisclosureDocument coiDisclosureDocument = (CoiDisclosureDocument) getDocumentService()
                .getByDocumentHeaderId(coiDisclosureDocumentNumber);
        if (!helper.hasFinEnt(coiDisclosureDocument.getCoiDisclosure())
                && getKraAuthorizationService().hasPermission(GlobalVariables.getUserSession().getPrincipalId(),
                        coiDisclosureDocument.getCoiDisclosure(), PermissionConstants.APPROVE_COI_DISCLOSURE)) {
            getCoiDisclosureActionService().approveDisclosure(coiDisclosureDocument.getCoiDisclosure(),
                    CoiDispositionStatus.NO_CONFLICT_EXISTS);
            GlobalVariables.getMessageMap().putInfo(Constants.NO_FIELD,
                    KeyConstants.MESSAGE_COI_DISCLOSURE_QUICK_APPROVED);
        } else {
            GlobalVariables.getMessageMap().putError(Constants.NO_FIELD,
                    KeyConstants.ERROR_COI_NO_PERMISSION_APPROVE);
        }
        helper.setAllOpenReviews(getOpenReviews());
        helper.setPendingReviews(getPendingReviews());
        helper.setInProgressReviews(getInProgressReviews());
        return mapping.findForward(Constants.MAPPING_BASIC);
    }

    protected List<CoiDisclosure> getOpenReviews() {
        return getCoiDisclosureDao().getReviewsForReviewStatuses(Arrays.asList(
                new String[] { CoiReviewStatus.SUBMITTED_FOR_REVIEW, CoiReviewStatus.ASSIGNED_TO_REVIEWER }));
    }

    protected List<CoiDisclosure> getPendingReviews() {
        return getCoiDisclosureDao()
                .getReviewsForReviewStatuses(Arrays.asList(new String[] { CoiReviewStatus.SUBMITTED_FOR_REVIEW }));
    }

    protected List<CoiDisclosure> getInProgressReviews() {
        Collection<String> inProgressStatusCodes = getParameterService().getParameterValuesAsString(
                CoiDisclosureDocument.class, Constants.COI_WORK_IN_PROGRESS_REVIEW_STATUS_PARM);
        return getCoiDisclosureDao().getReviewsForReviewStatuses(inProgressStatusCodes);
    }

    /**
     * Parses the method to call attribute to pick off the line number which should have an action performed on it.
     *
     * @param request
     * @return
     */
    protected String getCoiDisclosureDocumentNumber(HttpServletRequest request) {
        String parameterName = (String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE);
        if (StringUtils.isNotBlank(parameterName)) {
            String documentNumber = StringUtils.substringBetween(parameterName, ".disclosureDocNbr", ".");
            if (StringUtils.isEmpty(documentNumber)) {
                return null;
            } else {
                return documentNumber;
            }
        }
        return null;
    }

    protected CoiDisclosureDao getCoiDisclosureDao() {
        if (coiDisclosureDao == null) {
            coiDisclosureDao = KcServiceLocator.getService(CoiDisclosureDao.class);
        }
        return coiDisclosureDao;
    }

    public void setCoiDisclosureDao(CoiDisclosureDao coiDisclosureDao) {
        this.coiDisclosureDao = coiDisclosureDao;
    }

    protected ParameterService getParameterService() {
        if (parameterService == null) {
            parameterService = KcServiceLocator.getService(ParameterService.class);
        }
        return parameterService;
    }

    public void setParameterService(ParameterService parameterService) {
        this.parameterService = parameterService;
    }

    protected CoiDisclosureActionService getCoiDisclosureActionService() {
        if (coiDisclosureActionService == null) {
            coiDisclosureActionService = KcServiceLocator.getService(CoiDisclosureActionService.class);
        }
        return coiDisclosureActionService;
    }

    public void setCoiDisclosureActionService(CoiDisclosureActionService coiDisclosureActionService) {
        this.coiDisclosureActionService = coiDisclosureActionService;
    }

    protected DocumentService getDocumentService() {
        if (documentService == null) {
            documentService = KcServiceLocator.getService(DocumentService.class);
        }
        return documentService;
    }

    public void setDocumentService(DocumentService documentService) {
        this.documentService = documentService;
    }

    protected KcAuthorizationService getKraAuthorizationService() {
        if (kraAuthorizationService == null) {
            kraAuthorizationService = KcServiceLocator.getService(KcAuthorizationService.class);
        }
        return kraAuthorizationService;
    }

    public void setKraAuthorizationService(KcAuthorizationService kraAuthorizationService) {
        this.kraAuthorizationService = kraAuthorizationService;
    }

    protected PermissionService getPermissionService() {
        if (permissionService == null) {
            permissionService = KcServiceLocator.getService(PermissionService.class);
        }
        return permissionService;
    }

    public void setPermissionService(PermissionService permissionService) {
        this.permissionService = permissionService;
    }

    protected boolean isAuthorizedForCoiLookups() {
        ApplicationTask task = new ApplicationTask(TaskName.LOOKUP_COI_DISCLOSURES);
        return getTaskAuthorizationService().isAuthorized(getUserIdentifier(), task);
    }

    protected TaskAuthorizationService getTaskAuthorizationService() {
        return KcServiceLocator.getService(TaskAuthorizationService.class);
    }

    private String getUserIdentifier() {
        return GlobalVariables.getUserSession().getPrincipalId();
    }
}