View Javadoc

1   package org.apache.velocity.context;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.    
20   */
21  
22  import java.util.HashSet;
23  import java.util.Set;
24  import java.util.List;
25  
26  import org.apache.velocity.VelocityContext;
27  import org.apache.velocity.app.event.EventCartridge;
28  import org.apache.velocity.runtime.RuntimeConstants;
29  import org.apache.velocity.runtime.RuntimeServices;
30  import org.apache.velocity.runtime.resource.Resource;
31  import org.apache.velocity.util.ClassUtils;
32  import org.apache.velocity.util.introspection.IntrospectionCacheData;
33  
34  /**
35   * This is an abstract internal-use-only context implementation to be
36   * used as a subclass for other internal-use-only contexts that wrap
37   * other internal-use-only contexts.
38   *
39   * We use this context to make it easier to chain an existing context
40   * as part of a new context implementation.  It just delegates everything
41   * to the inner/parent context. Subclasses then only need to override
42   * the methods relevant to them.
43   *
44   * @author Nathan Bubna
45   * @version $Id: ChainedInternalContextAdapter.java 685724 2008-08-13 23:12:12Z nbubna $
46   * @since 1.6
47   */
48  public abstract class ChainedInternalContextAdapter implements InternalContextAdapter
49  {
50      /** the parent context */
51      protected InternalContextAdapter innerContext = null;
52      
53      /**
54       * CTOR, wraps an ICA
55       * @param inner context
56       */
57      public ChainedInternalContextAdapter(InternalContextAdapter inner)
58      {
59          innerContext = inner;
60      }
61      
62      /**
63       * Return the inner / user context.
64       * @return The inner / user context.
65       */
66      public Context getInternalUserContext()
67      {
68          return innerContext.getInternalUserContext();
69      }
70  
71      /**
72       * @see org.apache.velocity.context.InternalWrapperContext#getBaseContext()
73       */
74      public InternalContextAdapter getBaseContext()
75      {
76          return innerContext.getBaseContext();
77      }
78  
79      /**
80       * Retrieves from parent context.
81       *
82       * @param key name of item to get
83       * @return  stored object or null
84       */
85      public Object get(String key)
86      {
87          return innerContext.get(key);
88      }
89  
90      /**
91       * Put method also stores values in parent context
92       *
93       * @param key name of item to set
94       * @param value object to set to key
95       * @return old stored object
96       */
97      public Object put(String key, Object value)
98      {
99          /*
100          * just put in the local context
101          */
102         return innerContext.put(key, value);
103     }
104 
105     /**
106      * @see org.apache.velocity.context.Context#containsKey(java.lang.Object)
107      */
108     public boolean containsKey(Object key)
109     {
110         return innerContext.containsKey(key);
111     }
112 
113     /**
114      * @see org.apache.velocity.context.Context#getKeys()
115      */
116     public Object[] getKeys()
117     {
118         return innerContext.getKeys();
119     }
120 
121     /**
122      * @see org.apache.velocity.context.Context#remove(java.lang.Object)
123      */
124     public Object remove(Object key)
125     {
126         return innerContext.remove(key);
127     }
128 
129     /**
130      * @see org.apache.velocity.context.InternalHousekeepingContext#pushCurrentTemplateName(java.lang.String)
131      */
132     public void pushCurrentTemplateName(String s)
133     {
134         innerContext.pushCurrentTemplateName(s);
135     }
136 
137     /**
138      * @see org.apache.velocity.context.InternalHousekeepingContext#popCurrentTemplateName()
139      */
140     public void popCurrentTemplateName()
141     {
142         innerContext.popCurrentTemplateName();
143     }
144 
145     /**
146      * @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentTemplateName()
147      */
148     public String getCurrentTemplateName()
149     {
150         return innerContext.getCurrentTemplateName();
151     }
152 
153     /**
154      * @see org.apache.velocity.context.InternalHousekeepingContext#getTemplateNameStack()
155      */
156     public Object[] getTemplateNameStack()
157     {
158         return innerContext.getTemplateNameStack();
159     }
160 
161     /**
162      * @see org.apache.velocity.context.InternalHousekeepingContext#pushCurrentMacroName(java.lang.String)
163      */
164     public void pushCurrentMacroName(String s)
165     {
166         innerContext.pushCurrentMacroName(s);
167     }
168 
169     /**
170      * @see org.apache.velocity.context.InternalHousekeepingContext#popCurrentMacroName()
171      */
172     public void popCurrentMacroName()
173     {
174         innerContext.popCurrentMacroName();
175     }
176 
177     /**
178      * @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentMacroName()
179      */
180     public String getCurrentMacroName()
181     {
182         return innerContext.getCurrentMacroName();
183     }
184 
185     /**
186      * @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentMacroCallDepth()
187      */
188     public int getCurrentMacroCallDepth()
189     {
190         return innerContext.getCurrentMacroCallDepth();
191     }
192 
193     /**
194      * @see org.apache.velocity.context.InternalHousekeepingContext#getMacroNameStack()
195      */
196     public Object[] getMacroNameStack()
197     {
198         return innerContext.getMacroNameStack();
199     }
200 
201     /**
202      * @see org.apache.velocity.context.InternalHousekeepingContext#icacheGet(java.lang.Object)
203      */
204     public IntrospectionCacheData icacheGet(Object key)
205     {
206         return innerContext.icacheGet(key);
207     }
208 
209     /**
210      * @see org.apache.velocity.context.InternalWrapperContext#localPut(java.lang.String,java.lang.Object)
211      */
212     public Object localPut(final String key, final Object value)
213     {
214         return innerContext.put(key, value);
215     }
216 
217     /**
218      * @see org.apache.velocity.context.InternalHousekeepingContext#icachePut(java.lang.Object, org.apache.velocity.util.introspection.IntrospectionCacheData)
219      */
220     public void icachePut(Object key, IntrospectionCacheData o)
221     {
222         innerContext.icachePut(key, o);
223     }
224 
225     /**
226      * @see org.apache.velocity.context.InternalHousekeepingContext#getAllowRendering()
227      */
228     public boolean getAllowRendering()
229     {
230        return innerContext.getAllowRendering();
231     }
232 
233     /**
234      * @see org.apache.velocity.context.InternalHousekeepingContext#setAllowRendering(boolean)
235      */
236     public void setAllowRendering(boolean v)
237     {
238         innerContext.setAllowRendering(v);
239     }
240 
241     /**
242      * @see org.apache.velocity.context.InternalHousekeepingContext#setMacroLibraries(List)
243      */
244     public void setMacroLibraries(List macroLibraries)
245     {
246         innerContext.setMacroLibraries(macroLibraries);
247     }
248     
249     /**
250      * @see org.apache.velocity.context.InternalHousekeepingContext#getMacroLibraries()
251      */
252     public List getMacroLibraries()
253     {
254         return innerContext.getMacroLibraries();
255     }
256 
257     /**
258      * @see org.apache.velocity.context.InternalEventContext#attachEventCartridge(org.apache.velocity.app.event.EventCartridge)
259      */
260     public EventCartridge attachEventCartridge(EventCartridge ec)
261     {
262         return innerContext.attachEventCartridge(ec);
263     }
264 
265     /**
266      * @see org.apache.velocity.context.InternalEventContext#getEventCartridge()
267      */
268     public EventCartridge getEventCartridge()
269     {
270         return innerContext.getEventCartridge();
271     }
272 
273 
274     /**
275      * @see org.apache.velocity.context.InternalHousekeepingContext#setCurrentResource(org.apache.velocity.runtime.resource.Resource)
276      */
277     public void setCurrentResource(Resource r)
278     {
279         innerContext.setCurrentResource(r);
280     }
281 
282     /**
283      * @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentResource()
284      */
285     public Resource getCurrentResource()
286     {
287         return innerContext.getCurrentResource();
288     }
289 }