View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.event;
20  
21  import javax.el.ELContext;
22  import javax.el.ValueExpression;
23  import javax.faces.component.StateHolder;
24  import javax.faces.context.FacesContext;
25  import javax.faces.event.AbortProcessingException;
26  import javax.faces.event.ActionEvent;
27  import javax.faces.event.ActionListener;
28  
29  /**
30   * The MyFaces implementation of the <code>SetPropertyActionListener</code>.
31   * 
32   * @author Dennis Byrne
33   * @since 1.2
34   */
35  public class SetPropertyActionListener implements ActionListener, StateHolder
36  {
37  
38      private ValueExpression target;
39      
40      private ValueExpression value;
41      
42      private boolean _transient ;
43      
44      public SetPropertyActionListener(){}
45      
46      public SetPropertyActionListener(ValueExpression target, ValueExpression value)
47      {
48          this.target = target;
49          this.value = value;
50      }
51      
52      public void processAction(ActionEvent actionEvent) throws AbortProcessingException
53      {
54          
55          if( target == null )
56          {
57              throw new AbortProcessingException("@target has not been set");
58          }
59  
60          if( value == null )
61          {
62              throw new AbortProcessingException("@value has not been set");
63          }
64          
65          FacesContext ctx = FacesContext.getCurrentInstance();
66          
67          if( ctx == null )
68          {
69              throw new AbortProcessingException("FacesContext ctx is null");
70          }
71          
72          ELContext ectx = ctx.getELContext();
73          
74          if( ectx == null )
75          {
76              throw new AbortProcessingException("ELContext ectx is null");
77          }
78          
79          // TODO use a Converter before calling setValue 
80          
81          target.setValue(ectx, value.getValue(ectx));
82          
83      }
84  
85      public Object saveState(FacesContext context)
86      {
87          Object[] state = new Object[2];
88          state[0] = target;
89          state[1] = value;
90          return state;
91      }
92  
93      public void restoreState(FacesContext context, Object state)
94      {
95          Object[] values = (Object[]) state;
96          target = (ValueExpression) values[0];
97          value = (ValueExpression) values[1];
98      }
99  
100     public boolean isTransient()
101     {
102         return _transient;
103     }
104 
105     public void setTransient(boolean trans)
106     {
107         this._transient = trans;
108     }
109 
110     public ValueExpression getTarget()
111     {
112         return target;
113     }
114 
115     public void setTarget(ValueExpression target)
116     {
117         this.target = target;
118     }
119 
120     public ValueExpression getValue()
121     {
122         return value;
123     }
124 
125     public void setValue(ValueExpression value)
126     {
127         this.value = value;
128     }
129 
130 }