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 javax.faces.event;
20  
21  import java.util.Collections;
22  import java.util.HashMap;
23  import java.util.List;
24  import java.util.Map;
25  
26  import javax.faces.component.UIComponent;
27  import javax.faces.context.FacesContext;
28  
29  /**
30   * @since 2.0
31   */
32  public class ExceptionQueuedEventContext implements SystemEventListenerHolder
33  {
34      // TODO: -=Leonardo Uribe=- This type of constants should be the same 
35      // for ri and myfaces, to keep binary compatibility and pass TCK test.
36      public static final String IN_AFTER_PHASE_KEY = ExceptionQueuedEventContext.class.getName() + ".IN_AFTER_PHASE";
37      public static final String IN_BEFORE_PHASE_KEY = ExceptionQueuedEventContext.class.getName() + ".IN_BEFORE_PHASE";
38      
39      private Map<Object, Object> _attributes;
40      private UIComponent _component;
41      private FacesContext _context;
42      private PhaseId _phase;
43      private Throwable _thrown;
44  
45      public ExceptionQueuedEventContext(FacesContext context, Throwable thrown)
46      {
47          this(context, thrown, null);
48      }
49  
50      public ExceptionQueuedEventContext(FacesContext context, Throwable thrown, UIComponent component)
51      {
52          this(context, thrown, component, null);
53      }
54  
55      public ExceptionQueuedEventContext(FacesContext context, Throwable thrown, UIComponent component, PhaseId phaseId)
56      {
57          _context = context;
58          _thrown = thrown;
59          _component = component;
60          _phase = (phaseId == null ? context.getCurrentPhaseId() : phaseId);
61      }
62      
63      public Map<Object,Object> getAttributes()
64      {
65          if (_attributes == null)
66          {
67              _attributes = new HashMap<Object, Object>();
68          }
69          
70          return _attributes;
71      }
72      
73      public UIComponent getComponent()
74      {
75          return _component;
76      }
77      
78      public FacesContext getContext()
79      {
80          return _context;
81      }
82      
83      public Throwable getException()
84      {
85          return _thrown;
86      }
87  
88      /**
89       * {@inheritDoc}
90       */
91      public List<SystemEventListener> getListenersForEventClass(Class<? extends SystemEvent> facesEventClass)
92      {
93          return Collections.singletonList((SystemEventListener)getContext().getExceptionHandler());
94      }
95      
96      public PhaseId getPhaseId()
97      {
98          return _phase;
99      }
100     
101     public boolean inAfterPhase()
102     {
103         return (_attributes != null && _attributes.containsKey(IN_AFTER_PHASE_KEY));
104     }
105     
106     public boolean inBeforePhase()
107     {
108         return (_attributes != null && _attributes.containsKey(IN_BEFORE_PHASE_KEY));
109     }
110 }