1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.uif.lifecycle.model;
17
18 import java.lang.annotation.Annotation;
19 import java.util.Map;
20 import java.util.Map.Entry;
21
22 import org.apache.commons.lang.StringUtils;
23 import org.kuali.rice.krad.uif.component.ClientSideState;
24 import org.kuali.rice.krad.uif.component.Component;
25 import org.kuali.rice.krad.uif.lifecycle.ViewLifecycle;
26 import org.kuali.rice.krad.uif.lifecycle.ViewLifecyclePhase;
27 import org.kuali.rice.krad.uif.lifecycle.ViewLifecycleTaskBase;
28 import org.kuali.rice.krad.uif.util.CopyUtils;
29 import org.kuali.rice.krad.uif.util.ObjectPropertyUtils;
30 import org.kuali.rice.krad.uif.view.View;
31 import org.kuali.rice.krad.uif.view.ViewModel;
32
33
34
35
36
37
38 public class SyncClientSideStateTask extends ViewLifecycleTaskBase<Component> {
39
40
41
42
43
44
45 public SyncClientSideStateTask(ViewLifecyclePhase phase) {
46 super(phase, Component.class);
47 }
48
49
50
51
52
53
54
55 @Override
56 protected void performLifecycleTask() {
57 Component component = (Component) getElementState().getElement();
58 ViewModel model = (ViewModel) ViewLifecycle.getModel();
59
60
61 Map<String, Object> clientSideState = model.getClientStateForSyncing();
62 if (!(component instanceof View) && clientSideState.containsKey(component.getId())) {
63 @SuppressWarnings("unchecked")
64 Map<String, Object> componentState =
65 (Map<String, Object>) clientSideState.get(component.getId());
66 clientSideState = componentState;
67 }
68
69
70 if ((clientSideState != null) && (!clientSideState.isEmpty())) {
71 Map<String, Annotation> annotatedFields = CopyUtils.getFieldsWithAnnotation(component.getClass(),
72 ClientSideState.class);
73
74 for (Entry<String, Annotation> annotatedField : annotatedFields.entrySet()) {
75 ClientSideState clientSideStateAnnot = (ClientSideState) annotatedField.getValue();
76
77 String variableName = clientSideStateAnnot.variableName();
78 if (StringUtils.isBlank(variableName)) {
79 variableName = annotatedField.getKey();
80 }
81
82 if (clientSideState.containsKey(variableName)) {
83 Object value = clientSideState.get(variableName);
84 ObjectPropertyUtils.setPropertyValue(component, annotatedField.getKey(), value);
85 }
86 }
87 }
88 }
89
90 }