diff options
author | rsrinivasan | 2010-05-13 04:00:36 +0000 |
---|---|---|
committer | rsrinivasan | 2010-05-13 04:00:36 +0000 |
commit | 8ac373934f04c0baa84d29b78c4d18f63db86944 (patch) | |
tree | 5fed68cc7966a503dbb7df7cecd68332e84f6535 /jsf | |
parent | 702b38ce33b23116a131d56ee22807bc663503b3 (diff) | |
download | webtools.jsf-8ac373934f04c0baa84d29b78c4d18f63db86944.tar.gz webtools.jsf-8ac373934f04c0baa84d29b78c4d18f63db86944.tar.xz webtools.jsf-8ac373934f04c0baa84d29b78c4d18f63db86944.zip |
Bug 299813 - [JSF2.0] - new Implicit Objects defined for use in EL expressions
Diffstat (limited to 'jsf')
14 files changed, 301 insertions, 18 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java index 590b79233..17f36b522 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java +++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java @@ -40,15 +40,39 @@ public class ISymbolConstants { * Mask to indicate all 'none' scope symbols for a particular context */ public final static int SYMBOL_SCOPE_NONE = 8; + +//JSF2.0 + /** + * Mask to indicate all 'view' scope symbols for a particular context + */ + public final static int SYMBOL_SCOPE_VIEW = 16; /** + * Mask to indicate all 'flash' scope symbols for a particular context + */ + public final static int SYMBOL_SCOPE_FLASH = 32; + + /** + * the string representation for view scope + */ + public final static String SYMBOL_SCOPE_VIEW_STRING = "view"; //$NON-NLS-1$ + + /** + * the string representation for flash scope + */ + public final static String SYMBOL_SCOPE_FLASH_STRING = "flash"; //$NON-NLS-1$ +// + + /** * All scopes */ public final static int SYMBOL_SCOPE_ALL = SYMBOL_SCOPE_REQUEST | SYMBOL_SCOPE_SESSION | SYMBOL_SCOPE_APPLICATION - | SYMBOL_SCOPE_NONE; + | SYMBOL_SCOPE_NONE + | SYMBOL_SCOPE_VIEW + | SYMBOL_SCOPE_FLASH; /** * the string representation for request scope @@ -80,7 +104,9 @@ public class ISymbolConstants { return scope == SYMBOL_SCOPE_APPLICATION || scope == SYMBOL_SCOPE_REQUEST || scope == SYMBOL_SCOPE_SESSION - || scope == SYMBOL_SCOPE_NONE; + || scope == SYMBOL_SCOPE_NONE + || scope == SYMBOL_SCOPE_VIEW + || scope == SYMBOL_SCOPE_FLASH; } /** @@ -106,6 +132,14 @@ public class ISymbolConstants { { return SYMBOL_SCOPE_NONE_STRING; } + else if (scopeMask == SYMBOL_SCOPE_VIEW) + { + return SYMBOL_SCOPE_VIEW_STRING; + } + else if (scopeMask == SYMBOL_SCOPE_FLASH) + { + return SYMBOL_SCOPE_FLASH_STRING; + } return null; } @@ -133,7 +167,14 @@ public class ISymbolConstants { { return SYMBOL_SCOPE_NONE; } - + else if (SYMBOL_SCOPE_VIEW_STRING.equals(scopeString)) + { + return SYMBOL_SCOPE_VIEW; + } + else if (SYMBOL_SCOPE_FLASH_STRING.equals(scopeString)) + { + return SYMBOL_SCOPE_FLASH; + } return -1; } } diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTPropertyResolver.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTPropertyResolver.java index d4a5eee1c..b1196258b 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTPropertyResolver.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTPropertyResolver.java @@ -23,10 +23,12 @@ import org.eclipse.jdt.core.Signature; import org.eclipse.jst.jsf.common.internal.types.StringLiteralType; import org.eclipse.jst.jsf.common.internal.types.TypeConstants; import org.eclipse.jst.jsf.common.internal.types.ValueType; +import org.eclipse.jst.jsf.context.symbol.ERuntimeSource; import org.eclipse.jst.jsf.context.symbol.IBoundedTypeDescriptor; import org.eclipse.jst.jsf.context.symbol.IObjectSymbol; import org.eclipse.jst.jsf.context.symbol.ISymbol; import org.eclipse.jst.jsf.context.symbol.ITypeDescriptor; +import org.eclipse.jst.jsf.designtime.symbols.JSFSymbolFactory; /** * A design time proxy for the runtime PropertyResolver. This is used to @@ -40,6 +42,10 @@ import org.eclipse.jst.jsf.context.symbol.ITypeDescriptor; */ public class DefaultDTPropertyResolver extends AbstractDTPropertyResolver { + private static final String UICOMPONENT_SYMBOL_SIGNATURE = "Ljavax.faces.component.UIComponent;"; //$NON-NLS-1$ + private static final String ATTRS_SYMBOL_NAME = "attrs"; //$NON-NLS-1$ + private JSFSymbolFactory _symbolFactory = new JSFSymbolFactory(); + /** * Returns a symbol encapsulating the property on base with the name * properyId @@ -92,6 +98,11 @@ public class DefaultDTPropertyResolver extends AbstractDTPropertyResolver factoredProperties = factorKey(propertyId); } } + //if symbol is "attrs", add it if applicable + else if (propertyId instanceof String + && ((String)propertyId).equals(ATTRS_SYMBOL_NAME)) { + return getCCAttrsSymbolIfNecessary(typeDesc); + } // check unconstrained type if (typeDesc instanceof IBoundedTypeDescriptor) @@ -104,6 +115,7 @@ public class DefaultDTPropertyResolver extends AbstractDTPropertyResolver return ((IBoundedTypeDescriptor)typeDesc).getUnboundedProperty(propertyId, TypeConstants.TYPE_JAVAOBJECT); } } + } int i = 0; @@ -164,13 +176,29 @@ public class DefaultDTPropertyResolver extends AbstractDTPropertyResolver if (typeDesc != null) { symbolsList = typeDesc.getProperties(); + addCCAttrsIfNecessary(typeDesc, symbolsList); } } return (ISymbol[]) symbolsList.toArray(ISymbol.EMPTY_SYMBOL_ARRAY); } - /* (non-Javadoc) + private ISymbol getCCAttrsSymbolIfNecessary(final ITypeDescriptor typeDesc) { + ISymbol attrsSymbol = null; + if (typeDesc.instanceOf(UICOMPONENT_SYMBOL_SIGNATURE)) { + attrsSymbol = _symbolFactory.createUnknownInstanceSymbol(ATTRS_SYMBOL_NAME, ERuntimeSource.BUILT_IN_SYMBOL_LITERAL); + } + return attrsSymbol; + } + + private void addCCAttrsIfNecessary(final ITypeDescriptor typeDesc, final List symbolsList) { + final ISymbol attrsSymbol = getCCAttrsSymbolIfNecessary(typeDesc); + if (attrsSymbol != null) { + symbolsList.add(attrsSymbol); + } + } + + /* (non-Javadoc) * @see org.eclipse.jst.jsf.designtime.el.AbstractDTPropertyResolver#getProperty(org.eclipse.jst.jsf.context.symbol.ISymbol, int) */ public ISymbol getProperty(ISymbol base, int offset) @@ -208,6 +236,7 @@ public class DefaultDTPropertyResolver extends AbstractDTPropertyResolver return objSymbol.call("get", args, base.getName()+"["+offset+"]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } + return getCCAttrsSymbolIfNecessary(typeDesc); // check unconstrained type // if (typeDesc instanceof IBoundedTypeDescriptor) // { diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java index 1184b69c0..ae8e7b083 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java @@ -206,6 +206,8 @@ public class JSPModelProcessor private Map<Object, ISymbol> _sessionMap; private Map<Object, ISymbol> _applicationMap; private Map<Object, ISymbol> _noneMap; + private Map<Object, ISymbol> _viewMap; + private Map<Object, ISymbol> _flashMap; // used to avoid infinite recursion in refresh. Must never be null private final CountingMutex _lastModificationStampMonitor = new CountingMutex(); @@ -597,7 +599,7 @@ public class JSPModelProcessor } /** - * @param scopeName - one of "request", "session" or "application" + * @param scopeName - one of "request", "session" or "application" or "view" if JSF2.x * @return an unmodifable map containing all known symbols for * that scope. If scopeName is not found, returns the empty map. */ @@ -645,6 +647,14 @@ public class JSPModelProcessor { return getNoneMap(); } + else if (ISymbolConstants.SYMBOL_SCOPE_VIEW_STRING.equals(scopeName)) + { + return getViewMap(); + } + else if (ISymbolConstants.SYMBOL_SCOPE_FLASH_STRING.equals(scopeName)) + { + return getFlashMap(); + } Platform.getLog(JSFCorePlugin.getDefault().getBundle()).log(new Status(IStatus.ERROR, JSFCorePlugin.PLUGIN_ID, 0, "Scope not found: "+scopeName, new Throwable())); //$NON-NLS-1$ return null; @@ -690,6 +700,26 @@ public class JSPModelProcessor return _noneMap; } + + private Map<Object, ISymbol> getViewMap() + { + if (_viewMap == null) + { + _viewMap = new HashMap<Object, ISymbol>(); + } + + return _viewMap; + } + + private Map<Object, ISymbol> getFlashMap() + { + if (_flashMap == null) + { + _flashMap = new HashMap<Object, ISymbol>(); + } + + return _flashMap; + } /** * Aggregates the sets-locale meta-data diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java index 401c1be5e..182eab08e 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java @@ -78,7 +78,14 @@ public class JSPTagVariableSymbolSourceProvider extends { symbols.addAll(modelProcessor.getMapForScope(ISymbolConstants.SYMBOL_SCOPE_NONE_STRING).values()); } - + if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_VIEW) != 0) + { + symbols.addAll(modelProcessor.getMapForScope(ISymbolConstants.SYMBOL_SCOPE_VIEW_STRING).values()); + } + if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_FLASH) != 0) + { + symbols.addAll(modelProcessor.getMapForScope(ISymbolConstants.SYMBOL_SCOPE_FLASH_STRING).values()); + } return symbols.toArray(ISymbol.EMPTY_SYMBOL_ARRAY); } catch (Exception e) diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractDTViewHandler.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractDTViewHandler.java index ba605b879..bf38fe899 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractDTViewHandler.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractDTViewHandler.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.jst.jsf.designtime.internal.view; +import java.util.Collections; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.core.resources.IFile; @@ -19,6 +21,7 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IPath; import org.eclipse.jst.jsf.common.internal.resource.ImmutableLifecycleListener; import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo; +import org.eclipse.jst.jsf.context.symbol.ISymbol; import org.eclipse.jst.jsf.designtime.context.DTFacesContext; import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot.StalenessAdvisor; import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot.StalenessListener; @@ -228,6 +231,11 @@ public abstract class AbstractDTViewHandler implements IDTViewHandler } }; } + + @Override + protected Map<String, ISymbol> doGetMapForScope(int scopeMask) { + return Collections.emptyMap(); + } } diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTUIViewRoot.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTUIViewRoot.java index f14121ecb..5d8b7ae10 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTUIViewRoot.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTUIViewRoot.java @@ -11,10 +11,14 @@ package org.eclipse.jst.jsf.designtime.internal.view; import java.io.Serializable; +import java.util.Collections; +import java.util.Map; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo; import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo; +import org.eclipse.jst.jsf.context.symbol.ISymbol; +import org.eclipse.jst.jsf.context.symbol.source.ISymbolConstants; /** * The interface for all design view root objects. @@ -100,6 +104,22 @@ public abstract class DTUIViewRoot extends ComponentInfo { _versionStamp = versionStamp; } + + + /** + * @return a map of ISymbols representing the currently available + * view scope variables. Never null, empty if no symbols + * Map is unmodifiable (throws exception on mutation operations) + */ + public final Map<String, ISymbol> getViewMap() { + return Collections.unmodifiableMap(doGetMapForScope(ISymbolConstants.SYMBOL_SCOPE_VIEW)); + } + + /** + * @param scopeMask + * @return Map of symbols + */ + protected abstract Map<String, ISymbol> doGetMapForScope(final int scopeMask); /** * @return true if the view root is out of sync with its view source. diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTUIViewRoot.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTUIViewRoot.java index 02ba0eb38..75985be23 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTUIViewRoot.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTUIViewRoot.java @@ -11,9 +11,18 @@ package org.eclipse.jst.jsf.designtime.internal.view; import java.io.Serializable; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jst.jsf.common.JSFCommonPlugin; import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo; +import org.eclipse.jst.jsf.context.symbol.ISymbol; +import org.eclipse.jst.jsf.context.symbol.source.ISymbolSourceProvider; +import org.eclipse.jst.jsf.context.symbol.source.ISymbolSourceProviderFactory; +import org.eclipse.jst.jsf.designtime.context.DTFacesContext; /** * The default view root implementation. Assumes an XML view definition. @@ -28,16 +37,19 @@ public class DefaultDTUIViewRoot extends DTUIViewRoot */ private static final long serialVersionUID = -6948413077931237435L; private final DefaultServices _defaultServices; + private DTFacesContext _facesContext; /** + * @param facesContext */ - public DefaultDTUIViewRoot() + public DefaultDTUIViewRoot(final DTFacesContext facesContext) { // TODO: refactor constants super(null, null, new ComponentTypeInfo("javax.faces.ViewRoot", //$NON-NLS-1$ "javax.faces.component.UIViewRoot", "javax.faces.ViewRoot", //$NON-NLS-1$ //$NON-NLS-2$ null)); _defaultServices = new DefaultServices(); + _facesContext = facesContext; } @Override @@ -68,4 +80,25 @@ public class DefaultDTUIViewRoot extends DTUIViewRoot return null; } } + + @Override + protected Map<String, ISymbol> doGetMapForScope(final int scopeMask) { + final Map<String, ISymbol> map = new HashMap<String, ISymbol>(); + + IProject project = _facesContext.adaptContextObject().getProject(); + for (final Iterator it = JSFCommonPlugin.getSymbolSourceProviders().iterator(); it.hasNext();) + { + final ISymbolSourceProviderFactory factory = (ISymbolSourceProviderFactory) it.next(); + final ISymbolSourceProvider provider = factory.createInstance(project); + + final ISymbol[] symbols = provider.getSymbols(_facesContext.adaptContextObject(), scopeMask); + + for (int i = 0; i < symbols.length; i++) + { + map.put(symbols[i].getName(), symbols[i]); + } + } + + return map; + } } diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTViewHandler.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTViewHandler.java index aa2f5da1d..4f94b6c27 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTViewHandler.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTViewHandler.java @@ -38,9 +38,9 @@ import org.eclipse.jst.jsf.core.internal.JSFCorePlugin; import org.eclipse.jst.jsf.designtime.context.DTFacesContext; import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot.StalenessAdvisor; import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot.StalenessEvent; +import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot.StalenessEvent.ChangeType; import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot.StalenessListener; import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot.VersionStamp; -import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot.StalenessEvent.ChangeType; import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry; import org.w3c.dom.Node; @@ -227,7 +227,7 @@ public class DefaultDTViewHandler extends AbstractDTViewHandler protected DTUIViewRoot newView(final DTFacesContext facesContext, final String viewId) { - return new DefaultDTUIViewRoot(); + return new DefaultDTUIViewRoot(facesContext); } @Override diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java index 7583a7b13..b3740fc44 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java @@ -28,8 +28,10 @@ import org.eclipse.jst.jsf.context.symbol.IMapTypeDescriptor; import org.eclipse.jst.jsf.context.symbol.ISymbol; import org.eclipse.jst.jsf.context.symbol.SymbolFactory; import org.eclipse.jst.jsf.context.symbol.source.ISymbolConstants; +import org.eclipse.jst.jsf.core.JSFVersion; import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager; import org.eclipse.jst.jsf.designtime.context.IDTExternalContext; +import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot; /** * Provides the default built-in JSF symbols @@ -71,7 +73,7 @@ public class DefaultBuiltInSymbolProvider private static final String FACES_CONTEXT_FULLY_QUALIFIED_CLASS = "javax.faces.context.FacesContext"; //$NON-NLS-1$ private static final String VIEW_FULLY_QUALIFIED_CLASS = "javax.faces.component.UIViewRoot"; //$NON-NLS-1$ - + private static final ISymbol SYMBOL_COOKIE_IMPLICIT_OBJ; private static final ISymbol SYMBOL_HEADER_IMPLICIT_OBJ; private static final ISymbol SYMBOL_HEADER_VALUES_IMPLICIT_OBJ; @@ -79,6 +81,15 @@ public class DefaultBuiltInSymbolProvider private static final ISymbol SYMBOL_PARAM_VALUES_IMPLICIT_OBJ; private static final ISymbol SYMBOL_INIT_PARAM_IMPLICIT_OBJ; + //JSF2.0 + private static final String VIEW_SCOPE = "viewScope"; //$NON-NLS-1$ + private static final String FLASH_SCOPE = "flash"; //$NON-NLS-1$ + private static final String CC_IMPLICIT_OBJ = "cc"; //$NON-NLS-1$ + private static final String COMPONENT_IMPLICIT_OBJ = "component"; //$NON-NLS-1$ + private static final String RESOURCE_IMPLICIT_OBJ = "resource"; //$NON-NLS-1$ + + private static final String UICOMPONENT_FULLY_QUALIFIED_CLASS = "javax.faces.component.UIComponent";//$NON-NLS-1$ + static { _symbolFactory = new JSFSymbolFactory(); @@ -144,6 +155,17 @@ public class DefaultBuiltInSymbolProvider { symbol = getApplicationScopeSymbols(file).get(name); } + if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_VIEW) != 0 + && symbol == null) + { + symbol = getViewScopeSymbols(file).get(name); + } + if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_FLASH) != 0 + && symbol == null) + { + symbol = getFlashScopeSymbols(file).get(name); + } + return symbol; } @@ -173,6 +195,14 @@ public class DefaultBuiltInSymbolProvider { symbols.addAll(getApplicationScopeSymbols(file).values()); } + if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_VIEW) != 0) + { + symbols.addAll(getViewScopeSymbols(file).values()); + } + if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_FLASH) != 0) + { + symbols.addAll(getFlashScopeSymbols(file).values()); + } return symbols.toArray(ISymbol.EMPTY_SYMBOL_ARRAY); } @@ -191,6 +221,14 @@ public class DefaultBuiltInSymbolProvider { symbols.addAll(getApplicationScopeSymbols(file).values()); } + if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_VIEW) != 0) + { + symbols.addAll(getViewScopeSymbols(file).values()); + } + if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_FLASH) != 0) + { + symbols.addAll(getFlashScopeSymbols(file).values()); + } return symbols; } @@ -221,6 +259,24 @@ public class DefaultBuiltInSymbolProvider ERuntimeSource.BUILT_IN_SYMBOL_LITERAL); requestSymbols.put(symbol.getName(), symbol); + //add jsf2.0 implicits + if (JSFVersion.valueOfProject(file.getProject()).compareTo(JSFVersion.V2_0) >=0) { + symbol = _symbolFactory.createBeanOrUnknownInstanceSymbol(file + .getProject(), UICOMPONENT_FULLY_QUALIFIED_CLASS, + CC_IMPLICIT_OBJ, + ERuntimeSource.BUILT_IN_SYMBOL_LITERAL); + requestSymbols.put(symbol.getName(), symbol); + + +// _symbolFactory.createJavaComponentSymbol(CC_IMPLICIT_OBJ, typeDesc, ""); //$NON-NLS-1$ + symbol = _symbolFactory.createBeanOrUnknownInstanceSymbol(file + .getProject(), UICOMPONENT_FULLY_QUALIFIED_CLASS, + COMPONENT_IMPLICIT_OBJ, + ERuntimeSource.BUILT_IN_SYMBOL_LITERAL); + requestSymbols.put(symbol.getName(), symbol); + + } + return Collections.unmodifiableMap(requestSymbols); } @@ -244,9 +300,43 @@ public class DefaultBuiltInSymbolProvider ISymbolConstants.SYMBOL_SCOPE_APPLICATION, APPLICATION_SCOPE); symbols.put(symbol.getName(), symbol); + //add jsf2.0 implicits + if (JSFVersion.valueOfProject(file.getProject()).compareTo(JSFVersion.V2_0) >=0) { + symbol = _symbolFactory.createUnknownInstanceSymbol( + RESOURCE_IMPLICIT_OBJ, + ERuntimeSource.BUILT_IN_SYMBOL_LITERAL); + symbols.put(symbol.getName(), symbol); + } + return Collections.unmodifiableMap(symbols); } + + private Map<String,ISymbol> getViewScopeSymbols(final IFile file) + { + if(JSFVersion.valueOfProject(file.getProject()).compareTo(JSFVersion.V2_0) >= 0) { + + ISymbol symbol = createScopeSymbol(file, + ISymbolConstants.SYMBOL_SCOPE_VIEW, VIEW_SCOPE); + + return Collections.unmodifiableMap + (Collections.singletonMap(symbol.getName(), symbol)); + } + return Collections.emptyMap(); + } + private Map<String,ISymbol> getFlashScopeSymbols(final IFile file) + { + if(JSFVersion.valueOfProject(file.getProject()).compareTo(JSFVersion.V2_0) >= 0) { + + ISymbol symbol = createScopeSymbol(file, + ISymbolConstants.SYMBOL_SCOPE_FLASH, FLASH_SCOPE); + + return Collections.unmodifiableMap + (Collections.singletonMap(symbol.getName(), symbol)); + } + return Collections.emptyMap(); + } + private ISymbol createScopeSymbol(final IFile file, final int scopeMask, final String name) { @@ -304,6 +394,17 @@ public class DefaultBuiltInSymbolProvider .getDTExternalContext(_externalContextKey); scopeMap.putAll(externalContext.getMapForScope(_scopeMask)); + + DTUIViewRoot viewRoot = manager + .getFacesContext(_externalContextKey) + .getViewRootHandle().getCachedViewRoot(); + + if (viewRoot == null) { + viewRoot = manager + .getFacesContext(_externalContextKey) + .getViewRootHandle().updateViewRoot(); + } + scopeMap.putAll(viewRoot.getViewMap()); } return scopeMap.entrySet(); diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java index 76da0f026..90beacbd6 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java @@ -16,6 +16,7 @@ import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.common.notify.Adapter; @@ -29,6 +30,7 @@ import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.Signature; import org.eclipse.jst.jsf.common.internal.types.TypeConstants; import org.eclipse.jst.jsf.common.util.TypeUtil; +import org.eclipse.jst.jsf.core.JSFVersion; import org.eclipse.jst.jsf.core.internal.JSFCorePlugin; import org.eclipse.jst.jsf.facesconfig.emf.ListEntriesType; import org.eclipse.jst.jsf.facesconfig.emf.ManagedBeanScopeType; @@ -268,16 +270,19 @@ public final class AppConfigValidationUtil /** * @param scope + * @param file + * @param version * @return an error message if scope does not match a valid * scope enum. */ - public static IMessage validateManagedBeanScope(ManagedBeanScopeType scope) - { + public static IMessage validateManagedBeanScope(ManagedBeanScopeType scope, IFile file, JSFVersion version) + { // scope must be one of a few enums if (!"request".equals(scope.getTextContent()) //$NON-NLS-1$ && !"session".equals(scope.getTextContent()) //$NON-NLS-1$ && !"application".equals(scope.getTextContent()) //$NON-NLS-1$ - && !"none".equals(scope.getTextContent())) //$NON-NLS-1$ + && !"none".equals(scope.getTextContent())//$NON-NLS-1$ + && ((version == null) || !((version.compareTo(JSFVersion.V2_0) >=0) && "view".equals(scope.getTextContent()) ))) //$NON-NLS-1$ { return DiagnosticFactory.create_BEAN_SCOPE_NOT_VALID(); } diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/EObjectValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/EObjectValidationVisitor.java index a3b7909d5..73c301edd 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/EObjectValidationVisitor.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/EObjectValidationVisitor.java @@ -18,6 +18,7 @@ import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.jst.jsf.core.JSFVersion; import org.eclipse.wst.validation.internal.provisional.core.IMessage; /** @@ -146,6 +147,13 @@ public abstract class EObjectValidationVisitor return _version; } + + /** + * @return {@link JSFVersion} of this file + */ + protected JSFVersion getJSFVersion() { + return JSFVersion.valueOfString(_version); + } /** * @param messages * @param message diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java index b121f1d26..99b818128 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java +++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java @@ -56,7 +56,7 @@ public class ManagedBeanValidationVisitor extends EObjectValidationVisitor if (scope != null && scope.getTextContent() != null) { addMessageInfo(messages - , AppConfigValidationUtil.validateManagedBeanScope(scope) + , AppConfigValidationUtil.validateManagedBeanScope(scope, file, getJSFVersion()) , scope, file); } } diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/DTFaceletViewHandler.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/DTFaceletViewHandler.java index e5a4d0314..794c38569 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/DTFaceletViewHandler.java +++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/DTFaceletViewHandler.java @@ -82,7 +82,7 @@ public class DTFaceletViewHandler extends DefaultDTViewHandler @Override protected DTUIViewRoot newView(DTFacesContext facesContext, String viewId) { - return new FaceletUIViewRoot(); + return new FaceletUIViewRoot(facesContext); } @Override diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/FaceletUIViewRoot.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/FaceletUIViewRoot.java index ecd9effb8..9a329cf22 100644 --- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/FaceletUIViewRoot.java +++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/FaceletUIViewRoot.java @@ -1,5 +1,6 @@ package org.eclipse.jst.jsf.facelet.core.internal.view; +import org.eclipse.jst.jsf.designtime.context.DTFacesContext; import org.eclipse.jst.jsf.designtime.internal.view.DefaultDTUIViewRoot; /** @@ -16,10 +17,10 @@ public class FaceletUIViewRoot extends DefaultDTUIViewRoot private static final long serialVersionUID = -7289148553566455867L; /** - * + * @param facesContext */ - public FaceletUIViewRoot() + public FaceletUIViewRoot(final DTFacesContext facesContext) { - super(); + super(facesContext); } } |