blob: e1ff14decd1d13014f137c39d34e3cba0da58977 [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.xscript;
import java.util.Map;
/**
* <code>XScriptManager</code> is the public interface used to
* interact with the XScript component, which implements the
* supporting code for the XScript language.
*
* @author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>
* @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
* @version CVS $Id$
* @since August 4, 2001
*/
public interface XScriptManager
{
String ROLE = "org.apache.cocoon.components.xscript.XScriptManager";
String XSCRIPT_NS = "http://apache.org/xsp/xscript/1.0";
/**
* The variable's global scope. Each Cocoon instance has exactly one
* global scope for variables.
*/
int GLOBAL_SCOPE = 1;
/**
* The session scope. This scope is specific to a particular
* activation of an XSP page, which is usually identified by the
* session id of the user that sent the HTTP request. From XScript's
* point of view however, the session identifier is not interpreted
* in any way, so a client can define its own notion of "session".
*/
int SESSION_SCOPE = 2;
/**
* The page scope. This is scope very specific to an XSP page, and
* defines variables visible only within the context of that
* page. No other XSP page can access these variables, unless it
* knows the identifier used by that page to store its
* variables. This identifier is not necessarily the URL or full
* path of that page; it is up to the page to define it.
*/
int PAGE_SCOPE = 3;
/**
* The request scope. This is scope specific to request, and
* defines variables visible only within the context of that
* request. Once request is processed, these variables are lost.
*/
int REQUEST_SCOPE = 5;
/**
* Search for a variable in all the accessible scopes. The variable
* is first searched in the current session scope. If no variable is
* found here, the current page scope is searched next. If nothing
* is found either, the global scope is searched.
*/
int ALL_SCOPES = 4;
/**
* Obtains the object value of the
* <code>name</code> variable in <code>scope</code>. The
* <code>context</code> parameter is interpreted differently
* depending on the value of <code>scope</code>, as follows:
*
* <ul>
*
* <li>if <code>scope</code> is <code>{@link #GLOBAL_SCOPE}</code>, the
* value of <code>context is ignored.
*
* <li>if <code>scope</code> is <code>{@link
* #SESSION_SCOPE}</code>, the value of <code>context</code> is
* interpreted as the session identifier.
*
* <li>if <code>scope</code> is <code>{@link #PAGE_SCOPE}</code>, the value
* of <code>context</code> is interpreted as an identifier of the
* page. This could be the URL of the page or the path of the file
* name in the file system.
*
* </ul>
*
* @param objectModel an instance of Cocoon object model used to obtain context
* @param name a <code>String</code> value
* @param scope an <code>int</code> value
* @return a <code>{@link XScriptObject}</code> value
*/
XScriptObject get(XScriptVariableScope pageScope,
Map objectModel,
String name,
int scope) throws IllegalArgumentException;
/**
* Search for the first occurence of the variable
* <code>name</code>.
*
* <p>The search happens first in the session scope
* identified by <code>sessionContext</code>. If no variable is
* found here, the search continues in the page scope identified by
* <code>pageContext</code>. If no variable is found here, it's
* finally searched in the global scope.
*
* <p>The <code>XScriptObject</code> value of the variable is
* returned if a variable is found in one of the scopes, otherwise
* an exception is thrown.
*
* @param objectModel an instance of Cocoon object model used to obtain context
* @param name a <code>String</code> value
* @return a <code>XScriptObject</code> value
* @exception IllegalArgumentException if an error occurs
*/
XScriptObject getFirst(XScriptVariableScope pageScope,
Map objectModel,
String name) throws IllegalArgumentException;
/**
* Defines or overwrites the value of variable
* <code>name</code> in <code>scope</code>. The <code>context</code>
* argument is interpreted as described in
* {@link #get(XScriptVariableScope, Map, String, int)}.
*
* @param objectModel an instance of Cocoon object model used to obtain context
* @param name a <code>String</code> value
* @param value a <code>XScriptObject</code> value
* @param scope an <code>int</code> value
*/
void put(XScriptVariableScope pageScope,
Map objectModel,
String name,
XScriptObject value,
int scope) throws IllegalArgumentException;
/**
* Removes a variable previously declared in <code>scope</code>
* within <code>context</code>. Such a variable could be declared
* using the {@link #put(XScriptVariableScope, Map, String, XScriptObject, int)}
* method.
*
* @param objectModel an instance of Cocoon object model used to obtain context
* @param name a <code>String</code> value
* @param scope an <code>int</code> value
* @exception IllegalArgumentException if an error occurs
*/
XScriptObject remove(XScriptVariableScope pageScope,
Map objectModel,
String name,
int scope) throws IllegalArgumentException;
/**
* Remove the first appearance of <code>name</code> in the all the
* currently accessible scopes. The search happens as described in
* {@link #getFirst(XScriptVariableScope, Map, String)}.
*
* @param objectModel an instance of Cocoon object model used to obtain context
* @param name a <code>String</code> value
* @exception IllegalArgumentException if an error occurs
*/
XScriptObject removeFirst(XScriptVariableScope pageScope,
Map objectModel,
String name) throws IllegalArgumentException;
}