org.kuali.coeus.s2sgen.impl.generate.support.RRSF424BaseGenerator.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.coeus.s2sgen.impl.generate.support.RRSF424BaseGenerator.java

Source

/*
 * Kuali Coeus, a comprehensive research administration system for higher education.
 * 
 * Copyright 2005-2016 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.coeus.s2sgen.impl.generate.support;

import org.apache.commons.lang3.StringUtils;
import org.kuali.coeus.common.api.person.KcPersonContract;
import org.kuali.coeus.common.api.unit.UnitContract;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.kuali.coeus.common.questionnaire.api.answer.AnswerHeaderContract;
import org.kuali.coeus.propdev.api.core.DevelopmentProposalContract;
import org.kuali.coeus.propdev.api.s2s.S2SConfigurationService;
import org.kuali.coeus.propdev.api.s2s.S2sOpportunityContract;
import org.kuali.coeus.propdev.api.core.ProposalDevelopmentDocumentContract;
import org.kuali.coeus.common.api.sponsor.hierarchy.SponsorHierarchyService;
import org.kuali.coeus.common.questionnaire.api.core.QuestionAnswerService;
import org.kuali.coeus.s2sgen.impl.datetime.S2SDateTimeService;
import org.kuali.coeus.s2sgen.impl.person.DepartmentalPersonService;
import org.kuali.coeus.s2sgen.api.core.ConfigurationConstants;
import org.kuali.coeus.s2sgen.impl.person.DepartmentalPersonDto;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * This abstract class has methods that are common to all the versions of RRSF424 form.
 * 
 * @author Kuali Research Administration Team (kualidev@oncourse.iu.edu)
 */
public abstract class RRSF424BaseGenerator extends CommonSF424BaseGenerator {

    private static final Logger LOG = LoggerFactory.getLogger(RRSF424BaseGenerator.class);

    protected static final String PRINCIPAL_INVESTIGATOR = "PI";
    protected static final int PRE_APPLICATION = 6;
    protected static final int ADDITIONAL_CONGRESSIONAL_DESTRICT = 59;
    private static final String CONTACT_TYPE_O = "O";
    protected static final String CONTACT_TYPE_I = "I";
    protected static final String STATE_REVIEW_YES = "Y";
    protected static final String STATE_REVIEW_NO = "N";
    protected static final int PROGRAM_ANNOUNCEMENT_TITLE_MAX_LENGTH = 120;
    protected static final String PROPOSAL_YNQ_OTHER_AGENCY_SUBMISSION = "15";
    protected static final String VALUE_YES = "Yes";
    protected static final int PRIMARY_TITLE_MAX_LENGTH = 45;
    protected static final int DIRECTORY_TITLE_MAX_LENGTH = 45;
    protected static final int DEPARTMENT_NAME_MAX_LENGTH = 30;
    protected static final int ANSWER_EXPLANATION_MAX_LENGTH = 20;
    protected static final int SFLLL_OTHEREXPLANATORY = 86;
    protected static final Integer ANSWER_128 = 128;
    protected static final Integer ANSWER_111 = 111;
    protected static final String NOT_ANSWERED = "No";
    protected static final String SPONSOR_GROUPS = "Sponsor Groups";
    protected static final String SPONSOR_NIH = "NIH";
    private static final String SUBMISSION_TYPE_CODE = "submissionTypeCode";
    private static final String SUBMISSION_TYPE_DESCRIPTION = "submissionTypeDescription";
    protected static final String KEY_REVISION_CODE = "revisionCode";
    protected static final String KEY_REVISION_OTHER_DESCRIPTION = "revisionOtherDescription";
    private static final int FEDERAL_ID_MAX_LENGTH = 30;

    @Autowired
    @Qualifier("s2SDateTimeService")
    protected S2SDateTimeService s2SDateTimeService;

    @Autowired
    @Qualifier("departmentalPersonService")
    protected DepartmentalPersonService departmentalPersonService;

    @Autowired
    @Qualifier("s2SConfigurationService")
    protected S2SConfigurationService s2SConfigurationService;

    @Autowired
    @Qualifier("sponsorHierarchyService")
    protected SponsorHierarchyService sponsorHierarchyService;

    @Autowired
    @Qualifier("questionAnswerService")
    protected QuestionAnswerService questionAnswerService;

    protected String getOtherAgencySubmissionExplanation() {
        Long answerId = getAnswerId(ANSWER_111, getAnswerHeaders());
        String submissionExplanation = null;
        if (questionAnswerService.isAnswerDescriptionRetrievalSupported(answerId)) {
            submissionExplanation = questionAnswerService.getAnswerDescription(answerId);
            submissionExplanation = submissionExplanation != null ? submissionExplanation.substring(5) : null;
        } else {
            LOG.warn("answer description retrieval not supported for answer id: " + answerId);
        }

        if (submissionExplanation == null) {
            submissionExplanation = "Unknown";
        }

        if (submissionExplanation.length() > ANSWER_EXPLANATION_MAX_LENGTH) {
            return submissionExplanation.substring(0, ANSWER_EXPLANATION_MAX_LENGTH);
        } else {
            return submissionExplanation;
        }
    }

    /**
     * 
     * This method returns the type of contact person for a proposal
     * 
     * @return String contact type for the proposal
     */
    protected String getContactType() {
        String contactType = s2SConfigurationService.getValueAsString(ConfigurationConstants.PROPOSAL_CONTACT_TYPE);
        if (contactType == null || contactType.length() == 0) {
            contactType = CONTACT_TYPE_O;
        }
        return contactType;
    }

    protected String getFederalId() {
        final String federalId = pdDoc.getDevelopmentProposal().getSponsorProposalNumber();

        return StringUtils.substring(federalId, 0, FEDERAL_ID_MAX_LENGTH);
    }

    /**
     * 
     * This method is used to get the details of Contact person
     * 
     * @param pdDoc(ProposalDevelopmentDocumentContract)
     *            proposal development document.
     * @return depPerson(DepartmentalPerson) corresponding to the contact type.
     */
    protected DepartmentalPersonDto getContactPerson(ProposalDevelopmentDocumentContract pdDoc) {
        return departmentalPersonService.getContactPerson(pdDoc);
    }

    /**
     * This method tests whether a document's sponsor is in a given sponsor hierarchy.
     */
    public boolean isSponsorInHierarchy(DevelopmentProposalContract sponsorable, String sponsorHierarchy,
            String level1) {
        return sponsorHierarchyService.isSponsorInHierarchy(sponsorable.getSponsor().getSponsorCode(),
                sponsorHierarchy, 1, level1);
    }

    /**
     * This method creates and returns Map of submission details like submission type, description and Revision code
     *
     * @param pdDoc Proposal Development Document.
     * @return Map&lt;String, String&gt; Map of submission details.
     */
    public Map<String, String> getSubmissionType(ProposalDevelopmentDocumentContract pdDoc) {
        Map<String, String> submissionInfo = new HashMap<>();
        S2sOpportunityContract opportunity = pdDoc.getDevelopmentProposal().getS2sOpportunity();
        if (opportunity != null) {
            if (opportunity.getS2sSubmissionType() != null) {
                String submissionTypeCode = opportunity.getS2sSubmissionType().getCode();
                String submissionTypeDescription = opportunity.getS2sSubmissionType().getDescription();
                submissionInfo.put(SUBMISSION_TYPE_CODE, submissionTypeCode);
                submissionInfo.put(SUBMISSION_TYPE_DESCRIPTION, submissionTypeDescription);
            }

            if (opportunity.getS2sRevisionType() != null) {
                String revisionCode = opportunity.getS2sRevisionType().getCode();
                submissionInfo.put(KEY_REVISION_CODE, revisionCode);
            }

            if (opportunity.getRevisionOtherDescription() != null) {
                submissionInfo.put(KEY_REVISION_OTHER_DESCRIPTION, opportunity.getRevisionOtherDescription());
            }
        }
        return submissionInfo;
    }

    protected String getDepartmentName(KcPersonContract kcPerson) {
        final UnitContract unit = kcPerson.getUnit();
        return unit != null ? StringUtils.substring(unit.getUnitName(), 0, DEPARTMENT_NAME_MAX_LENGTH) : "";
    }

    protected abstract List<? extends AnswerHeaderContract> getAnswerHeaders();

    public S2SDateTimeService getS2SDateTimeService() {
        return s2SDateTimeService;
    }

    public void setS2SDateTimeService(S2SDateTimeService s2SDateTimeService) {
        this.s2SDateTimeService = s2SDateTimeService;
    }

    public DepartmentalPersonService getDepartmentalPersonService() {
        return departmentalPersonService;
    }

    public void setDepartmentalPersonService(DepartmentalPersonService departmentalPersonService) {
        this.departmentalPersonService = departmentalPersonService;
    }

    public S2SConfigurationService getS2SConfigurationService() {
        return s2SConfigurationService;
    }

    public void setS2SConfigurationService(S2SConfigurationService s2SConfigurationService) {
        this.s2SConfigurationService = s2SConfigurationService;
    }

    @Override
    public SponsorHierarchyService getSponsorHierarchyService() {
        return sponsorHierarchyService;
    }

    @Override
    public void setSponsorHierarchyService(SponsorHierarchyService sponsorHierarchyService) {
        this.sponsorHierarchyService = sponsorHierarchyService;
    }

    @Override
    public QuestionAnswerService getQuestionAnswerService() {
        return questionAnswerService;
    }

    @Override
    public void setQuestionAnswerService(QuestionAnswerService questionAnswerService) {
        this.questionAnswerService = questionAnswerService;
    }
}