Author: cziegeler
Date: Tue Aug 31 01:16:38 2004
New Revision: 37244
Modified:
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletBaseData.java
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletData.java
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletDescription.java
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java
cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
Log:
Fix ClassCastException in redirect
Extend role protection for coplets
Modified:
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletBaseData.java
==============================================================================
---
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletBaseData.java
(original)
+++
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletBaseData.java
Tue Aug 31 01:16:38 2004
@@ -24,7 +24,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Volker Schmitt</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Björn Lütkemeier</a>
*
- * @version CVS $Id: CopletBaseData.java,v 1.8 2004/03/05 13:02:10 bdelacretaz
Exp $
+ * @version CVS $Id$
*/
public final class CopletBaseData {
@@ -35,6 +35,7 @@
private String copletAdapterName;
public CopletBaseData() {
+ // Nothing to do
}
public String getId() {
Modified:
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletData.java
==============================================================================
---
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletData.java
(original)
+++
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletData.java
Tue Aug 31 01:16:38 2004
@@ -44,9 +44,13 @@
protected Map attributes = new HashMap();
- protected String roles;
+ protected String allowedRoles;
- protected transient List rolesList;
+ protected String deniedRoles;
+
+ protected transient List allowedRolesList;
+
+ protected transient List deniedRolesList;
/**
* Signals whether a delta has been applied.
@@ -57,6 +61,7 @@
* Constructor
*/
public CopletData() {
+ // Nothing to do
}
/**
@@ -163,44 +168,81 @@
}
/**
- * @return Returns the roles.
+ * @return Returns the allowed roles.
*/
- public String getRoles() {
- return roles;
+ public String getAllowedRoles() {
+ return this.allowedRoles;
}
/**
- * @param roles The roles to set.
+ * @param roles The allowed roles to set.
*/
- public void setRoles(String roles) {
- this.roles = roles;
- this.rolesList = null;
+ public void setAllowedRoles(String roles) {
+ this.allowedRoles = roles;
+ this.allowedRolesList = null;
}
/**
+ * @return Returns the denied roles.
+ */
+ public String getDeniedRoles() {
+ return this.deniedRoles;
+ }
+ /**
+ * @param roles The allowed roles to set.
+ */
+ public void setDeniedRoles(String roles) {
+ this.deniedRoles = roles;
+ this.deniedRolesList = null;
+ }
+
+ /**
* Return the list of roles that are allowed to access this coplet
* @return A list of roles or null if everyone is allowed.
*/
- public List getAllowedRoles() {
- if ( StringUtils.isBlank(this.roles) ) {
+ public List getAllowedRolesList() {
+ if ( StringUtils.isBlank(this.allowedRoles) ) {
return null;
}
- if ( this.rolesList == null ) {
- this.rolesList = new ArrayList();
- final StringTokenizer tokenizer = new StringTokenizer(this.roles,
",");
+ if ( this.allowedRolesList == null ) {
+ this.allowedRolesList = new ArrayList();
+ final StringTokenizer tokenizer = new
StringTokenizer(this.allowedRoles, ",");
while ( tokenizer.hasMoreElements() ) {
String token = (String)tokenizer.nextElement();
- this.rolesList.add(token);
+ this.allowedRolesList.add(token);
}
- if ( this.rolesList.size() == 0 ) {
- this.roles = null;
- this.rolesList = null;
+ if ( this.allowedRolesList.size() == 0 ) {
+ this.allowedRoles = null;
+ this.allowedRolesList = null;
}
}
- return this.rolesList;
+ return this.allowedRolesList;
}
- public void addAllowedRole(String role) {
- List l = this.getAllowedRoles();
+ /**
+ * Return the list of roles that are denied to access this coplet
+ * @return A list of roles or null if everyone is allowed.
+ */
+ public List getDeniedRolesList() {
+ if ( StringUtils.isBlank(this.deniedRoles) ) {
+ return null;
+ }
+ if ( this.deniedRolesList == null ) {
+ this.deniedRolesList = new ArrayList();
+ final StringTokenizer tokenizer = new
StringTokenizer(this.deniedRoles, ",");
+ while ( tokenizer.hasMoreElements() ) {
+ String token = (String)tokenizer.nextElement();
+ this.deniedRolesList.add(token);
+ }
+ if ( this.deniedRolesList.size() == 0 ) {
+ this.deniedRoles = null;
+ this.deniedRolesList = null;
+ }
+ }
+ return this.deniedRolesList;
+ }
+
+ public void addToAllowedRoles(String role) {
+ List l = this.getAllowedRolesList();
if ( l == null ) {
l = new ArrayList();
l.add(role);
@@ -209,24 +251,54 @@
l.add(role);
}
}
- this.buildRolesString(l);
+ this.buildRolesString(l, true);
}
- public void removeAllowedRole(String role) {
- List l = this.getAllowedRoles();
+ public void removeFromAllowedRoles(String role) {
+ List l = this.getAllowedRolesList();
if ( l != null && l.contains(role) ) {
l.remove(role);
if ( l.size() == 0 ) {
- this.roles = null;
- this.rolesList = null;
+ this.allowedRoles = null;
+ this.allowedRolesList = null;
} else {
- this.buildRolesString(l);
+ this.buildRolesString(l, true);
}
}
}
- protected void buildRolesString(List fromList) {
- this.rolesList = fromList;
+ public void addToDeniedRoles(String role) {
+ List l = this.getDeniedRolesList();
+ if ( l == null ) {
+ l = new ArrayList();
+ l.add(role);
+ } else {
+ if ( !l.contains(role) ) {
+ l.add(role);
+ }
+ }
+ this.buildRolesString(l, false);
+ }
+
+ public void removeFromDeniedRoles(String role) {
+ List l = this.getDeniedRolesList();
+ if ( l != null && l.contains(role) ) {
+ l.remove(role);
+ if ( l.size() == 0 ) {
+ this.deniedRoles = null;
+ this.deniedRolesList = null;
+ } else {
+ this.buildRolesString(l, false);
+ }
+ }
+ }
+
+ protected void buildRolesString(List fromList, boolean allow) {
+ if ( allow ) {
+ this.allowedRolesList = fromList;
+ } else {
+ this.deniedRolesList = fromList;
+ }
StringBuffer buffer = new StringBuffer();
boolean first = true;
Iterator i = fromList.iterator();
@@ -238,6 +310,10 @@
first = false;
buffer.append(role);
}
- this.roles = buffer.toString();
+ if ( allow ) {
+ this.allowedRoles = buffer.toString();
+ } else {
+ this.deniedRoles = buffer.toString();
+ }
}
}
Modified:
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletDescription.java
==============================================================================
---
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletDescription.java
(original)
+++
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletDescription.java
Tue Aug 31 01:16:38 2004
@@ -20,13 +20,14 @@
/**
- * A configured layout
+ * A configured coplet
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
*
- * @version CVS $Id: CopletDescription.java,v 1.2 2004/03/05 13:02:10
bdelacretaz Exp $
+ * @version CVS $Id$
*/
public interface CopletDescription
extends ProducibleDescription {
+ // no additional info for now
}
Modified:
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java
==============================================================================
---
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java
(original)
+++
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java
Tue Aug 31 01:16:38 2004
@@ -27,7 +27,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Volker Schmitt</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Björn Lütkemeier</a>
*
- * @version CVS $Id: CopletInstanceData.java,v 1.10 2004/03/05 13:02:10
bdelacretaz Exp $
+ * @version CVS $Id$
*/
public final class CopletInstanceData
extends AbstractProducible {
@@ -43,6 +43,7 @@
* Constructor
*/
public CopletInstanceData() {
+ // Nothing to do
}
/**
Modified:
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml
==============================================================================
---
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml
(original)
+++
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml
Tue Aug 31 01:16:38 2004
@@ -49,8 +49,12 @@
<bind-xml name="title"/>
</field>
- <field name="roles" type="java.lang.String">
- <bind-xml name="roles"/>
+ <field name="allowedRoles" type="java.lang.String">
+ <bind-xml name="allowed-roles"/>
+ </field>
+
+ <field name="deniedRoles" type="java.lang.String">
+ <bind-xml name="denied-roles"/>
</field>
<field name="attributes"
type="org.exolab.castor.mapping.MapItem" collection="map"
handler="org.apache.cocoon.portal.util.AttributesFieldHandler">
Modified:
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java
==============================================================================
---
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java
(original)
+++
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java
Tue Aug 31 01:16:38 2004
@@ -48,7 +48,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
*
- * @version CVS $Id: DefaultCopletFactory.java,v 1.9 2004/03/05 13:02:11
bdelacretaz Exp $
+ * @version CVS $Id$
*/
public class DefaultCopletFactory
extends AbstractLogEnabled
@@ -62,6 +62,9 @@
protected ServiceSelector storeSelector;
+ /* (non-Javadoc)
+ * @see
org.apache.cocoon.portal.coplet.CopletFactory#prepare(org.apache.cocoon.portal.coplet.CopletData)
+ */
public void prepare(CopletData copletData)
throws ProcessingException {
if ( copletData != null ) {
@@ -83,6 +86,9 @@
}
}
+ /* (non-Javadoc)
+ * @see
org.apache.cocoon.portal.coplet.CopletFactory#prepare(org.apache.cocoon.portal.coplet.CopletInstanceData)
+ */
public void prepare(CopletInstanceData copletInstanceData)
throws ProcessingException {
if ( copletInstanceData != null ) {
@@ -105,6 +111,9 @@
}
+ /* (non-Javadoc)
+ * @see
org.apache.cocoon.portal.coplet.CopletFactory#newInstance(org.apache.cocoon.portal.coplet.CopletData)
+ */
public CopletInstanceData newInstance(CopletData copletData)
throws ProcessingException {
String name = copletData.getName();
Modified:
cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
==============================================================================
---
cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
(original)
+++
cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
Tue Aug 31 01:16:38 2004
@@ -357,10 +357,13 @@
}
// Process the redirect
-// No more reset since with TreeProcessorRedirector, we need to pop values
from the redirect location
-// context.reset();
+ // No more reset since with TreeProcessorRedirector, we need to pop
values from the redirect location
+ // context.reset();
// The following is a fix for bug #26854 and #26571
final boolean result = processor.process(newEnv, context);
+ if ( facade != null ) {
+ newEnv = facade.getDelegate();
+ }
if ( ((ForwardEnvironmentWrapper)newEnv).getRedirectURL() != null ) {
environment.redirect(
((ForwardEnvironmentWrapper)newEnv).getRedirectURL(), false, false);
}