Author: ddewolf Date: Thu Nov 9 08:56:44 2006 New Revision: 472977 URL: http://svn.apache.org/viewvc?view=rev&rev=472977 Log: Implementing definition tag. Very close to fixing all tags.
Removed: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTagSupport.java Modified: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/mgmt/TileDefinition.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java Modified: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/mgmt/TileDefinition.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/mgmt/TileDefinition.java?view=diff&rev=472977&r1=472976&r2=472977 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/mgmt/TileDefinition.java (original) +++ struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/mgmt/TileDefinition.java Thu Nov 9 08:56:44 2006 @@ -22,6 +22,7 @@ import org.apache.tiles.ComponentAttribute; import java.util.Map; +import java.util.HashMap; /** * Data transfer object used for registering new @@ -57,6 +58,10 @@ */ protected String preparer = null; + + public TileDefinition() { + attributes = new HashMap<String, ComponentAttribute>(); + } /** * Access method for the name property. Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java?view=diff&rev=472977&r1=472976&r2=472977 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java Thu Nov 9 08:56:44 2006 @@ -20,7 +20,10 @@ package org.apache.tiles.impl.mgmt; import org.apache.tiles.TilesException; +import org.apache.tiles.context.TilesRequestContext; import org.apache.tiles.definition.ComponentDefinition; +import org.apache.tiles.definition.DefinitionsFactoryException; +import org.apache.tiles.definition.DefinitionsFactory; import org.apache.tiles.impl.BasicTilesContainer; import org.apache.tiles.mgmt.TileDefinition; import org.apache.tiles.mgmt.MutableTilesContainer; @@ -44,4 +47,19 @@ mgr.addDefinition(def); } + protected ComponentDefinition getDefinition(String definition, + TilesRequestContext context) + throws DefinitionsFactoryException { + return mgr.getDefinition(definition, context); + } + + + public DefinitionsFactory getDefinitionsFactory() { + return mgr.getFactory(); + } + + public void setDefinitionsFactory(DefinitionsFactory definitionsFactory) { + super.setDefinitionsFactory(definitionsFactory); + mgr.setFactory(definitionsFactory); + } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java?view=diff&rev=472977&r1=472976&r2=472977 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java Thu Nov 9 08:56:44 2006 @@ -23,9 +23,13 @@ import org.apache.tiles.taglib.PutTag; import org.apache.tiles.ComponentAttribute; import org.apache.tiles.TilesContainer; +import org.apache.tiles.TilesException; +import org.apache.tiles.mgmt.MutableTilesContainer; +import org.apache.tiles.mgmt.TileDefinition; import org.apache.tiles.access.TilesAccess; import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.TagSupport; import java.util.Map; import java.util.HashMap; @@ -36,34 +40,21 @@ * * @version $Rev$ $Date$ */ -public class DefinitionTag extends DefinitionTagSupport +public class DefinitionTag extends TagSupport implements PutTagParent { - /* JSP Tag attributes */ - /** - * TileDefinition identifier. - */ - private String name = null; - /** - * Scope into which definition will be saved. - */ - private String scope = null; + private String name; + private String template; + private String extend; + private String role; + private String preparer; - /** - * Extends attribute value. - */ - private String extendsDefinition = null; - - private TilesContainer container; + private MutableTilesContainer container; private Map<String, ComponentAttribute> attributes; - public DefinitionTag() { - attributes = new HashMap<String, ComponentAttribute>(); - } - public String getName() { return name; } @@ -72,24 +63,60 @@ this.name = name; } - public String getScope() { - return scope; + public String getTemplate() { + return template; + } + + public void setTemplate(String template) { + this.template = template; + } + + public String getExtends() { + return extend; + } + + public void setExtends(String extend) { + this.extend = extend; + } + + public String getRole() { + return role; } - public void setScope(String scope) { - this.scope = scope; + public void setRole(String role) { + this.role = role; } - public String getExtendsDefinition() { - return extendsDefinition; + public String getPreparer() { + return preparer; } - public void setExtendsDefinition(String extendsDefinition) { - this.extendsDefinition = extendsDefinition; + public void setPreparer(String preparer) { + this.preparer = preparer; } - public int doStartTag() { - container = TilesAccess.getContainer(pageContext.getServletContext()); + public void release() { + super.release(); + name = null; + template = null; + extend = null; + role = null; + preparer = null; + attributes.clear(); + } + + public int doStartTag() throws JspException { + attributes = new HashMap<String, ComponentAttribute>(); + + TilesContainer c = + TilesAccess.getContainer(pageContext.getServletContext()); + + if(!(c instanceof MutableTilesContainer)) { + throw new JspException("Unable to define definition for a " + + "container which does not implement MutableTilesContainer"); + } + + container = (MutableTilesContainer)c; return EVAL_BODY_INCLUDE; } @@ -98,9 +125,19 @@ * * @return */ - public int doEndTag() { - for(Map.Entry<String, ComponentAttribute> entry : attributes.entrySet()) { -// container.addDefinition(entry.getKey(), entry.getValue()); + public int doEndTag() throws JspException { + TileDefinition d = new TileDefinition(); + d.setName(name); + d.setTemplate(template); + d.setExtends(extend); + d.setRole(role); + d.setPreparer(preparer); + d.getAttributes().putAll(attributes); + + try { + container.register(d); + } catch (TilesException e) { + throw new JspException("Unable to add definition. " ,e); } return EVAL_PAGE; } @@ -109,17 +146,11 @@ * Reset member values for reuse. This method calls super.release(), * which invokes TagSupport.release(), which typically does nothing. */ - public void release() { - super.release(); - name = null; - scope = null; - extendsDefinition = null; - attributes.clear(); - } public void processNestedTag(PutTag nestedTag) throws JspException { ComponentAttribute attr = new ComponentAttribute(nestedTag.getValue(), nestedTag.getRole(), nestedTag.getType()); + attr.setName(nestedTag.getName()); attributes.put(nestedTag.getName(), attr); } }