[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...
Gavin King
gavin.king at jboss.com
Tue Sep 26 23:53:49 EDT 2006
User: gavin
Date: 06/09/26 23:53:49
Modified: src/main/org/jboss/seam/core Manager.java Pages.java
Removed: src/main/org/jboss/seam/core ManagedEntity.java
ManagedHibernateEntity.java
Log:
stateful seam interceptors
page parameters
crud framework prototype
bugfixes to PC passivation stuff
Revision Changes Path
1.84 +6 -1 jboss-seam/src/main/org/jboss/seam/core/Manager.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Manager.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Manager.java,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -b -r1.83 -r1.84
--- Manager.java 31 Aug 2006 01:38:29 -0000 1.83
+++ Manager.java 27 Sep 2006 03:53:49 -0000 1.84
@@ -44,7 +44,7 @@
*
* @author Gavin King
* @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
- * @version $Revision: 1.83 $
+ * @version $Revision: 1.84 $
*/
@Scope(ScopeType.EVENT)
@Name("org.jboss.seam.core.manager")
@@ -914,6 +914,11 @@
{
url = encodeParameters(url, renderParameters);
}
+ Map<String, Object> pageParameters = Pages.instance().getParameters(viewId);
+ if (pageParameters!=null)
+ {
+ url = encodeParameters(url, pageParameters);
+ }
if (includeConversationId)
{
url = encodeConversationId(url);
1.21 +95 -21 jboss-seam/src/main/org/jboss/seam/core/Pages.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Pages.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Pages.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- Pages.java 9 Aug 2006 20:30:08 -0000 1.20
+++ Pages.java 27 Sep 2006 03:53:49 -0000 1.21
@@ -3,6 +3,8 @@
import static org.jboss.seam.InterceptionType.NEVER;
import java.io.InputStream;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
@@ -13,6 +15,7 @@
import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;
+import javax.faces.el.ValueBinding;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -28,6 +31,7 @@
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.util.Parameters;
import org.jboss.seam.util.Resources;
/**
@@ -45,12 +49,23 @@
private static final Log log = LogFactory.getLog(Pages.class);
- //TODO: move into a single map:
- private Map<String, String> descriptionByViewId = new HashMap<String, String>();
- private Map<String, Integer> timeoutsByViewId = new HashMap<String, Integer>();
- private Map<String, MethodBinding> actionsByViewId = new HashMap<String, MethodBinding>();
- private Map<String, String> outcomesByViewId = new HashMap<String, String>();
- private Map<String, String> noConversationViewIdByViewId = new HashMap<String, String>();
+ static final class Page
+ {
+ Page(String viewId)
+ {
+ this.viewId = viewId;
+ }
+
+ final String viewId;
+ String description;
+ Integer timeout;
+ MethodBinding action;
+ String outcome;
+ String noConversationViewId;
+ Map<String, ValueBinding> parameterValueBindings = new HashMap<String, ValueBinding>();
+ }
+
+ private Map<String, Page> pagesByViewId = new HashMap<String, Page>();
private String noConversationViewId;
@@ -87,51 +102,68 @@
{
wildcardViewIds.add(viewId);
}
+ Page entry = new Page(viewId);
+ pagesByViewId.put(viewId, entry);
+
String description = page.getTextTrim();
if (description!=null && description.length()>0)
{
- descriptionByViewId.put( viewId, description );
+ entry.description = description;
}
+
String timeoutString = page.attributeValue("timeout");
if (timeoutString!=null)
{
- timeoutsByViewId.put( viewId, Integer.parseInt(timeoutString) );
+ entry.timeout = Integer.parseInt(timeoutString);
}
+
String noConversationViewId = page.attributeValue("no-conversation-view-id");
- if (noConversationViewId!=null)
- {
- noConversationViewIdByViewId.put( viewId, noConversationViewId );
- }
+ entry.noConversationViewId = noConversationViewId;
+
String action = page.attributeValue("action");
if (action!=null)
{
if ( action.startsWith("#{") )
{
MethodBinding methodBinding = new ActionParamMethodBinding(FacesContext.getCurrentInstance(), action);
- actionsByViewId.put(viewId, methodBinding);
+ entry.action = methodBinding;
}
else
{
- outcomesByViewId.put(viewId, action);
+ entry.outcome = action;
+ }
+ }
+
+ List<Element> children = page.elements("param");
+ for (Element param: children)
+ {
+ ValueBinding valueBinding = FacesContext.getCurrentInstance().getApplication()
+ .createValueBinding( param.attributeValue("value") );
+ entry.parameterValueBindings.put( param.attributeValue("name"), valueBinding );
}
}
}
}
+
+ private Page getPage(String viewId)
+ {
+ Page result = pagesByViewId.get(viewId);
+ return result==null ? new Page(viewId) : result;
}
public boolean hasDescription(String viewId)
{
- return descriptionByViewId.containsKey(viewId);
+ return getPage(viewId).description!=null;
}
public String getDescription(String viewId)
{
- return Interpolator.instance().interpolate( descriptionByViewId.get(viewId) );
+ return Interpolator.instance().interpolate( getPage(viewId).description );
}
public Integer getTimeout(String viewId)
{
- return timeoutsByViewId.get(viewId);
+ return getPage(viewId).timeout;
}
public boolean callAction()
@@ -157,12 +189,12 @@
{
boolean result = false;
- String outcome = outcomesByViewId.get(viewId);
+ String outcome = getPage(viewId).outcome;
String fromAction = outcome;
if (outcome==null)
{
- MethodBinding methodBinding = actionsByViewId.get(viewId);
+ MethodBinding methodBinding = getPage(viewId).action;
if (methodBinding!=null)
{
fromAction = methodBinding.getExpressionString();
@@ -241,10 +273,52 @@
public String getNoConversationViewId(String viewId)
{
- String result = noConversationViewIdByViewId.get(viewId);
+ String result = getPage(viewId).noConversationViewId;
return result==null ? noConversationViewId : result;
}
+ private Collection<Map.Entry<String, ValueBinding>> getParameterValueBindings(String viewId)
+ {
+ return getPage(viewId).parameterValueBindings.entrySet();
+ }
+
+ public Map<String, Object> getParameters(String viewId)
+ {
+ return getParameters(viewId, Collections.EMPTY_SET);
+ }
+
+ public Map<String, Object> getParameters(String viewId, Set<String> overridden)
+ {
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ for (Map.Entry<String, ValueBinding> me: getParameterValueBindings(viewId))
+ {
+ if ( !overridden.contains( me.getKey() ) )
+ {
+ Object value = me.getValue().getValue( FacesContext.getCurrentInstance() );
+ //TODO: handle multi-values!
+ if (value!=null)
+ {
+ parameters.put( me.getKey(), value );
+ }
+ }
+ }
+ return parameters;
+ }
+
+ public void applyParameterValues(String viewId)
+ {
+ Map<String, String[]> parameters = Parameters.getRequestParameters();
+ for (Map.Entry<String, ValueBinding> me: getParameterValueBindings(viewId))
+ {
+ Class type = me.getValue().getType( FacesContext.getCurrentInstance() );
+ Object value = Parameters.convertMultiValueRequestParameter( parameters, me.getKey(), type );
+ if (value!=null)
+ {
+ me.getValue().setValue( FacesContext.getCurrentInstance(), value );
+ }
+ }
+ }
+
public String getNoConversationViewId()
{
return noConversationViewId;
More information about the jboss-cvs-commits
mailing list