1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.internal.component;
21
22 import org.apache.myfaces.tobago.layout.LayoutComponent;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 import javax.faces.context.FacesContext;
27 import javax.faces.event.AbortProcessingException;
28 import javax.faces.event.FacesEvent;
29 import java.io.IOException;
30 import java.util.Map;
31
32 public abstract class AbstractUIMediator extends AbstractUIPanelBase implements LayoutComponent {
33
34 private static final Logger LOG = LoggerFactory.getLogger(AbstractUIMediator.class);
35
36 private String var;
37
38 @Override
39 public void encodeBegin(FacesContext facesContext) throws IOException {
40 super.encodeBegin(facesContext);
41 if (var != null) {
42 facesContext.getExternalContext().getRequestMap().put(var, this);
43 }
44 }
45
46 @Override
47 public void encodeEnd(FacesContext facesContext) throws IOException {
48 if (var != null) {
49 facesContext.getExternalContext().getRequestMap().remove(var);
50 }
51 super.encodeEnd(facesContext);
52 }
53
54 @Override
55 public void broadcast(FacesEvent event) throws AbortProcessingException {
56 Map requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
57 requestMap.put(var, this);
58 try {
59 super.broadcast(event);
60 } finally {
61 requestMap.remove(var);
62 }
63 }
64
65 @Override
66 public Object saveState(FacesContext context) {
67 Object[] state = new Object[2];
68 state[0] = super.saveState(context);
69 state[1] = var;
70 return state;
71 }
72
73 @Override
74 public void restoreState(FacesContext context, Object state) {
75 Object[] values = (Object[]) state;
76 super.restoreState(context, values[0]);
77 var = (String) values[1];
78 }
79
80 public String getVar() {
81 return var;
82 }
83
84 public void setVar(String var) {
85 this.var = var;
86 }
87 }