KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > webapp > http > core > ReceiveSendUpdates


1 package com.icesoft.faces.webapp.http.core;
2
3 import com.icesoft.faces.application.D2DViewHandler;
4 import com.icesoft.faces.webapp.http.common.Request;
5 import com.icesoft.faces.webapp.http.common.Server;
6
7 import javax.faces.FactoryFinder;
8 import javax.faces.component.UIComponent;
9 import javax.faces.component.UIForm;
10 import javax.faces.component.UIInput;
11 import javax.faces.el.ValueBinding;
12 import javax.faces.context.FacesContext;
13 import javax.faces.lifecycle.Lifecycle;
14 import javax.faces.lifecycle.LifecycleFactory;
15 import java.util.ArrayList JavaDoc;
16 import java.util.Arrays JavaDoc;
17 import java.util.Collection JavaDoc;
18 import java.util.Iterator JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Map JavaDoc;
21 import java.util.HashMap JavaDoc;
22
23 public class ReceiveSendUpdates implements Server {
24     private static final String JavaDoc REQUIRED = "required";
25     private static final LifecycleFactory LifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
26     private Lifecycle lifecycle = LifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
27     private Map JavaDoc commandQueues;
28     private Collection JavaDoc synchronouslyUpdatedViews;
29
30     public ReceiveSendUpdates(Map JavaDoc commandQueues, Collection JavaDoc synchronouslyUpdatedViews) {
31         this.commandQueues = commandQueues;
32         this.synchronouslyUpdatedViews = synchronouslyUpdatedViews;
33     }
34
35     public void service(final Request request) throws Exception JavaDoc {
36         List JavaDoc viewIdentifiers = Arrays.asList(request.getParameterAsStrings("viewNumber"));
37         synchronouslyUpdatedViews.addAll(viewIdentifiers);
38
39         FacesContext context = FacesContext.getCurrentInstance();
40         if (request.getParameterAsBoolean("partial", false)) {
41             String JavaDoc componentID = request.getParameter("ice.event.captured");
42             UIComponent component = D2DViewHandler.findComponent(componentID, context.getViewRoot());
43             renderCyclePartial(context, component);
44         } else {
45             renderCycle(context);
46         }
47
48         request.respondWith(new SendUpdates.Handler(commandQueues, request));
49     }
50
51     public void shutdown() {
52     }
53
54     private void renderCycle(FacesContext context) {
55         synchronized (context) {
56             com.icesoft.util.SeamUtilities.removeSeamDebugPhaseListener(lifecycle);
57             lifecycle.execute(context);
58             lifecycle.render(context);
59         }
60     }
61
62     private void renderCyclePartial(FacesContext context,
63                                     UIComponent component) {
64         synchronized (context) {
65             Map JavaDoc alteredRequiredComponents =
66                     setRequiredFalseInFormContaining(component);
67             com.icesoft.util.SeamUtilities.removeSeamDebugPhaseListener(lifecycle);
68             lifecycle.execute(context);
69             lifecycle.render(context);
70             setRequiredTrue(alteredRequiredComponents);
71         }
72     }
73
74     private void setRequiredTrue(Map JavaDoc requiredComponents) {
75         Iterator JavaDoc i = requiredComponents.keySet().iterator();
76         UIInput next = null;
77         while (i.hasNext()) {
78             next = (UIInput) i.next();
79             ValueBinding valueBinding = (ValueBinding)
80                     requiredComponents.get(next);
81             if (null != valueBinding) {
82                 next.setValueBinding(REQUIRED, valueBinding);
83             } else {
84                 next.setRequired(true);
85             }
86         }
87     }
88
89     private Map JavaDoc setRequiredFalseInFormContaining(UIComponent component) {
90         Map JavaDoc alteredComponents = new HashMap JavaDoc();
91         UIComponent form = getContainingForm(component);
92         setRequiredFalseOnAllChildrenExceptOne(form, component,
93                 alteredComponents);
94         return alteredComponents;
95     }
96
97     private void setRequiredFalseOnAllChildrenExceptOne(UIComponent parent,
98                                                         UIComponent componentToAvoid,
99                                                         Map JavaDoc alteredComponents) {
100         ValueBinding FALSE_BINDING = FacesContext.getCurrentInstance()
101                 .getApplication().createValueBinding("#{false}");
102         int length = parent.getChildCount();
103         UIComponent next = null;
104         for (int i = 0; i < length; i++) {
105             next = (UIComponent) parent.getChildren().get(i);
106             if (next instanceof UIInput && next != componentToAvoid) {
107                 UIInput input = (UIInput) next;
108                 if (input.isRequired()) {
109                     ValueBinding valueBinding =
110                             input.getValueBinding(REQUIRED);
111                     if (null != valueBinding) {
112                         input.setValueBinding(REQUIRED, FALSE_BINDING);
113                     } else {
114                         input.setRequired(false);
115                     }
116                     alteredComponents.put(input, valueBinding);
117                 }
118             }
119             setRequiredFalseOnAllChildrenExceptOne(next, componentToAvoid,
120                     alteredComponents);
121         }
122     }
123
124     private UIComponent getContainingForm(UIComponent component) {
125         if (null == component) {
126             return FacesContext.getCurrentInstance().getViewRoot();
127         }
128         UIComponent parent = component.getParent();
129         while (parent != null) {
130             if (parent instanceof UIForm) {
131                 break;
132             }
133             parent = parent.getParent();
134         }
135         return (UIForm) parent;
136     }
137
138
139 }
140
Popular Tags