001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.components.flow.javascript.fom;
018:
019: import org.apache.cocoon.components.flow.javascript.JavaScriptFlowHelper;
020:
021: import org.mozilla.javascript.Scriptable;
022:
023: import java.util.Map;
024:
025: /**
026: * Provides the interface between the JavaScript flow controller layer and the
027: * view layer. A view can obtain the JavaScript "live connect" objects (that
028: * allow access to Java constructors) through this interface, as well as
029: * the FOM objects.
030: *
031: * @version CVS $Id: FOM_JavaScriptFlowHelper.java 454131 2006-10-08 11:42:14Z joerg $
032: */
033: public class FOM_JavaScriptFlowHelper extends JavaScriptFlowHelper {
034:
035: // Constants defining keys in the object model used to store the various objects.
036: // These constants are private so that access to these objects only go through the
037: // accessors provided below.
038: //
039: // These objects are stored in the object model rather than as request attributes,
040: // as object model is cloned for subrequests (see EnvironmentWrapper), whereas
041: // request attributes are shared between the "real" request and all of its
042: // child requests.
043: private static final String PACKAGES_OBJECT = "cocoon.flow.js.packages";
044: private static final String JAVA_PACKAGE_OBJECT = "cocoon.flow.js.packages.java";
045: private static final String FOM_REQUEST = "cocoon.flow.js.fom.FOM_Request";
046: private static final String FOM_RESPONSE = "cocoon.flow.js.fom.FOM_Response";
047: private static final String FOM_SESSION = "cocoon.flow.js.fom.FOM_Session";
048: private static final String FOM_CONTEXT = "cocoon.flow.js.fom.FOM_Context";
049: private static final String FOM_WEB_CONTINUATION = "cocoon.flow.js.fom.FOM_WebContinuation";
050: /**
051: * The parent scope to be used by nested scripts (e.g. Woody event handlers)
052: */
053: private static final String FOM_SCOPE = "cocoon.flow.js.fom.FOM_Scope";
054:
055: /**
056: * Return the JS "Packages" property (that gives access to Java
057: * packages) for use by the view layer
058: * @param objectModel The Cocoon Environment's object model
059: * @return The Packages property
060: */
061: public static Scriptable getPackages(Map objectModel) {
062: return (Scriptable) objectModel.get(PACKAGES_OBJECT);
063: }
064:
065: /**
066: * Set the JS "Packages" property in the current request
067: * @param objectModel The Cocoon Environment's object model
068: */
069: public static void setPackages(Map objectModel, Scriptable pkgs) {
070: objectModel.put(PACKAGES_OBJECT, pkgs);
071: }
072:
073: /**
074: * Return the JS "java" property (that gives access to the "java"
075: * package) for use by the view layer
076: * @param objectModel The Cocoon Environment's object model
077: * @return The java package property
078: */
079: public static Scriptable getJavaPackage(Map objectModel) {
080: return (Scriptable) objectModel.get(JAVA_PACKAGE_OBJECT);
081: }
082:
083: /**
084: * Set the JS "java" property in the current request
085: * @param objectModel The Cocoon Environment's object model
086: */
087: public static void setJavaPackage(Map objectModel,
088: Scriptable javaPkg) {
089: objectModel.put(JAVA_PACKAGE_OBJECT, javaPkg);
090: }
091:
092: public static Scriptable getFOM_Request(Map objectModel) {
093: return (Scriptable) objectModel.get(FOM_REQUEST);
094: }
095:
096: public static void setFOM_Request(Map objectModel,
097: Scriptable fom_request) {
098: objectModel.put(FOM_REQUEST, fom_request);
099: }
100:
101: public static Scriptable getFOM_Response(Map objectModel) {
102: return (Scriptable) objectModel.get(FOM_RESPONSE);
103: }
104:
105: public static void setFOM_Response(Map objectModel,
106: Scriptable fom_response) {
107: objectModel.put(FOM_RESPONSE, fom_response);
108: }
109:
110: public static Scriptable getFOM_Session(Map objectModel) {
111: return (Scriptable) objectModel.get(FOM_SESSION);
112: }
113:
114: public static void setFOM_Session(Map objectModel,
115: Scriptable fom_session) {
116: objectModel.put(FOM_SESSION, fom_session);
117: }
118:
119: public static Scriptable getFOM_Context(Map objectModel) {
120: return (Scriptable) objectModel.get(FOM_CONTEXT);
121: }
122:
123: public static void setFOM_Context(Map objectModel,
124: Scriptable fom_context) {
125: objectModel.put(FOM_CONTEXT, fom_context);
126: }
127:
128: public static Scriptable getFOM_WebContinuation(Map objectModel) {
129: return (Scriptable) objectModel.get(FOM_WEB_CONTINUATION);
130: }
131:
132: public static void setFOM_WebContinuation(Map objectModel,
133: Scriptable fom_webContinuation) {
134: objectModel.put(FOM_WEB_CONTINUATION, fom_webContinuation);
135: }
136:
137: /**
138: * Get the flowscript scope, usable by JS snippets part of the control layer, such
139: * as forms event listeners.
140: *
141: * @param objectModel the object model where the scope is stored
142: * @return the flowscript scope
143: */
144: public static Scriptable getFOM_FlowScope(Map objectModel) {
145: return (Scriptable) objectModel.get(FOM_SCOPE);
146: }
147:
148: /**
149: * Set the flowscript scope usable by JS snippets.
150: *
151: * @see #getFOM_FlowScope(Map)
152: * @param objectModel
153: * @param fom_scope
154: */
155: public static void setFOM_FlowScope(Map objectModel,
156: Scriptable fom_scope) {
157: objectModel.put(FOM_SCOPE, fom_scope);
158: }
159: }
|