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
29
30 public abstract class VariationController extends ProgramController {
31
32 private String parentName;
33
34 protected MajorController majorController;
35
36
37
38
39
40
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
95
96
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 }