Coverage Report - org.kuali.student.lum.program.client.variation.edit.VariationEditController
 
Classes in this File Line Coverage Branch Coverage Complexity
VariationEditController
0%
0/62
0%
0/4
1.64
VariationEditController$1
0%
0/3
N/A
1.64
VariationEditController$2
0%
0/3
N/A
1.64
VariationEditController$3
0%
0/16
0%
0/6
1.64
VariationEditController$4
0%
0/5
0%
0/2
1.64
VariationEditController$5
0%
0/3
N/A
1.64
VariationEditController$6
0%
0/9
0%
0/8
1.64
VariationEditController$7
0%
0/5
N/A
1.64
VariationEditController$7$1
0%
0/16
0%
0/6
1.64
VariationEditController$8
0%
0/7
N/A
1.64
VariationEditController$8$1
0%
0/8
0%
0/2
1.64
VariationEditController$9
0%
0/5
0%
0/2
1.64
 
 1  
 package org.kuali.student.lum.program.client.variation.edit;
 2  
 
 3  
 import java.util.ArrayList;
 4  
 import java.util.List;
 5  
 
 6  
 import org.kuali.student.common.assembly.data.Data;
 7  
 import org.kuali.student.common.ui.client.application.Application;
 8  
 import org.kuali.student.common.ui.client.application.ViewContext;
 9  
 import org.kuali.student.common.ui.client.mvc.Callback;
 10  
 import org.kuali.student.common.ui.client.mvc.DataModel;
 11  
 import org.kuali.student.common.ui.client.mvc.HasCrossConstraints;
 12  
 import org.kuali.student.common.ui.client.mvc.ModelRequestCallback;
 13  
 import org.kuali.student.common.ui.client.mvc.history.HistoryManager;
 14  
 import org.kuali.student.common.ui.client.widgets.KSButton;
 15  
 import org.kuali.student.common.ui.client.widgets.KSButtonAbstract;
 16  
 import org.kuali.student.common.ui.client.widgets.notification.KSNotification;
 17  
 import org.kuali.student.common.ui.client.widgets.notification.KSNotifier;
 18  
 import org.kuali.student.common.validation.dto.ValidationResultInfo;
 19  
 import org.kuali.student.lum.common.client.widgets.AppLocations;
 20  
 import org.kuali.student.lum.program.client.ProgramConstants;
 21  
 import org.kuali.student.lum.program.client.ProgramRegistry;
 22  
 import org.kuali.student.lum.program.client.ProgramSections;
 23  
 import org.kuali.student.lum.program.client.events.ChangeViewEvent;
 24  
 import org.kuali.student.lum.program.client.events.ModelLoadedEvent;
 25  
 import org.kuali.student.lum.program.client.events.SpecializationCreatedEvent;
 26  
 import org.kuali.student.lum.program.client.events.SpecializationSaveEvent;
 27  
 import org.kuali.student.lum.program.client.events.SpecializationUpdateEvent;
 28  
 import org.kuali.student.lum.program.client.events.StoreSpecRequirementIDsEvent;
 29  
 import org.kuali.student.lum.program.client.major.edit.MajorEditController;
 30  
 import org.kuali.student.lum.program.client.properties.ProgramProperties;
 31  
 import org.kuali.student.lum.program.client.variation.VariationController;
 32  
 import org.kuali.student.lum.program.client.widgets.ProgramSideBar;
 33  
 
 34  
 import com.google.gwt.core.client.GWT;
 35  
 import com.google.gwt.event.dom.client.ClickEvent;
 36  
 import com.google.gwt.event.dom.client.ClickHandler;
 37  
 import com.google.gwt.event.shared.HandlerManager;
 38  
 import com.google.gwt.user.client.Window;
 39  
 
 40  
 /**
 41  
  * @author Igor
 42  
  */
 43  0
 public class VariationEditController extends VariationController {
 44  
 
 45  0
     private final KSButton saveButton = new KSButton(ProgramProperties.get().common_save());
 46  0
     private final KSButton cancelButton = new KSButton(ProgramProperties.get().common_cancel(), KSButtonAbstract.ButtonStyle.ANCHOR_LARGE_CENTERED);
 47  
 
 48  
     private String currentId;
 49  
 
 50  
     public VariationEditController(DataModel programModel, ViewContext viewContext, HandlerManager eventBus, MajorEditController majorController) {
 51  0
         super(programModel, viewContext, eventBus, majorController);
 52  0
         configurer = GWT.create(VariationEditConfigurer.class);
 53  0
         sideBar.setState(ProgramSideBar.State.EDIT);
 54  0
         if (getStringProperty(ProgramConstants.ID) != null) {
 55  0
             setDefaultView(ProgramSections.SUMMARY);
 56  
         }
 57  0
         initHandlers();
 58  0
     }
 59  
 
 60  
     private void initHandlers() {
 61  0
         saveButton.addClickHandler(new ClickHandler() {
 62  
 
 63  
             @Override
 64  
             public void onClick(ClickEvent event) {
 65  0
                 doSave();
 66  0
             }
 67  
         });
 68  0
         cancelButton.addClickHandler(new ClickHandler() {
 69  
 
 70  
             @Override
 71  
             public void onClick(ClickEvent event) {
 72  0
                 doCancel();
 73  0
             }
 74  
         });
 75  0
         ModelLoadedEvent.Handler modelLoadedHandler = new ModelLoadedEvent.Handler() {
 76  
             @Override
 77  
             public void onEvent(ModelLoadedEvent event) {
 78  0
                 DataModel dataModel = event.getModel();
 79  0
                 Data variationMap = dataModel.get(ProgramConstants.VARIATIONS);
 80  0
                 if (variationMap != null) {
 81  0
                     int row = 0;
 82  0
                     for (Data.Property property : variationMap) {
 83  0
                         final Data variationData = property.getValue();
 84  0
                         if (variationData.get(ProgramConstants.ID).equals(currentId)) {
 85  0
                             programModel.setRoot(variationData);
 86  0
                             ProgramRegistry.setData(variationData);
 87  0
                             ProgramRegistry.setRow(row);
 88  0
                             setContentTitle(getProgramName());
 89  0
                             row++;
 90  0
                             return;
 91  
                         }
 92  0
                     }
 93  
                 }
 94  0
             }
 95  
         };
 96  0
         ProgramRegistry.addHandler(ModelLoadedEvent.TYPE, modelLoadedHandler);
 97  0
         eventBus.addHandler(ModelLoadedEvent.TYPE, modelLoadedHandler);
 98  
 
 99  0
         ChangeViewEvent.Handler changeViewHandler = new ChangeViewEvent.Handler() {
 100  
             @Override
 101  
             public void onEvent(ChangeViewEvent event) {
 102  0
                 Enum<?> viewToken = event.getViewToken();
 103  0
                 if (!viewToken.name().equals(ProgramSections.SPECIALIZATIONS_EDIT.name())) {
 104  0
                     showView(viewToken);
 105  
                 }
 106  0
             }
 107  
         };
 108  0
         ProgramRegistry.addHandler(ChangeViewEvent.TYPE, changeViewHandler);
 109  0
         eventBus.addHandler(ChangeViewEvent.TYPE, changeViewHandler);
 110  0
         eventBus.addHandler(SpecializationCreatedEvent.TYPE, new SpecializationCreatedEvent.Handler() {
 111  
 
 112  
             @Override
 113  
             public void onEvent(SpecializationCreatedEvent event) {
 114  0
                 programModel.getRoot().set(ProgramConstants.ID, event.getSpecializationId());
 115  0
             }
 116  
         });
 117  
 
 118  0
         eventBus.addHandler(SpecializationUpdateEvent.TYPE, new SpecializationUpdateEvent.Handler() {
 119  
             @Override
 120  
             public void onEvent(SpecializationUpdateEvent event) {
 121  
                 // update our model to the updated specialization
 122  
 
 123  
                 // gotta find it first
 124  0
                 String currSpecializationId = programModel.getRoot().get(ProgramConstants.ID);
 125  0
                 for (Data.Property prop : event.getSpecializations()) {
 126  0
                     String specId = (String) ((Data) prop.getValue()).get(ProgramConstants.ID);
 127  
 
 128  0
                     if (null != specId && specId.equals(currSpecializationId) && prop.getValueType().equals(Data.class)) {
 129  
                         // found it
 130  0
                         programModel.setRoot((Data) prop.getValue());
 131  0
                         showView(getCurrentViewEnum());
 132  
                     }
 133  0
                 }
 134  0
             }
 135  
         });
 136  
 
 137  0
         StoreSpecRequirementIDsEvent.Handler requirementsHandler = new StoreSpecRequirementIDsEvent.Handler() {
 138  
             @Override
 139  
             public void onEvent(StoreSpecRequirementIDsEvent event) {
 140  0
                 final String programId = event.getProgramId();
 141  0
                 final List<String> ids = event.getProgramRequirementIds();
 142  
 
 143  0
                 requestModel(new ModelRequestCallback<DataModel>() {
 144  
                     @Override
 145  
                     public void onModelReady(final DataModel model) {
 146  0
                         Data programRequirements = null;
 147  
 
 148  
                         // find the specialization that we need to update
 149  
                         //for (Data.Property property : model.getRoot()) {
 150  0
                         Data variationData = model.getRoot();
 151  0
                         if (variationData.get(ProgramConstants.ID).equals(programId)) {
 152  0
                             variationData.set(ProgramConstants.PROGRAM_REQUIREMENTS, new Data());
 153  0
                             programRequirements = variationData.get(ProgramConstants.PROGRAM_REQUIREMENTS);
 154  
                             // break;
 155  
                         }
 156  
                         // }
 157  
 
 158  0
                         if (programRequirements == null) {
 159  0
                             Window.alert("Cannot find program requirements in data model.");
 160  0
                             GWT.log("Cannot find program requirements in data model", null);
 161  0
                             return;
 162  
                         }
 163  
 
 164  0
                         for (String id : ids) {
 165  0
                             programRequirements.add(id);
 166  
                         }
 167  0
                         doSave();
 168  0
                     }
 169  
 
 170  
                     @Override
 171  
                     public void onRequestFail(Throwable cause) {
 172  0
                         GWT.log("Unable to retrieve model for validation and save", cause);
 173  0
                     }
 174  
 
 175  
                 });
 176  0
             }
 177  
         };
 178  0
         ProgramRegistry.addHandler(StoreSpecRequirementIDsEvent.TYPE, requirementsHandler);
 179  0
         eventBus.addHandler(StoreSpecRequirementIDsEvent.TYPE, requirementsHandler);
 180  0
     }
 181  
 
 182  
     @Override
 183  
     protected void fireUpdateEvent(Callback<Boolean> okToChange) {
 184  0
         doSave(okToChange);
 185  0
     }
 186  
 
 187  
     private void doSave(final Callback<Boolean> okToChange) {
 188  0
         requestModel(new ModelRequestCallback<DataModel>() {
 189  
             @Override
 190  
             public void onModelReady(final DataModel model) {
 191  0
                 VariationEditController.this.updateModelFromCurrentView();
 192  0
                 model.setParentPath(ProgramConstants.VARIATIONS + "/" + ProgramRegistry.getRow());
 193  0
                 model.validate(new Callback<List<ValidationResultInfo>>() {
 194  
                     @Override
 195  
                     public void exec(List<ValidationResultInfo> results) {
 196  0
                         boolean isSectionValid = isValid(results, true);
 197  0
                         if (isSectionValid) {
 198  0
                             saveData(model);
 199  0
                             okToChange.exec(true);
 200  
                         } else {
 201  0
                             okToChange.exec(false);
 202  0
                             KSNotifier.add(new KSNotification("Unable to save, please check fields for errors.", false, true, 5000));
 203  
                         }
 204  0
                     }
 205  
                 });
 206  0
             }
 207  
 
 208  
             @Override
 209  
             public void onRequestFail(Throwable cause) {
 210  0
                 GWT.log("Unable to retrieve model for validation and save", cause);
 211  0
             }
 212  
 
 213  
         });
 214  0
     }
 215  
 
 216  
     @Override
 217  
     protected void configureView() {
 218  0
         super.configureView();
 219  0
         if (!initialized) {
 220  0
             List<Enum<?>> excludedViews = new ArrayList<Enum<?>>();
 221  0
             excludedViews.add(ProgramSections.PROGRAM_REQUIREMENTS_EDIT);
 222  0
             excludedViews.add(ProgramSections.SUPPORTING_DOCUMENTS_EDIT);
 223  0
             excludedViews.add(ProgramSections.SUMMARY);
 224  0
             addCommonButton(ProgramProperties.get().program_menu_sections(), saveButton, excludedViews);
 225  0
             addCommonButton(ProgramProperties.get().program_menu_sections(), cancelButton, excludedViews);
 226  0
             initialized = true;
 227  
         }
 228  
 
 229  0
     }
 230  
 
 231  
     @Override
 232  
     protected void resetModel() {
 233  0
         currentId = getStringProperty(ProgramConstants.ID);
 234  0
         programModel.resetRoot();
 235  0
     }
 236  
 
 237  
     private void doCancel() {
 238  0
        navigateToParent(ProgramSections.SUMMARY);
 239  0
     }
 240  
 
 241  
     @Override
 242  
     protected void doSave() {
 243  0
         doSave(NO_OP_CALLBACK);
 244  0
     }
 245  
 
 246  
     private void saveData(DataModel model) {
 247  0
         currentId = model.get(ProgramConstants.ID);
 248  0
         eventBus.fireEvent(new SpecializationSaveEvent(model.getRoot()));
 249  0
         setContentTitle(getProgramName());
 250  0
         setName(getProgramName());
 251  0
         resetFieldInteractionFlag();
 252  0
     }
 253  
 
 254  
     @Override
 255  
     protected void navigateToParent() {
 256  0
         navigateToParent(ProgramSections.SPECIALIZATIONS_EDIT);
 257  0
     }
 258  
 
 259  
     private void navigateToParent(ProgramSections parentSection) {
 260  
 
 261  0
         String path = HistoryManager.appendContext(AppLocations.Locations.EDIT_PROGRAM_SPEC.getLocation(), getViewContext()) + "/" + parentSection;
 262  0
         HistoryManager.navigate(path);
 263  0
     }
 264  
 
 265  
     
 266  
         @Override
 267  
         public void beforeShow(final Callback<Boolean> onReadyCallback) {
 268  
             //clear all cross constraints that start with variations
 269  0
             Application.getApplicationContext().clearCrossConstraintsWithStartingPath(null,ProgramConstants.VARIATIONS);
 270  
             
 271  
             //Set the context parent path so the proper mapping is retained 
 272  0
             String newParentPath = ProgramConstants.VARIATIONS+"/"+org.kuali.student.lum.program.client.ProgramRegistry.getRow()+"/";
 273  0
             Application.getApplicationContext().setParentPath(newParentPath);
 274  
                 
 275  0
                 Callback<Boolean> updateCrossConstraintsCallback = new Callback<Boolean>(){
 276  
                         public void exec(Boolean result) {
 277  0
                                 onReadyCallback.exec(result);
 278  0
                         for(HasCrossConstraints crossConstraint:Application.getApplicationContext().getCrossConstraints(null)){
 279  0
                                 crossConstraint.reprocessWithUpdatedConstraints();
 280  
                         }
 281  0
                         }
 282  
         };
 283  0
                 super.beforeShow(updateCrossConstraintsCallback);
 284  0
         }
 285  
 
 286  
 }