Author: sylvain Date: Wed Feb 9 09:12:17 2005 New Revision: 153088 URL: http://svn.apache.org/viewcvs?view=rev&rev=153088 Log: Remove restrictions on the FOM. The full API is now available on request, session, etc.
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java cocoon/trunk/status.xml Modified: cocoon/trunk/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java?view=diff&r1=153087&r2=153088 ============================================================================== --- cocoon/trunk/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java (original) +++ cocoon/trunk/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java Wed Feb 9 09:12:17 2005 @@ -15,20 +15,16 @@ */ package org.apache.cocoon.components.flow.javascript.fom; -import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.security.Principal; import java.util.ArrayList; +import java.util.Arrays; import java.util.Enumeration; -import java.util.LinkedList; import java.util.List; -import java.util.Locale; import java.util.Map; +import org.apache.avalon.framework.CascadingRuntimeException; import org.apache.avalon.framework.context.Context; +import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.service.ServiceManager; import org.apache.cocoon.components.ContextHelper; @@ -36,16 +32,15 @@ import org.apache.cocoon.components.flow.ContinuationsManager; import org.apache.cocoon.components.flow.WebContinuation; import org.apache.cocoon.components.flow.Interpreter.Argument; -import org.apache.cocoon.environment.Cookie; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Redirector; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Response; import org.apache.cocoon.environment.Session; -import org.apache.cocoon.environment.http.HttpResponse; import org.apache.cocoon.util.ClassUtils; import org.mozilla.javascript.JavaScriptException; import org.mozilla.javascript.NativeJavaClass; +import org.mozilla.javascript.NativeJavaObject; import org.mozilla.javascript.Script; import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.ScriptableObject; @@ -70,12 +65,12 @@ FOM_JavaScriptInterpreter interpreter; Redirector redirector; Logger logger; - FOM_Request request; - FOM_Response response; - FOM_Session session; - FOM_Context context; + Scriptable request; + Scriptable response; + Scriptable session; + Scriptable context; Scriptable parameters; - FOM_Log log; + Scriptable log; WebContinuation lastContinuation; FOM_WebContinuation fwk; PageLocalScopeImpl currentPageLocal; @@ -124,64 +119,55 @@ } } - public FOM_Session getSession() { + public Scriptable getSession() { if (session != null) { return session; } - Map objectModel = ContextHelper.getObjectModel(this.avalonContext); - session = - new FOM_Session(ObjectModelHelper.getRequest(objectModel).getSession(true)); - session.setParentScope(getParentScope()); - session.setPrototype(getClassPrototype(getParentScope(), - "FOM_Session")); + Map objectModel = ContextHelper.getObjectModel(this.avalonContext); + session = org.mozilla.javascript.Context.toObject( + ObjectModelHelper.getRequest(objectModel).getSession(true), + getParentScope()); return session; } - public FOM_Request getRequest() { + public Scriptable getRequest() { if (request != null) { return request; } Map objectModel = ContextHelper.getObjectModel(this.avalonContext); - request = new FOM_Request(ObjectModelHelper.getRequest(objectModel)); - request.setParentScope(getParentScope()); - request.setPrototype(getClassPrototype(getParentScope(), - "FOM_Request")); + request = org.mozilla.javascript.Context.toObject( + ObjectModelHelper.getRequest(objectModel), + getParentScope()); return request; } - public FOM_Context getContext() { + public Scriptable getContext() { if (context != null) { return context; } Map objectModel = ContextHelper.getObjectModel(this.avalonContext); - context = - new FOM_Context(ObjectModelHelper.getContext(objectModel)); - context.setParentScope(getParentScope()); - context.setPrototype(getClassPrototype(getParentScope(), - "FOM_Context")); + context = org.mozilla.javascript.Context.toObject( + ObjectModelHelper.getContext(objectModel), + getParentScope()); return context; } - public FOM_Response getResponse() { + public Scriptable getResponse() { if (response != null) { return response; } Map objectModel = ContextHelper.getObjectModel(this.avalonContext); - response = - new FOM_Response(ObjectModelHelper.getResponse(objectModel)); - response.setParentScope(getParentScope()); - response.setPrototype(getClassPrototype(getParentScope(), - "FOM_Response")); + response = org.mozilla.javascript.Context.toObject( + ObjectModelHelper.getResponse(objectModel), + getParentScope()); return response; } - public FOM_Log getLog() { + public Scriptable getLog() { if (log != null) { return log; } - log = new FOM_Log(logger); - log.setParentScope(getParentScope()); - log.setPrototype(getClassPrototype(getParentScope(), "FOM_Log")); + log = org.mozilla.javascript.Context.toObject(logger, getParentScope()); return log; } @@ -204,13 +190,14 @@ // Called by FOM_JavaScriptInterpreter static void init(Scriptable scope) throws Exception { + //FIXME(SW) what is the exact purpose of defineClass() ?? defineClass(scope, FOM_Cocoon.class); - defineClass(scope, FOM_Request.class); - defineClass(scope, FOM_Response.class); - defineClass(scope, FOM_Cookie.class); - defineClass(scope, FOM_Session.class); - defineClass(scope, FOM_Context.class); - defineClass(scope, FOM_Log.class); +// defineClass(scope, FOM_Request.class); +// defineClass(scope, FOM_Response.class); +// defineClass(scope, FOM_Cookie.class); +// defineClass(scope, FOM_Session.class); +// defineClass(scope, FOM_Context.class); +// defineClass(scope, FOM_Log.class); defineClass(scope, FOM_WebContinuation.class); defineClass(scope, PageLocalImpl.class); } @@ -224,14 +211,23 @@ if (pageLocal == null) { pageLocal = new PageLocalScopeHolder(getTopLevelScope(this)); } - this.currentCall = new CallContext(currentCall, interp, redirector, manager, + + // The call context will use the current sitemap's service manager when looking up components + ServiceManager sitemapManager; + try { + sitemapManager = (ServiceManager)avalonContext.get(ContextHelper.CONTEXT_SITEMAP_SERVICE_MANAGER); + } catch (ContextException e) { + throw new CascadingRuntimeException("Cannot get sitemap service manager", e); + } + + this.currentCall = new CallContext(currentCall, interp, redirector, sitemapManager, avalonContext, logger, lastContinuation); } void popCallContext() { // Clear the scope attribute - FOM_JavaScriptFlowHelper.setFOM_FlowScope(getObjectModel(), null); + FOM_JavaScriptFlowHelper.setFOM_FlowScope(this.getObjectModel(), null); this.currentCall = this.currentCall.caller; // reset current page locals @@ -420,977 +416,128 @@ LifecycleHelper.decommission(obj); } - public static class FOM_Request - extends ScriptableObject implements Request { - - Request request; - - public FOM_Request() { - // prototype ctor - } - - public FOM_Request(Object request) { - this.request = (Request)unwrap(request); - } - - public String getClassName() { - return "FOM_Request"; - } - - public Object jsFunction_get(String name) { - return request.get(name); - } - - public Object jsFunction_getAttribute(String name) { - return request.getAttribute(name); - } - - public String jsFunction_getRemoteUser() { - return request.getRemoteUser(); - } - - - public void jsFunction_removeAttribute(String name) { - request.removeAttribute(name); - } - - public void jsFunction_setAttribute(String name, - Object value) { - request.setAttribute(name, unwrap(value)); - } - - public Object get(String name, Scriptable start) { - Object result = super.get(name, start); - if (result == NOT_FOUND && request != null) { - result = request.getParameter(name); - if (result == null) { - result = NOT_FOUND; - } - } - return result; + /** + * Base JS wrapper for Cocoon's request/session/context objects. + * <p> + * FIXME(SW): The only thing added to the regular Java object is the fact that + * attributes can be accessed as properties. Do we want to keep this? + */ + private static abstract class AttributeHolderJavaObject extends NativeJavaObject { + public AttributeHolderJavaObject(Scriptable scope, Object object, Class clazz) { + super(scope, object, clazz); } - + + protected abstract Enumeration getAttributeNames(); + protected abstract Object getAttribute(String name); + public Object[] getIds() { - if (request != null) { - List list = new LinkedList(); - Enumeration e = request.getAttributeNames(); - while (e.hasMoreElements()) { - list.add(e.nextElement()); - } - Object[] result = new Object[list.size()]; - list.toArray(result); - return result; - } - return super.getIds(); - } - - public String jsFunction_getCharacterEncoding() { - return request.getCharacterEncoding(); - } - - public void jsFunction_setCharacterEncoding(String value) - throws Exception { - request.setCharacterEncoding(value); - } - - public int jsFunction_getContentLength() { - return request.getContentLength(); - } - - public String jsFunction_getContentType() { - return request.getContentType(); - } - - public String jsFunction_getParameter(String name) { - return request.getParameter(name); - } - - public Object jsFunction_getParameterValues(String name) { - return request.getParameterValues(name); - } - - public Object jsFunction_getParameterNames() { - return request.getParameterNames(); - } - - public String jsFunction_getAuthType() { - return request.getAuthType(); - } - - public String jsFunction_getProtocol() { - return request.getProtocol(); - } - - public String jsFunction_getServerName() { - return request.getServerName(); - } - - public String jsFunction_getRemoteAddr() { - return request.getRemoteAddr(); - } - - public String jsFunction_getRemoteHost() { - return request.getRemoteHost(); - } - - public int jsFunction_getServerPort() { - return request.getServerPort(); - } - - public String jsFunction_getScheme() { - return request.getScheme(); - } - - public String jsFunction_getMethod() { - return request.getMethod(); - } - - public boolean jsFunction_isSecure() { - return request.isSecure(); - } - - public Locale jsFunction_getLocale() { - return request.getLocale(); - } - - public Enumeration jsFunction_getLocales() { - return request.getLocales(); - } - - public FOM_Cookie[] jsFunction_getCookies() { - Cookie[] cookies = request.getCookies(); - FOM_Cookie[] FOM_cookies = new FOM_Cookie[cookies!=null ? cookies.length : 0]; - for (int i = 0 ; i < FOM_cookies.length ; ++i) { - FOM_Cookie FOM_cookie = new FOM_Cookie(cookies[i]); - FOM_cookie.setParentScope(getParentScope()); - FOM_cookie.setPrototype(getClassPrototype(this, FOM_cookie.getClassName())); - FOM_cookies[i] = FOM_cookie; - } - return FOM_cookies; - } - - public Scriptable jsGet_cookies() { - return org.mozilla.javascript.Context.getCurrentContext().newArray(getParentScope(), jsFunction_getCookies()); - } - - public FOM_Cookie jsFunction_getCookie(String name) { - Object cookie = request.getCookieMap().get(name); - FOM_Cookie fcookie = null; - if ( cookie!=null ) { - fcookie = new FOM_Cookie(cookie); - fcookie.setParentScope(getParentScope()); - fcookie.setPrototype(getClassPrototype(this, fcookie.getClassName())); + // Get class Ids + Object [] classIds = super.getIds(); + + // and add attribute names + ArrayList idList = new ArrayList(Arrays.asList(classIds)); + Enumeration iter = getAttributeNames(); + while(iter.hasMoreElements()) { + idList.add(iter.nextElement()); } - return fcookie; - } - - public String jsFunction_getHeader(String name) { - return request.getHeader(name); - } - - // TODO: FOM_Header - - public Enumeration jsFunction_getHeaders(String name) { - return request.getHeaders(name); - } - - public Enumeration jsFunction_getHeaderNames() { - return request.getHeaderNames(); - } - - public Principal jsFunction_getUserPrincipal() { - return request.getUserPrincipal(); - } - - public boolean jsFunction_isUserInRole(String role) { - return request.isUserInRole(role); + return idList.toArray(); } - public InputStream jsFunction_getInputStream() throws IOException, UnsupportedOperationException { - return request.getInputStream(); - } - - // Request interface - - public Object get(String name) { - return request.get(name); - } - - public Object getAttribute(String name) { - return request.getAttribute(name); - } - - public Enumeration getAttributeNames() { - return request.getAttributeNames(); - } - - public void setAttribute(String name, Object o) { - request.setAttribute(name, o); - } - - public void removeAttribute(String name) { - request.removeAttribute(name); - } - - public String getAuthType() { - return request.getAuthType(); - } - - public String getCharacterEncoding() { - return request.getCharacterEncoding(); - } - - public void setCharacterEncoding(String enc) - throws java.io.UnsupportedEncodingException { - request.setCharacterEncoding(enc); - } - - public int getContentLength() { - return request.getContentLength(); - } - - public String getContentType() { - return request.getContentType(); - } - - public String getParameter(String name) { - return request.getParameter(name); - } - - public Enumeration getParameterNames() { - return request.getParameterNames(); - } - - public String[] getParameterValues(String name) { - return request.getParameterValues(name); - } - - public String getProtocol() { - return request.getProtocol(); - } - - public String getScheme() { - return request.getScheme(); - } - - public String getServerName() { - return request.getServerName(); - } - - public int getServerPort() { - return request.getServerPort(); - } - - public String getRemoteAddr() { - return request.getRemoteAddr(); - } - - public String getRemoteHost() { - return request.getRemoteHost(); - } - - public Locale getLocale() { - return request.getLocale(); - } - - public Enumeration getLocales() { - return request.getLocales(); - } - - public boolean isSecure() { - return request.isSecure(); - } - - public Cookie[] getCookies() { - return request.getCookies(); - } - - public Map getCookieMap() { - return request.getCookieMap(); - } - - public long getDateHeader(String name) { - return request.getDateHeader(name); - } - - public String getHeader(String name) { - return request.getHeader(name); - } - - public Enumeration getHeaders(String name) { - return request.getHeaders(name); - } - - public Enumeration getHeaderNames() { - return request.getHeaderNames(); - } - - public String getMethod() { - return request.getMethod(); - } - - public String getPathInfo() { - return request.getPathInfo(); - } - - public String getPathTranslated() { - return request.getPathTranslated(); - } - - public String getContextPath() { - return request.getContextPath(); - } - - public String getQueryString() { - return request.getQueryString(); - } - - public String getRemoteUser() { - return request.getRemoteUser(); - } - - public Principal getUserPrincipal() { - return request.getUserPrincipal(); - } - - public boolean isUserInRole(String role) { - return request.isUserInRole(role); - } - - public String getRequestedSessionId() { - return request.getRequestedSessionId(); - } - - public String getRequestURI() { - return request.getRequestURI(); - } - - public String getSitemapURI() { - return request.getSitemapURI(); - } - - public String getSitemapPath() { - return request.getSitemapPath(); - } - - public String getServletPath() { - return request.getServletPath(); - } - - public Session getSession(boolean create) { - return request.getSession(create); - } - - public Session getSession() { - return request.getSession(); - } - - public boolean isRequestedSessionIdValid() { - return request.isRequestedSessionIdValid(); - } - - public boolean isRequestedSessionIdFromCookie() { - return request.isRequestedSessionIdFromCookie(); - } - - public boolean isRequestedSessionIdFromURL() { - return request.isRequestedSessionIdFromURL(); - } - - public Object getAttribute(String name, int scope) { - return this.request.getAttribute(name, scope); - } - - public Enumeration getAttributeNames(int scope) { - return this.request.getAttributeNames(scope); - } - - public void removeAttribute(String name, int scope) { - this.request.removeAttribute(name, scope); - } - - public void setAttribute(String name, Object o, int scope) { - this.request.setAttribute( name, o, scope ); - } - - public InputStream getInputStream() throws IOException, UnsupportedOperationException { - return this.request.getInputStream(); - } - } - - public static class FOM_Cookie - extends ScriptableObject implements Cookie { - - Cookie cookie; - - public FOM_Cookie() { - // prototype ctor - } - - public FOM_Cookie(Object cookie) { - this.cookie = (Cookie)unwrap(cookie); - } - - public String getClassName() { - return "FOM_Cookie"; - } - - public String jsGet_name() { - return cookie.getName(); - } - - public int jsGet_version() { - return cookie.getVersion(); - } - - public void jsSet_version(int value) { - cookie.setVersion(value); - } - - public String jsGet_value() { - return cookie.getValue(); - } - - public void jsSet_value(String value) { - cookie.setValue(value); - } - - public void jsSet_comment(String purpose) { - cookie.setComment(purpose); - } - - public String jsGet_comment() { - return cookie.getComment(); - } - - public void jsSet_domain(String pattern) { - cookie.setDomain(pattern); - } - - public String jsGet_domain() { - return cookie.getDomain(); - } - - public void jsSet_maxAge(int value) { - cookie.setMaxAge(value); - } - - public int jsGet_maxAge() { - return cookie.getMaxAge(); - } - - public void jsSet_path(String value) { - cookie.setPath(value); - } - - public String jsGet_path() { - return cookie.getPath(); - } - - public void jsSet_secure(boolean value) { - cookie.setSecure(value); - } - - public boolean jsGet_secure() { - return cookie.getSecure(); - } - - // Cookie interface - - public void setComment(String purpose) { - cookie.setComment(purpose); - } - - public String getComment() { - return cookie.getComment(); - } - - public void setDomain(String pattern) { - cookie.setDomain(pattern); - } - - public String getDomain() { - return cookie.getDomain(); - } - - public void setMaxAge(int expiry) { - cookie.setMaxAge(expiry); - } - - public int getMaxAge() { - return cookie.getMaxAge(); - } - - public void setPath(String uri) { - cookie.setPath(uri); - } - - public String getPath() { - return cookie.getPath(); - } - - public void setSecure(boolean flag) { - cookie.setSecure(flag); - } - - public boolean getSecure() { - return cookie.getSecure(); - } - - public String getName() { - return cookie.getName(); - } - - public void setValue(String newValue) { - cookie.setValue(newValue); - } - - public String getValue() { - return cookie.getValue(); - } - - public int getVersion() { - return cookie.getVersion(); - } - - public void setVersion(int v) { - cookie.setVersion(v); - } - } - - public static class FOM_Response - extends ScriptableObject implements Response { - - Response response; - - public FOM_Response() { - // prototype ctor - } - - public FOM_Response(Object response) { - this.response = (Response)unwrap(response); - } - - public String getClassName() { - return "FOM_Response"; - } - - public Object jsFunction_createCookie(String name, String value) { - FOM_Cookie result = - new FOM_Cookie(response.createCookie(name, value)); - result.setParentScope(getParentScope()); - result.setPrototype(getClassPrototype(this, result.getClassName())); - return result; - } - - public void jsFunction_addCookie(Object cookie) - throws JavaScriptException { - if (!(cookie instanceof FOM_Cookie)) { - throw new JavaScriptException("expected a Cookie instead of " + cookie); - } - FOM_Cookie fom_cookie = (FOM_Cookie)cookie; - response.addCookie(fom_cookie.cookie); - } - - public boolean jsFunction_containsHeader(String name) { - return response.containsHeader(name); - } - - public void jsFunction_setHeader(String name, String value) { - response.setHeader(name, value); - } - - public void jsFunction_addHeader(String name, String value) { - response.addHeader(name, value); - } - - public void jsFunction_setStatus(int sc) { - if (response instanceof HttpResponse) { - ((HttpResponse) response).setStatus(sc); - } - } - - // Response interface - - public String getCharacterEncoding() { - return response.getCharacterEncoding(); - } - - public void setLocale(Locale loc) { - response.setLocale(loc); - } - - public Locale getLocale() { - return response.getLocale(); - } - public Cookie createCookie(String name, String value) { - return response.createCookie(name, value); - } - - public void addCookie(Cookie cookie) { - response.addCookie(cookie); - } - - public boolean containsHeader(String name) { - return response.containsHeader(name); - } - - public String encodeURL(String url) { - return response.encodeURL(url); - } - - public void setDateHeader(String name, long date) { - response.setDateHeader(name, date); - } - - public void addDateHeader(String name, long date) { - response.addDateHeader(name, date); - } - - public void setHeader(String name, String value) { - response.setHeader(name, value); - } - - public void addHeader(String name, String value) { - response.addHeader(name, value); - } - - public void setIntHeader(String name, int value) { - response.setIntHeader(name, value); - } - - public void addIntHeader(String name, int value) { - response.addIntHeader(name, value); - } - } - - public static class FOM_Session - extends ScriptableObject implements Session { - - Session session; - - public FOM_Session() { - // prototype ctor + public boolean has(String name, Scriptable start) { + return super.has(name, start) || getAttribute(name) != null; } - - public FOM_Session(Object session) { - this.session = (Session)unwrap(session); - } - - public String getClassName() { - return "FOM_Session"; - } - - public Object[] getIds() { - if (session != null) { - List list = new LinkedList(); - Enumeration e = session.getAttributeNames(); - while (e.hasMoreElements()) { - list.add(e.nextElement()); - } - Object[] result = new Object[list.size()]; - list.toArray(result); - return result; - } - return super.getIds(); - } - + public Object get(String name, Scriptable start) { Object result = super.get(name, start); - if (result == NOT_FOUND && session != null) { - result = session.getAttribute(name); - if (result == null) { + if (result == NOT_FOUND) { + result = getAttribute(name); + if (result != null) { + result = org.mozilla.javascript.Context.javaToJS(result, start); + } else { result = NOT_FOUND; } } return result; } - - public Object jsFunction_getAttribute(String name) { - return session.getAttribute(name); - } - - public void jsFunction_setAttribute(String name, Object value) { - session.setAttribute(name, unwrap(value)); - } - - public void jsFunction_removeAttribute(String name) { - session.removeAttribute(name); - } - - public Object jsFunction_getAttributeNames() { - return session.getAttributeNames(); - } - - public void jsFunction_invalidate() { - session.invalidate(); - } - - public boolean jsFunction_isNew() { - return session.isNew(); - } - - public String jsFunction_getId() { - return session.getId(); - } - - public long jsFunction_getCreationTime() { - return session.getCreationTime(); - } - - public long jsFunction_getLastAccessedTime() { - return session.getLastAccessedTime(); - } - - public void jsFunction_setMaxInactiveInterval(int interval) { - session.setMaxInactiveInterval(interval); - } - - public int jsFunction_getMaxInactiveInterval() { - return session.getMaxInactiveInterval(); - } - - - // Session interface - - public long getCreationTime() { - return session.getCreationTime(); - } - - public String getId() { - return session.getId(); - } - - public long getLastAccessedTime() { - return session.getLastAccessedTime(); - } - - public void setMaxInactiveInterval(int interval) { - session.setMaxInactiveInterval(interval); - } - - public int getMaxInactiveInterval() { - return session.getMaxInactiveInterval(); - } - - public Object getAttribute(String name) { - return session.getAttribute(name); - } - - public Enumeration getAttributeNames() { - return session.getAttributeNames(); - } - - public void setAttribute(String name, Object value) { - session.setAttribute(name, value); - } - - public void removeAttribute(String name) { - session.removeAttribute(name); - } - - public void invalidate() { - session.invalidate(); - } - - public boolean isNew() { - return session.isNew(); - } } - public static class FOM_Context extends ScriptableObject - implements org.apache.cocoon.environment.Context { - - org.apache.cocoon.environment.Context context; - - public FOM_Context() { - // prototype ctor - } - - public FOM_Context(Object context) { - this.context = (org.apache.cocoon.environment.Context)unwrap(context); - } - - public String getClassName() { - return "FOM_Context"; - } - - public Object jsFunction_getAttribute(String name) { - return context.getAttribute(name); - } - - public void jsFunction_setAttribute(String name, Object value) { - context.setAttribute(name, unwrap(value)); - } - - public void jsFunction_removeAttribute(String name) { - context.removeAttribute(name); - } - - public Object jsFunction_getAttributeNames() { - return context.getAttributeNames(); - } - - public Object jsFunction_getInitParameter(String name) { - return context.getInitParameter(name); - } - - public Object[] getIds() { - if (context != null) { - List list = new LinkedList(); - Enumeration e = context.getAttributeNames(); - while (e.hasMoreElements()) { - list.add(e.nextElement()); - } - Object[] result = new Object[list.size()]; - list.toArray(result); - return result; - } - return super.getIds(); - } - - public Object get(String name, Scriptable start) { - Object value = super.get(name, start); - if (value == NOT_FOUND && context != null) { - value = context.getAttribute(name); - if (value == null) { - value = NOT_FOUND; - } - } - return value; - } - - /* TODO: Vote on the inclusion of this method - public String jsFunction_getRealPath(String path) { - return context.getRealPath(path); - } - */ - - // Context interface - - public Object getAttribute(String name) { - return context.getAttribute(name); - } - - public void setAttribute(String name, Object value) { - context.setAttribute(name, value); - } - - public void removeAttribute(String name) { - context.removeAttribute(name); - } - - public Enumeration getAttributeNames() { - return context.getAttributeNames(); - } - - public URL getResource(String path) - throws MalformedURLException { - return context.getResource(path); - } - - public String getRealPath(String path) { - return context.getRealPath(path); - } - - public String getMimeType(String file) { - return context.getMimeType(file); + /** + * JS wrapper for Cocoon's request object. + */ + public static class FOM_Request extends AttributeHolderJavaObject { + private final Request request; + + public FOM_Request(Scriptable scope, Request request) { + super(scope, request, Request.class); + this.request = request; } - - public String getInitParameter(String name) { - return context.getInitParameter(name); + + protected Enumeration getAttributeNames() { + return this.request.getAttributeNames(); } - - public InputStream getResourceAsStream(String path) { - return context.getResourceAsStream(path); + + protected Object getAttribute(String name) { + return this.request.getAttribute(name); } } - public static class FOM_Log extends ScriptableObject { - - private Logger logger; - - public FOM_Log() { - } - - public FOM_Log(Object logger) { - this.logger = (Logger)unwrap(logger); - } - - public String getClassName() { - return "FOM_Log"; - } - - public void jsFunction_debug(String message, Object throwable) { - throwable = unwrap(throwable); - if (throwable instanceof Throwable) { - logger.debug(message, (Throwable)throwable); - } else { - logger.debug(message); - } - } - - public void jsFunction_info(String message, Object throwable) { - throwable = unwrap(throwable); - if (throwable instanceof Throwable) { - logger.info(message, (Throwable)throwable); - } else { - logger.info(message); - } - } - - public void jsFunction_warn(String message, Object throwable) { - throwable = unwrap(throwable); - if (throwable instanceof Throwable) { - logger.warn(message, (Throwable)throwable); - } else { - logger.warn(message); - } + /** + * JS wrapper for Cocoon's session object. + */ + public static class FOM_Session extends AttributeHolderJavaObject { + private final Session session; + + public FOM_Session(Scriptable scope, Session session) { + super(scope, session, Session.class); + this.session = session; } - - public void jsFunction_error(String message, Object throwable) { - throwable = unwrap(throwable); - if (throwable instanceof Throwable) { - logger.error(message, (Throwable)throwable); - } else { - logger.error(message); - } + + protected Enumeration getAttributeNames() { + return this.session.getAttributeNames(); } - - public boolean jsFunction_isDebugEnabled() { - return logger.isDebugEnabled(); + + protected Object getAttribute(String name) { + return this.session.getAttribute(name); } + } - public boolean jsFunction_isInfoEnabled() { - return logger.isInfoEnabled(); + /** + * JS wrapper for Cocoon's context object. + */ + public static class FOM_Context extends AttributeHolderJavaObject { + private final org.apache.cocoon.environment.Context context; + + public FOM_Context(Scriptable scope, org.apache.cocoon.environment.Context context) { + super(scope, context, org.apache.cocoon.environment.Context.class); + this.context = context; } - - public boolean jsFunction_isWarnEnabled() { - return logger.isWarnEnabled(); + + protected Enumeration getAttributeNames() { + return this.context.getAttributeNames(); } - - public boolean jsFunction_isErrorEnabled() { - return logger.isErrorEnabled(); + + protected Object getAttribute(String name) { + return this.context.getAttribute(name); } } - public FOM_Request jsGet_request() { + public Scriptable jsGet_request() { return currentCall.getRequest(); } - public FOM_Response jsGet_response() { + public Scriptable jsGet_response() { return currentCall.getResponse(); } - public FOM_Log jsGet_log() { + public Scriptable jsGet_log() { return currentCall.getLog(); } - public FOM_Context jsGet_context() { + public Scriptable jsGet_context() { return currentCall.getContext(); } - public FOM_Session jsGet_session() { + public Scriptable jsGet_session() { return currentCall.getSession(); } @@ -1429,8 +576,7 @@ * @return The request */ public Request getRequest() { - FOM_Request fom_request = jsGet_request(); - return fom_request != null ? fom_request.request : null; + return ObjectModelHelper.getRequest(ContextHelper.getObjectModel(currentCall.avalonContext)); } /** @@ -1438,10 +584,7 @@ * @return The session (may be null) */ public Session getSession() { - if (getRequest().getSession(false) == null) { - return null; - } - return jsGet_session().session; + return ObjectModelHelper.getRequest(ContextHelper.getObjectModel(currentCall.avalonContext)).getSession(true); } /** @@ -1449,7 +592,7 @@ * @return The response */ public Response getResponse() { - return jsGet_response().response; + return ObjectModelHelper.getResponse(ContextHelper.getObjectModel(currentCall.avalonContext)); } /** @@ -1457,7 +600,7 @@ * @return The context */ public org.apache.cocoon.environment.Context getContext() { - return jsGet_context().context; + return ObjectModelHelper.getContext(ContextHelper.getObjectModel(currentCall.avalonContext)); } /** Modified: cocoon/trunk/status.xml URL: http://svn.apache.org/viewcvs/cocoon/trunk/status.xml?view=diff&r1=153087&r2=153088 ============================================================================== --- cocoon/trunk/status.xml (original) +++ cocoon/trunk/status.xml Wed Feb 9 09:12:17 2005 @@ -469,6 +469,12 @@ </action> </release> <release version="2.1.7" date="TBD"> + <action dev="SW" type="update"> + Remove restrictions on the flowscript object model (FOM): the objects available through the + <code>cocoon</code> object (request, session, response, etc) now provide the full API of the + corresponding Java classes. The only additional feature of the JS objects are that request, + session and context attributes are available as properties on these objects. + </action> <action dev="CZ" type="fix"> CForms: template generator and transformer now use the same object model as the JXTG: access to objects have to use the "cocoon" object, like "cocoon/continuation/id".