stefano 2003/02/22 06:09:27
Added: src/blocks/deli/java/org/apache/cocoon/components/deli Deli.java DeliImpl.java Log: moved to deli block Revision Changes Path 1.1 xml-cocoon2/src/blocks/deli/java/org/apache/cocoon/components/deli/Deli.java Index: Deli.java =================================================================== /* ============================================================================ The Apache Software License, Version 1.1 ============================================================================ Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modifica- tion, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: "This product includes software developed by the Apache Software Foundation (http://www.apache.org/)." Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact [EMAIL PROTECTED] 5. Products derived from this software may not be called "Apache", nor may "Apache" appear in their name, without prior written permission of the Apache Software Foundation. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This software consists of voluntary contributions made by many individuals on behalf of the Apache Software Foundation and was originally created by Stefano Mazzocchi <[EMAIL PROTECTED]>. For more information on the Apache Software Foundation, please see <http://www.apache.org/>. */ package org.apache.cocoon.components.deli; import org.apache.avalon.framework.component.Component; import org.apache.cocoon.environment.Request; import org.w3c.dom.Document; import java.io.IOException; /** * A component for providing CC/PP and UAProf support using the DELI * library. * * @author <a href="mailto:[EMAIL PROTECTED]">Mark H. Butler</a> * @version CVS $Id: Deli.java,v 1.1 2003/02/22 14:09:26 stefano Exp $ */ public interface Deli extends Component { String ROLE = Deli.class.getName(); /** * Convert a profile stored as a vector of profile attributes * to a DOM tree. * [EMAIL PROTECTED] theRequest The Request. [EMAIL PROTECTED] The DOM tree. */ Document getUACapabilities(Request theRequest) throws IOException, Exception; } 1.1 xml-cocoon2/src/blocks/deli/java/org/apache/cocoon/components/deli/DeliImpl.java Index: DeliImpl.java =================================================================== /* ============================================================================ The Apache Software License, Version 1.1 ============================================================================ Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modifica- tion, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: "This product includes software developed by the Apache Software Foundation (http://www.apache.org/)." Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact [EMAIL PROTECTED] 5. Products derived from this software may not be called "Apache", nor may "Apache" appear in their name, without prior written permission of the Apache Software Foundation. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This software consists of voluntary contributions made by many individuals on behalf of the Apache Software Foundation and was originally created by Stefano Mazzocchi <[EMAIL PROTECTED]>. For more information on the Apache Software Foundation, please see <http://www.apache.org/>. */ package org.apache.cocoon.components.deli; import com.hp.hpl.deli.Profile; import com.hp.hpl.deli.ProfileAttribute; import com.hp.hpl.deli.Workspace; import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Initializable; import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.component.ComponentException; import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.framework.context.Contextualizable; import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.parameters.Parameterizable; import org.apache.avalon.framework.parameters.Parameters; import org.apache.avalon.framework.thread.ThreadSafe; import org.apache.cocoon.Constants; import org.apache.cocoon.environment.Request; import org.apache.excalibur.xml.dom.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Text; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.BufferedReader; import java.io.IOException; import java.net.MalformedURLException; import java.security.Principal; import java.util.*; /** * Allows the use of <a href="http://www-uk.hpl.hp.com/people/marbut/">DELI</a> * to provide <a href="http://www.w3.org/Mobile/CCPP/">CC/PP</a> or * <a href="http://www1.wapforum.org/tech/terms.asp?doc=WAP-248-UAProf-20010530-p.pdf">UAProf</a> * support. For more details of DELI see the Technical Report * <a href="http://www-uk.hpl.hp.com/people/marbut/DeliUserGuideWEB.htm">DELI: * A Delivery Context Library for CC/PP and UAProf</a>. * * @author <a href="mailto:[EMAIL PROTECTED]">Mark H. Butler</a> * @version CVS $ $ $Date: 2003/02/22 14:09:26 $ */ public final class DeliImpl extends AbstractLogEnabled implements Parameterizable, Deli, Composable, Disposable, Initializable, ThreadSafe, Contextualizable { /** The path to the Cocoon configuration files */ private String defaultPath = null; /** The name of the main DELI configuration file */ private String deliConfig = "resources/deli/config/deliConfig.xml"; /** The DELI workspace */ private Workspace workspace; /** The component manager */ protected ComponentManager manager = null; /** Parser used to construct the DOM tree to import the profile to a stylesheet */ protected DOMParser parser; /** A context, used to retrieve the path to the configuration file */ protected CocoonServletContext servletContext; /** Contextualize this class */ public void contextualize(Context context) throws ContextException { org.apache.cocoon.environment.Context ctx = (org.apache.cocoon.environment.Context) context.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT); this.servletContext = new CocoonServletContext(ctx); } /** Compose this class */ public void compose(ComponentManager manager) throws ComponentException { this.manager = manager; try { this.parser = (DOMParser)this.manager.lookup(DOMParser.ROLE); } catch (ComponentException e) { getLogger().error("DELI Exception while creating parser: ", e); throw e; } } /** Configure this class */ public void parameterize(Parameters params) { this.deliConfig = params.getParameter("deli-config-file", this.deliConfig); } /** * Initialize */ public void initialize() throws Exception { try { Workspace.getInstance().configure(this.servletContext, this.deliConfig); } catch (Exception e) { getLogger().error("DELI Exception while creating workspace: ", e); throw e; } } /** Dispose of this class */ public void dispose() { if (parser != null) this.manager.release((Component)parser); this.parser = null; } /** Process a HttpServletRequest and either extract * CC/PP or UAProf information from it and use this information * to resolve a profile or examine the user agent string, match * this using the DELI legacy device database, and use this * information to retrieve the appropriate CC/PP profile. * [EMAIL PROTECTED] theRequest The Request. [EMAIL PROTECTED] The profile as a vector of profile attributes. [EMAIL PROTECTED] IOException. [EMAIL PROTECTED] ServletException. [EMAIL PROTECTED] Exception. */ public Profile getProfile(Request theRequest) throws IOException, ServletException, Exception { try { CocoonServletRequest servletRequest = new CocoonServletRequest(theRequest); Profile theProfile = new Profile((HttpServletRequest) servletRequest); return theProfile; } catch (Exception e) { getLogger().error("DELI Exception while retrieving profile: ", e); throw e; } } /** Convert a profile stored as a vector of profile attributes * to a DOM tree. * [EMAIL PROTECTED] theProfile The profile as a vector of profile attributes. [EMAIL PROTECTED] The DOM tree. */ public Document getUACapabilities(Profile theProfile) throws Exception { try { Document document; Element rootElement; Element attributeNode; Element complexAttributeNode; Text text; document = parser.createDocument(); rootElement = document.createElementNS(null, "browser"); document.appendChild(rootElement); Iterator profileIter = theProfile.iterator(); while (profileIter.hasNext()) { ProfileAttribute p = (ProfileAttribute) profileIter.next(); attributeNode = document.createElementNS(null, p.getAttribute()); rootElement.appendChild(attributeNode); Vector attributeValue = p.get(); Iterator complexValueIter = attributeValue.iterator(); if (p.getCollectionType().equals("Simple")) { // Simple attribute String value = (String) complexValueIter.next(); text = document.createTextNode(value); attributeNode.appendChild(text); } else { // Complex attribute e.g. Seq or Bag while (complexValueIter.hasNext()) { String value = (String) complexValueIter.next(); complexAttributeNode = document.createElementNS(null, "li"); attributeNode.appendChild(complexAttributeNode); text = document.createTextNode(value); complexAttributeNode.appendChild(text); } } } return document; } catch (Exception e) { getLogger().error("DELI Exception while converting profile to DOM fragment: ", e); throw e; } } public Document getUACapabilities(Request theRequest) throws IOException, Exception { return this.getUACapabilities(this.getProfile(theRequest)); } /** * Stub implementation of Servlet Context */ public class CocoonServletContext implements ServletContext { org.apache.cocoon.environment.Context envContext; public CocoonServletContext(org.apache.cocoon.environment.Context context) { this.envContext = context; } public Object getAttribute(String name) { return envContext.getAttribute(name); } public void setAttribute(String name, Object value) { envContext.setAttribute(name, value); } public Enumeration getAttributeNames() { return envContext.getAttributeNames(); } public java.net.URL getResource(String path) throws MalformedURLException { return envContext.getResource(path);} public String getRealPath(String path) { return envContext.getRealPath(path); } public String getMimeType(String file) { return envContext.getMimeType(file); } public String getInitParameter(String name) { return envContext.getInitParameter(name); } public java.io.InputStream getResourceAsStream(String path){ return envContext.getResourceAsStream(path);} public ServletContext getContext(String uripath) { return (null); } public Enumeration getInitParameterNames() {return (null); } public int getMajorVersion() { return (2); } public int getMinorVersion() { return (3); } public RequestDispatcher getNamedDispatcher(String name) { return (null); } public RequestDispatcher getRequestDispatcher(String path) { return (null); } public Set getResourcePaths(String path) { return null; } public String getServerInfo() { return (null); } public Servlet getServlet(String name) throws ServletException { return (null); } public String getServletContextName() { return (null); } public Enumeration getServletNames() { return (null); } public Enumeration getServlets() { return (null); } public void log(String message) {} public void log(Exception exception, String message) {} public void log(String message, Throwable exception) {} public void removeAttribute(String name) {} } /** * Stub implementation of HttpServletRequest */ public class CocoonServletRequest implements HttpServletRequest { Request request; public CocoonServletRequest(Request request) { this.request = request; } public String getAuthType(){ return request.getAuthType(); } public long getDateHeader(String s){ return request.getDateHeader(s); } public String getHeader(String s){ return request.getHeader(s); } public Enumeration getHeaders(String s){ return request.getHeaders(s); } 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 boolean isUserInRole(String s){ return request.isUserInRole(s); } public String getRequestedSessionId(){ return request.getRequestedSessionId(); } public String getRequestURI(){ return request.getRequestURI(); } public String getServletPath(){ return request.getServletPath(); } public boolean isRequestedSessionIdValid(){ return request.isRequestedSessionIdValid(); } public boolean isRequestedSessionIdFromCookie(){ return request.isRequestedSessionIdFromCookie(); } public Object getAttribute(String s){ return request.getAttribute(s); } public Enumeration getAttributeNames(){ return request.getAttributeNames(); } public String getCharacterEncoding(){ return request.getCharacterEncoding(); } public int getContentLength(){ return request.getContentLength(); } public String getContentType(){ return request.getContentType(); } public String getParameter(String s){ return request.getParameter(s); } public Enumeration getParameterNames(){ return request.getParameterNames(); } public String[] getParameterValues(String s){ return request.getParameterValues(s); } 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 void setAttribute(String s, Object obj){ request.setAttribute(s,obj); } public void removeAttribute(String s){ request.removeAttribute(s); } public boolean isSecure(){ return request.isSecure(); } public StringBuffer getRequestURL() { return null; } public Map getParameterMap() { return null; } public void setCharacterEncoding(String s) { } public Principal getUserPrincipal(){ return request.getUserPrincipal(); } public Locale getLocale(){ return request.getLocale(); } public Enumeration getLocales(){ return request.getLocales(); } public String getRealPath(String s){ return null; } public Cookie[] getCookies(){ return null; } public RequestDispatcher getRequestDispatcher(String s){ return null; } public BufferedReader getReader() throws IOException{ return null; } public ServletInputStream getInputStream() throws IOException{ return null; } public HttpSession getSession(boolean flag){ return null; } public HttpSession getSession(){ return null; } public boolean isRequestedSessionIdFromURL(){ return false; } public boolean isRequestedSessionIdFromUrl(){ return false; } public int getIntHeader(String s){ return 0; } } }