Author: wesw Date: Thu Aug 13 19:12:07 2009 New Revision: 803993 URL: http://svn.apache.org/viewvc?rev=803993&view=rev Log: added freemarker <@sjx.tag support for existing tags.
Added: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryStrutsModels.java struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryTaglib.java struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/freemarker/ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/freemarker/models/ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/freemarker/models/JQueryFreemarkerModel.java Modified: struts/sandbox/trunk/struts2-jquery-plugin/ (props changed) struts/sandbox/trunk/struts2-jquery-plugin/pom.xml struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml Propchange: struts/sandbox/trunk/struts2-jquery-plugin/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Thu Aug 13 19:12:07 2009 @@ -0,0 +1,5 @@ +.* +*.iml +*.ipr +*.iws +target Modified: struts/sandbox/trunk/struts2-jquery-plugin/pom.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/pom.xml?rev=803993&r1=803992&r2=803993&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/pom.xml (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/pom.xml Thu Aug 13 19:12:07 2009 @@ -5,7 +5,7 @@ <parent> <groupId>org.apache.struts</groupId> <artifactId>struts2-plugins</artifactId> - <version>2.1.7-SNAPSHOT</version> + <version>2.1.8-SNAPSHOT</version> </parent> <groupId>org.apache.struts</groupId> <artifactId>struts2-jquery-plugin</artifactId> @@ -48,6 +48,7 @@ <build> <defaultGoal>install</defaultGoal> <plugins> + <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-idea-plugin</artifactId> @@ -57,6 +58,7 @@ <useFullNames>false</useFullNames> </configuration> </plugin> + --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> Added: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryStrutsModels.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryStrutsModels.java?rev=803993&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryStrutsModels.java (added) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryStrutsModels.java Thu Aug 13 19:12:07 2009 @@ -0,0 +1,84 @@ +package org.apache.struts2.jquery; + +import com.opensymphony.xwork2.util.ValueStack; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts2.jquery.freemarker.models.JQueryFreemarkerModel; +import org.apache.struts2.jquery.components.JQueryForm; +import org.apache.struts2.jquery.components.JQueryHead; +import org.apache.struts2.jquery.components.JQueryReset; +import org.apache.struts2.jquery.components.JQuerySubmit; +import org.apache.struts2.jquery.components.JQueryTextField; +import org.apache.struts2.jquery.components.JQueryDatepicker; + +/** + * Describe your class here + * + * @author $Author$ + * <p/> + * $Id$ + */ +public class JQueryStrutsModels { + + protected ValueStack stack; + protected HttpServletRequest req; + protected HttpServletResponse res; + + protected JQueryFreemarkerModel form; + protected JQueryFreemarkerModel head; + protected JQueryFreemarkerModel reset; + protected JQueryFreemarkerModel submit; + protected JQueryFreemarkerModel textfield; + protected JQueryFreemarkerModel datepicker; + + public JQueryStrutsModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res) { + this.stack = stack; + this.req = req; + this.res = res; + } + + public JQueryFreemarkerModel getForm() { + if (form == null ) { + form = new JQueryFreemarkerModel(stack, req, res, JQueryForm.class); + } + return form; + } + + public JQueryFreemarkerModel getHead() { + if (head == null ) { + head = new JQueryFreemarkerModel(stack, req, res, JQueryHead.class); + } + return head; + } + + public JQueryFreemarkerModel getReset() { + if (reset == null ) { + reset = new JQueryFreemarkerModel(stack, req, res, JQueryReset.class); + } + return reset; + } + + public JQueryFreemarkerModel getSubmit() { + if (submit == null ) { + submit = new JQueryFreemarkerModel(stack, req, res, JQuerySubmit.class); + } + return submit; + } + + public JQueryFreemarkerModel getTextfield() { + if (textfield == null ) { + textfield = new JQueryFreemarkerModel(stack, req, res, JQueryTextField.class); + } + return textfield; + } + + public JQueryFreemarkerModel getDatepicker() { + if (datepicker == null ) { + datepicker = new JQueryFreemarkerModel(stack, req, res, JQueryDatepicker.class); + } + return datepicker; + } + +} Added: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryTaglib.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryTaglib.java?rev=803993&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryTaglib.java (added) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/JQueryTaglib.java Thu Aug 13 19:12:07 2009 @@ -0,0 +1,41 @@ +package org.apache.struts2.jquery; + +import org.apache.struts2.views.TagLibrary; +import com.opensymphony.xwork2.util.ValueStack; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * Created primarily to provide <@sjx.tag support in Freemarker + * + * @author $Author$ + * <p/> + * $Id$ + */ +public class JQueryTaglib implements TagLibrary { + + /** + * Gets a Java object that contains getters for the tag library's Freemarker models. + * Called once per Freemarker template processing. + * + * @param stack The current value stack + * @param req The HTTP request + * @param res The HTTP response + * @return The Java object containing the Freemarker model getter methods + */ + public Object getFreemarkerModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res) { + return new JQueryStrutsModels(stack, req, res); + } + + /** + * Gets a list of Velocity directive classes for the tag library. Called once on framework + * startup when initializing Velocity. + * + * @return A list of Velocity directive classes + */ + public List<Class> getVelocityDirectiveClasses() { + throw new UnsupportedOperationException("no velocity support currently, sorry"); + } +} Added: struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/freemarker/models/JQueryFreemarkerModel.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/freemarker/models/JQueryFreemarkerModel.java?rev=803993&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/freemarker/models/JQueryFreemarkerModel.java (added) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/java/org/apache/struts2/jquery/freemarker/models/JQueryFreemarkerModel.java Thu Aug 13 19:12:07 2009 @@ -0,0 +1,66 @@ +package org.apache.struts2.jquery.freemarker.models; + +import org.apache.struts2.views.freemarker.tags.TagModel; +import org.apache.struts2.components.Component; +import org.apache.commons.logging.LogFactory; +import com.opensymphony.xwork2.util.ValueStack; +import com.opensymphony.xwork2.util.logging.Logger; +import com.opensymphony.xwork2.util.logging.LoggerFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +/** + * Describe your class here + * + * @author $Author$ + * <p/> + * $Id$ + */ +public class JQueryFreemarkerModel extends TagModel { + + private Class clazz; + private static final Logger LOG = LoggerFactory.getLogger(JQueryFreemarkerModel.class); + + public JQueryFreemarkerModel(ValueStack stack, HttpServletRequest req, HttpServletResponse res, Class clazz) { + super(stack, req, res); + this.clazz = clazz; + } + + protected Component getBean() { + + Constructor con; + try { + con = clazz.getConstructor(ValueStack.class, + HttpServletRequest.class, + HttpServletResponse.class); + } + catch(NoSuchMethodException nsme) { + LOG.error("class specified does not appear to have an appropriate constructor"); + return null; + } + + Object o = null; + try { + o = con.newInstance(new Object[]{stack,req,res}); + } + catch (InvocationTargetException e) { + LOG.error("InvocationTargetException caught instantiating component - " + clazz.getName()); + } + catch (IllegalAccessException e) { + LOG.error("IllegalAccessException caught instantiating component - " + clazz.getName()); + } + catch (InstantiationException e) { + LOG.error("InstantiationException caught instantiating component - " + clazz.getName()); + } + + if (o instanceof Component) { + return (Component)o; + } + + return null; + + } +} Modified: struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml?rev=803993&r1=803992&r2=803993&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml (original) +++ struts/sandbox/trunk/struts2-jquery-plugin/src/main/resources/struts-plugin.xml Thu Aug 13 19:12:07 2009 @@ -45,6 +45,7 @@ </result-types> </package> --> + <bean class="org.apache.struts2.jquery.JQueryTaglib" name="sjx" type="org.apache.struts2.views.TagLibrary" /> <constant name="struts.jquery.default.theme" value="jquery" /> </struts>