org.apache.velocity.context.InternalContextBase Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.portal.template.velocity
Show all versions of com.liferay.portal.template.velocity
Liferay Portal Template Velocity
The newest version!
package org.apache.velocity.context;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.HashMap;
import java.util.Stack;
import java.util.List;
import org.apache.velocity.app.event.EventCartridge;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.util.introspection.IntrospectionCacheData;
/**
* class to encapsulate the 'stuff' for internal operation of velocity.
* We use the context as a thread-safe storage : we take advantage of the
* fact that it's a visitor of sorts to all nodes (that matter) of the
* AST during init() and render().
* Currently, it carries the template name for namespace
* support, as well as node-local context data introspection caching.
*
* Note that this is not a public class. It is for package access only to
* keep application code from accessing the internals, as AbstractContext
* is derived from this.
*
* @author Geir Magnusson Jr.
* @version $Id: InternalContextBase.java 679861 2008-07-25 17:17:50Z nbubna $
*/
class InternalContextBase implements InternalHousekeepingContext, InternalEventContext
{
/**
* Version Id for serializable
*/
private static final long serialVersionUID = -245905472770843470L;
/**
* cache for node/context specific introspection information
*/
private HashMap introspectionCache = new HashMap(33);
/**
* Template name stack. The stack top contains the current template name.
*/
private Stack templateNameStack = new Stack();
/**
* Velocimacro name stack. The stack top contains the current macro name.
*/
private Stack macroNameStack = new Stack();
/**
* EventCartridge we are to carry. Set by application
*/
private EventCartridge eventCartridge = null;
/**
* Current resource - used for carrying encoding and other
* information down into the rendering process
*/
private Resource currentResource = null;
/**
* Is rendering allowed? Defaults to true, can be changed by #stop directive.
*/
private boolean allowRendering = true;
/**
* List for holding the macro libraries. Contains the macro library
* template name as strings.
*/
private List macroLibraries = null;
/**
* set the current template name on top of stack
*
* @param s current template name
*/
public void pushCurrentTemplateName( String s )
{
templateNameStack.push(s);
}
/**
* remove the current template name from stack
*/
public void popCurrentTemplateName()
{
templateNameStack.pop();
}
/**
* get the current template name
*
* @return String current template name
*/
public String getCurrentTemplateName()
{
if ( templateNameStack.empty() )
return "";
else
return (String) templateNameStack.peek();
}
/**
* get the current template name stack
*
* @return Object[] with the template name stack contents.
*/
public Object[] getTemplateNameStack()
{
return templateNameStack.toArray();
}
/**
* set the current macro name on top of stack
*
* @param s current macro name
*/
public void pushCurrentMacroName( String s )
{
macroNameStack.push(s);
}
/**
* remove the current macro name from stack
*/
public void popCurrentMacroName()
{
macroNameStack.pop();
}
/**
* get the current macro name
*
* @return String current macro name
*/
public String getCurrentMacroName()
{
if (macroNameStack.empty())
{
return "";
}
else
{
return (String) macroNameStack.peek();
}
}
/**
* get the current macro call depth
*
* @return int current macro call depth
*/
public int getCurrentMacroCallDepth()
{
return macroNameStack.size();
}
/**
* get the current macro name stack
*
* @return Object[] with the macro name stack contents.
*/
public Object[] getMacroNameStack()
{
return macroNameStack.toArray();
}
/**
* returns an IntrospectionCache Data (@see IntrospectionCacheData)
* object if exists for the key
*
* @param key key to find in cache
* @return cache object
*/
public IntrospectionCacheData icacheGet( Object key )
{
return ( IntrospectionCacheData ) introspectionCache.get( key );
}
/**
* places an IntrospectionCache Data (@see IntrospectionCacheData)
* element in the cache for specified key
*
* @param key key
* @param o IntrospectionCacheData object to place in cache
*/
public void icachePut( Object key, IntrospectionCacheData o )
{
introspectionCache.put( key, o );
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#setCurrentResource(org.apache.velocity.runtime.resource.Resource)
*/
public void setCurrentResource( Resource r )
{
currentResource = r;
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentResource()
*/
public Resource getCurrentResource()
{
return currentResource;
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getAllowRendering()
*/
public boolean getAllowRendering()
{
return allowRendering;
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#setAllowRendering(boolean)
*/
public void setAllowRendering(boolean v)
{
allowRendering = v;
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#setMacroLibraries(List)
*/
public void setMacroLibraries(List macroLibraries)
{
this.macroLibraries = macroLibraries;
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getMacroLibraries()
*/
public List getMacroLibraries()
{
return macroLibraries;
}
/**
* @see org.apache.velocity.context.InternalEventContext#attachEventCartridge(org.apache.velocity.app.event.EventCartridge)
*/
public EventCartridge attachEventCartridge( EventCartridge ec )
{
EventCartridge temp = eventCartridge;
eventCartridge = ec;
return temp;
}
/**
* @see org.apache.velocity.context.InternalEventContext#getEventCartridge()
*/
public EventCartridge getEventCartridge()
{
return eventCartridge;
}
}