001    package org.kuali.student.lum.program.client.widgets;
002    
003    import com.google.gwt.event.shared.HandlerManager;
004    
005    import org.kuali.student.common.assembly.data.ModelDefinition;
006    import org.kuali.student.common.ui.client.application.Application;
007    import org.kuali.student.common.ui.client.configurable.mvc.FieldDescriptor;
008    import org.kuali.student.common.ui.client.configurable.mvc.sections.VerticalSection;
009    import org.kuali.student.common.ui.client.configurable.mvc.views.VerticalSectionView;
010    import org.kuali.student.common.ui.client.mvc.Callback;
011    import org.kuali.student.common.ui.client.widgets.KSLightBox;
012    import org.kuali.student.common.ui.client.widgets.buttongroups.ButtonEnumerations;
013    import org.kuali.student.common.ui.client.widgets.field.layout.button.ActionCancelGroup;
014    import org.kuali.student.common.ui.client.widgets.field.layout.button.ButtonGroup;
015    import org.kuali.student.common.ui.client.widgets.field.layout.element.MessageKeyInfo;
016    import org.kuali.student.lum.program.client.ProgramConstants;
017    import org.kuali.student.lum.program.client.ProgramController;
018    import org.kuali.student.lum.program.client.ProgramMsgConstants;
019    import org.kuali.student.lum.program.client.events.MetadataLoadedEvent;
020    import org.kuali.student.lum.program.client.events.UpdateEvent;
021    
022    /**
023     * @author Igor
024     */
025    class SideBarDialogManager {
026    
027        private HandlerManager eventBus;
028    
029        private KSLightBox dialog;
030    
031        private ButtonGroup<ButtonEnumerations.ButtonEnum> buttonGroup = new ActionCancelGroup(ButtonEnumerations.SaveCancelEnum.SAVE, ButtonEnumerations.SaveCancelEnum.CANCEL);
032    
033        private VerticalSectionView dialogView = new VerticalSectionView(DialogView.MAIN, getLabel(ProgramMsgConstants.SIDEBAR_DIALOG_TITLE), ProgramConstants.PROGRAM_MODEL_ID, true);
034    
035        private boolean viewConfigured = false;
036    
037        public SideBarDialogManager(HandlerManager eventBus) {
038            this.eventBus = eventBus;
039            dialog = new KSLightBox();
040            dialog.setWidget(dialogView.asWidget());
041            dialog.addButtonGroup(buttonGroup);
042            dialog.setSize(300, 190);
043            dialog.setModal(false);
044            bind();
045        }
046    
047        private void bind() {
048            buttonGroup.addCallback(new Callback<ButtonEnumerations.ButtonEnum>() {
049                @Override
050                public void exec(ButtonEnumerations.ButtonEnum button) {
051                    if (button == ButtonEnumerations.SaveCancelEnum.SAVE) {
052                        dialogView.updateModel();
053                        eventBus.fireEvent(new UpdateEvent());
054                    }
055                    dialog.hide();
056    
057                }
058            });
059            eventBus.addHandler(MetadataLoadedEvent.TYPE, new MetadataLoadedEvent.Handler() {
060                @Override
061                public void onEvent(MetadataLoadedEvent event) {
062                    configureView(event.getModelDefinition(), event.getController());
063                }
064            });
065        }
066    
067        public void configureView(ModelDefinition modelDefinition, ProgramController controller) {
068            if (!viewConfigured) {
069                VerticalSection verticalSection = new VerticalSection();
070                verticalSection.addField(new FieldDescriptor(ProgramConstants.SCHEDULED_REVIEW_DATE, new MessageKeyInfo(ProgramMsgConstants.SIDEBAR_FORM_SCHEDULEDREVIEWDATE), modelDefinition.getMetadata(ProgramConstants.SCHEDULED_REVIEW_DATE)));
071                FieldDescriptor reviewDateDescriptor = new FieldDescriptor(ProgramConstants.LAST_REVIEW_DATE, new MessageKeyInfo(ProgramMsgConstants.SIDEBAR_FORM_LASTREVIEWDATE), modelDefinition.getMetadata(ProgramConstants.LAST_REVIEW_DATE));
072                reviewDateDescriptor.setWidgetBinding(new DateBinding());
073                verticalSection.addField(reviewDateDescriptor);
074                dialogView.setLayoutController(controller);
075                dialogView.addSection(verticalSection);
076                viewConfigured = true;
077            }
078        }
079    
080        public void show() {
081            dialogView.beforeShow(new Callback<Boolean>() {
082                @Override
083                public void exec(Boolean result) {
084                }
085            });
086            dialogView.updateModel();
087            dialog.show();
088        }
089    
090        private static enum DialogView {
091            MAIN
092        }
093        
094        private String getLabel(String messageKey) {
095            return Application.getApplicationContext().getUILabel(ProgramMsgConstants.PROGRAM_MSG_GROUP, messageKey);
096        }
097    }