Skip to main content
summaryrefslogtreecommitdiffstats
path: root/jsf
diff options
context:
space:
mode:
authorrsrinivasan2010-05-13 04:00:36 +0000
committerrsrinivasan2010-05-13 04:00:36 +0000
commit8ac373934f04c0baa84d29b78c4d18f63db86944 (patch)
tree5fed68cc7966a503dbb7df7cecd68332e84f6535 /jsf
parent702b38ce33b23116a131d56ee22807bc663503b3 (diff)
downloadwebtools.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')
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java47
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTPropertyResolver.java31
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java32
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java9
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractDTViewHandler.java8
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTUIViewRoot.java20
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTUIViewRoot.java35
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTViewHandler.java4
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java103
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java11
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/EObjectValidationVisitor.java8
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java2
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/DTFaceletViewHandler.java2
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/view/FaceletUIViewRoot.java7
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);
}
}

Back to the top