You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2007/12/20 19:41:49 UTC

svn commit: r605994 - in /tiles/framework/branches/TILES_2_0_X: tiles-api/src/main/java/org/apache/tiles/ tiles-core/src/main/java/org/apache/tiles/definition/ tiles-core/src/main/java/org/apache/tiles/impl/ tiles-core/src/main/java/org/apache/tiles/im...

Author: apetrelli
Date: Thu Dec 20 10:41:47 2007
New Revision: 605994

URL: http://svn.apache.org/viewvc?rev=605994&view=rev
Log:
TILES-230
TILES-197
Merge from trunk to TILES_2_0_X branch.

Added:
    tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java   (contents, props changed)
      - copied, changed from r605967, tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java
    tiles/framework/branches/TILES_2_0_X/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java   (contents, props changed)
      - copied, changed from r605967, tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java
Modified:
    tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Attribute.java
    tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Definition.java
    tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsImpl.java
    tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
    tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java
    tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java
    tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java

Modified: tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Attribute.java
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Attribute.java?rev=605994&r1=605993&r2=605994&view=diff
==============================================================================
--- tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Attribute.java (original)
+++ tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Attribute.java Thu Dec 20 10:41:47 2007
@@ -23,7 +23,10 @@
 
 import java.io.Serializable;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Common implementation of attribute definition.
@@ -108,9 +111,9 @@
     };
 
     /**
-     * Role associated to this attribute.
+     * The roles that can render this attribute.
      */
-    protected String role = null;
+    protected Set<String> roles = null;
 
     /**
      * The value of the attribute.
@@ -152,7 +155,7 @@
      */
     public Attribute(Attribute attribute) {
         this.name = attribute.name;
-        this.role = attribute.role;
+        this.roles = attribute.roles;
         this.type = attribute.type;
         this.value = attribute.getValue();
     }
@@ -176,7 +179,7 @@
      */
     public Attribute(Object value, String role) {
         this.value = value;
-        this.role = role;
+        setRole(role);
     }
 
     /**
@@ -188,8 +191,8 @@
      */
     public Attribute(Object value, String role, AttributeType type) {
         this.value = value;
-        this.role = role;
         this.type = type;
+        setRole(role);
     }
 
     /**
@@ -204,8 +207,8 @@
             AttributeType type) {
         this.name = name;
         this.value = value;
-        this.role = role;
         this.type = type;
+        setRole(role);
     }
 
     /**
@@ -213,7 +216,31 @@
      * @return the name of the required role(s)
      */
     public String getRole() {
-        return role;
+        String retValue = null;
+
+        if (roles != null && !roles.isEmpty()) {
+            StringBuilder builder = new StringBuilder();
+            Iterator<String> roleIt = roles.iterator();
+            if (roleIt.hasNext()) {
+                builder.append(roleIt.next());
+                while (roleIt.hasNext()) {
+                    builder.append(",");
+                    builder.append(roleIt.next());
+                }
+                retValue = builder.toString();
+            }
+        }
+
+        return retValue;
+    }
+
+    /**
+     * Returns the roles that can render this attribute.
+     *
+     * @return The enabled roles.
+     */
+    public Set<String> getRoles() {
+        return roles;
     }
 
     /**
@@ -222,7 +249,24 @@
      * @param role Associated role.
      */
     public void setRole(String role) {
-        this.role = role;
+        if (role != null && role.trim().length() > 0) {
+            String[] rolesStrings = role.split("\\s*,\\s*");
+            roles = new HashSet<String>();
+            for (int i = 0; i < rolesStrings.length; i++) {
+                roles.add(rolesStrings[i]);
+            }
+        } else {
+            roles = null;
+        }
+    }
+
+    /**
+     * Sets the roles that can render this attribute.
+     *
+     * @param roles The enabled roles.
+     */
+    public void setRoles(Set<String> roles) {
+        this.roles = roles;
     }
 
     /**

Modified: tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Definition.java
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Definition.java?rev=605994&r1=605993&r2=605994&view=diff
==============================================================================
--- tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Definition.java (original)
+++ tiles/framework/branches/TILES_2_0_X/tiles-api/src/main/java/org/apache/tiles/Definition.java Thu Dec 20 10:41:47 2007
@@ -21,8 +21,11 @@
 package org.apache.tiles;
 
 
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.HashMap;
+import java.util.Set;
 
 import org.apache.tiles.Attribute.AttributeType;
 
@@ -53,9 +56,9 @@
      */
     protected Map<String, Attribute> attributes = null;
     /**
-     * Role associated to definition.
+     * The roles that can render this definition.
      */
-    protected String role = null;
+    protected Set<String> roles = null;
     /**
      * Associated ViewPreparer URL or classname, if defined.
      */
@@ -80,11 +83,11 @@
     public Definition(Definition definition) {
         attributes = new HashMap<String, Attribute>(
             definition.getAttributes());
-        this.name = definition.getName();
-        this.template = definition.getTemplate();
-        this.role = definition.getRole();
-        this.preparer = definition.getPreparer();
-        this.inherit = definition.getExtends();
+        this.name = definition.name;
+        this.template = definition.template;
+        this.roles = definition.roles;
+        this.preparer = definition.preparer;
+        this.inherit = definition.inherit;
     }
 
     /**
@@ -142,16 +145,57 @@
      * @return the current value of the role property
      */
     public String getRole() {
-        return role;
+        String retValue = null;
+
+        if (roles != null && !roles.isEmpty()) {
+            StringBuilder builder = new StringBuilder();
+            Iterator<String> roleIt = roles.iterator();
+            if (roleIt.hasNext()) {
+                builder.append(roleIt.next());
+                while (roleIt.hasNext()) {
+                    builder.append(",");
+                    builder.append(roleIt.next());
+                }
+                retValue = builder.toString();
+            }
+        }
+
+        return retValue;
+    }
+
+    /**
+     * Returns the roles that can render this attribute.
+     *
+     * @return The enabled roles.
+     */
+    public Set<String> getRoles() {
+        return roles;
     }
 
     /**
      * Sets the value of the role property.
      *
-     * @param role the new value of the path property
+     * @param role the new value of the role property
      */
     public void setRole(String role) {
-        this.role = role;
+        if (role != null && role.trim().length() > 0) {
+            String[] rolesStrings = role.split("\\s*,\\s*");
+            roles = new HashSet<String>();
+            for (int i = 0; i < rolesStrings.length; i++) {
+                roles.add(rolesStrings[i]);
+            }
+        } else {
+            roles = null;
+        }
+    }
+
+    /**
+     * Sets the roles that can render this attribute.
+     *
+     * @param roles The enabled roles.
+     */
+    public void setRoles(Set<String> roles) {
+        this.roles = roles;
     }
 
     /**
@@ -308,7 +352,7 @@
             + ", template="
             + template
             + ", role="
-            + role
+            + getRoles()
             + ", preparerInstance="
             + preparer
             + ", attributes="

Modified: tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsImpl.java
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsImpl.java?rev=605994&r1=605993&r2=605994&view=diff
==============================================================================
--- tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsImpl.java (original)
+++ tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsImpl.java Thu Dec 20 10:41:47 2007
@@ -269,8 +269,8 @@
         if (child.getTemplate() == null) {
             child.setTemplate(parent.getTemplate());
         }
-        if (child.getRole() == null) {
-            child.setRole(parent.getRole());
+        if (child.getRoles() == null) {
+            child.setRoles(parent.getRoles());
         }
         if (child.getPreparer() == null) {
             child.setPreparer(parent.getPreparer());

Modified: tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java?rev=605994&r1=605993&r2=605994&view=diff
==============================================================================
--- tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java (original)
+++ tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java Thu Dec 20 10:41:47 2007
@@ -43,8 +43,10 @@
 import java.io.Writer;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.StringTokenizer;
 
 /**
@@ -394,9 +396,12 @@
             throw new NoSuchDefinitionException(definitionName);
         }
 
-        if (!isPermitted(request, definition.getRole())) {
-            LOG.info("Access to definition '" + definitionName
-                    + "' denied.  User not in role '" + definition.getRole());
+        if (!isPermitted(request, definition.getRoles())) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Access to definition '" + definitionName
+                        + "' denied.  User not in role '"
+                        + definition.getRoles());
+            }
             return;
         }
 
@@ -439,9 +444,11 @@
             throw new TilesException("Cannot render a null attribute");
         }
 
-        if (!isPermitted(request, attr.getRole())) {
-            LOG.info("Access to attribute '" + attr.getName()
-                    + "' denied.  User not in role '" + attr.getRole());
+        if (!isPermitted(request, attr.getRoles())) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Access to attribute '" + attr.getName()
+                        + "' denied.  User not in role '" + attr.getRoles());
+            }
             return;
         }
 
@@ -520,21 +527,22 @@
      * specified in the <code>role</code> parameter.
      *
      * @param request The request context.
-     * @param role The comma-separated list of roles.
+     * @param roles The list of roles.
      * @return <code>true</code> if the current user is in one of those roles.
      */
-    private boolean isPermitted(TilesRequestContext request, String role) {
-        if (role == null) {
+    private boolean isPermitted(TilesRequestContext request, Set<String> roles) {
+        if (roles == null || roles.isEmpty()) {
             return true;
         }
 
-        StringTokenizer st = new StringTokenizer(role, ",");
-        while (st.hasMoreTokens()) {
-            if (request.isUserInRole(st.nextToken())) {
-                return true;
-            }
+        boolean retValue = false;
+
+        for (Iterator<String> roleIt = roles.iterator(); roleIt.hasNext()
+                && !retValue;) {
+            retValue = request.isUserInRole(roleIt.next());
         }
-        return false;
+
+        return retValue;
     }
 
     /**

Modified: tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java?rev=605994&r1=605993&r2=605994&view=diff
==============================================================================
--- tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java (original)
+++ tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java Thu Dec 20 10:41:47 2007
@@ -228,8 +228,8 @@
             child.setTemplate(parent.getTemplate());
         }
 
-        if (child.getRole() == null) {
-            child.setRole(parent.getRole());
+        if (child.getRoles() == null) {
+            child.setRoles(parent.getRoles());
         }
 
         if (child.getPreparer() == null) {

Modified: tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java?rev=605994&r1=605993&r2=605994&view=diff
==============================================================================
--- tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java (original)
+++ tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java Thu Dec 20 10:41:47 2007
@@ -33,6 +33,7 @@
 import javax.portlet.RenderResponse;
 
 import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.util.TilesIOException;
 
 /**
  * Portlet-based TilesApplicationContext implementation.
@@ -238,8 +239,9 @@
                 context.getRequestDispatcher(path).include((RenderRequest) request,
                     (RenderResponse) response);
             } catch (PortletException e) {
-                throw new IOException("PortletException while including path '"
-                        + path + "'.", e);
+                throw new TilesIOException(
+                        "PortletException while including path '" + path + "'.",
+                        e);
             }
         }
     }

Modified: tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java?rev=605994&r1=605993&r2=605994&view=diff
==============================================================================
--- tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java (original)
+++ tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java Thu Dec 20 10:41:47 2007
@@ -31,6 +31,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.util.TilesIOException;
 
 /**
  * Servlet-based implementation of the TilesApplicationContext interface.
@@ -281,9 +282,9 @@
         if (rootCause != null) {
             // Replace the ServletException with an IOException, with the root
             // cause of the first as the cause of the latter.
-            retValue = new IOException(message, rootCause);
+            retValue = new TilesIOException(message, rootCause);
         } else {
-            retValue = new IOException(message, ex);
+            retValue = new TilesIOException(message, ex);
         }
 
         return retValue;

Copied: tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java (from r605967, tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java)
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java?p2=tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java&p1=tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java&r1=605967&r2=605994&rev=605994&view=diff
==============================================================================
    (empty)

Propchange: tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/branches/TILES_2_0_X/tiles-core/src/main/java/org/apache/tiles/util/TilesIOException.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Copied: tiles/framework/branches/TILES_2_0_X/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java (from r605967, tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java)
URL: http://svn.apache.org/viewvc/tiles/framework/branches/TILES_2_0_X/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java?p2=tiles/framework/branches/TILES_2_0_X/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java&p1=tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java&r1=605967&r2=605994&rev=605994&view=diff
==============================================================================
    (empty)

Propchange: tiles/framework/branches/TILES_2_0_X/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/branches/TILES_2_0_X/tiles-core/src/test/java/org/apache/tiles/util/TilesIOExceptionTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL