org.apache.velocity.context.InternalContextAdapterImpl 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 org.apache.velocity.app.event.EventCartridge;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.util.introspection.IntrospectionCacheData;
import java.util.List;
/**
* This adapter class is the container for all context types for internal
* use. The AST now uses this class rather than the app-level Context
* interface to allow flexibility in the future.
*
* Currently, we have two context interfaces which must be supported :
*
* - Context : used for application/template data access
*
- InternalHousekeepingContext : used for internal housekeeping and caching
*
- InternalWrapperContext : used for getting root cache context and other
* such.
*
- InternalEventContext : for event handling.
*
*
* This class implements the two interfaces to ensure that all methods are
* supported. When adding to the interfaces, or adding more context
* functionality, the interface is the primary definition, so alter that first
* and then all classes as necessary. As of this writing, this would be
* the only class affected by changes to InternalContext
*
* This class ensures that an InternalContextBase is available for internal
* use. If an application constructs their own Context-implementing
* object w/o subclassing AbstractContext, it may be that support for
* InternalContext is not available. Therefore, InternalContextAdapter will
* create an InternalContextBase if necessary for this support. Note that
* if this is necessary, internal information such as node-cache data will be
* lost from use to use of the context. This may or may not be important,
* depending upon application.
*
*
* @author Geir Magnusson Jr.
* @version $Id: InternalContextAdapterImpl.java 685724 2008-08-13 23:12:12Z nbubna $
*/
public final class InternalContextAdapterImpl implements InternalContextAdapter
{
/**
* the user data Context that we are wrapping
*/
Context context = null;
/**
* the ICB we are wrapping. We may need to make one
* if the user data context implementation doesn't
* support one. The default AbstractContext-derived
* VelocityContext does, and it's recommended that
* people derive new contexts from AbstractContext
* rather than piecing things together
*/
InternalHousekeepingContext icb = null;
/**
* The InternalEventContext that we are wrapping. If
* the context passed to us doesn't support it, no
* biggie. We don't make it for them - since its a
* user context thing, nothing gained by making one
* for them now
*/
InternalEventContext iec = null;
/**
* CTOR takes a Context and wraps it, delegating all 'data' calls
* to it.
*
* For support of internal contexts, it will create an InternalContextBase
* if need be.
* @param c
*/
public InternalContextAdapterImpl( Context c )
{
context = c;
if ( !( c instanceof InternalHousekeepingContext ))
{
icb = new InternalContextBase();
}
else
{
icb = (InternalHousekeepingContext) context;
}
if ( c instanceof InternalEventContext)
{
iec = ( InternalEventContext) context;
}
}
/* --- InternalHousekeepingContext interface methods --- */
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#pushCurrentTemplateName(java.lang.String)
*/
public void pushCurrentTemplateName( String s )
{
icb.pushCurrentTemplateName( s );
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#popCurrentTemplateName()
*/
public void popCurrentTemplateName()
{
icb.popCurrentTemplateName();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentTemplateName()
*/
public String getCurrentTemplateName()
{
return icb.getCurrentTemplateName();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getTemplateNameStack()
*/
public Object[] getTemplateNameStack()
{
return icb.getTemplateNameStack();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#pushCurrentMacroName(java.lang.String)
* @since 1.6
*/
public void pushCurrentMacroName( String s )
{
icb.pushCurrentMacroName( s );
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#popCurrentMacroName()
* @since 1.6
*/
public void popCurrentMacroName()
{
icb.popCurrentMacroName();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentMacroName()
* @since 1.6
*/
public String getCurrentMacroName()
{
return icb.getCurrentMacroName();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentMacroCallDepth()
* @since 1.6
*/
public int getCurrentMacroCallDepth()
{
return icb.getCurrentMacroCallDepth();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getMacroNameStack()
* @since 1.6
*/
public Object[] getMacroNameStack()
{
return icb.getMacroNameStack();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#icacheGet(java.lang.Object)
*/
public IntrospectionCacheData icacheGet( Object key )
{
return icb.icacheGet( key );
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#icachePut(java.lang.Object, org.apache.velocity.util.introspection.IntrospectionCacheData)
*/
public void icachePut( Object key, IntrospectionCacheData o )
{
icb.icachePut( key, o );
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#setCurrentResource(org.apache.velocity.runtime.resource.Resource)
*/
public void setCurrentResource( Resource r )
{
icb.setCurrentResource(r);
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getCurrentResource()
*/
public Resource getCurrentResource()
{
return icb.getCurrentResource();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getAllowRendering()
* @since 1.5
*/
public boolean getAllowRendering()
{
return icb.getAllowRendering();
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#setAllowRendering(boolean)
* @since 1.5
*/
public void setAllowRendering(boolean v)
{
icb.setAllowRendering(v);
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#setMacroLibraries(List)
* @since 1.6
*/
public void setMacroLibraries(List macroLibraries)
{
icb.setMacroLibraries(macroLibraries);
}
/**
* @see org.apache.velocity.context.InternalHousekeepingContext#getMacroLibraries()
* @since 1.6
*/
public List getMacroLibraries()
{
return icb.getMacroLibraries();
}
/* --- Context interface methods --- */
/**
* @see org.apache.velocity.context.Context#put(java.lang.String, java.lang.Object)
*/
public Object put(String key, Object value)
{
return context.put( key , value );
}
/**
* @see InternalWrapperContext#localPut(String, Object)
* @since 1.5
*/
public Object localPut(final String key, final Object value)
{
return put(key, value);
}
/**
* @see org.apache.velocity.context.Context#get(java.lang.String)
*/
public Object get(String key)
{
return context.get( key );
}
/**
* @see org.apache.velocity.context.Context#containsKey(java.lang.Object)
*/
public boolean containsKey(Object key)
{
return context.containsKey( key );
}
/**
* @see org.apache.velocity.context.Context#getKeys()
*/
public Object[] getKeys()
{
return context.getKeys();
}
/**
* @see org.apache.velocity.context.Context#remove(java.lang.Object)
*/
public Object remove(Object key)
{
return context.remove( key );
}
/* ---- InternalWrapperContext --- */
/**
* returns the user data context that
* we are wrapping
* @return The internal user data context.
*/
public Context getInternalUserContext()
{
return context;
}
/**
* Returns the base context that we are
* wrapping. Here, its this, but for other thing
* like VM related context contortions, it can
* be something else
* @return The base context.
*/
public InternalContextAdapter getBaseContext()
{
return this;
}
/* ----- InternalEventContext ---- */
/**
* @see org.apache.velocity.context.InternalEventContext#attachEventCartridge(org.apache.velocity.app.event.EventCartridge)
*/
public EventCartridge attachEventCartridge( EventCartridge ec )
{
if (iec != null)
{
return iec.attachEventCartridge( ec );
}
return null;
}
/**
* @see org.apache.velocity.context.InternalEventContext#getEventCartridge()
*/
public EventCartridge getEventCartridge()
{
if ( iec != null)
{
return iec.getEventCartridge( );
}
return null;
}
}