001package org.kuali.student.r2.lum.program.infc;
002
003import org.kuali.student.r2.lum.clu.infc.Accreditation;
004import org.kuali.student.r2.lum.clu.infc.CluInstructor;
005
006import java.util.List;
007import org.kuali.student.r2.lum.program.dto.CoreProgramInfo;
008
009/**
010 * Detailed information about a single major discipline program
011 * 
012 * This represents a traditional undergraduate major or a graduate area of study 
013 * that leads to a degree in a particular discipline.
014 */
015public interface MajorDiscipline extends CommonWithProgramVariation {
016
017    /**
018     * Term when this major is next slated to be reviewed
019     * 
020     * @name Next Review Period
021     */
022    public String getNextReviewPeriod();
023
024    /**
025     * Instructors associated with this Major. 
026     * 
027     * This may not be an exhaustive list, and instead may only be used to 
028     * indicate potential instructors in publication.
029     * 
030     * @name Published Instructors
031     */
032    public List<? extends CluInstructor> getPublishedInstructors();
033
034    /**
035     * Identifier of the credential program under which the major belongs
036     * 
037     * @name Credential Program Id
038     */
039    public String getCredentialProgramId();
040
041    /**
042     * External Agencies that accredit this major
043     * 
044     * @name Accrediting Agencies
045     */
046    public List<? extends Accreditation> getAccreditingAgencies();
047
048    /**
049     * Program variations for the Major
050     * 
051     * Also called specializations or tracks.
052     * 
053     * @name Variations
054     */
055    public List<? extends ProgramVariation> getVariations();
056
057    /**
058     * The core program requirements associated with this organizational unit
059     * 
060     * Also called School Core or School Wide Common Requirements.
061     * 
062     * @name Organization Core Program
063     */
064    public CoreProgramInfo getOrgCoreProgram();
065}