You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2009/08/28 02:45:33 UTC
svn commit: r808696 - in
/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets:
AbstractFaceletContext.java impl/DefaultFaceletContext.java
Author: lu4242
Date: Fri Aug 28 00:45:32 2009
New Revision: 808696
URL: http://svn.apache.org/viewvc?rev=808696&view=rev
Log:
MYFACES-2310 Implement Composite Component feature (add stack for composite components, useful implementing MYFACES-2320 and MYFACES-2317)
Modified:
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/AbstractFaceletContext.java
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFaceletContext.java
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/AbstractFaceletContext.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/AbstractFaceletContext.java?rev=808696&r1=808695&r2=808696&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/AbstractFaceletContext.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/AbstractFaceletContext.java Fri Aug 28 00:45:32 2009
@@ -19,14 +19,19 @@
package org.apache.myfaces.view.facelets;
import java.io.IOException;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.Map;
import javax.el.ELException;
import javax.faces.FacesException;
import javax.faces.application.Resource;
import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
import javax.faces.view.facelets.FaceletContext;
import javax.faces.view.facelets.FaceletException;
+
/**
* This class contains methods that belongs to original FaceletContext shipped in
* facelets code before 2.0, but does not take part from api, so are considered
@@ -43,6 +48,8 @@
*/
public abstract class AbstractFaceletContext extends FaceletContext
{
+ public final static String COMPOSITE_COMPONENT_STACK = "org.apache.myfaces.view.facelets.COMPOSITE_COMPONENT_STACK";
+
/**
* Push the passed TemplateClient onto the stack for Definition Resolution
* @param client
@@ -91,4 +98,22 @@
*/
public abstract void applyCompositeComponent(UIComponent parent, Resource resource)
throws IOException, FaceletException, FacesException, ELException;
+
+ /**
+ * Return the composite component being applied on the current facelet.
+ *
+ * Note this is different to UIComponent.getCurrentCompositeComponent, because a composite
+ * component is added to the stack each time a composite:implementation tag handler is applied.
+ *
+ * This could be used by InsertChildrenHandler and InsertFacetHandler to retrieve the current
+ * composite component to be applied.
+ *
+ * @param facesContext
+ * @return
+ */
+ public abstract UIComponent getCompositeComponentFromStack();
+
+ public abstract void pushCompositeComponentToStack(UIComponent parent);
+
+ public abstract void popCompositeComponentToStack();
}
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFaceletContext.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFaceletContext.java?rev=808696&r1=808695&r2=808696&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFaceletContext.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/impl/DefaultFaceletContext.java Fri Aug 28 00:45:32 2009
@@ -20,7 +20,9 @@
import java.io.IOException;
import java.net.URL;
+import java.util.ArrayDeque;
import java.util.ArrayList;
+import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -442,4 +444,44 @@
{
_facelet.applyCompositeComponent(this, parent, resource);
}
+
+ @Override
+ public UIComponent getCompositeComponentFromStack()
+ {
+ Map<Object, Object> attributes = getFacesContext().getAttributes();
+
+ Deque<UIComponent> componentStack = (Deque<UIComponent>) attributes.get(AbstractFaceletContext.COMPOSITE_COMPONENT_STACK);
+ if(componentStack != null && !componentStack.isEmpty())
+ {
+ return componentStack.peek();
+ }
+ return null;
+ }
+
+ @Override
+ public void pushCompositeComponentToStack(UIComponent parent) {
+ Map<Object, Object> attributes = getFacesContext().getAttributes();
+
+ Deque<UIComponent> componentStack = (Deque<UIComponent>) attributes.get(AbstractFaceletContext.COMPOSITE_COMPONENT_STACK);
+ if(componentStack == null)
+ {
+ componentStack = new ArrayDeque<UIComponent>();
+ attributes.put(AbstractFaceletContext.COMPOSITE_COMPONENT_STACK, componentStack);
+ }
+
+ componentStack.push(parent);
+ }
+
+ @Override
+ public void popCompositeComponentToStack()
+ {
+ Map<Object, Object> contextAttributes = getFacesContext().getAttributes();
+
+ Deque<UIComponent> componentStack = (Deque<UIComponent>) contextAttributes.get(AbstractFaceletContext.COMPOSITE_COMPONENT_STACK);
+ if(componentStack != null && !componentStack.isEmpty())
+ {
+ componentStack.pop();
+ }
+ }
+
}