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;
018:
019: import org.mozilla.javascript.Undefined;
020: import org.mozilla.javascript.Wrapper;
021:
022: import java.util.Map;
023:
024: /**
025: * Provides the interface between the flow controller layer and the
026: * view layer. A view can obtain the context object sent by a flow
027: * script and the current web continuation, if any.
028: */
029: public class FlowHelper {
030:
031: // Constants defining keys in the object model used to store the various objects.
032: // These constants are private so that access to these objects only go through the
033: // accessors provided below.
034: //
035: // These objects are stored in the object model rather than as request attributes,
036: // as object model is cloned for subrequests (see EnvironmentWrapper), whereas
037: // request attributes are shared between the "real" request and all of its
038: // child requests.
039:
040: /**
041: * Request attribute name used to store flow context.
042: */
043: private static final String CONTEXT_OBJECT = "cocoon.flow.context";
044:
045: /**
046: * Request attribute name used to store flow continuation.
047: */
048: private static final String CONTINUATION_OBJECT = "cocoon.flow.continuation";
049:
050: /**
051: * Get the flow context object associated with the current request
052: *
053: * @param objectModel The Cocoon Environment's object model
054: * @return The context object
055: */
056: public final static Object getContextObject(Map objectModel) {
057: return objectModel.get(CONTEXT_OBJECT);
058: }
059:
060: /**
061: * Get the web continuation associated with the current request
062: *
063: * @param objectModel The Cocoon Environment's object model
064: * @return The web continuation
065: */
066: public final static WebContinuation getWebContinuation(
067: Map objectModel) {
068: return (WebContinuation) objectModel.get(CONTINUATION_OBJECT);
069: }
070:
071: /**
072: * Set the web continuation associated with the current request
073: *
074: * @param objectModel The Cocoon Environment's object model
075: * @param kont The web continuation
076: */
077: public final static void setWebContinuation(Map objectModel,
078: WebContinuation kont) {
079: objectModel.put(CONTINUATION_OBJECT, kont);
080: }
081:
082: /**
083: * Set the flow context object associated with the current request
084: *
085: * @param objectModel The Cocoon Environment's object model
086: * @param obj The context object
087: */
088: public final static void setContextObject(Map objectModel,
089: Object obj) {
090: objectModel.put(CONTEXT_OBJECT, obj);
091: }
092:
093: /**
094: * Unwrap a Rhino object (getting the raw java object) and convert undefined to null
095: * @deprecated Use {@link org.apache.cocoon.components.flow.javascript.JavaScriptFlowHelper#unwrap(Object)}
096: */
097: public static Object unwrap(Object obj) {
098: if (obj instanceof Wrapper) {
099: obj = ((Wrapper) obj).unwrap();
100: } else if (obj == Undefined.instance) {
101: obj = null;
102: }
103: return obj;
104: }
105: }
|