| 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(); |
| } |
| } |