1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.student.common.ui.client.configurable.mvc.binding;
17
18 import org.kuali.student.common.ui.client.configurable.mvc.multiplicity.MultiplicityGroupItem;
19 import org.kuali.student.common.ui.client.configurable.mvc.sections.Section;
20 import org.kuali.student.common.ui.client.configurable.mvc.sections.SectionBinding;
21 import org.kuali.student.common.ui.client.mvc.DataModel;
22 import org.kuali.student.r1.common.assembly.data.QueryPath;
23
24 import com.google.gwt.core.client.GWT;
25 import com.google.gwt.user.client.ui.Widget;
26
27
28
29
30
31
32
33 public class MultiplicityGroupItemBinding extends ModelWidgetBindingSupport<MultiplicityGroupItem> {
34 public static MultiplicityGroupItemBinding INSTANCE = new MultiplicityGroupItemBinding();
35
36 protected static final String RT_CREATED = "_runtimeData" + QueryPath.getPathSeparator() + "created";
37 protected static final String RT_UPDATED = "_runtimeData" + QueryPath.getPathSeparator() + "updated";
38 protected static final String RT_DELETED = "_runtimeData" + QueryPath.getPathSeparator() + "deleted";
39
40 private MultiplicityGroupItemBinding() {};
41
42
43
44
45
46 @Override
47 public void setModelValue(MultiplicityGroupItem multiplicityItem, DataModel model, String path) {
48 String itemPath = QueryPath.concat(path, String.valueOf(multiplicityItem.getItemKey())).toString();
49 String itemRuntimePath = itemPath;
50 Widget widget = multiplicityItem.getItemWidget();
51
52 boolean multiplicityItemIsDirty = false;
53 if (widget instanceof Section) {
54 if (((Section)widget).isDirty()){
55
56 itemPath = "";
57 SectionBinding.INSTANCE.setModelValue((Section) widget, model, itemPath);
58 multiplicityItemIsDirty = true;
59 }
60 } else if (widget instanceof ModelWidgetBinding) {
61 ((ModelWidgetBinding) widget).setModelValue(widget, model, path);
62 multiplicityItemIsDirty = true;
63 } else {
64 GWT.log(itemPath + " has no widget binding.", null);
65 }
66
67
68 if (multiplicityItemIsDirty || multiplicityItem.isDeleted()){
69 QueryPath qPath;
70 if (multiplicityItem.isCreated()) {
71 qPath = QueryPath.parse(itemRuntimePath + QueryPath.getPathSeparator() + RT_CREATED);
72 } else if (multiplicityItem.isDeleted()) {
73 qPath = QueryPath.parse(itemRuntimePath + QueryPath.getPathSeparator() + RT_DELETED);
74 } else {
75 qPath = QueryPath.parse(itemRuntimePath + QueryPath.getPathSeparator() + RT_UPDATED);
76 }
77 try {
78 Boolean oldValue = model.get(qPath);
79 Boolean newValue = true;
80 if (!nullsafeEquals(oldValue, newValue)) {
81 model.set(qPath, newValue);
82 setDirtyFlag(model, qPath);
83 }
84 } catch (IllegalArgumentException e) {
85
86 GWT.log("Warning: Ignoring error attempting to setValue for " + widget.getClass().getName() + " path: " + qPath, e);
87 }
88 }
89
90 }
91
92
93
94
95
96 @Override
97 public void setWidgetValue(MultiplicityGroupItem multiplicityItem, DataModel model, String path) {
98
99 String itemPath ="";
100 Widget widget = multiplicityItem.getItemWidget();
101 if (widget instanceof Section) {
102 SectionBinding.INSTANCE.setWidgetValue((Section) widget, model, itemPath);
103 } else if (widget instanceof ModelWidgetBinding) {
104 ((ModelWidgetBinding) widget).setWidgetValue(widget, model, path);
105 } else {
106 GWT.log(itemPath + " has no widget binding.", null);
107 }
108
109 multiplicityItem.setCreated(false);
110 multiplicityItem.setCreated(false);
111 }
112
113
114 }