blob: 389b7b4a79ae74cd5f3d16057bdbc609179ed485 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.components.flow.javascript.fom;
import org.apache.cocoon.components.flow.javascript.JavaScriptFlowHelper;
import org.mozilla.javascript.Scriptable;
import java.util.Map;
/**
* Provides the interface between the JavaScript flow controller layer and the
* view layer. A view can obtain the JavaScript "live connect" objects (that
* allow access to Java constructors) through this interface, as well as
* the FOM objects.
*
* @version CVS $Id$
*/
public class FOM_JavaScriptFlowHelper extends JavaScriptFlowHelper {
// Constants defining keys in the object model used to store the various objects.
// These constants are private so that access to these objects only go through the
// accessors provided below.
//
// These objects are stored in the object model rather than as request attributes,
// as object model is cloned for subrequests (see EnvironmentWrapper), whereas
// request attributes are shared between the "real" request and all of its
// child requests.
private static final String PACKAGES_OBJECT =
"cocoon.flow.js.packages";
private static final String JAVA_PACKAGE_OBJECT =
"cocoon.flow.js.packages.java";
private static final String FOM_REQUEST =
"cocoon.flow.js.fom.FOM_Request";
private static final String FOM_RESPONSE =
"cocoon.flow.js.fom.FOM_Response";
private static final String FOM_SESSION =
"cocoon.flow.js.fom.FOM_Session";
private static final String FOM_CONTEXT =
"cocoon.flow.js.fom.FOM_Context";
private static final String FOM_WEB_CONTINUATION =
"cocoon.flow.js.fom.FOM_WebContinuation";
/**
* The parent scope to be used by nested scripts (e.g. Woody event handlers)
*/
private static final String FOM_SCOPE =
"cocoon.flow.js.fom.FOM_Scope";
/**
* Return the JS "Packages" property (that gives access to Java
* packages) for use by the view layer
* @param objectModel The Cocoon Environment's object model
* @return The Packages property
*/
public static Scriptable getPackages(Map objectModel) {
return (Scriptable)objectModel.get(PACKAGES_OBJECT);
}
/**
* Set the JS "Packages" property in the current request
* @param objectModel The Cocoon Environment's object model
*/
public static void setPackages(Map objectModel, Scriptable pkgs) {
objectModel.put(PACKAGES_OBJECT, pkgs);
}
/**
* Return the JS "java" property (that gives access to the "java"
* package) for use by the view layer
* @param objectModel The Cocoon Environment's object model
* @return The java package property
*/
public static Scriptable getJavaPackage(Map objectModel) {
return (Scriptable)objectModel.get(JAVA_PACKAGE_OBJECT);
}
/**
* Set the JS "java" property in the current request
* @param objectModel The Cocoon Environment's object model
*/
public static void setJavaPackage(Map objectModel, Scriptable javaPkg) {
objectModel.put(JAVA_PACKAGE_OBJECT, javaPkg);
}
public static Scriptable getFOM_Request(Map objectModel) {
return (Scriptable)objectModel.get(FOM_REQUEST);
}
public static void setFOM_Request(Map objectModel, Scriptable fom_request) {
objectModel.put(FOM_REQUEST, fom_request);
}
public static Scriptable getFOM_Response(Map objectModel) {
return (Scriptable)objectModel.get(FOM_RESPONSE);
}
public static void setFOM_Response(Map objectModel, Scriptable fom_response) {
objectModel.put(FOM_RESPONSE, fom_response);
}
public static Scriptable getFOM_Session(Map objectModel) {
return (Scriptable)objectModel.get(FOM_SESSION);
}
public static void setFOM_Session(Map objectModel, Scriptable fom_session) {
objectModel.put(FOM_SESSION, fom_session);
}
public static Scriptable getFOM_Context(Map objectModel) {
return (Scriptable)objectModel.get(FOM_CONTEXT);
}
public static void setFOM_Context(Map objectModel, Scriptable fom_context) {
objectModel.put(FOM_CONTEXT, fom_context);
}
public static Scriptable getFOM_WebContinuation(Map objectModel) {
return (Scriptable)objectModel.get(FOM_WEB_CONTINUATION);
}
public static void setFOM_WebContinuation(Map objectModel,
Scriptable fom_webContinuation) {
objectModel.put(FOM_WEB_CONTINUATION, fom_webContinuation);
}
/**
* Get the flowscript scope, usable by JS snippets part of the control layer, such
* as forms event listeners.
*
* @param objectModel the object model where the scope is stored
* @return the flowscript scope
*/
public static Scriptable getFOM_FlowScope(Map objectModel) {
return (Scriptable)objectModel.get(FOM_SCOPE);
}
/**
* Set the flowscript scope usable by JS snippets.
*
* @see #getFOM_FlowScope(Map)
* @param objectModel
* @param fom_scope
*/
public static void setFOM_FlowScope(Map objectModel, Scriptable fom_scope) {
objectModel.put(FOM_SCOPE, fom_scope);
}
}