View Javadoc

1   package org.kuali.student.lum.program.client.variation;
2   
3   import com.google.gwt.event.dom.client.ClickEvent;
4   import com.google.gwt.event.dom.client.ClickHandler;
5   import com.google.gwt.event.shared.HandlerManager;
6   import com.google.gwt.user.client.ui.Anchor;
7   import com.google.gwt.user.client.ui.HorizontalPanel;
8   import com.google.gwt.user.client.ui.Label;
9   import com.google.gwt.user.client.ui.Widget;
10  
11  import org.kuali.student.common.assembly.data.Data;
12  import org.kuali.student.common.ui.client.application.ViewContext;
13  import org.kuali.student.common.ui.client.mvc.DataModel;
14  import org.kuali.student.common.ui.client.mvc.ModelRequestCallback;
15  import org.kuali.student.common.ui.client.mvc.history.HistoryManager;
16  import org.kuali.student.lum.common.client.widgets.AppLocations;
17  import org.kuali.student.lum.program.client.ProgramConstants;
18  import org.kuali.student.lum.program.client.ProgramController;
19  import org.kuali.student.lum.program.client.events.ModelLoadedEvent;
20  import org.kuali.student.lum.program.client.major.MajorController;
21  import org.kuali.student.lum.program.client.properties.ProgramProperties;
22  import org.kuali.student.lum.program.client.rpc.AbstractCallback;
23  import org.kuali.student.lum.program.client.widgets.ProgramSideBar;
24  
25  import java.util.List;
26  
27  /**
28   * @author Igor
29   */
30  public abstract class VariationController extends ProgramController {
31  
32      private String parentName;
33  
34      protected MajorController majorController;
35  
36      /**
37       * Constructor.
38       *
39       * @param programModel
40       * @param eventBus
41       */
42      public VariationController(DataModel programModel, ViewContext viewContext, HandlerManager eventBus, MajorController majorController) {
43          super("", programModel, viewContext, eventBus);
44          this.parentName = majorController.getName();
45          this.majorController = majorController;
46          setName(getProgramName());
47          sideBar = new ProgramSideBar(eventBus, ProgramSideBar.Type.MAJOR);
48          sideBar.initialize(majorController);
49      }
50  
51      @Override
52      protected void configureView() {
53          setStatus();
54          super.configureView();
55          setContentTitle(getProgramName());
56          addContentWidget(createParentAnchor());
57          addContentWidget(createCommentPanel());
58      }
59  
60      private Widget createParentAnchor() {
61          HorizontalPanel anchorPanel = new HorizontalPanel();
62          Anchor anchor = new Anchor(parentName);
63          anchor.addClickHandler(new ClickHandler() {
64              @Override
65              public void onClick(ClickEvent event) {
66                  navigateToParent();
67              }
68          });
69          Label parentProgram = new Label(ProgramProperties.get().variation_parentProgram());
70          parentProgram.addStyleName("parentProgram");
71          anchorPanel.add(parentProgram);
72          anchorPanel.add(anchor);
73          return anchorPanel;
74      }
75  
76      protected abstract void navigateToParent();
77  
78      @Override
79      public String getProgramName() {
80          String name = getStringProperty(ProgramConstants.LONG_TITLE);
81          if (name == null) {
82              return ProgramProperties.get().variation_new();
83          }
84          return ProgramProperties.get().variation_title(name);
85      }
86  
87      @Override
88      public void collectBreadcrumbNames(List<String> names) {
89          names.add(parentName + "@" + HistoryManager.appendContext(AppLocations.Locations.VIEW_PROGRAM.getLocation(), getViewContext()));
90          super.collectBreadcrumbNames(names);
91      }
92  
93      /**
94       * Loads data model from the server.
95       *
96       * @param callback we have to invoke this callback when model is loaded or failed.
97       */
98      @Override
99      protected void loadModel(final ModelRequestCallback<DataModel> callback) {
100         programRemoteService.getData(getViewContext().getId(), new AbstractCallback<Data>(ProgramProperties.get().common_retrievingData()) {
101 
102             @Override
103             public void onFailure(Throwable caught) {
104                 super.onFailure(caught);
105                 callback.onRequestFail(caught);
106             }
107 
108             @Override
109             public void onSuccess(Data result) {
110                 super.onSuccess(result);
111                 programModel.setRoot(result);
112                 callback.onModelReady(programModel);
113                 eventBus.fireEvent(new ModelLoadedEvent(programModel));
114             }
115         });
116     }
117 }