Return-Path: Delivered-To: apmail-cocoon-cvs-archive@www.apache.org Received: (qmail 7703 invoked from network); 22 Aug 2005 06:47:21 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 22 Aug 2005 06:47:21 -0000 Received: (qmail 68180 invoked by uid 500); 22 Aug 2005 06:47:20 -0000 Delivered-To: apmail-cocoon-cvs-archive@cocoon.apache.org Received: (qmail 68131 invoked by uid 500); 22 Aug 2005 06:47:19 -0000 Mailing-List: contact cvs-help@cocoon.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@cocoon.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@cocoon.apache.org Received: (qmail 68118 invoked by uid 99); 22 Aug 2005 06:47:19 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Sun, 21 Aug 2005 23:47:19 -0700 Received: (qmail 7661 invoked by uid 65534); 22 Aug 2005 06:47:18 -0000 Message-ID: <20050822064718.7660.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r234441 - in /cocoon/branches/BRANCH_2_1_X: gump.xml src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/PortletAdapter.java src/blocks/portal/java/org/apache/cocoon/portal/util/HtmlSaxParser.java status.xml Date: Mon, 22 Aug 2005 06:47:18 -0000 To: cvs@cocoon.apache.org From: cziegeler@apache.org X-Mailer: svnmailer-1.0.3 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: cziegeler Date: Sun Aug 21 23:46:28 2005 New Revision: 234441 URL: http://svn.apache.org/viewcvs?rev=234441&view=rev Log: Allow portlet adapter to stream html content through the pipeline using the NekoHTML parser. Added: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/util/HtmlSaxParser.java (with props) Modified: cocoon/branches/BRANCH_2_1_X/gump.xml cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/PortletAdapter.java cocoon/branches/BRANCH_2_1_X/status.xml Modified: cocoon/branches/BRANCH_2_1_X/gump.xml URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/gump.xml?rev=234441&r1=234440&r2=234441&view=diff ============================================================================== --- cocoon/branches/BRANCH_2_1_X/gump.xml (original) +++ cocoon/branches/BRANCH_2_1_X/gump.xml Sun Aug 21 23:46:28 2005 @@ -1032,6 +1032,7 @@ + @@ -1039,6 +1040,7 @@ + Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/PortletAdapter.java URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/PortletAdapter.java?rev=234441&r1=234440&r2=234441&view=diff ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/PortletAdapter.java (original) +++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/PortletAdapter.java Sun Aug 21 23:46:28 2005 @@ -15,6 +15,8 @@ */ package org.apache.cocoon.portal.coplet.adapter.impl; +import java.io.IOException; +import java.io.StringReader; import java.util.Map; import java.util.Properties; @@ -52,6 +54,7 @@ import org.apache.cocoon.portal.pluto.servlet.ServletRequestImpl; import org.apache.cocoon.portal.pluto.servlet.ServletResponseImpl; import org.apache.cocoon.portal.serialization.IncludingHTMLSerializer; +import org.apache.cocoon.portal.util.HtmlSaxParser; import org.apache.cocoon.servlet.CocoonServlet; import org.apache.cocoon.xml.AttributesImpl; import org.apache.pluto.PortletContainer; @@ -68,6 +71,7 @@ import org.apache.pluto.services.information.InformationProviderService; import org.apache.pluto.services.information.PortletActionProvider; import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -166,7 +170,7 @@ } } - /* (non-Javadoc) + /** * @see org.apache.cocoon.portal.coplet.adapter.impl.AbstractCopletAdapter#streamContent(org.apache.cocoon.portal.coplet.CopletInstanceData, org.xml.sax.ContentHandler) */ public void streamContent(CopletInstanceData coplet, @@ -193,17 +197,22 @@ // TODO - for parallel processing we have to clone the response! this.portletContainer.renderPortlet(window, req.getRequest(window), res); final String value = res.toString(); - - // stream out the include for the serializer - IncludingHTMLSerializer.addPortlet(portlet, value); - contentHandler.startPrefixMapping("portal", IncludingHTMLSerializer.NAMESPACE); - AttributesImpl attr = new AttributesImpl(); - attr.addCDATAAttribute("portlet", portlet); - contentHandler.startElement(IncludingHTMLSerializer.NAMESPACE, - "include", "portal:include", attr); - contentHandler.endElement(IncludingHTMLSerializer.NAMESPACE, - "include", "portal:include"); - contentHandler.endPrefixMapping("portal"); + + final Boolean usePipeline = (Boolean)this.getConfiguration(coplet, "use-pipeline", Boolean.FALSE); + if ( usePipeline.booleanValue() ) { + HtmlSaxParser.parseString(value, contentHandler); + } else { + // stream out the include for the serializer + IncludingHTMLSerializer.addPortlet(portlet, value); + contentHandler.startPrefixMapping("portal", IncludingHTMLSerializer.NAMESPACE); + AttributesImpl attr = new AttributesImpl(); + attr.addCDATAAttribute("portlet", portlet); + contentHandler.startElement(IncludingHTMLSerializer.NAMESPACE, + "include", "portal:include", attr); + contentHandler.endElement(IncludingHTMLSerializer.NAMESPACE, + "include", "portal:include"); + contentHandler.endPrefixMapping("portal"); + } } catch (SAXException se) { throw se; } catch (Exception e) { Added: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/util/HtmlSaxParser.java URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/util/HtmlSaxParser.java?rev=234441&view=auto ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/util/HtmlSaxParser.java (added) +++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/util/HtmlSaxParser.java Sun Aug 21 23:46:28 2005 @@ -0,0 +1,71 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed 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.portal.util; + +import java.io.IOException; +import java.io.StringReader; +import java.util.Iterator; +import java.util.Properties; + +import org.apache.xerces.parsers.AbstractSAXParser; +import org.cyberneko.html.HTMLConfiguration; +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.ext.LexicalHandler; + +/** + * This parser uses the nekohtml parser to parse html and generate sax streams. + * + * @version $Id:$ + */ +public class HtmlSaxParser extends AbstractSAXParser { + + public HtmlSaxParser(Properties properties) { + super(getConfig(properties)); + } + + protected static HTMLConfiguration getConfig(Properties properties) { + HTMLConfiguration config = new HTMLConfiguration(); + config.setProperty("http://cyberneko.org/html/properties/names/elems", "lower"); + if (properties != null) { + for (Iterator i = properties.keySet().iterator();i.hasNext();) { + String name = (String) i.next(); + config.setProperty(name, properties.getProperty(name)); + } + } + return config; + } + + /** + * Parse html stored in the string. + */ + public static void parseString(String content, ContentHandler ch) + throws SAXException { + final HtmlSaxParser parser = new HtmlSaxParser(null); + parser.setContentHandler(ch); + if ( ch instanceof LexicalHandler ) { + parser.setLexicalHandler((LexicalHandler)ch); + } + final InputSource is = new InputSource(new StringReader(content)); + try { + parser.parse(is); + } catch (IOException ioe) { + throw new SAXException("Error during parsing of html markup.", ioe); + } + + } +} Propchange: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/util/HtmlSaxParser.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/util/HtmlSaxParser.java ------------------------------------------------------------------------------ svn:keywords = Id Modified: cocoon/branches/BRANCH_2_1_X/status.xml URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/status.xml?rev=234441&r1=234440&r2=234441&view=diff ============================================================================== --- cocoon/branches/BRANCH_2_1_X/status.xml (original) +++ cocoon/branches/BRANCH_2_1_X/status.xml Sun Aug 21 23:46:28 2005 @@ -196,6 +196,9 @@ + + Portal block: Allow portlet adapter to stream html content through the pipeline using the NekoHTML parser. + Portal block: Use OJB and the HSQLDB for authentication of the portal sample.