| /******************************************************************************* |
| * Copyright (c) 2001, 2008 Oracle Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Oracle Corporation - initial API and implementation |
| *******************************************************************************/ |
| 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"; //$NON-NLS-1$ |
| public final static String PROCESS_SCOPE_VARIABLE_NAME = "processScope"; //$NON-NLS-1$ |
| |
| public final static String REQUEST_CONTEXT_VARIABLE_NAME = "requestContext"; //$NON-NLS-1$ |
| public final static String REQUEST_CONTEXT_CLASS_NAME = "org.apache.myfaces.trinidad.context.RequestContext"; //$NON-NLS-1$ |
| |
| @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 requestContextVar = _symbolFactory |
| .createBeanOrUnknownInstanceSymbol(project, |
| REQUEST_CONTEXT_CLASS_NAME, |
| PAGE_FLOW_SCOPE_VARIABLE_NAME, |
| ERuntimeSource.OTHER_LITERAL); |
| symbols.put(REQUEST_CONTEXT_VARIABLE_NAME, requestContextVar); |
| |
| // both pageFlowScope and processScope return the same variable |
| // TODO: we may be able to populate this map |
| final ISymbol pageFlowVar = _symbolFactory |
| .createUnknownInstanceSymbol( |
| PAGE_FLOW_SCOPE_VARIABLE_NAME, |
| ERuntimeSource.OTHER_LITERAL); |
| symbols.put(PAGE_FLOW_SCOPE_VARIABLE_NAME, pageFlowVar); |
| final ISymbol processScopeVar = _symbolFactory |
| .createUnknownInstanceSymbol( |
| PROCESS_SCOPE_VARIABLE_NAME, |
| ERuntimeSource.OTHER_LITERAL); |
| symbols.put(PROCESS_SCOPE_VARIABLE_NAME, processScopeVar); |
| return symbols; |
| } |
| } |
| return Collections.emptyMap(); |
| } |
| } |