Clover Coverage Report - KS LUM 1.3.0-SNAPSHOT (Aggregated)
Coverage timestamp: Thu Apr 28 2011 06:51:40 EDT
../../../../../../../../img/srcFileCovDistChart0.png 0% of files have more coverage
101   286   36   4.04
18   234   0.36   25
25     1.44  
1    
 
  VariationEditController       Line # 43 101 0% 36 144 0% 0.0
 
No Tests
 
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    public class VariationEditController extends VariationController {
44   
45    private final KSButton saveButton = new KSButton(ProgramProperties.get().common_save());
46    private final KSButton cancelButton = new KSButton(ProgramProperties.get().common_cancel(), KSButtonAbstract.ButtonStyle.ANCHOR_LARGE_CENTERED);
47   
48    private String currentId;
49   
 
50  0 toggle 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    }
59   
 
60  0 toggle private void initHandlers() {
61  0 saveButton.addClickHandler(new ClickHandler() {
62   
 
63  0 toggle @Override
64    public void onClick(ClickEvent event) {
65  0 doSave();
66    }
67    });
68  0 cancelButton.addClickHandler(new ClickHandler() {
69   
 
70  0 toggle @Override
71    public void onClick(ClickEvent event) {
72  0 doCancel();
73    }
74    });
75  0 ModelLoadedEvent.Handler modelLoadedHandler = new ModelLoadedEvent.Handler() {
 
76  0 toggle @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    }
93    }
94    }
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  0 toggle @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    }
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  0 toggle @Override
113    public void onEvent(SpecializationCreatedEvent event) {
114  0 programModel.getRoot().set(ProgramConstants.ID, event.getSpecializationId());
115    }
116    });
117   
118  0 eventBus.addHandler(SpecializationUpdateEvent.TYPE, new SpecializationUpdateEvent.Handler() {
 
119  0 toggle @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    }
134    }
135    });
136   
137  0 StoreSpecRequirementIDsEvent.Handler requirementsHandler = new StoreSpecRequirementIDsEvent.Handler() {
 
138  0 toggle @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  0 toggle @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    }
169   
 
170  0 toggle @Override
171    public void onRequestFail(Throwable cause) {
172  0 GWT.log("Unable to retrieve model for validation and save", cause);
173    }
174   
175    });
176    }
177    };
178  0 ProgramRegistry.addHandler(StoreSpecRequirementIDsEvent.TYPE, requirementsHandler);
179  0 eventBus.addHandler(StoreSpecRequirementIDsEvent.TYPE, requirementsHandler);
180    }
181   
 
182  0 toggle @Override
183    protected void fireUpdateEvent(Callback<Boolean> okToChange) {
184  0 doSave(okToChange);
185    }
186   
 
187  0 toggle private void doSave(final Callback<Boolean> okToChange) {
188  0 requestModel(new ModelRequestCallback<DataModel>() {
 
189  0 toggle @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  0 toggle @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    }
205    });
206    }
207   
 
208  0 toggle @Override
209    public void onRequestFail(Throwable cause) {
210  0 GWT.log("Unable to retrieve model for validation and save", cause);
211    }
212   
213    });
214    }
215   
 
216  0 toggle @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    }
230   
 
231  0 toggle @Override
232    protected void resetModel() {
233  0 currentId = getStringProperty(ProgramConstants.ID);
234  0 programModel.resetRoot();
235    }
236   
 
237  0 toggle private void doCancel() {
238  0 navigateToParent(ProgramSections.SUMMARY);
239    }
240   
 
241  0 toggle @Override
242    protected void doSave() {
243  0 doSave(NO_OP_CALLBACK);
244    }
245   
 
246  0 toggle 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    }
253   
 
254  0 toggle @Override
255    protected void navigateToParent() {
256  0 navigateToParent(ProgramSections.SPECIALIZATIONS_EDIT);
257    }
258   
 
259  0 toggle 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    }
264   
265   
 
266  0 toggle @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  0 toggle 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    }
282    };
283  0 super.beforeShow(updateCrossConstraintsCallback);
284    }
285   
286    }