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 }