You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by si...@apache.org on 2006/05/14 20:34:58 UTC
svn commit: r406397 - in /cocoon: branches/BRANCH_2_1_X/
trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/
Author: simoneg
Date: Sun May 14 11:34:57 2006
New Revision: 406397
URL: http://svn.apache.org/viewcvs?rev=406397&view=rev
Log:
COCOON-1804 added FOM_SimpleCocoon to give access to cocoon javascript object from definition snippets also when javaflow is used
Added:
cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/FOM_SimpleCocoon.java
Modified:
cocoon/branches/BRANCH_2_1_X/status.xml
cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/JavaScriptHelper.java
Modified: cocoon/branches/BRANCH_2_1_X/status.xml
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/status.xml?rev=406397&r1=406396&r2=406397&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Sun May 14 11:34:57 2006
@@ -182,6 +182,11 @@
<release version="@version@" date="@date@">
-->
<release version="2.1.10" date="TBD">
+ <action dev="SG" type="add" fixes-bug="COCOON-1804">
+ Added a lightweight FOM_SimpleCocoon class, and placed it in the javascript scope when there isn't
+ already a scope defined. This way, even when using javaflow, you have access to the cocoon
+ object (with request etc..) from javascript snippets in definition.
+ </action>
<action dev="SG" type="add" fixes-bug="COCOON-1782">
Added CSS classes in cocoon forms default XSLs.
</action>
Added: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/FOM_SimpleCocoon.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/FOM_SimpleCocoon.java?rev=406397&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/FOM_SimpleCocoon.java (added)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/FOM_SimpleCocoon.java Sun May 14 11:34:57 2006
@@ -0,0 +1,119 @@
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.forms.util;
+
+import java.util.Map;
+
+import org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon;
+import org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon.FOM_Context;
+import org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon.FOM_Request;
+import org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon.FOM_Session;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.mozilla.javascript.Scriptable;
+import org.mozilla.javascript.ScriptableObject;
+
+/**
+ * A simplified javascript cocoon object to use when using javaflow. In that case
+ * the cocoon object would not be accessible from definition javascript snippets.
+ */
+public class FOM_SimpleCocoon extends ScriptableObject {
+
+ private Map objectModel;
+
+ public String getClassName() {
+ return "FOM_SimpleCocoon";
+ }
+
+ private FOM_Cocoon.FOM_Request request = null;
+ private FOM_Cocoon.FOM_Context context = null;
+ private FOM_Cocoon.FOM_Session session = null;
+
+ private Scriptable response;
+ private Scriptable parameters;
+
+
+ public Scriptable jsGet_request() {
+ return getRequest();
+ }
+
+ public Scriptable jsGet_response() {
+ return getResponse();
+ }
+
+ public Scriptable jsGet_context() {
+ return getContext();
+ }
+
+ public Scriptable jsGet_session() {
+ return getSession();
+ }
+
+ /**
+ * Get Sitemap parameters
+ *
+ * @return a <code>Scriptable</code> value whose properties represent
+ * the Sitemap parameters from <map:call>
+ */
+ public Scriptable jsGet_parameters() {
+ //return getParameters();
+ // TODO parameters are accessible someway?
+ return null;
+ }
+
+ public Scriptable getSession() {
+ if (session != null) {
+ return session;
+ }
+ session = new FOM_Session(
+ getParentScope(),
+ ObjectModelHelper.getRequest(objectModel).getSession(true));
+ return session;
+ }
+
+ public Scriptable getRequest() {
+ if (request != null) {
+ return request;
+ }
+ request = new FOM_Request(
+ getParentScope(),
+ ObjectModelHelper.getRequest(objectModel));
+ return request;
+ }
+
+ public Scriptable getContext() {
+ if (context != null) {
+ return context;
+ }
+ context = new FOM_Context(
+ getParentScope(),
+ ObjectModelHelper.getContext(objectModel));
+ return context;
+ }
+
+ public Scriptable getResponse() {
+ if (response != null) {
+ return response;
+ }
+ response = org.mozilla.javascript.Context.toObject(
+ ObjectModelHelper.getResponse(objectModel),
+ getParentScope());
+ return response;
+ }
+
+ public void setObjectModel(Map objectModel) {
+ this.objectModel = objectModel;
+ }
+}
Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/JavaScriptHelper.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/JavaScriptHelper.java?rev=406397&r1=406396&r2=406397&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/JavaScriptHelper.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/util/JavaScriptHelper.java Sun May 14 11:34:57 2006
@@ -28,6 +28,7 @@
import org.mozilla.javascript.JavaScriptException;
import org.mozilla.javascript.Script;
import org.mozilla.javascript.Scriptable;
+import org.mozilla.javascript.ScriptableObject;
import org.w3c.dom.Element;
/**
@@ -59,7 +60,7 @@
try {
// This version of compileReader is deprecated but must be left as is to avoid breaking 2.1
script = ctx.compileReader(
- getRootScope(), //scope
+ getRootScope(null), //scope
new StringReader(jsText), // in
sourceName == null ? "<unknown>" : sourceName, // sourceName
DomHelper.getLineLocation(element), // lineNo
@@ -98,7 +99,7 @@
Function func;
try {
func = ctx.compileFunction(
- getRootScope(), //scope
+ getRootScope(null), //scope
jsText, // in
sourceName == null ? "<unknown>" : sourceName, // sourceName
DomHelper.getLineLocation(element) - 1, // lineNo, "-1" because we added "function..."
@@ -115,7 +116,7 @@
*
* @return an appropriate root scope
*/
- public static Scriptable getRootScope() {
+ public static Scriptable getRootScope(Map objectModel) {
// FIXME: TemplateOMH should be used in 2.2
//return TemplateObjectModelHelper.getScope();
@@ -125,11 +126,32 @@
Context ctx = Context.enter();
try {
_rootScope = ctx.initStandardObjects(null);
+ try {
+ ScriptableObject.defineClass(_rootScope, FOM_SimpleCocoon.class);
+ } catch (Exception e) {
+ throw new CascadingRuntimeException("Cannot setup a root context with a cocoon object for javascript", e);
+ }
+ } finally {
+ Context.exit();
+ }
+ }
+ if (objectModel == null) {
+ return _rootScope;
+ } else {
+ Context ctx = Context.enter();
+ try {
+ Scriptable scope = ctx.newObject(_rootScope);
+ FOM_SimpleCocoon cocoon = (FOM_SimpleCocoon) ctx.newObject(scope, "FOM_SimpleCocoon", new Object[] { });
+ cocoon.setObjectModel(objectModel);
+ cocoon.setParentScope(scope);
+ scope.put("cocoon", scope, cocoon);
+ return scope;
+ } catch (Exception e) {
+ throw new CascadingRuntimeException("Cannot setup a root context with a cocoon object for javascript", e);
} finally {
Context.exit();
}
}
- return _rootScope;
}
/**
@@ -150,7 +172,7 @@
if (parentScope != null) {
return parentScope;
} else {
- return getRootScope();
+ return getRootScope(objectModel);
}
}
@@ -214,6 +236,7 @@
scope.put("viewData", scope, Context.toObject(viewData, scope));
}
}
+ func.setParentScope(scope);
Object result = func.call(ctx, scope, thisObject == null? null: Context.toObject(thisObject, scope), arguments);
return FlowHelper.unwrap(result);
} finally {