001    package org.kuali.student.lum.program.client;
002    
003    import java.util.ArrayList;
004    
005    import org.kuali.student.common.ui.client.configurable.mvc.Configurer;
006    import org.kuali.student.common.ui.client.mvc.DataModel;
007    import org.kuali.student.lum.common.client.configuration.AbstractControllerConfiguration;
008    import org.kuali.student.lum.common.client.configuration.Configuration;
009    import org.kuali.student.lum.common.client.configuration.ConfigurationManager;
010    import org.kuali.student.lum.program.client.major.edit.MajorSummaryConfiguration;
011    
012    /**
013     * @author Igor
014     */
015    public abstract class AbstractProgramConfigurer extends Configurer {
016    
017        protected ProgramController programController;
018    
019        protected ConfigurationManager programSectionConfigManager;
020    
021        public static final String PROPOSAL_PATH = "proposal";
022        
023        {
024            groupName = ProgramMsgConstants.PROGRAM_MSG_GROUP;
025        }
026        
027        public void configure(ProgramController viewController) {
028            this.programController = viewController;
029            configureProgramSections();
030        }
031     
032        public String getProposalPath() {
033            return PROPOSAL_PATH;
034        }
035        /**
036         * Configures menu for Program Sections
037         */
038        private void configureProgramSections() {
039            String programSectionLabel = getLabel(ProgramMsgConstants.PROGRAM_MENU_SECTIONS);
040            programController.addMenu(programSectionLabel);
041            ArrayList<Configuration> configurations = getProgramSectionConfigManager().getConfigurations();
042            for (Configuration configuration : configurations) {
043                if (configuration instanceof AbstractControllerConfiguration) {
044                    ((AbstractControllerConfiguration) configuration).setController(programController);
045                }
046                if (configuration instanceof MajorSummaryConfiguration) {
047                    programController.addSpecialMenuItem(configuration.getView(), programSectionLabel);
048                } else {
049                    programController.addMenuItem(programSectionLabel, configuration.getView());
050                }
051            }
052        }
053    
054        public ProgramController getProgramController() {
055            return programController;
056        }
057    
058        public void applyPermissions() {
059            DataModel dataModel = programController.getProgramModel();
060            for (Configuration configuration : programSectionConfigManager.getConfigurations()) {
061                if (configuration.checkPermission(dataModel)) {
062                    configuration.applyRestrictions();
063                }else{
064                    configuration.removeRestrictions();
065                }
066            }
067        }
068    
069        public ConfigurationManager getProgramSectionConfigManager() {
070            return programSectionConfigManager;
071        }
072    }