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