Author: gvanmatre Date: Sun Jan 21 08:33:30 2007 New Revision: 498396 URL: http://svn.apache.org/viewvc?view=rev&rev=498396 Log: In preparation for cloning the shale-clay-starter-archetype (contributed by Hermod Opstvedt) to seed a shale-clay-trinidad-archetype, I've expanded the generated trinidad clay config to include the custom trinidad action listeners, converters and validators. I also added a simple example of using the trinidad "pageFlowScope".
Added: shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/component/chain/trinidad/CreateActionListenerCommand.java (with props) shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/ shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/ shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/ shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/JsfTrinidadBuilder.java (with props) shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/chain/ shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/chain/JsfTrinidadBuilderRule.java (with props) shale/sandbox/shale-clay-trinidad/src/main/resources/META-INF/tr-incubator-m1-SNAPSHOT-config.xml (with props) shale/sandbox/shale-clay-trinidad/src/main/resources/META-INF/trh-incubator-m1-SNAPSHOT-config.xml (with props) Modified: shale/sandbox/shale-clay-trinidad/pom.xml shale/sandbox/shale-clay-trinidad/src/main/webapp/WEB-INF/chain-config.xml shale/sandbox/shale-clay-trinidad/src/main/webapp/pages/index.html shale/sandbox/shale-clay-trinidad/src/main/webapp/pages/page2.html Modified: shale/sandbox/shale-clay-trinidad/pom.xml URL: http://svn.apache.org/viewvc/shale/sandbox/shale-clay-trinidad/pom.xml?view=diff&rev=498396&r1=498395&r2=498396 ============================================================================== --- shale/sandbox/shale-clay-trinidad/pom.xml (original) +++ shale/sandbox/shale-clay-trinidad/pom.xml Sun Jan 21 08:33:30 2007 @@ -15,7 +15,7 @@ <finalName>${artifactId}</finalName> <plugins> - + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> @@ -24,7 +24,8 @@ <target>1.5</target> </configuration> </plugin> - + + <!-- <plugin> <groupId>org.apache.shale</groupId> <artifactId>Tld2ClayCfgMojo</artifactId> @@ -57,7 +58,7 @@ </tlds> </configuration> </plugin> - + --> <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> @@ -185,37 +186,37 @@ <dependency> <groupId>org.apache.shale</groupId> <artifactId>shale-application</artifactId> - <version>1.0.4-SNAPSHOT</version> + <version>1.1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.shale</groupId> <artifactId>shale-clay</artifactId> - <version>1.0.4-SNAPSHOT</version> + <version>1.1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.shale</groupId> <artifactId>shale-core</artifactId> - <version>1.0.4-SNAPSHOT</version> + <version>1.1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.shale</groupId> <artifactId>shale-view</artifactId> - <version>1.0.4-SNAPSHOT</version> + <version>1.1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.shale</groupId> <artifactId>shale-tiger</artifactId> - <version>1.0.4-SNAPSHOT</version> + <version>1.1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.shale</groupId> <artifactId>shale-test</artifactId> - <version>1.0.4-SNAPSHOT</version> + <version>1.1.0-SNAPSHOT</version> <scope>test</scope> </dependency> Added: shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/component/chain/trinidad/CreateActionListenerCommand.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/component/chain/trinidad/CreateActionListenerCommand.java?view=auto&rev=498396 ============================================================================== --- shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/component/chain/trinidad/CreateActionListenerCommand.java (added) +++ shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/component/chain/trinidad/CreateActionListenerCommand.java Sun Jan 21 08:33:30 2007 @@ -0,0 +1,117 @@ +package org.apache.shale.clay.component.chain.trinidad; + +import javax.faces.context.FacesContext; +import javax.faces.el.ValueBinding; +import javax.faces.event.ActionListener; + +import org.apache.commons.chain.Context; +import org.apache.myfaces.trinidadinternal.taglib.listener.ReturnActionListener; +import org.apache.myfaces.trinidadinternal.taglib.listener.SetActionListener; +import org.apache.shale.clay.component.chain.ClayContext; +import org.apache.shale.clay.config.beans.AttributeBean; +import org.apache.shale.clay.config.beans.ComponentBean; + +/** + * <p>This is a "preprocessAddActionListener" Command registered in the "clayCustomization" + * catalog. This command will be invoked before the default handler. If the + * action lister is a custom trinidad listener, setActionListener or returnActionListener, + * custom logic will add the target listener to the parent ActionSource component. + * These two listeners have ValueBinding instead of simple properties.</p> + */ +public class CreateActionListenerCommand extends + org.apache.shale.clay.component.chain.CreateActionListenerCommand { + + /** + * <p>Fully qualified classname of the setActionListener.</p> + */ + private static final String SETACTIONLISTENER = "org.apache.myfaces.trinidadinternal.taglib.listener.SetActionListener"; + + /** + * <p>Fully qualified classname of the returnActionListener.</p> + */ + private static final String RETURNACTIONLISTENER = "org.apache.myfaces.trinidadinternal.taglib.listener.ReturnActionListener"; + + /** + * @param context faces context + * @param attr clay config bean holding information about a listeners property + * @return <code>ValueBinding</code> for the target <code>attr</code> + */ + private ValueBinding getProperty(FacesContext context, AttributeBean attr) { + if (attr == null) { + return null; + } + + if (attr.getValue() == null || !isValueReference(attr.getValue())) { + return null; + } + + ValueBinding vb = context.getApplication().createValueBinding( + attr.getValue()); + return vb; + } + + /** + * <p>Intercepts the Listener that is about to be created for the config bean. + * If the componentType (classname) matches the setActionListener or returnActionListener + * componentType's, this command handles adding it to the parent. Otherwise, + * the default method for handling actionListeners is invoked.</p> + * + * @param context commons chains context + * @return <code>true</code> if the target listener is a setActionLister or returnActionListener + */ + public boolean execute(Context context) throws Exception { + + ClayContext clayContext = (ClayContext) context; + if (clayContext == null) { + throw new NullPointerException(getMessages().getMessage( + "clay.null.clayContext")); + } + + ComponentBean displayElement = clayContext.getDisplayElement(); + if (displayElement == null) { + throw new NullPointerException(getMessages().getMessage( + "clay.null.componentBean")); + } + + // is this a special action listener + String componentType = displayElement.getComponentType(); + if (!componentType.equals(SETACTIONLISTENER) + && !componentType.equals(RETURNACTIONLISTENER)) { + + // not a statefull trinidad listener, continue + return false; + } + + super.execute(context); + + FacesContext facesContext = clayContext.getFacesContext(); + if (facesContext == null) { + throw new NullPointerException(getMessages().getMessage( + "clay.null.facesContext")); + } + + ActionListener listener = (ActionListener) clayContext.getChild(); + if (listener instanceof SetActionListener) { + AttributeBean toAttr = displayElement.getAttribute("to"); + AttributeBean fromAttr = displayElement.getAttribute("from"); + + ((SetActionListener) listener) + .setValueBinding(SetActionListener.TO_KEY, getProperty( + facesContext, toAttr)); + ((SetActionListener) listener).setValueBinding( + SetActionListener.FROM_KEY, getProperty(facesContext, + fromAttr)); + + } else if (listener instanceof ReturnActionListener) { + AttributeBean valueAttr = displayElement.getAttribute("value"); + ((ReturnActionListener) listener).setValueBinding( + ReturnActionListener.VALUE_KEY, getProperty(facesContext, + valueAttr)); + } + + // stop parent chain + return true; + + } + +} Propchange: shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/component/chain/trinidad/CreateActionListenerCommand.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/JsfTrinidadBuilder.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/JsfTrinidadBuilder.java?view=auto&rev=498396 ============================================================================== --- shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/JsfTrinidadBuilder.java (added) +++ shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/JsfTrinidadBuilder.java Sun Jan 21 08:33:30 2007 @@ -0,0 +1,80 @@ +package org.apache.shale.clay.parser.builder.trinidad; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.shale.clay.config.beans.ComponentBean; +import org.apache.shale.clay.config.beans.ElementBean; +import org.apache.shale.clay.parser.Node; +import org.apache.shale.clay.parser.builder.JsfDefaultBuilder; + +/** + * <p>Handles mapping the custom trinidad actionListeners in addition to + * the stardard mapping rules.</p> + */ +public class JsfTrinidadBuilder extends JsfDefaultBuilder { + + /** + * <p>Build's a <code>target</code> [EMAIL PROTECTED] ElementBean} from a [EMAIL PROTECTED] Node}. The + * following child nodes are handles outside of the <code>encodeChildren</code> + * method: symbol, facet, attribute, convert, validate, actionListener, + * and valueChangeListener. + * </p> + * + * @param node markup + * @param target child config bean + * @param root parent config bean + */ + protected void encodeBegin(Node node, ElementBean target, ComponentBean root) { + assignNode(node, target); + + List deleteList = new ArrayList(); + Iterator ci = node.getChildren().iterator(); + next: while (ci.hasNext()) { + Node child = (Node) ci.next(); + if (child.isWellFormed() && child.getName() != null) { + if (child.getName().equals("symbol")) { + addSymbol(child, target); + deleteList.add(child); + } else if (child.getName().equals("facet")) { + addFacet(child, target); + deleteList.add(child); + } else if (child.getName().equals("attribute")) { + addAttribute(child, target); + deleteList.add(child); + } else if (child.getName().startsWith("convert")) { + addConverter(child, target); + deleteList.add(child); + } else if (child.getName().startsWith("validate") + || child.getName().startsWith("validator") + || child.getName().startsWith("commonsValidator")) { + addValidator(child, target); + deleteList.add(child); + } else if (child.getName().equals("actionListener") + || child.getName().endsWith("ActionListener")) { + addActionListener(child, target); + deleteList.add(child); + } else if (child.getName().equals("valueChangeListener")) { + addValueChangeListener(child, target); + deleteList.add(child); + } + } else { + if (node.getName() != null && node.getName().equals("verbatim")) { + continue next; + } + if (child.isComment() || isNodeWhitespace(child)) { + // remove white space + deleteList.add(child); + } + } + } + + ci = deleteList.iterator(); + while (ci.hasNext()) { + node.getChildren().remove(ci.next()); + } + + } + +} Propchange: shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/JsfTrinidadBuilder.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/chain/JsfTrinidadBuilderRule.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/chain/JsfTrinidadBuilderRule.java?view=auto&rev=498396 ============================================================================== --- shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/chain/JsfTrinidadBuilderRule.java (added) +++ shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/chain/JsfTrinidadBuilderRule.java Sun Jan 21 08:33:30 2007 @@ -0,0 +1,31 @@ +package org.apache.shale.clay.parser.builder.trinidad.chain; + +import org.apache.commons.chain.Context; +import org.apache.shale.clay.parser.builder.Builder; +import org.apache.shale.clay.parser.builder.chain.BuilderRuleContext; +import org.apache.shale.clay.parser.builder.chain.JsfDefaultBuilderRule; +import org.apache.shale.clay.parser.builder.trinidad.JsfTrinidadBuilder; + +public class JsfTrinidadBuilderRule extends JsfDefaultBuilderRule { + + /** + * <p>Generic [EMAIL PROTECTED] Builder} that handles JSP style of markup's.</p> + */ + private final JsfTrinidadBuilder builder = new JsfTrinidadBuilder(); + + /** + * <p>Assigns handling of the markup to [EMAIL PROTECTED] org.apache.shale.clay.parser.builder.trinidad.JsfTrinidadBuilder} + * without condition.</p> + * + * @param context common chains + * @return <code>true</code> if the chain is done + */ + public boolean execute(Context context) { + + BuilderRuleContext builderRuleContext = (BuilderRuleContext) context; + builderRuleContext.setBuilder(builder); + + return true; + } + +} Propchange: shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/shale/clay/parser/builder/trinidad/chain/JsfTrinidadBuilderRule.java ------------------------------------------------------------------------------ svn:eol-style = native