View Javadoc

1   package org.kuali.student.lum.lu.ui.main.client.controllers;
2   
3   import java.util.Map;
4   
5   import org.kuali.student.common.ui.client.application.Application;
6   import org.kuali.student.common.ui.client.application.ViewContext;
7   import org.kuali.student.common.ui.client.configurable.mvc.LayoutController;
8   import org.kuali.student.common.ui.client.mvc.Callback;
9   import org.kuali.student.common.ui.client.mvc.Controller;
10  import org.kuali.student.common.ui.client.mvc.View;
11  import org.kuali.student.common.ui.client.util.WindowTitleUtils;
12  import org.kuali.student.common.ui.client.widgets.field.layout.element.SpanPanel;
13  import org.kuali.student.common.ui.shared.IdAttributes.IdType;
14  import org.kuali.student.lum.common.client.configuration.LUMViews;
15  import org.kuali.student.lum.common.client.widgets.AppLocations;
16  import org.kuali.student.lum.lu.ui.browseprogram.client.controllers.BrowseProgramController;
17  import org.kuali.student.lum.lu.ui.course.client.controllers.CourseAdminController;
18  import org.kuali.student.lum.lu.ui.course.client.controllers.CourseAdminRetireController;
19  import org.kuali.student.lum.lu.ui.course.client.controllers.CourseAdminWithoutVersionController;
20  import org.kuali.student.lum.lu.ui.course.client.controllers.CourseProposalController;
21  import org.kuali.student.lum.lu.ui.course.client.controllers.ViewCourseParentController;
22  import org.kuali.student.lum.lu.ui.course.client.views.CategoryManagementView;
23  import org.kuali.student.lum.lu.ui.course.client.views.CurriculumHomeView;
24  import org.kuali.student.lum.lu.ui.dependency.client.controllers.DependencyAnalysisController;
25  import org.kuali.student.lum.lu.ui.tools.client.configuration.CatalogBrowserController;
26  import org.kuali.student.lum.lu.ui.tools.client.configuration.CluSetsManagementController;
27  import org.kuali.student.lum.program.client.ProgramConstants;
28  import org.kuali.student.lum.program.client.ProgramRegistry;
29  import org.kuali.student.lum.program.client.core.CoreManager;
30  import org.kuali.student.lum.program.client.credential.CredentialManager;
31  import org.kuali.student.lum.program.client.major.MajorManager;
32  
33  import com.google.gwt.core.client.GWT;
34  import com.google.gwt.core.client.RunAsyncCallback;
35  import com.google.gwt.user.client.Window;
36  
37  /**
38   * Curriculum home controller which controls the main LayoutController views of the lum application.  The
39   * default view of this controller is the Curriculum Home Landing page.  The following views are views within
40   * this controller's scope:<br>
41   * 		COURSE_PROPOSAL<br>
42          VIEW_COURSE<br>
43          PROGRAM_VIEW<br>
44          PROGRAM_EDIT<br>
45          PROGRAM_CREATE<br>
46          PROGRAM_VERSIONS<br>
47          CLU_SETS<br>
48          VARIATION_VIEW<br>
49          VARIATION_EDIT<br>
50          COURSE_CATALOG<br>
51          LO_CATEGORIES<br>
52          BACC_PROGRAM_VIEW<br>
53          BACC_PROGRAM_EDIT<br>
54          BACC_PROGRAM_VERSIONS<br>
55          CORE_PROGRAM_VIEW<br>
56          CORE_PROGRAM_EDIT<br>
57          CORE_PROGRAM_VERSIONS<br>
58   * These views can be accessed through links and searches provided by the CurriculumHomeView (the default view).
59   * 
60   * @author Kuali Student Team
61   * @see CurriculumHomeView
62   */
63  public class CurriculumHomeController extends LayoutController {
64  
65      private CurriculumHomeView home;
66      private final SpanPanel panel = new SpanPanel();
67  
68      private CourseProposalController courseProposalController;
69      private CourseAdminController courseAdminController;
70      private CourseAdminWithoutVersionController courseAdminWithoutVersionController;
71      private CourseAdminRetireController courseAdminRetireController;
72      private LayoutController viewCourseController;
73      private LayoutController manageCluSetsController;
74      private LayoutController browseCatalogController;
75      private LayoutController dependencyAnalysisController;
76      private LayoutController browseProgramController;
77      private MajorManager majorManager = new MajorManager();
78      private CredentialManager credentialManager = new CredentialManager();
79      private CoreManager coreManager = new CoreManager();
80  
81      private abstract class RunAsyncGetView implements RunAsyncCallback {
82          public void onFailure(Throwable reason) {
83              Window.alert("Download failed.  Please try again.");
84          }
85      }
86      
87      public CurriculumHomeController() {
88          super();
89          this.setDefaultView(LUMViews.DEFAULT);
90          this.initWidget(panel);
91          setupDefaultView();
92      }
93  
94      public CurriculumHomeController(Controller controller, String name, Enum<?> viewType) {
95          super();
96          super.setController(controller);
97          super.setName(name);
98          super.setViewEnum(viewType);
99          this.setDefaultView(LUMViews.DEFAULT);
100         this.initWidget(panel);
101         setupDefaultView();
102     }
103 
104     private void setupDefaultView() {
105         home = new CurriculumHomeView(this, LUMViews.DEFAULT);
106     }
107 
108     @Override
109     public <V extends Enum<?>> void getView(V viewType, final Callback<View> callback, Map<String, String> tokenMap) {
110         //this is done so the views can have delayed loading
111 
112         switch ((LUMViews) viewType) {
113             case DEFAULT:
114                 callback.exec(home);
115                 break;
116             case COURSE_PROPOSAL:
117 //                GWT.runAsync(new RunAsyncGetView() {
118 //                    @Override
119 //                    public void onSuccess() {
120                         callback.exec(getCourseProposalController());
121 //                    }
122 //                });
123                 break;
124             case COURSE_ADMIN:
125 //                GWT.runAsync(new RunAsyncGetView() {
126 //                    @Override
127 //                    public void onSuccess() {
128                         callback.exec(getCourseAdminController());
129 //                    }
130 //                });
131                 break;
132             case COURSE_ADMIN_NO_VERSION:
133 //                GWT.runAsync(new RunAsyncGetView() {
134 //                    @Override
135 //                    public void onSuccess() {
136                         callback.exec(getCourseAdminWithoutVersionController());
137 //                    }
138 //                });
139                 break;
140             case COURSE_ADMIN_RETIRE:
141 //              GWT.runAsync(new RunAsyncGetView() {
142 //                  @Override
143 //                  public void onSuccess() {
144                       callback.exec(getCourseAdminRetireController());
145 //                  }
146 //              });
147               break;
148 
149             case VIEW_COURSE:
150 //                GWT.runAsync(new RunAsyncGetView() {
151 //                    @Override
152 //                    public void onSuccess() {
153                         callback.exec(getViewCourseController());
154 //                    }
155 //                });
156                 break;
157             case PROGRAM_PROPOSAL:
158 //                GWT.runAsync(new RunAsyncGetView() {
159 //                    @Override
160 //                    public void onSuccess() {
161                          if (ProgramRegistry.isCreateNew()) {
162                            ProgramRegistry.setCreateNew(false);
163                             majorManager = new MajorManager();
164                          }
165                          callback.exec(majorManager.getMajorProposalController());
166 //                    }
167 //                });
168                 break;
169              case PROGRAM_VIEW:
170 //                GWT.runAsync(new RunAsyncGetView() {
171 //                   @Override
172 //                    public void onSuccess() {
173                         if (ProgramRegistry.isCreateNew()) {
174                             ProgramRegistry.setCreateNew(false);
175                             majorManager = new MajorManager();
176                         }
177                         callback.exec(majorManager.getProgramViewController());
178 //                    }
179 //                });
180                 break;
181             case PROGRAM_EDIT:
182 //                GWT.runAsync(new RunAsyncGetView() {
183 //                    @Override
184 //                    public void onSuccess() {
185                     	Application.getApplicationContext().setParentPath("");//Reset the parent path when navigating back
186                         if (ProgramRegistry.isCreateNew()) {
187                             ProgramRegistry.setCreateNew(false);
188                             majorManager = new MajorManager();
189                         }
190                         callback.exec(majorManager.getProgramEditController());
191 //                    }
192 //                });
193                 break;
194             case PROGRAM_SPEC_EDIT:
195 //                GWT.runAsync(new RunAsyncGetView() {
196 //                    @Override
197 //                    public void onSuccess() {
198                         if (ProgramRegistry.isCreateNew()) {
199                             ProgramRegistry.setCreateNew(false);
200                             majorManager = new MajorManager();
201                         }
202                         callback.exec(majorManager.getProgramSpecEditController());
203 //                    }
204 //                });
205                 break;                
206             case PROGRAM_CREATE:
207 //                GWT.runAsync(new RunAsyncGetView() {
208 //                    @Override
209 //                    public void onSuccess() {
210                         majorManager = new MajorManager();
211                         callback.exec(majorManager.getProgramEditController());
212 //                    }
213 //                });
214                 break;
215             case PROGRAM_VERSIONS:
216 //                GWT.runAsync(new RunAsyncGetView() {
217 //                    @Override
218 //                    public void onSuccess() {
219                         callback.exec(majorManager.getProgramVersionsController());
220 //                    }
221 //                });
222                 break;
223             case CLU_SETS:
224 //                GWT.runAsync(new RunAsyncGetView() {
225 //                    @Override
226 //                    public void onSuccess() {
227                         callback.exec(getCluSetsController());
228 //                    }
229 //                });
230                 break;
231             case COURSE_CATALOG:
232 //                GWT.runAsync(new RunAsyncGetView() {
233 //                    @Override
234 //                    public void onSuccess() {
235                         callback.exec(getBrowseCatalogController());
236 //                    }
237 //                });
238                 break;
239             case VARIATION_VIEW:
240 //                GWT.runAsync(new RunAsyncGetView() {
241 //                    @Override
242 //                    public void onSuccess() {
243             	//Check if key data has been initialized (the program was loaded before the variation)
244             	if(majorManager.getProgramModel()!=null && majorManager.getProgramModel().getDefinition()!=null){	
245                         callback.exec(majorManager.getVariationViewController());
246             	}else{
247             		//If it has not yet been initialized, we need to pull some context information and 
248             		//navigate to the program view which will initialize program information and then load the variation view.
249             		//This is similar to the getFindMajorsWidget() in the CurriculumHomeConfigurer
250             		ViewContext viewContext = new ViewContext();
251                     viewContext.setId(tokenMap.get("docId"));
252                     viewContext.setAttribute(ProgramConstants.VARIATION_ID, tokenMap.get(ProgramConstants.VARIATION_ID));
253                     viewContext.setAttribute(ProgramConstants.TYPE, ProgramConstants.VARIATION_TYPE_KEY);
254                     viewContext.setIdType(IdType.OBJECT_ID);
255                     ProgramRegistry.setCreateNew(true);
256                     Application.navigate(AppLocations.Locations.VIEW_PROGRAM.getLocation(), viewContext);
257             	}
258 //                    }
259 //                });
260                 break;
261             case VARIATION_EDIT:
262 //                GWT.runAsync(new RunAsyncGetView() {
263 //                    @Override
264 //                    public void onSuccess() {
265             	if(majorManager.getProgramModel()!=null && majorManager.getProgramModel().getDefinition()!=null){	
266                     callback.exec(majorManager.getVariationEditController());
267             	}else{
268             		//If the variation edit is refreshed, bring the user to the program screen first
269                 	Application.getApplicationContext().setParentPath("");//Reset the parent path when navigating back
270                     if (ProgramRegistry.isCreateNew()) {
271                         ProgramRegistry.setCreateNew(false);
272                         majorManager = new MajorManager();
273                     }
274                     callback.exec(majorManager.getProgramEditController());
275             	}
276 //                    }
277 //                });
278                 break;
279             case CORE_PROGRAM_VIEW:
280 //                GWT.runAsync(new RunAsyncGetView() {
281 //                    @Override
282 //                    public void onSuccess() {
283                         if (ProgramRegistry.isCreateNew()) {
284                             ProgramRegistry.setCreateNew(false);
285                             coreManager = new CoreManager();
286                         }
287                         callback.exec(coreManager.getViewController());
288 //                    }
289 //                });
290                 break;
291             case CORE_PROGRAM_EDIT:
292 //                GWT.runAsync(new RunAsyncGetView() {
293 //                    @Override
294 //                    public void onSuccess() {
295                         callback.exec(coreManager.getEditController());
296 //                    }
297 //                });
298                 break;
299             case CORE_PROGRAM_VERSIONS:
300 //                GWT.runAsync(new RunAsyncGetView() {
301 //                    @Override
302 //                    public void onSuccess() {
303                         callback.exec(coreManager.getProgramVersionsController());
304 //                    }
305 //                });
306                 break;
307             case BACC_PROGRAM_VIEW:
308 //                GWT.runAsync(new RunAsyncGetView() {
309 //                    @Override
310 //                    public void onSuccess() {
311                         if (ProgramRegistry.isCreateNew()) {
312                             ProgramRegistry.setCreateNew(false);
313                             credentialManager = new CredentialManager();
314                         }
315                         callback.exec(credentialManager.getBaccViewController());
316 //                    }
317 //                });
318                 break;
319             case BACC_PROGRAM_EDIT:
320 //                GWT.runAsync(new RunAsyncGetView() {
321 //                    @Override
322 //                    public void onSuccess() {
323                         callback.exec(credentialManager.getBaccEditController());
324 //                    }
325 //                });
326                 break;
327             case BACC_PROGRAM_VERSIONS:
328 //                GWT.runAsync(new RunAsyncGetView() {
329 //                    @Override
330 //                    public void onSuccess() {
331                         callback.exec(credentialManager.getProgramVersionsController());
332 //                    }
333 //                });
334                 break;
335             case LO_CATEGORIES:
336 //                GWT.runAsync(new RunAsyncGetView() {
337 //                    @Override
338 //                    public void onSuccess() {
339                         callback.exec(getCategoryManagementController());
340 //                    }
341 //                });
342                 break;
343             case DEPENDENCY_ANALYSIS:
344 //                GWT.runAsync(new RunAsyncGetView() {
345 //                    @Override
346 //                    public void onSuccess() {
347                         callback.exec(getDependencyAnalysisController());
348 //                    }
349 //                });
350                 break;
351             case BROWSE_PROGRAM:
352 //                GWT.runAsync(new RunAsyncGetView() {
353 //                    @Override
354 //                    public void onSuccess() {
355                         callback.exec(getBrowseProgramController());
356 //                    }
357 //                });
358                 break;
359             default:
360                 callback.exec(home);
361         }
362     }
363 
364 
365    protected View getCategoryManagementController() {
366         return new CategoryManagementView(this, "Learning Objective Categories", LUMViews.LO_CATEGORIES);
367     }
368 
369     private CourseProposalController getCourseProposalController() {
370         courseProposalController = GWT.create(CourseProposalController.class);
371         return courseProposalController;
372     }
373 
374     private CourseAdminController getCourseAdminController() {
375         courseAdminController = GWT.create(CourseAdminController.class);
376         return courseAdminController;
377     }
378     
379     private CourseAdminWithoutVersionController getCourseAdminRetireController(){
380         courseAdminRetireController = GWT.create(CourseAdminRetireController.class);
381         return courseAdminRetireController;
382     }
383 
384     private CourseAdminWithoutVersionController getCourseAdminWithoutVersionController(){
385         courseAdminWithoutVersionController = GWT.create(CourseAdminWithoutVersionController.class);
386         return courseAdminWithoutVersionController;
387     }
388 
389     private LayoutController getViewCourseController() {
390         if (viewCourseController == null) {
391             viewCourseController = GWT.create(ViewCourseParentController.class);
392         }
393         return this.viewCourseController;
394     }
395 
396     private LayoutController getCluSetsController() {
397         manageCluSetsController = GWT.create(CluSetsManagementController.class);
398         return manageCluSetsController;
399     }
400 
401     private LayoutController getBrowseCatalogController() {
402         browseCatalogController = new CatalogBrowserController(this);
403         return browseCatalogController;
404     }
405 
406     private LayoutController getDependencyAnalysisController() {
407     	dependencyAnalysisController = new DependencyAnalysisController("DependencyAnalaysis");
408         return dependencyAnalysisController;
409     }
410     
411     private LayoutController getBrowseProgramController() {
412     	browseProgramController = new BrowseProgramController("BrowseProgram");
413         return browseProgramController;
414     }
415     
416     @Override
417     protected void hideView(View view) {
418         ApplicationController.getApplicationViewContainer().clear();
419     }
420 
421     @Override
422     protected void renderView(View view) {
423         ApplicationController.getApplicationViewContainer().add(view.asWidget());
424     }
425 
426     @Override
427     public Enum<?> getViewEnumValue(String enumValue) {
428         return LUMViews.valueOf(enumValue);
429     }
430 
431     @Override
432     public void updateModel() {
433         // No model needed here
434     }
435 
436     public <V extends Enum<?>> void showView(V viewType, Callback<Boolean> onReadyCallback) {
437         if (viewType == LUMViews.DEFAULT) {
438             WindowTitleUtils.setContextTitle(name);
439         }
440         super.showView(viewType, onReadyCallback);
441     }
442 }