1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.custom.aliasbean;
20
21 import javax.el.ValueExpression;
22 import javax.faces.component.UIComponent;
23 import javax.faces.context.FacesContext;
24 import javax.faces.el.ValueBinding;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28
29
30
31
32
33
34
35
36
37
38
39
40
41 class Alias {
42 static final Log log = LogFactory.getLog(Alias.class);
43
44 private transient UIComponent _aliasComponent;
45 private String _aliasBeanExpression;
46 private String _valueExpression;
47 private transient boolean _active = false;
48
49 private transient Object evaluatedExpression = null;
50
51 Alias(AliasBean aliasComponent){
52 this._aliasComponent = aliasComponent;
53 }
54
55
56
57
58
59 void setAliasBeanExpression(String aliasBeanExpression){
60 this._aliasBeanExpression = aliasBeanExpression;
61 }
62
63
64
65
66
67
68
69
70 void setValueExpression(String valueExpression){
71 this._valueExpression = valueExpression;
72 }
73
74 String getValueExpression(){
75 return _valueExpression;
76 }
77
78 boolean isActive(){
79 return _active;
80 }
81
82 String[] saveState(){
83 return new String[]{_aliasBeanExpression, _valueExpression};
84 }
85
86 void restoreState(Object state){
87 String[] values = (String[]) state;
88 _aliasBeanExpression = values[0];
89 _valueExpression = values[1];
90 }
91
92 private void computeEvaluatedExpression(FacesContext facesContext){
93 if( evaluatedExpression != null )
94 return;
95
96 ValueExpression valueVB = null;
97 if (_valueExpression == null) {
98 valueVB = _aliasComponent.getValueExpression("value");
99 _valueExpression = valueVB.getExpressionString();
100 }
101
102 if( valueVB == null ){
103 if( _valueExpression.startsWith("#{") ){
104 valueVB = facesContext.getApplication().getExpressionFactory()
105 .createValueExpression(facesContext.getELContext(),
106 _valueExpression,
107 Object.class);
108 evaluatedExpression = valueVB.getValue(facesContext.getELContext());
109 }else{
110 evaluatedExpression = _valueExpression;
111 }
112 }else{
113 evaluatedExpression = valueVB.getValue(facesContext.getELContext());
114 }
115 }
116
117
118
119
120 void make(FacesContext facesContext){
121 if( _active )
122 return;
123
124 ValueExpression aliasVB;
125 if (_aliasBeanExpression == null) {
126 aliasVB = _aliasComponent.getValueExpression("alias");
127 if( aliasVB == null )
128 return;
129 _aliasBeanExpression = aliasVB.getExpressionString();
130 if( _aliasBeanExpression == null )
131 return;
132 } else {
133 aliasVB = facesContext.getApplication().getExpressionFactory().
134 createValueExpression(facesContext.getELContext(),_aliasBeanExpression,Object.class);
135 }
136
137 computeEvaluatedExpression( facesContext );
138
139 aliasVB.setValue(facesContext.getELContext(), evaluatedExpression);
140 _active = true;
141
142 log.debug("makeAlias: " + _valueExpression + " = " + _aliasBeanExpression);
143 }
144
145
146
147
148 void remove(FacesContext facesContext){
149 _active = false;
150 if( evaluatedExpression == null )
151 return;
152
153 evaluatedExpression = null;
154
155 log.debug("removeAlias: " + _valueExpression + " != " + _aliasBeanExpression);
156 ValueExpression aliasVB = _aliasComponent.getValueExpression("alias");
157 if( aliasVB != null )
158 aliasVB.setValue(facesContext.getELContext(), null);
159 }
160 }