Author: sylvain
Date: Mon Feb 28 14:29:43 2005
New Revision: 155708
URL: http://svn.apache.org/viewcvs?view=rev&rev=155708
Log:
Fix incompatiblities introduced when unrestricting the FOM API, and remove
deprecation message
Modified:
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java
Modified:
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java
URL:
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java?view=diff&r1=155707&r2=155708
==============================================================================
---
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java
(original)
+++
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java
Mon Feb 28 14:29:43 2005
@@ -15,12 +15,19 @@
*/
package org.apache.cocoon.components.flow.javascript.fom;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.avalon.framework.CascadingRuntimeException;
import org.apache.avalon.framework.component.WrapperComponentManager;
@@ -427,10 +434,35 @@
* attributes can be accessed as properties. Do we want to keep this?
*/
private static abstract class AttributeHolderJavaObject extends
NativeJavaObject {
+
+ private static Map classProps = new HashMap();
+ private Set propNames;
+
public AttributeHolderJavaObject(Scriptable scope, Object object,
Class clazz) {
super(scope, object, clazz);
+ this.propNames = getProperties(object.getClass());
+ }
+
+ /** Compute the names of JavaBean properties so that we can filter
them our in get() */
+ private static Set getProperties(Class clazz) {
+ Set result = (Set)classProps.get(clazz);
+ if (result == null) {
+ try {
+ PropertyDescriptor[] descriptors =
Introspector.getBeanInfo(clazz).getPropertyDescriptors();
+ result = new HashSet();
+ for (int i = 0; i < descriptors.length; i++) {
+ result.add(descriptors[i].getName());
+ }
+ } catch (IntrospectionException e) {
+ // Cannot introspect: just consider there are no properties
+ result = Collections.EMPTY_SET;
+ }
+ classProps.put(clazz, result);
+ }
+ return result;
}
+
protected abstract Enumeration getAttributeNames();
protected abstract Object getAttribute(String name);
@@ -451,14 +483,17 @@
return super.has(name, start) || getAttribute(name) != null;
}
- protected abstract String getAttributeDescription();
-
public Object get(String name, Scriptable start) {
- Object result = super.get(name, start);
+ Object result;
+ // Filter out JavaBean properties. We only want methods of the
underlying object.
+ if (this.propNames.contains(name)) {
+ result = NOT_FOUND;
+ } else {
+ result = super.get(name, start);
+ }
if (result == NOT_FOUND) {
result = getAttribute(name);
if (result != null) {
- DeprecationLogger.log("Accessing " +
getAttributeDescription() + " will be removed in Cocoon 2.2");
result = wrap(start, result, null);
} else {
result = NOT_FOUND;
@@ -490,10 +525,6 @@
protected Object getAttribute(String name) {
return this.request.getParameter(name);
}
-
- protected String getAttributeDescription() {
- return "request parameters as JS properties of cocoon.request";
- }
}
/**
@@ -516,10 +547,6 @@
protected Object getAttribute(String name) {
return this.session.getAttribute(name);
}
-
- protected String getAttributeDescription() {
- return "session attributes as JS properties of cocoon.session";
- }
}
/**
@@ -542,10 +569,6 @@
protected Object getAttribute(String name) {
return this.context.getAttribute(name);
}
-
- protected String getAttributeDescription() {
- return "context attributes as JS properties of cocoon.context";
- }
}
public Scriptable jsGet_request() {