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 }