/* SimpleWebApp.java Purpose: Description: History: Tue Feb 27 09:27:03 2007, Created by tomyeh Copyright (C) 2007 Potix Corporation. All Rights Reserved. {{IS_RIGHT This program is distributed under LGPL Version 2.1 in the hope that it will be useful, but WITHOUT ANY WARRANTY. }}IS_RIGHT */ package org.zkoss.zk.ui.http; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.servlet.ServletContext; import org.zkoss.util.CollectionsX; import org.zkoss.web.servlet.xel.AttributesMap; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.UiException; import org.zkoss.zk.ui.WebApp; import org.zkoss.zk.ui.ext.ScopeListener; import org.zkoss.zk.ui.impl.AbstractWebApp; import org.zkoss.zk.ui.impl.ScopeListeners; import org.zkoss.zk.ui.sys.Registry; import org.zkoss.zk.ui.sys.WebAppFactoryImpl; import org.zkoss.zk.ui.util.Configuration; /** * A servlet-based Web application. * * @author tomyeh */ public class SimpleWebApp extends AbstractWebApp { private ServletContext _ctx; private final ScopeListeners _scopeListeners = new ScopeListeners(this); public SimpleWebApp() { } //super// public void init(Object context, Configuration config) { if (context == null) throw new IllegalArgumentException("context"); _ctx = (ServletContext) context; super.init(context, config); Registry.sign(this, Registry.class, WebManager.class, WebAppFactoryImpl.class); } private final Map<String, Object> _attrs = new AttributesMap() { @SuppressWarnings("unchecked") protected Enumeration<String> getKeys() { return _ctx.getAttributeNames(); } protected Object getValue(String key) { return _ctx.getAttribute(key); } protected void setValue(String key, Object val) { _ctx.setAttribute(key, val); } protected void removeValue(String key) { _ctx.removeAttribute(key); } }; public Object getAttribute(String name) { return _ctx.getAttribute(name); } public boolean hasAttribute(String name) { return getAttribute(name) != null; //Servlet limitation } public Object setAttribute(String name, Object value) { Object old = _ctx.getAttribute(name); _ctx.setAttribute(name, value); return old; } public Object removeAttribute(String name) { Object old = _ctx.getAttribute(name); _ctx.removeAttribute(name); return old; } public Map<String, Object> getAttributes() { return _attrs; } public boolean addScopeListener(ScopeListener listener) { return _scopeListeners.addScopeListener(listener); } public boolean removeScopeListener(ScopeListener listener) { return _scopeListeners.removeScopeListener(listener); } /** Returns all scope listeners. */ /*package*/ ScopeListeners getScopeListeners() { return _scopeListeners; } public String getUpdateURI() { return getUpdateURI(true); } public String getUpdateURI(boolean encode) { final String uri = getWebManager().getUpdateURI(); return encode ? Executions.getCurrent().encodeURL(uri) : uri; } private WebManager getWebManager() { return WebManager.getWebManager(this); } public WebApp getWebApp(String uripath) { final ServletContext another = _ctx.getContext(uripath); if (another != null) { final WebManager webman = WebManager.getWebManagerIfAny(another); if (webman != null) return webman.getWebApp(); } return null; } public String getDirectory() { return null; } public URL getResource(String path) { if (path.startsWith("~./")) return getWebManager().getClassWebResource().getResource(path.substring(2)); try { return _ctx.getResource(path); } catch (MalformedURLException ex) { throw new UiException("Failed to retrieve " + path, ex); } } public InputStream getResourceAsStream(String path) { if (path.startsWith("~./")) return getWebManager().getClassWebResource().getResourceAsStream(path.substring(2)); return _ctx.getResourceAsStream(path); } public String getInitParameter(String name) { return _ctx.getInitParameter(name); } public Iterable<String> getInitParameterNames() { return new Iterable<String>() { @SuppressWarnings("unchecked") public Iterator<String> iterator() { return new CollectionsX.EnumerationIterator<String>(_ctx.getInitParameterNames()); } }; } public String getRealPath(String path) { return _ctx.getRealPath(path); } public String getMimeType(String file) { return _ctx.getMimeType(file); } @SuppressWarnings("unchecked") public Set<String> getResourcePaths(String path) { return _ctx.getResourcePaths(path); } /** @deprecated As of release 6.0.0, replaced with {@link #getServletContext}. */ public Object getNativeContext() { return _ctx; } public ServletContext getServletContext() { return _ctx; } public void log(String msg) { _ctx.log(msg); } public void log(String msg, Throwable ex) { _ctx.log(msg, ex); } }