Coverage Report - org.kuali.student.lum.common.client.widgets.BuildCluSetWidget
 
Classes in this File Line Coverage Branch Coverage Complexity
BuildCluSetWidget
0%
0/32
0%
0/8
4.111
BuildCluSetWidget$1
0%
0/5
0%
0/2
4.111
BuildCluSetWidget$1$1
0%
0/5
N/A
4.111
BuildCluSetWidget$2
0%
0/7
N/A
4.111
BuildCluSetWidget$3
0%
0/55
0%
0/22
4.111
BuildCluSetWidget$3$1
0%
0/29
0%
0/24
4.111
BuildCluSetWidget$BuildCourseView
0%
0/1
N/A
4.111
 
 1  
 /**
 2  
  * Copyright 2010 The Kuali Foundation Licensed under the
 3  
  * Educational Community License, Version 2.0 (the "License"); you may
 4  
  * not use this file except in compliance with the License. You may
 5  
  * obtain a copy of the License at
 6  
  *
 7  
  * http://www.osedu.org/licenses/ECL-2.0
 8  
  *
 9  
  * Unless required by applicable law or agreed to in writing,
 10  
  * software distributed under the License is distributed on an "AS IS"
 11  
  * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 12  
  * or implied. See the License for the specific language governing
 13  
  * permissions and limitations under the License.
 14  
  */
 15  
 package org.kuali.student.lum.common.client.widgets;
 16  
 
 17  
 import java.util.ArrayList;
 18  
 import java.util.List;
 19  
 
 20  
 import org.kuali.student.common.ui.client.configurable.mvc.layouts.BasicLayout;
 21  
 import org.kuali.student.common.ui.client.configurable.mvc.sections.Section;
 22  
 import org.kuali.student.common.ui.client.mvc.*;
 23  
 import org.kuali.student.common.ui.client.service.DataSaveResult;
 24  
 import org.kuali.student.common.ui.client.widgets.progress.BlockingTask;
 25  
 import org.kuali.student.common.ui.client.widgets.progress.KSBlockingProgressIndicator;
 26  
 import org.kuali.student.common.ui.client.widgets.rules.AccessWidgetValue;
 27  
 import org.kuali.student.core.assembly.data.Data;
 28  
 import org.kuali.student.core.assembly.data.Metadata;
 29  
 import org.kuali.student.core.validation.dto.ValidationResultInfo;
 30  
 import org.kuali.student.core.validation.dto.ValidationResultInfo.ErrorLevel;
 31  
 
 32  
 import com.google.gwt.core.client.GWT;
 33  
 import com.google.gwt.user.client.Window;
 34  
 import com.google.gwt.user.client.ui.FlowPanel;
 35  
 
 36  0
 public class BuildCluSetWidget extends FlowPanel implements AccessWidgetValue {
 37  
 
 38  
     private CluSetRetriever cluSetRetriever;
 39  
     private CluSetEditorWidget cluSetEditorWidgetView;
 40  
     private static final String CLUSET_MODEL_ID = "clussetModelId";
 41  
     private DataModel ruleFieldsData;
 42  
     private BasicLayout reqCompController;
 43  0
     public enum BuildCourseView {VIEW}
 44  0
     private BlockingTask retrievingTask = new BlockingTask("Retrieving ...");
 45  
     private String cluSetType;
 46  
     private String metadataId;
 47  
     private String itemLabel;
 48  
     private boolean singularCluOnly;
 49  
 
 50  
     public BuildCluSetWidget(final CluSetRetriever cluSetRetriever, String cluSetType,
 51  
             boolean singularCluOnly) {
 52  0
         super();
 53  
 
 54  0
         this.singularCluOnly = singularCluOnly;
 55  0
         cluSetEditorWidgetView = new CluSetEditorWidget(
 56  
                 new CluSetRetrieverImpl(),
 57  
                 BuildCourseView.VIEW,
 58  
                 "", CLUSET_MODEL_ID, false,
 59  
                 null, cluSetType, singularCluOnly);
 60  
 
 61  0
         ruleFieldsData = new DataModel();
 62  0
         ruleFieldsData.setRoot(new Data());
 63  0
         this.cluSetType = cluSetType;
 64  0
         if (cluSetType != null && cluSetType.equals("kuali.cluSet.type.Program")) {
 65  0
             this.metadataId = "programSet";
 66  0
             this.itemLabel = "program";
 67  
         } else {
 68  0
             this.metadataId = "courseSet";
 69  0
             this.itemLabel = "course";
 70  
         }
 71  
 
 72  
         //setup controller
 73  0
         final CluSetRetriever theRetriever = cluSetRetriever;
 74  0
         this.cluSetRetriever = cluSetRetriever;
 75  0
         reqCompController = new BasicLayout(null);
 76  0
         reqCompController.addView(cluSetEditorWidgetView);
 77  0
         reqCompController.setDefaultModelId(CLUSET_MODEL_ID);
 78  0
         reqCompController.registerModel(CLUSET_MODEL_ID, new ModelProvider<DataModel>() {
 79  
             @Override
 80  
             public void requestModel(final ModelRequestCallback<DataModel> callback) {
 81  0
                 if (ruleFieldsData.getDefinition() == null) {
 82  0
                     theRetriever.getMetadata(metadataId, new Callback<Metadata>(){
 83  
                         @Override
 84  
                         public void exec(Metadata result) {
 85  0
                             DataModelDefinition def = new DataModelDefinition(result);
 86  0
                             ruleFieldsData.setDefinition(def);
 87  0
                             callback.onModelReady(ruleFieldsData);
 88  0
                         }
 89  
                     });
 90  
                 } else {
 91  0
                     callback.onModelReady(ruleFieldsData);
 92  
                 }
 93  0
             }
 94  
         });
 95  
 
 96  0
         reqCompController.showView(BuildCourseView.VIEW);
 97  0
         add(reqCompController);
 98  0
     }
 99  
 
 100  
     @Override
 101  
     public void setValue(final String cluSetId) {
 102  0
         if (cluSetId != null) {
 103  0
             KSBlockingProgressIndicator.addTask(retrievingTask);
 104  0
             cluSetRetriever.getData(cluSetId,  new Callback<Data>() {
 105  
                 @Override
 106  
                 public void exec(Data result) {
 107  
                     try {
 108  0
                         ruleFieldsData.setRoot(result);
 109  0
                         cluSetEditorWidgetView.updateView(ruleFieldsData);
 110  0
                         reqCompController.showView(BuildCourseView.VIEW);
 111  
                     } finally {
 112  0
                         KSBlockingProgressIndicator.removeTask(retrievingTask);
 113  0
                     }
 114  0
                 }
 115  
             });
 116  
         }
 117  0
     }
 118  
 
 119  
     @Override
 120  
     public void initWidget(List<Metadata> fieldsMetadata) {
 121  0
     }
 122  
 
 123  
     @Override
 124  
     public void getValue(final Callback<String> doneSaveCallback) {
 125  0
         GWT.log("CluSetManagementController received save action request.", null);
 126  0
         reqCompController.getCurrentView().updateModel();
 127  0
         if(ruleFieldsData!=null){
 128  0
             ruleFieldsData.validate(new Callback<List<ValidationResultInfo>>() {
 129  
                 @Override
 130  
                 public void exec(List<ValidationResultInfo> result) {
 131  
     
 132  0
                     boolean save = true;
 133  0
                     View v = reqCompController.getCurrentView();
 134  0
                     if(v instanceof Section){
 135  0
                         ((Section) v).setFieldHasHadFocusFlags(true);
 136  0
                         ErrorLevel status = ((Section) v).processValidationResults(result);
 137  0
                         if(status == ErrorLevel.ERROR){
 138  0
                             save = false;
 139  
                         }
 140  
                     }
 141  
     
 142  0
                     if(save){
 143  0
                         reqCompController.getCurrentView().updateModel();
 144  0
                         reqCompController.updateModel();
 145  
                         // set reusable flag here for CluSetManagement.
 146  0
                         Calendar startCal = new GregorianCalendar();
 147  0
                         startCal.set(Calendar.YEAR, 1990);
 148  0
                         startCal.set(Calendar.MONTH, Calendar.JANUARY);
 149  0
                         startCal.set(Calendar.DATE, 1);
 150  0
                         startCal.set(Calendar.HOUR_OF_DAY, 1);
 151  0
                         startCal.set(Calendar.MINUTE, 0);
 152  0
                         startCal.set(Calendar.SECOND, 0);
 153  0
                         Calendar endCal = new GregorianCalendar();
 154  0
                         endCal.set(Calendar.YEAR, 2200);
 155  0
                         endCal.set(Calendar.MONTH, Calendar.JANUARY);
 156  0
                         endCal.set(Calendar.DATE, 1);
 157  0
                         endCal.set(Calendar.HOUR_OF_DAY, 1);
 158  0
                         endCal.set(Calendar.MINUTE, 0);
 159  0
                         endCal.set(Calendar.SECOND, 0);
 160  0
                         CluSetHelper cluSetHelper = CluSetHelper.wrap(ruleFieldsData.getRoot());
 161  0
                         cluSetHelper.setType(cluSetType);
 162  0
                         cluSetHelper.setName("AdHock");
 163  0
                         cluSetHelper.setReusable(new Boolean(false));
 164  0
                         cluSetHelper.setReferenceable(new Boolean(false));
 165  0
                         cluSetHelper.setEffectiveDate(startCal.getTime());
 166  0
                         cluSetHelper.setEffectiveDate(endCal.getTime());
 167  
                         
 168  0
                         int numClus = 0;
 169  0
                         if (cluSetHelper.getApprovedClus() != null) {
 170  0
                             List<String> approvedCluIds = new ArrayList<String>();
 171  0
                             for (Data.Property p : cluSetHelper.getApprovedClus()) {
 172  0
                                 if(!"_runtimeData".equals(p.getKey())){
 173  0
                                     String approvedCluId = p.getValue();
 174  0
                                     approvedCluIds.add(approvedCluId);
 175  0
                                 }
 176  
                             }
 177  0
                             numClus = numClus + approvedCluIds.size();
 178  
                         }
 179  0
                         if (cluSetHelper.getProposedClus() != null) {
 180  0
                             List<String> proposedCluIds = new ArrayList<String>();
 181  0
                             for (Data.Property p : cluSetHelper.getProposedClus()) {
 182  0
                                 if(!"_runtimeData".equals(p.getKey())){
 183  0
                                     String proposedCluId = p.getValue();
 184  0
                                     proposedCluIds.add(proposedCluId);
 185  0
                                 }
 186  
                             }
 187  0
                             numClus = numClus + proposedCluIds.size();
 188  
                         }
 189  0
                         if (singularCluOnly && numClus > 1) {
 190  0
                             Window.alert("Only one " + itemLabel + " is allowed.  " +
 191  
                                     "Please delete all " + itemLabel + " until there is only one left.");
 192  
                         } else {
 193  0
                             cluSetRetriever.saveData(ruleFieldsData.getRoot(), new Callback<DataSaveResult>() {
 194  
                                 @Override
 195  
                                 public void exec(DataSaveResult result) {
 196  0
                                     if (result.getValidationResults() != null &&
 197  
                                             !result.getValidationResults().isEmpty()) {
 198  0
                                         StringBuilder errorMessage = new StringBuilder();
 199  0
                                         errorMessage.append("Validation error: ");
 200  0
                                         for (ValidationResultInfo validationError : result.getValidationResults()) {
 201  0
                                             errorMessage.append(validationError.getMessage()).append(" ");
 202  
                                         }
 203  0
                                         doneSaveCallback.exec(null);
 204  0
                                         Window.alert(errorMessage.toString());
 205  0
                                     } else {
 206  0
                                         ruleFieldsData.setRoot(result.getValue());
 207  0
                                         CluSetHelper helper = CluSetHelper.wrap((Data)ruleFieldsData.getRoot());
 208  0
                                         String cluSetId = helper.getId();
 209  0
                                         Data approvedClusData = helper.getApprovedClus();
 210  0
                                         Data proposedClusData = helper.getProposedClus();
 211  0
                                         String cluId = null;
 212  0
                                         if (singularCluOnly) {
 213  0
                                             if (cluId == null && approvedClusData != null) {
 214  0
                                                 for (Data.Property p : approvedClusData) {
 215  0
                                                     if(!"_runtimeData".equals(p.getKey())){
 216  0
                                                         cluId = p.getValue();
 217  0
                                                         break;
 218  
                                                     }
 219  
                                                 }
 220  
                                             }
 221  0
                                             if (cluId == null && proposedClusData != null) {
 222  0
                                                 for (Data.Property p : proposedClusData) {
 223  0
                                                     if(!"_runtimeData".equals(p.getKey())){
 224  0
                                                         cluId = p.getValue();
 225  0
                                                         break;
 226  
                                                     }
 227  
                                                 }
 228  
                                             }
 229  0
                                             doneSaveCallback.exec(cluId);
 230  
                                         } else {
 231  0
                                             doneSaveCallback.exec(cluSetId);
 232  
                                         }
 233  
                                     }
 234  0
                                 }
 235  
                             });
 236  
                         }
 237  0
                     }
 238  
                     else {
 239  0
                         Window.alert("Save failed.  Please check fields for errors.");
 240  
                     }
 241  
 
 242  0
                 }
 243  
             });
 244  
         }
 245  0
     }
 246  
     
 247  
 }