blob: 3d8c5a055a8f7d6d01425fbdec47a38bdb3a07f8 [file] [log] [blame]
package org.eclipse.jst.jsf.apache.trinidad.tagsupport.el;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jst.jsf.context.symbol.ERuntimeSource;
import org.eclipse.jst.jsf.context.symbol.ISymbol;
import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
import org.eclipse.jst.jsf.designtime.el.AbstractDTVariableResolver;
import org.eclipse.jst.jsf.designtime.el.IDecorativeResolver;
import org.eclipse.jst.jsf.designtime.symbols.JSFSymbolFactory;
/**
* A decorative dt variable resolver that shadows Trinidad's runtime resolver.
*
* @author cbateman
*
*/
public class TrinidadDecorativeVariableResolver extends
AbstractDTVariableResolver implements IDecorativeResolver
{
private final static JSFSymbolFactory _symbolFactory = new JSFSymbolFactory();
public final static String PAGE_FLOW_SCOPE_VARIABLE_NAME = "pageFlowScope";
public final static String PAGE_FLOW_SCOPE_CLASS_NAME = "org.apache.myfaces.trinidad.context.RequestContext";
public final static String PROCESS_SCOPE_VARIABLE_NAME = "processScope";
@Override
public ISymbol[] getAllVariables(final DTFacesContext facesContext,
final IAdaptable externalContextKey)
{
final Map<String, ISymbol> symbols = createSymbols(facesContext);
return symbols.values().toArray(ISymbol.EMPTY_SYMBOL_ARRAY);
}
@Override
public ISymbol resolveVariable(final DTFacesContext context,
final String name, final IAdaptable externalContextKey)
{
return createSymbols(context).get(name);
}
private Map<String, ISymbol> createSymbols(final DTFacesContext context)
{
final IResource res = context.adaptContextObject();
if (res != null)
{
final IProject project = res.getProject();
if (project != null)
{
final Map<String, ISymbol> symbols = new HashMap<String, ISymbol>();
final ISymbol pageFlowVar = _symbolFactory
.createBeanOrUnknownInstanceSymbol(project,
PAGE_FLOW_SCOPE_CLASS_NAME,
PAGE_FLOW_SCOPE_VARIABLE_NAME,
ERuntimeSource.OTHER_LITERAL);
symbols.put(pageFlowVar.getName(), pageFlowVar);
// TODO: we may be able to populate this map
final ISymbol processScopeVar = _symbolFactory
.createUnknownInstanceSymbol(
PROCESS_SCOPE_VARIABLE_NAME,
ERuntimeSource.OTHER_LITERAL);
symbols.put(processScopeVar.getName(), processScopeVar);
return symbols;
}
}
return Collections.emptyMap();
}
}